diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,9 +7,8 @@
 
 
 ## Version
-
-`1.6.1`
-
+ 
+`2.0` - Derived from API version @2016-12-01@ of the AWS service descriptions, licensed under Apache 2.0.
 
 ## Description
 
@@ -26,7 +25,7 @@
 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 [Network.AWS.AppStream](http://hackage.haskell.org/package/amazonka-appstream/docs/Network-AWS-AppStream.html)
+See [Amazonka.AppStream](http://hackage.haskell.org/package/amazonka-appstream/docs/Amazonka-AppStream.html)
 or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
 
 
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import           Distribution.Simple
-main = defaultMain
diff --git a/amazonka-appstream.cabal b/amazonka-appstream.cabal
--- a/amazonka-appstream.cabal
+++ b/amazonka-appstream.cabal
@@ -1,118 +1,215 @@
-name:                  amazonka-appstream
-version:               1.6.1
-synopsis:              Amazon AppStream 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>
-copyright:             Copyright (c) 2013-2018 Brendan Hay
-category:              Network, AWS, Cloud, Distributed Computing
-build-type:            Simple
-cabal-version:         >= 1.10
-extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
+cabal-version:      2.2
+name:               amazonka-appstream
+version:            2.0
+synopsis:           Amazon AppStream 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:
-    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.
-    .
-    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
-    such as <http://hackage.haskell.org/package/lens lens> or
-    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
-    .
-    See "Network.AWS.AppStream" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2016-12-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.AppStream.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.AppStream" 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-appstream
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-appstream
 
 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:
-          Network.AWS.AppStream
-        , Network.AWS.AppStream.AssociateFleet
-        , Network.AWS.AppStream.CopyImage
-        , Network.AWS.AppStream.CreateDirectoryConfig
-        , Network.AWS.AppStream.CreateFleet
-        , Network.AWS.AppStream.CreateImageBuilder
-        , Network.AWS.AppStream.CreateImageBuilderStreamingURL
-        , Network.AWS.AppStream.CreateStack
-        , Network.AWS.AppStream.CreateStreamingURL
-        , Network.AWS.AppStream.DeleteDirectoryConfig
-        , Network.AWS.AppStream.DeleteFleet
-        , Network.AWS.AppStream.DeleteImage
-        , Network.AWS.AppStream.DeleteImageBuilder
-        , Network.AWS.AppStream.DeleteStack
-        , Network.AWS.AppStream.DescribeDirectoryConfigs
-        , Network.AWS.AppStream.DescribeFleets
-        , Network.AWS.AppStream.DescribeImageBuilders
-        , Network.AWS.AppStream.DescribeImages
-        , Network.AWS.AppStream.DescribeSessions
-        , Network.AWS.AppStream.DescribeStacks
-        , Network.AWS.AppStream.DisassociateFleet
-        , Network.AWS.AppStream.ExpireSession
-        , Network.AWS.AppStream.ListAssociatedFleets
-        , Network.AWS.AppStream.ListAssociatedStacks
-        , Network.AWS.AppStream.ListTagsForResource
-        , Network.AWS.AppStream.StartFleet
-        , Network.AWS.AppStream.StartImageBuilder
-        , Network.AWS.AppStream.StopFleet
-        , Network.AWS.AppStream.StopImageBuilder
-        , Network.AWS.AppStream.TagResource
-        , Network.AWS.AppStream.Types
-        , Network.AWS.AppStream.UntagResource
-        , Network.AWS.AppStream.UpdateDirectoryConfig
-        , Network.AWS.AppStream.UpdateFleet
-        , Network.AWS.AppStream.UpdateStack
-        , Network.AWS.AppStream.Waiters
+  default-language: Haskell2010
+  hs-source-dirs:   src gen
+  ghc-options:
+    -Wall -fwarn-incomplete-uni-patterns
+    -fwarn-incomplete-record-updates -funbox-strict-fields
 
-    other-modules:
-          Network.AWS.AppStream.Types.Product
-        , Network.AWS.AppStream.Types.Sum
+  exposed-modules:
+    Amazonka.AppStream
+    Amazonka.AppStream.AssociateApplicationFleet
+    Amazonka.AppStream.AssociateApplicationToEntitlement
+    Amazonka.AppStream.AssociateFleet
+    Amazonka.AppStream.BatchAssociateUserStack
+    Amazonka.AppStream.BatchDisassociateUserStack
+    Amazonka.AppStream.CopyImage
+    Amazonka.AppStream.CreateAppBlock
+    Amazonka.AppStream.CreateApplication
+    Amazonka.AppStream.CreateDirectoryConfig
+    Amazonka.AppStream.CreateEntitlement
+    Amazonka.AppStream.CreateFleet
+    Amazonka.AppStream.CreateImageBuilder
+    Amazonka.AppStream.CreateImageBuilderStreamingURL
+    Amazonka.AppStream.CreateStack
+    Amazonka.AppStream.CreateStreamingURL
+    Amazonka.AppStream.CreateUpdatedImage
+    Amazonka.AppStream.CreateUsageReportSubscription
+    Amazonka.AppStream.CreateUser
+    Amazonka.AppStream.DeleteAppBlock
+    Amazonka.AppStream.DeleteApplication
+    Amazonka.AppStream.DeleteDirectoryConfig
+    Amazonka.AppStream.DeleteEntitlement
+    Amazonka.AppStream.DeleteFleet
+    Amazonka.AppStream.DeleteImage
+    Amazonka.AppStream.DeleteImageBuilder
+    Amazonka.AppStream.DeleteImagePermissions
+    Amazonka.AppStream.DeleteStack
+    Amazonka.AppStream.DeleteUsageReportSubscription
+    Amazonka.AppStream.DeleteUser
+    Amazonka.AppStream.DescribeAppBlocks
+    Amazonka.AppStream.DescribeApplicationFleetAssociations
+    Amazonka.AppStream.DescribeApplications
+    Amazonka.AppStream.DescribeDirectoryConfigs
+    Amazonka.AppStream.DescribeEntitlements
+    Amazonka.AppStream.DescribeFleets
+    Amazonka.AppStream.DescribeImageBuilders
+    Amazonka.AppStream.DescribeImagePermissions
+    Amazonka.AppStream.DescribeImages
+    Amazonka.AppStream.DescribeSessions
+    Amazonka.AppStream.DescribeStacks
+    Amazonka.AppStream.DescribeUsageReportSubscriptions
+    Amazonka.AppStream.DescribeUsers
+    Amazonka.AppStream.DescribeUserStackAssociations
+    Amazonka.AppStream.DisableUser
+    Amazonka.AppStream.DisassociateApplicationFleet
+    Amazonka.AppStream.DisassociateApplicationFromEntitlement
+    Amazonka.AppStream.DisassociateFleet
+    Amazonka.AppStream.EnableUser
+    Amazonka.AppStream.ExpireSession
+    Amazonka.AppStream.Lens
+    Amazonka.AppStream.ListAssociatedFleets
+    Amazonka.AppStream.ListAssociatedStacks
+    Amazonka.AppStream.ListEntitledApplications
+    Amazonka.AppStream.ListTagsForResource
+    Amazonka.AppStream.StartFleet
+    Amazonka.AppStream.StartImageBuilder
+    Amazonka.AppStream.StopFleet
+    Amazonka.AppStream.StopImageBuilder
+    Amazonka.AppStream.TagResource
+    Amazonka.AppStream.Types
+    Amazonka.AppStream.Types.AccessEndpoint
+    Amazonka.AppStream.Types.AccessEndpointType
+    Amazonka.AppStream.Types.Action
+    Amazonka.AppStream.Types.AppBlock
+    Amazonka.AppStream.Types.Application
+    Amazonka.AppStream.Types.ApplicationAttribute
+    Amazonka.AppStream.Types.ApplicationFleetAssociation
+    Amazonka.AppStream.Types.ApplicationSettings
+    Amazonka.AppStream.Types.ApplicationSettingsResponse
+    Amazonka.AppStream.Types.AppVisibility
+    Amazonka.AppStream.Types.AuthenticationType
+    Amazonka.AppStream.Types.CertificateBasedAuthProperties
+    Amazonka.AppStream.Types.CertificateBasedAuthStatus
+    Amazonka.AppStream.Types.ComputeCapacity
+    Amazonka.AppStream.Types.ComputeCapacityStatus
+    Amazonka.AppStream.Types.DirectoryConfig
+    Amazonka.AppStream.Types.DomainJoinInfo
+    Amazonka.AppStream.Types.EntitledApplication
+    Amazonka.AppStream.Types.Entitlement
+    Amazonka.AppStream.Types.EntitlementAttribute
+    Amazonka.AppStream.Types.Fleet
+    Amazonka.AppStream.Types.FleetAttribute
+    Amazonka.AppStream.Types.FleetError
+    Amazonka.AppStream.Types.FleetErrorCode
+    Amazonka.AppStream.Types.FleetState
+    Amazonka.AppStream.Types.FleetType
+    Amazonka.AppStream.Types.Image
+    Amazonka.AppStream.Types.ImageBuilder
+    Amazonka.AppStream.Types.ImageBuilderState
+    Amazonka.AppStream.Types.ImageBuilderStateChangeReason
+    Amazonka.AppStream.Types.ImageBuilderStateChangeReasonCode
+    Amazonka.AppStream.Types.ImagePermissions
+    Amazonka.AppStream.Types.ImageState
+    Amazonka.AppStream.Types.ImageStateChangeReason
+    Amazonka.AppStream.Types.ImageStateChangeReasonCode
+    Amazonka.AppStream.Types.LastReportGenerationExecutionError
+    Amazonka.AppStream.Types.MessageAction
+    Amazonka.AppStream.Types.NetworkAccessConfiguration
+    Amazonka.AppStream.Types.Permission
+    Amazonka.AppStream.Types.PlatformType
+    Amazonka.AppStream.Types.PreferredProtocol
+    Amazonka.AppStream.Types.ResourceError
+    Amazonka.AppStream.Types.S3Location
+    Amazonka.AppStream.Types.ScriptDetails
+    Amazonka.AppStream.Types.ServiceAccountCredentials
+    Amazonka.AppStream.Types.Session
+    Amazonka.AppStream.Types.SessionConnectionState
+    Amazonka.AppStream.Types.SessionState
+    Amazonka.AppStream.Types.SharedImagePermissions
+    Amazonka.AppStream.Types.Stack
+    Amazonka.AppStream.Types.StackAttribute
+    Amazonka.AppStream.Types.StackError
+    Amazonka.AppStream.Types.StackErrorCode
+    Amazonka.AppStream.Types.StorageConnector
+    Amazonka.AppStream.Types.StorageConnectorType
+    Amazonka.AppStream.Types.StreamingExperienceSettings
+    Amazonka.AppStream.Types.StreamView
+    Amazonka.AppStream.Types.UsageReportExecutionErrorCode
+    Amazonka.AppStream.Types.UsageReportSchedule
+    Amazonka.AppStream.Types.UsageReportSubscription
+    Amazonka.AppStream.Types.User
+    Amazonka.AppStream.Types.UserSetting
+    Amazonka.AppStream.Types.UserStackAssociation
+    Amazonka.AppStream.Types.UserStackAssociationError
+    Amazonka.AppStream.Types.UserStackAssociationErrorCode
+    Amazonka.AppStream.Types.VisibilityType
+    Amazonka.AppStream.Types.VpcConfig
+    Amazonka.AppStream.UntagResource
+    Amazonka.AppStream.UpdateApplication
+    Amazonka.AppStream.UpdateDirectoryConfig
+    Amazonka.AppStream.UpdateEntitlement
+    Amazonka.AppStream.UpdateFleet
+    Amazonka.AppStream.UpdateImagePermissions
+    Amazonka.AppStream.UpdateStack
+    Amazonka.AppStream.Waiters
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , base          >= 4.7     && < 5
+  build-depends:
+    , amazonka-core  >=2.0  && <2.1
+    , base           >=4.12 && <5
 
 test-suite amazonka-appstream-test
-    type:              exitcode-stdio-1.0
-    default-language:  Haskell2010
-    hs-source-dirs:    test
-    main-is:           Main.hs
-
-    ghc-options:       -Wall -threaded
+  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.AWS.AppStream
-        , Test.AWS.Gen.AppStream
-        , Test.AWS.AppStream.Internal
+  -- 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.AppStream
+    Test.Amazonka.AppStream.Internal
+    Test.Amazonka.Gen.AppStream
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-appstream
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-appstream
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/AssociateApplicationFleet.yaml b/fixture/AssociateApplicationFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateApplicationFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/AssociateApplicationFleetResponse.proto b/fixture/AssociateApplicationFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateApplicationFleetResponse.proto
diff --git a/fixture/AssociateApplicationToEntitlement.yaml b/fixture/AssociateApplicationToEntitlement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateApplicationToEntitlement.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/AssociateApplicationToEntitlementResponse.proto b/fixture/AssociateApplicationToEntitlementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AssociateApplicationToEntitlementResponse.proto
diff --git a/fixture/BatchAssociateUserStack.yaml b/fixture/BatchAssociateUserStack.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchAssociateUserStack.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/BatchAssociateUserStackResponse.proto b/fixture/BatchAssociateUserStackResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchAssociateUserStackResponse.proto
diff --git a/fixture/BatchDisassociateUserStack.yaml b/fixture/BatchDisassociateUserStack.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDisassociateUserStack.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/BatchDisassociateUserStackResponse.proto b/fixture/BatchDisassociateUserStackResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDisassociateUserStackResponse.proto
diff --git a/fixture/CreateAppBlock.yaml b/fixture/CreateAppBlock.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppBlock.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/CreateAppBlockResponse.proto b/fixture/CreateAppBlockResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppBlockResponse.proto
diff --git a/fixture/CreateApplication.yaml b/fixture/CreateApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateApplicationResponse.proto b/fixture/CreateApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApplicationResponse.proto
diff --git a/fixture/CreateEntitlement.yaml b/fixture/CreateEntitlement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEntitlement.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/CreateEntitlementResponse.proto b/fixture/CreateEntitlementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEntitlementResponse.proto
diff --git a/fixture/CreateUpdatedImage.yaml b/fixture/CreateUpdatedImage.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUpdatedImage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/CreateUpdatedImageResponse.proto b/fixture/CreateUpdatedImageResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUpdatedImageResponse.proto
diff --git a/fixture/CreateUsageReportSubscription.yaml b/fixture/CreateUsageReportSubscription.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUsageReportSubscription.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/CreateUsageReportSubscriptionResponse.proto b/fixture/CreateUsageReportSubscriptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUsageReportSubscriptionResponse.proto
diff --git a/fixture/CreateUser.yaml b/fixture/CreateUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUser.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/CreateUserResponse.proto b/fixture/CreateUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUserResponse.proto
diff --git a/fixture/DeleteAppBlock.yaml b/fixture/DeleteAppBlock.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppBlock.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DeleteAppBlockResponse.proto b/fixture/DeleteAppBlockResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppBlockResponse.proto
diff --git a/fixture/DeleteApplication.yaml b/fixture/DeleteApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteApplicationResponse.proto b/fixture/DeleteApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApplicationResponse.proto
diff --git a/fixture/DeleteEntitlement.yaml b/fixture/DeleteEntitlement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEntitlement.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DeleteEntitlementResponse.proto b/fixture/DeleteEntitlementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEntitlementResponse.proto
diff --git a/fixture/DeleteImagePermissions.yaml b/fixture/DeleteImagePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteImagePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DeleteImagePermissionsResponse.proto b/fixture/DeleteImagePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteImagePermissionsResponse.proto
diff --git a/fixture/DeleteUsageReportSubscription.yaml b/fixture/DeleteUsageReportSubscription.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUsageReportSubscription.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DeleteUsageReportSubscriptionResponse.proto b/fixture/DeleteUsageReportSubscriptionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUsageReportSubscriptionResponse.proto
diff --git a/fixture/DeleteUser.yaml b/fixture/DeleteUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUser.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DeleteUserResponse.proto b/fixture/DeleteUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUserResponse.proto
diff --git a/fixture/DescribeAppBlocks.yaml b/fixture/DescribeAppBlocks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppBlocks.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DescribeAppBlocksResponse.proto b/fixture/DescribeAppBlocksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAppBlocksResponse.proto
diff --git a/fixture/DescribeApplicationFleetAssociations.yaml b/fixture/DescribeApplicationFleetAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeApplicationFleetAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DescribeApplicationFleetAssociationsResponse.proto b/fixture/DescribeApplicationFleetAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeApplicationFleetAssociationsResponse.proto
diff --git a/fixture/DescribeApplications.yaml b/fixture/DescribeApplications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeApplications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DescribeApplicationsResponse.proto b/fixture/DescribeApplicationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeApplicationsResponse.proto
diff --git a/fixture/DescribeEntitlements.yaml b/fixture/DescribeEntitlements.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEntitlements.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DescribeEntitlementsResponse.proto b/fixture/DescribeEntitlementsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEntitlementsResponse.proto
diff --git a/fixture/DescribeImagePermissions.yaml b/fixture/DescribeImagePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeImagePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DescribeImagePermissionsResponse.proto b/fixture/DescribeImagePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeImagePermissionsResponse.proto
diff --git a/fixture/DescribeUsageReportSubscriptions.yaml b/fixture/DescribeUsageReportSubscriptions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeUsageReportSubscriptions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DescribeUsageReportSubscriptionsResponse.proto b/fixture/DescribeUsageReportSubscriptionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeUsageReportSubscriptionsResponse.proto
diff --git a/fixture/DescribeUserStackAssociations.yaml b/fixture/DescribeUserStackAssociations.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeUserStackAssociations.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DescribeUserStackAssociationsResponse.proto b/fixture/DescribeUserStackAssociationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeUserStackAssociationsResponse.proto
diff --git a/fixture/DescribeUsers.yaml b/fixture/DescribeUsers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeUsers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DescribeUsersResponse.proto b/fixture/DescribeUsersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeUsersResponse.proto
diff --git a/fixture/DisableUser.yaml b/fixture/DisableUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisableUser.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DisableUserResponse.proto b/fixture/DisableUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisableUserResponse.proto
diff --git a/fixture/DisassociateApplicationFleet.yaml b/fixture/DisassociateApplicationFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateApplicationFleet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DisassociateApplicationFleetResponse.proto b/fixture/DisassociateApplicationFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateApplicationFleetResponse.proto
diff --git a/fixture/DisassociateApplicationFromEntitlement.yaml b/fixture/DisassociateApplicationFromEntitlement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateApplicationFromEntitlement.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/DisassociateApplicationFromEntitlementResponse.proto b/fixture/DisassociateApplicationFromEntitlementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DisassociateApplicationFromEntitlementResponse.proto
diff --git a/fixture/EnableUser.yaml b/fixture/EnableUser.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/EnableUser.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/EnableUserResponse.proto b/fixture/EnableUserResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/EnableUserResponse.proto
diff --git a/fixture/ListEntitledApplications.yaml b/fixture/ListEntitledApplications.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListEntitledApplications.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/ListEntitledApplicationsResponse.proto b/fixture/ListEntitledApplicationsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListEntitledApplicationsResponse.proto
diff --git a/fixture/UpdateApplication.yaml b/fixture/UpdateApplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateApplicationResponse.proto b/fixture/UpdateApplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApplicationResponse.proto
diff --git a/fixture/UpdateEntitlement.yaml b/fixture/UpdateEntitlement.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEntitlement.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/UpdateEntitlementResponse.proto b/fixture/UpdateEntitlementResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateEntitlementResponse.proto
diff --git a/fixture/UpdateImagePermissions.yaml b/fixture/UpdateImagePermissions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateImagePermissions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/appstream2/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  appstream2.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/UpdateImagePermissionsResponse.proto b/fixture/UpdateImagePermissionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateImagePermissionsResponse.proto
diff --git a/gen/Amazonka/AppStream.hs b/gen/Amazonka/AppStream.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream.hs
@@ -0,0 +1,823 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.AppStream
+-- 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 @2016-12-01@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon AppStream 2.0
+--
+-- This is the /Amazon AppStream 2.0 API Reference/. This documentation
+-- provides descriptions and syntax for each of the actions and data types
+-- in AppStream 2.0. AppStream 2.0 is a fully managed, secure application
+-- streaming service that lets you stream desktop applications to users
+-- without rewriting applications. AppStream 2.0 manages the AWS resources
+-- that are required to host and run your applications, scales
+-- automatically, and provides access to your users on demand.
+--
+-- You can call the AppStream 2.0 API operations by using an interface VPC
+-- endpoint (interface endpoint). For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/access-api-cli-through-interface-vpc-endpoint.html Access AppStream 2.0 API Operations and CLI Commands Through an Interface VPC Endpoint>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- To learn more about AppStream 2.0, see the following resources:
+--
+-- -   <http://aws.amazon.com/appstream2 Amazon AppStream 2.0 product page>
+--
+-- -   <http://aws.amazon.com/documentation/appstream2 Amazon AppStream 2.0 documentation>
+module Amazonka.AppStream
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** ConcurrentModificationException
+    _ConcurrentModificationException,
+
+    -- ** EntitlementAlreadyExistsException
+    _EntitlementAlreadyExistsException,
+
+    -- ** EntitlementNotFoundException
+    _EntitlementNotFoundException,
+
+    -- ** IncompatibleImageException
+    _IncompatibleImageException,
+
+    -- ** InvalidAccountStatusException
+    _InvalidAccountStatusException,
+
+    -- ** InvalidParameterCombinationException
+    _InvalidParameterCombinationException,
+
+    -- ** InvalidRoleException
+    _InvalidRoleException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** OperationNotPermittedException
+    _OperationNotPermittedException,
+
+    -- ** RequestLimitExceededException
+    _RequestLimitExceededException,
+
+    -- ** ResourceAlreadyExistsException
+    _ResourceAlreadyExistsException,
+
+    -- ** ResourceInUseException
+    _ResourceInUseException,
+
+    -- ** ResourceNotAvailableException
+    _ResourceNotAvailableException,
+
+    -- ** ResourceNotFoundException
+    _ResourceNotFoundException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- ** FleetStarted
+    newFleetStarted,
+
+    -- ** FleetStopped
+    newFleetStopped,
+
+    -- * Operations
+    -- $operations
+
+    -- ** AssociateApplicationFleet
+    AssociateApplicationFleet (AssociateApplicationFleet'),
+    newAssociateApplicationFleet,
+    AssociateApplicationFleetResponse (AssociateApplicationFleetResponse'),
+    newAssociateApplicationFleetResponse,
+
+    -- ** AssociateApplicationToEntitlement
+    AssociateApplicationToEntitlement (AssociateApplicationToEntitlement'),
+    newAssociateApplicationToEntitlement,
+    AssociateApplicationToEntitlementResponse (AssociateApplicationToEntitlementResponse'),
+    newAssociateApplicationToEntitlementResponse,
+
+    -- ** AssociateFleet
+    AssociateFleet (AssociateFleet'),
+    newAssociateFleet,
+    AssociateFleetResponse (AssociateFleetResponse'),
+    newAssociateFleetResponse,
+
+    -- ** BatchAssociateUserStack
+    BatchAssociateUserStack (BatchAssociateUserStack'),
+    newBatchAssociateUserStack,
+    BatchAssociateUserStackResponse (BatchAssociateUserStackResponse'),
+    newBatchAssociateUserStackResponse,
+
+    -- ** BatchDisassociateUserStack
+    BatchDisassociateUserStack (BatchDisassociateUserStack'),
+    newBatchDisassociateUserStack,
+    BatchDisassociateUserStackResponse (BatchDisassociateUserStackResponse'),
+    newBatchDisassociateUserStackResponse,
+
+    -- ** CopyImage
+    CopyImage (CopyImage'),
+    newCopyImage,
+    CopyImageResponse (CopyImageResponse'),
+    newCopyImageResponse,
+
+    -- ** CreateAppBlock
+    CreateAppBlock (CreateAppBlock'),
+    newCreateAppBlock,
+    CreateAppBlockResponse (CreateAppBlockResponse'),
+    newCreateAppBlockResponse,
+
+    -- ** CreateApplication
+    CreateApplication (CreateApplication'),
+    newCreateApplication,
+    CreateApplicationResponse (CreateApplicationResponse'),
+    newCreateApplicationResponse,
+
+    -- ** CreateDirectoryConfig
+    CreateDirectoryConfig (CreateDirectoryConfig'),
+    newCreateDirectoryConfig,
+    CreateDirectoryConfigResponse (CreateDirectoryConfigResponse'),
+    newCreateDirectoryConfigResponse,
+
+    -- ** CreateEntitlement
+    CreateEntitlement (CreateEntitlement'),
+    newCreateEntitlement,
+    CreateEntitlementResponse (CreateEntitlementResponse'),
+    newCreateEntitlementResponse,
+
+    -- ** CreateFleet
+    CreateFleet (CreateFleet'),
+    newCreateFleet,
+    CreateFleetResponse (CreateFleetResponse'),
+    newCreateFleetResponse,
+
+    -- ** CreateImageBuilder
+    CreateImageBuilder (CreateImageBuilder'),
+    newCreateImageBuilder,
+    CreateImageBuilderResponse (CreateImageBuilderResponse'),
+    newCreateImageBuilderResponse,
+
+    -- ** CreateImageBuilderStreamingURL
+    CreateImageBuilderStreamingURL (CreateImageBuilderStreamingURL'),
+    newCreateImageBuilderStreamingURL,
+    CreateImageBuilderStreamingURLResponse (CreateImageBuilderStreamingURLResponse'),
+    newCreateImageBuilderStreamingURLResponse,
+
+    -- ** CreateStack
+    CreateStack (CreateStack'),
+    newCreateStack,
+    CreateStackResponse (CreateStackResponse'),
+    newCreateStackResponse,
+
+    -- ** CreateStreamingURL
+    CreateStreamingURL (CreateStreamingURL'),
+    newCreateStreamingURL,
+    CreateStreamingURLResponse (CreateStreamingURLResponse'),
+    newCreateStreamingURLResponse,
+
+    -- ** CreateUpdatedImage
+    CreateUpdatedImage (CreateUpdatedImage'),
+    newCreateUpdatedImage,
+    CreateUpdatedImageResponse (CreateUpdatedImageResponse'),
+    newCreateUpdatedImageResponse,
+
+    -- ** CreateUsageReportSubscription
+    CreateUsageReportSubscription (CreateUsageReportSubscription'),
+    newCreateUsageReportSubscription,
+    CreateUsageReportSubscriptionResponse (CreateUsageReportSubscriptionResponse'),
+    newCreateUsageReportSubscriptionResponse,
+
+    -- ** CreateUser
+    CreateUser (CreateUser'),
+    newCreateUser,
+    CreateUserResponse (CreateUserResponse'),
+    newCreateUserResponse,
+
+    -- ** DeleteAppBlock
+    DeleteAppBlock (DeleteAppBlock'),
+    newDeleteAppBlock,
+    DeleteAppBlockResponse (DeleteAppBlockResponse'),
+    newDeleteAppBlockResponse,
+
+    -- ** DeleteApplication
+    DeleteApplication (DeleteApplication'),
+    newDeleteApplication,
+    DeleteApplicationResponse (DeleteApplicationResponse'),
+    newDeleteApplicationResponse,
+
+    -- ** DeleteDirectoryConfig
+    DeleteDirectoryConfig (DeleteDirectoryConfig'),
+    newDeleteDirectoryConfig,
+    DeleteDirectoryConfigResponse (DeleteDirectoryConfigResponse'),
+    newDeleteDirectoryConfigResponse,
+
+    -- ** DeleteEntitlement
+    DeleteEntitlement (DeleteEntitlement'),
+    newDeleteEntitlement,
+    DeleteEntitlementResponse (DeleteEntitlementResponse'),
+    newDeleteEntitlementResponse,
+
+    -- ** DeleteFleet
+    DeleteFleet (DeleteFleet'),
+    newDeleteFleet,
+    DeleteFleetResponse (DeleteFleetResponse'),
+    newDeleteFleetResponse,
+
+    -- ** DeleteImage
+    DeleteImage (DeleteImage'),
+    newDeleteImage,
+    DeleteImageResponse (DeleteImageResponse'),
+    newDeleteImageResponse,
+
+    -- ** DeleteImageBuilder
+    DeleteImageBuilder (DeleteImageBuilder'),
+    newDeleteImageBuilder,
+    DeleteImageBuilderResponse (DeleteImageBuilderResponse'),
+    newDeleteImageBuilderResponse,
+
+    -- ** DeleteImagePermissions
+    DeleteImagePermissions (DeleteImagePermissions'),
+    newDeleteImagePermissions,
+    DeleteImagePermissionsResponse (DeleteImagePermissionsResponse'),
+    newDeleteImagePermissionsResponse,
+
+    -- ** DeleteStack
+    DeleteStack (DeleteStack'),
+    newDeleteStack,
+    DeleteStackResponse (DeleteStackResponse'),
+    newDeleteStackResponse,
+
+    -- ** DeleteUsageReportSubscription
+    DeleteUsageReportSubscription (DeleteUsageReportSubscription'),
+    newDeleteUsageReportSubscription,
+    DeleteUsageReportSubscriptionResponse (DeleteUsageReportSubscriptionResponse'),
+    newDeleteUsageReportSubscriptionResponse,
+
+    -- ** DeleteUser
+    DeleteUser (DeleteUser'),
+    newDeleteUser,
+    DeleteUserResponse (DeleteUserResponse'),
+    newDeleteUserResponse,
+
+    -- ** DescribeAppBlocks
+    DescribeAppBlocks (DescribeAppBlocks'),
+    newDescribeAppBlocks,
+    DescribeAppBlocksResponse (DescribeAppBlocksResponse'),
+    newDescribeAppBlocksResponse,
+
+    -- ** DescribeApplicationFleetAssociations
+    DescribeApplicationFleetAssociations (DescribeApplicationFleetAssociations'),
+    newDescribeApplicationFleetAssociations,
+    DescribeApplicationFleetAssociationsResponse (DescribeApplicationFleetAssociationsResponse'),
+    newDescribeApplicationFleetAssociationsResponse,
+
+    -- ** DescribeApplications
+    DescribeApplications (DescribeApplications'),
+    newDescribeApplications,
+    DescribeApplicationsResponse (DescribeApplicationsResponse'),
+    newDescribeApplicationsResponse,
+
+    -- ** DescribeDirectoryConfigs (Paginated)
+    DescribeDirectoryConfigs (DescribeDirectoryConfigs'),
+    newDescribeDirectoryConfigs,
+    DescribeDirectoryConfigsResponse (DescribeDirectoryConfigsResponse'),
+    newDescribeDirectoryConfigsResponse,
+
+    -- ** DescribeEntitlements
+    DescribeEntitlements (DescribeEntitlements'),
+    newDescribeEntitlements,
+    DescribeEntitlementsResponse (DescribeEntitlementsResponse'),
+    newDescribeEntitlementsResponse,
+
+    -- ** DescribeFleets (Paginated)
+    DescribeFleets (DescribeFleets'),
+    newDescribeFleets,
+    DescribeFleetsResponse (DescribeFleetsResponse'),
+    newDescribeFleetsResponse,
+
+    -- ** DescribeImageBuilders (Paginated)
+    DescribeImageBuilders (DescribeImageBuilders'),
+    newDescribeImageBuilders,
+    DescribeImageBuildersResponse (DescribeImageBuildersResponse'),
+    newDescribeImageBuildersResponse,
+
+    -- ** DescribeImagePermissions
+    DescribeImagePermissions (DescribeImagePermissions'),
+    newDescribeImagePermissions,
+    DescribeImagePermissionsResponse (DescribeImagePermissionsResponse'),
+    newDescribeImagePermissionsResponse,
+
+    -- ** DescribeImages (Paginated)
+    DescribeImages (DescribeImages'),
+    newDescribeImages,
+    DescribeImagesResponse (DescribeImagesResponse'),
+    newDescribeImagesResponse,
+
+    -- ** DescribeSessions (Paginated)
+    DescribeSessions (DescribeSessions'),
+    newDescribeSessions,
+    DescribeSessionsResponse (DescribeSessionsResponse'),
+    newDescribeSessionsResponse,
+
+    -- ** DescribeStacks (Paginated)
+    DescribeStacks (DescribeStacks'),
+    newDescribeStacks,
+    DescribeStacksResponse (DescribeStacksResponse'),
+    newDescribeStacksResponse,
+
+    -- ** DescribeUsageReportSubscriptions
+    DescribeUsageReportSubscriptions (DescribeUsageReportSubscriptions'),
+    newDescribeUsageReportSubscriptions,
+    DescribeUsageReportSubscriptionsResponse (DescribeUsageReportSubscriptionsResponse'),
+    newDescribeUsageReportSubscriptionsResponse,
+
+    -- ** DescribeUserStackAssociations (Paginated)
+    DescribeUserStackAssociations (DescribeUserStackAssociations'),
+    newDescribeUserStackAssociations,
+    DescribeUserStackAssociationsResponse (DescribeUserStackAssociationsResponse'),
+    newDescribeUserStackAssociationsResponse,
+
+    -- ** DescribeUsers (Paginated)
+    DescribeUsers (DescribeUsers'),
+    newDescribeUsers,
+    DescribeUsersResponse (DescribeUsersResponse'),
+    newDescribeUsersResponse,
+
+    -- ** DisableUser
+    DisableUser (DisableUser'),
+    newDisableUser,
+    DisableUserResponse (DisableUserResponse'),
+    newDisableUserResponse,
+
+    -- ** DisassociateApplicationFleet
+    DisassociateApplicationFleet (DisassociateApplicationFleet'),
+    newDisassociateApplicationFleet,
+    DisassociateApplicationFleetResponse (DisassociateApplicationFleetResponse'),
+    newDisassociateApplicationFleetResponse,
+
+    -- ** DisassociateApplicationFromEntitlement
+    DisassociateApplicationFromEntitlement (DisassociateApplicationFromEntitlement'),
+    newDisassociateApplicationFromEntitlement,
+    DisassociateApplicationFromEntitlementResponse (DisassociateApplicationFromEntitlementResponse'),
+    newDisassociateApplicationFromEntitlementResponse,
+
+    -- ** DisassociateFleet
+    DisassociateFleet (DisassociateFleet'),
+    newDisassociateFleet,
+    DisassociateFleetResponse (DisassociateFleetResponse'),
+    newDisassociateFleetResponse,
+
+    -- ** EnableUser
+    EnableUser (EnableUser'),
+    newEnableUser,
+    EnableUserResponse (EnableUserResponse'),
+    newEnableUserResponse,
+
+    -- ** ExpireSession
+    ExpireSession (ExpireSession'),
+    newExpireSession,
+    ExpireSessionResponse (ExpireSessionResponse'),
+    newExpireSessionResponse,
+
+    -- ** ListAssociatedFleets (Paginated)
+    ListAssociatedFleets (ListAssociatedFleets'),
+    newListAssociatedFleets,
+    ListAssociatedFleetsResponse (ListAssociatedFleetsResponse'),
+    newListAssociatedFleetsResponse,
+
+    -- ** ListAssociatedStacks (Paginated)
+    ListAssociatedStacks (ListAssociatedStacks'),
+    newListAssociatedStacks,
+    ListAssociatedStacksResponse (ListAssociatedStacksResponse'),
+    newListAssociatedStacksResponse,
+
+    -- ** ListEntitledApplications
+    ListEntitledApplications (ListEntitledApplications'),
+    newListEntitledApplications,
+    ListEntitledApplicationsResponse (ListEntitledApplicationsResponse'),
+    newListEntitledApplicationsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** StartFleet
+    StartFleet (StartFleet'),
+    newStartFleet,
+    StartFleetResponse (StartFleetResponse'),
+    newStartFleetResponse,
+
+    -- ** StartImageBuilder
+    StartImageBuilder (StartImageBuilder'),
+    newStartImageBuilder,
+    StartImageBuilderResponse (StartImageBuilderResponse'),
+    newStartImageBuilderResponse,
+
+    -- ** StopFleet
+    StopFleet (StopFleet'),
+    newStopFleet,
+    StopFleetResponse (StopFleetResponse'),
+    newStopFleetResponse,
+
+    -- ** StopImageBuilder
+    StopImageBuilder (StopImageBuilder'),
+    newStopImageBuilder,
+    StopImageBuilderResponse (StopImageBuilderResponse'),
+    newStopImageBuilderResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateApplication
+    UpdateApplication (UpdateApplication'),
+    newUpdateApplication,
+    UpdateApplicationResponse (UpdateApplicationResponse'),
+    newUpdateApplicationResponse,
+
+    -- ** UpdateDirectoryConfig
+    UpdateDirectoryConfig (UpdateDirectoryConfig'),
+    newUpdateDirectoryConfig,
+    UpdateDirectoryConfigResponse (UpdateDirectoryConfigResponse'),
+    newUpdateDirectoryConfigResponse,
+
+    -- ** UpdateEntitlement
+    UpdateEntitlement (UpdateEntitlement'),
+    newUpdateEntitlement,
+    UpdateEntitlementResponse (UpdateEntitlementResponse'),
+    newUpdateEntitlementResponse,
+
+    -- ** UpdateFleet
+    UpdateFleet (UpdateFleet'),
+    newUpdateFleet,
+    UpdateFleetResponse (UpdateFleetResponse'),
+    newUpdateFleetResponse,
+
+    -- ** UpdateImagePermissions
+    UpdateImagePermissions (UpdateImagePermissions'),
+    newUpdateImagePermissions,
+    UpdateImagePermissionsResponse (UpdateImagePermissionsResponse'),
+    newUpdateImagePermissionsResponse,
+
+    -- ** UpdateStack
+    UpdateStack (UpdateStack'),
+    newUpdateStack,
+    UpdateStackResponse (UpdateStackResponse'),
+    newUpdateStackResponse,
+
+    -- * Types
+
+    -- ** AccessEndpointType
+    AccessEndpointType (..),
+
+    -- ** Action
+    Action (..),
+
+    -- ** AppVisibility
+    AppVisibility (..),
+
+    -- ** ApplicationAttribute
+    ApplicationAttribute (..),
+
+    -- ** AuthenticationType
+    AuthenticationType (..),
+
+    -- ** CertificateBasedAuthStatus
+    CertificateBasedAuthStatus (..),
+
+    -- ** FleetAttribute
+    FleetAttribute (..),
+
+    -- ** FleetErrorCode
+    FleetErrorCode (..),
+
+    -- ** FleetState
+    FleetState (..),
+
+    -- ** FleetType
+    FleetType (..),
+
+    -- ** ImageBuilderState
+    ImageBuilderState (..),
+
+    -- ** ImageBuilderStateChangeReasonCode
+    ImageBuilderStateChangeReasonCode (..),
+
+    -- ** ImageState
+    ImageState (..),
+
+    -- ** ImageStateChangeReasonCode
+    ImageStateChangeReasonCode (..),
+
+    -- ** MessageAction
+    MessageAction (..),
+
+    -- ** Permission
+    Permission (..),
+
+    -- ** PlatformType
+    PlatformType (..),
+
+    -- ** PreferredProtocol
+    PreferredProtocol (..),
+
+    -- ** SessionConnectionState
+    SessionConnectionState (..),
+
+    -- ** SessionState
+    SessionState (..),
+
+    -- ** StackAttribute
+    StackAttribute (..),
+
+    -- ** StackErrorCode
+    StackErrorCode (..),
+
+    -- ** StorageConnectorType
+    StorageConnectorType (..),
+
+    -- ** StreamView
+    StreamView (..),
+
+    -- ** UsageReportExecutionErrorCode
+    UsageReportExecutionErrorCode (..),
+
+    -- ** UsageReportSchedule
+    UsageReportSchedule (..),
+
+    -- ** UserStackAssociationErrorCode
+    UserStackAssociationErrorCode (..),
+
+    -- ** VisibilityType
+    VisibilityType (..),
+
+    -- ** AccessEndpoint
+    AccessEndpoint (AccessEndpoint'),
+    newAccessEndpoint,
+
+    -- ** AppBlock
+    AppBlock (AppBlock'),
+    newAppBlock,
+
+    -- ** Application
+    Application (Application'),
+    newApplication,
+
+    -- ** ApplicationFleetAssociation
+    ApplicationFleetAssociation (ApplicationFleetAssociation'),
+    newApplicationFleetAssociation,
+
+    -- ** ApplicationSettings
+    ApplicationSettings (ApplicationSettings'),
+    newApplicationSettings,
+
+    -- ** ApplicationSettingsResponse
+    ApplicationSettingsResponse (ApplicationSettingsResponse'),
+    newApplicationSettingsResponse,
+
+    -- ** CertificateBasedAuthProperties
+    CertificateBasedAuthProperties (CertificateBasedAuthProperties'),
+    newCertificateBasedAuthProperties,
+
+    -- ** ComputeCapacity
+    ComputeCapacity (ComputeCapacity'),
+    newComputeCapacity,
+
+    -- ** ComputeCapacityStatus
+    ComputeCapacityStatus (ComputeCapacityStatus'),
+    newComputeCapacityStatus,
+
+    -- ** DirectoryConfig
+    DirectoryConfig (DirectoryConfig'),
+    newDirectoryConfig,
+
+    -- ** DomainJoinInfo
+    DomainJoinInfo (DomainJoinInfo'),
+    newDomainJoinInfo,
+
+    -- ** EntitledApplication
+    EntitledApplication (EntitledApplication'),
+    newEntitledApplication,
+
+    -- ** Entitlement
+    Entitlement (Entitlement'),
+    newEntitlement,
+
+    -- ** EntitlementAttribute
+    EntitlementAttribute (EntitlementAttribute'),
+    newEntitlementAttribute,
+
+    -- ** Fleet
+    Fleet (Fleet'),
+    newFleet,
+
+    -- ** FleetError
+    FleetError (FleetError'),
+    newFleetError,
+
+    -- ** Image
+    Image (Image'),
+    newImage,
+
+    -- ** ImageBuilder
+    ImageBuilder (ImageBuilder'),
+    newImageBuilder,
+
+    -- ** ImageBuilderStateChangeReason
+    ImageBuilderStateChangeReason (ImageBuilderStateChangeReason'),
+    newImageBuilderStateChangeReason,
+
+    -- ** ImagePermissions
+    ImagePermissions (ImagePermissions'),
+    newImagePermissions,
+
+    -- ** ImageStateChangeReason
+    ImageStateChangeReason (ImageStateChangeReason'),
+    newImageStateChangeReason,
+
+    -- ** LastReportGenerationExecutionError
+    LastReportGenerationExecutionError (LastReportGenerationExecutionError'),
+    newLastReportGenerationExecutionError,
+
+    -- ** NetworkAccessConfiguration
+    NetworkAccessConfiguration (NetworkAccessConfiguration'),
+    newNetworkAccessConfiguration,
+
+    -- ** ResourceError
+    ResourceError (ResourceError'),
+    newResourceError,
+
+    -- ** S3Location
+    S3Location (S3Location'),
+    newS3Location,
+
+    -- ** ScriptDetails
+    ScriptDetails (ScriptDetails'),
+    newScriptDetails,
+
+    -- ** ServiceAccountCredentials
+    ServiceAccountCredentials (ServiceAccountCredentials'),
+    newServiceAccountCredentials,
+
+    -- ** Session
+    Session (Session'),
+    newSession,
+
+    -- ** SharedImagePermissions
+    SharedImagePermissions (SharedImagePermissions'),
+    newSharedImagePermissions,
+
+    -- ** Stack
+    Stack (Stack'),
+    newStack,
+
+    -- ** StackError
+    StackError (StackError'),
+    newStackError,
+
+    -- ** StorageConnector
+    StorageConnector (StorageConnector'),
+    newStorageConnector,
+
+    -- ** StreamingExperienceSettings
+    StreamingExperienceSettings (StreamingExperienceSettings'),
+    newStreamingExperienceSettings,
+
+    -- ** UsageReportSubscription
+    UsageReportSubscription (UsageReportSubscription'),
+    newUsageReportSubscription,
+
+    -- ** User
+    User (User'),
+    newUser,
+
+    -- ** UserSetting
+    UserSetting (UserSetting'),
+    newUserSetting,
+
+    -- ** UserStackAssociation
+    UserStackAssociation (UserStackAssociation'),
+    newUserStackAssociation,
+
+    -- ** UserStackAssociationError
+    UserStackAssociationError (UserStackAssociationError'),
+    newUserStackAssociationError,
+
+    -- ** VpcConfig
+    VpcConfig (VpcConfig'),
+    newVpcConfig,
+  )
+where
+
+import Amazonka.AppStream.AssociateApplicationFleet
+import Amazonka.AppStream.AssociateApplicationToEntitlement
+import Amazonka.AppStream.AssociateFleet
+import Amazonka.AppStream.BatchAssociateUserStack
+import Amazonka.AppStream.BatchDisassociateUserStack
+import Amazonka.AppStream.CopyImage
+import Amazonka.AppStream.CreateAppBlock
+import Amazonka.AppStream.CreateApplication
+import Amazonka.AppStream.CreateDirectoryConfig
+import Amazonka.AppStream.CreateEntitlement
+import Amazonka.AppStream.CreateFleet
+import Amazonka.AppStream.CreateImageBuilder
+import Amazonka.AppStream.CreateImageBuilderStreamingURL
+import Amazonka.AppStream.CreateStack
+import Amazonka.AppStream.CreateStreamingURL
+import Amazonka.AppStream.CreateUpdatedImage
+import Amazonka.AppStream.CreateUsageReportSubscription
+import Amazonka.AppStream.CreateUser
+import Amazonka.AppStream.DeleteAppBlock
+import Amazonka.AppStream.DeleteApplication
+import Amazonka.AppStream.DeleteDirectoryConfig
+import Amazonka.AppStream.DeleteEntitlement
+import Amazonka.AppStream.DeleteFleet
+import Amazonka.AppStream.DeleteImage
+import Amazonka.AppStream.DeleteImageBuilder
+import Amazonka.AppStream.DeleteImagePermissions
+import Amazonka.AppStream.DeleteStack
+import Amazonka.AppStream.DeleteUsageReportSubscription
+import Amazonka.AppStream.DeleteUser
+import Amazonka.AppStream.DescribeAppBlocks
+import Amazonka.AppStream.DescribeApplicationFleetAssociations
+import Amazonka.AppStream.DescribeApplications
+import Amazonka.AppStream.DescribeDirectoryConfigs
+import Amazonka.AppStream.DescribeEntitlements
+import Amazonka.AppStream.DescribeFleets
+import Amazonka.AppStream.DescribeImageBuilders
+import Amazonka.AppStream.DescribeImagePermissions
+import Amazonka.AppStream.DescribeImages
+import Amazonka.AppStream.DescribeSessions
+import Amazonka.AppStream.DescribeStacks
+import Amazonka.AppStream.DescribeUsageReportSubscriptions
+import Amazonka.AppStream.DescribeUserStackAssociations
+import Amazonka.AppStream.DescribeUsers
+import Amazonka.AppStream.DisableUser
+import Amazonka.AppStream.DisassociateApplicationFleet
+import Amazonka.AppStream.DisassociateApplicationFromEntitlement
+import Amazonka.AppStream.DisassociateFleet
+import Amazonka.AppStream.EnableUser
+import Amazonka.AppStream.ExpireSession
+import Amazonka.AppStream.Lens
+import Amazonka.AppStream.ListAssociatedFleets
+import Amazonka.AppStream.ListAssociatedStacks
+import Amazonka.AppStream.ListEntitledApplications
+import Amazonka.AppStream.ListTagsForResource
+import Amazonka.AppStream.StartFleet
+import Amazonka.AppStream.StartImageBuilder
+import Amazonka.AppStream.StopFleet
+import Amazonka.AppStream.StopImageBuilder
+import Amazonka.AppStream.TagResource
+import Amazonka.AppStream.Types
+import Amazonka.AppStream.UntagResource
+import Amazonka.AppStream.UpdateApplication
+import Amazonka.AppStream.UpdateDirectoryConfig
+import Amazonka.AppStream.UpdateEntitlement
+import Amazonka.AppStream.UpdateFleet
+import Amazonka.AppStream.UpdateImagePermissions
+import Amazonka.AppStream.UpdateStack
+import Amazonka.AppStream.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 'AppStream'.
+
+-- $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/AppStream/AssociateApplicationFleet.hs b/gen/Amazonka/AppStream/AssociateApplicationFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/AssociateApplicationFleet.hs
@@ -0,0 +1,201 @@
+{-# 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.AppStream.AssociateApplicationFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified application with the specified fleet. This is
+-- only supported for Elastic fleets.
+module Amazonka.AppStream.AssociateApplicationFleet
+  ( -- * Creating a Request
+    AssociateApplicationFleet (..),
+    newAssociateApplicationFleet,
+
+    -- * Request Lenses
+    associateApplicationFleet_fleetName,
+    associateApplicationFleet_applicationArn,
+
+    -- * Destructuring the Response
+    AssociateApplicationFleetResponse (..),
+    newAssociateApplicationFleetResponse,
+
+    -- * Response Lenses
+    associateApplicationFleetResponse_applicationFleetAssociation,
+    associateApplicationFleetResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateApplicationFleet' smart constructor.
+data AssociateApplicationFleet = AssociateApplicationFleet'
+  { -- | The name of the fleet.
+    fleetName :: Prelude.Text,
+    -- | The ARN of the application.
+    applicationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateApplicationFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleetName', 'associateApplicationFleet_fleetName' - The name of the fleet.
+--
+-- 'applicationArn', 'associateApplicationFleet_applicationArn' - The ARN of the application.
+newAssociateApplicationFleet ::
+  -- | 'fleetName'
+  Prelude.Text ->
+  -- | 'applicationArn'
+  Prelude.Text ->
+  AssociateApplicationFleet
+newAssociateApplicationFleet
+  pFleetName_
+  pApplicationArn_ =
+    AssociateApplicationFleet'
+      { fleetName = pFleetName_,
+        applicationArn = pApplicationArn_
+      }
+
+-- | The name of the fleet.
+associateApplicationFleet_fleetName :: Lens.Lens' AssociateApplicationFleet Prelude.Text
+associateApplicationFleet_fleetName = Lens.lens (\AssociateApplicationFleet' {fleetName} -> fleetName) (\s@AssociateApplicationFleet' {} a -> s {fleetName = a} :: AssociateApplicationFleet)
+
+-- | The ARN of the application.
+associateApplicationFleet_applicationArn :: Lens.Lens' AssociateApplicationFleet Prelude.Text
+associateApplicationFleet_applicationArn = Lens.lens (\AssociateApplicationFleet' {applicationArn} -> applicationArn) (\s@AssociateApplicationFleet' {} a -> s {applicationArn = a} :: AssociateApplicationFleet)
+
+instance Core.AWSRequest AssociateApplicationFleet where
+  type
+    AWSResponse AssociateApplicationFleet =
+      AssociateApplicationFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          AssociateApplicationFleetResponse'
+            Prelude.<$> (x Data..?> "ApplicationFleetAssociation")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateApplicationFleet where
+  hashWithSalt _salt AssociateApplicationFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` fleetName
+      `Prelude.hashWithSalt` applicationArn
+
+instance Prelude.NFData AssociateApplicationFleet where
+  rnf AssociateApplicationFleet' {..} =
+    Prelude.rnf fleetName
+      `Prelude.seq` Prelude.rnf applicationArn
+
+instance Data.ToHeaders AssociateApplicationFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.AssociateApplicationFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateApplicationFleet where
+  toJSON AssociateApplicationFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("FleetName" Data..= fleetName),
+            Prelude.Just
+              ("ApplicationArn" Data..= applicationArn)
+          ]
+      )
+
+instance Data.ToPath AssociateApplicationFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateApplicationFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateApplicationFleetResponse' smart constructor.
+data AssociateApplicationFleetResponse = AssociateApplicationFleetResponse'
+  { -- | If fleet name is specified, this returns the list of applications that
+    -- are associated to it. If application ARN is specified, this returns the
+    -- list of fleets to which it is associated.
+    applicationFleetAssociation :: Prelude.Maybe ApplicationFleetAssociation,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateApplicationFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationFleetAssociation', 'associateApplicationFleetResponse_applicationFleetAssociation' - If fleet name is specified, this returns the list of applications that
+-- are associated to it. If application ARN is specified, this returns the
+-- list of fleets to which it is associated.
+--
+-- 'httpStatus', 'associateApplicationFleetResponse_httpStatus' - The response's http status code.
+newAssociateApplicationFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateApplicationFleetResponse
+newAssociateApplicationFleetResponse pHttpStatus_ =
+  AssociateApplicationFleetResponse'
+    { applicationFleetAssociation =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | If fleet name is specified, this returns the list of applications that
+-- are associated to it. If application ARN is specified, this returns the
+-- list of fleets to which it is associated.
+associateApplicationFleetResponse_applicationFleetAssociation :: Lens.Lens' AssociateApplicationFleetResponse (Prelude.Maybe ApplicationFleetAssociation)
+associateApplicationFleetResponse_applicationFleetAssociation = Lens.lens (\AssociateApplicationFleetResponse' {applicationFleetAssociation} -> applicationFleetAssociation) (\s@AssociateApplicationFleetResponse' {} a -> s {applicationFleetAssociation = a} :: AssociateApplicationFleetResponse)
+
+-- | The response's http status code.
+associateApplicationFleetResponse_httpStatus :: Lens.Lens' AssociateApplicationFleetResponse Prelude.Int
+associateApplicationFleetResponse_httpStatus = Lens.lens (\AssociateApplicationFleetResponse' {httpStatus} -> httpStatus) (\s@AssociateApplicationFleetResponse' {} a -> s {httpStatus = a} :: AssociateApplicationFleetResponse)
+
+instance
+  Prelude.NFData
+    AssociateApplicationFleetResponse
+  where
+  rnf AssociateApplicationFleetResponse' {..} =
+    Prelude.rnf applicationFleetAssociation
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/AssociateApplicationToEntitlement.hs b/gen/Amazonka/AppStream/AssociateApplicationToEntitlement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/AssociateApplicationToEntitlement.hs
@@ -0,0 +1,227 @@
+{-# 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.AppStream.AssociateApplicationToEntitlement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates an application to entitle.
+module Amazonka.AppStream.AssociateApplicationToEntitlement
+  ( -- * Creating a Request
+    AssociateApplicationToEntitlement (..),
+    newAssociateApplicationToEntitlement,
+
+    -- * Request Lenses
+    associateApplicationToEntitlement_stackName,
+    associateApplicationToEntitlement_entitlementName,
+    associateApplicationToEntitlement_applicationIdentifier,
+
+    -- * Destructuring the Response
+    AssociateApplicationToEntitlementResponse (..),
+    newAssociateApplicationToEntitlementResponse,
+
+    -- * Response Lenses
+    associateApplicationToEntitlementResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateApplicationToEntitlement' smart constructor.
+data AssociateApplicationToEntitlement = AssociateApplicationToEntitlement'
+  { -- | The name of the stack.
+    stackName :: Prelude.Text,
+    -- | The name of the entitlement.
+    entitlementName :: Prelude.Text,
+    -- | The identifier of the application.
+    applicationIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateApplicationToEntitlement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stackName', 'associateApplicationToEntitlement_stackName' - The name of the stack.
+--
+-- 'entitlementName', 'associateApplicationToEntitlement_entitlementName' - The name of the entitlement.
+--
+-- 'applicationIdentifier', 'associateApplicationToEntitlement_applicationIdentifier' - The identifier of the application.
+newAssociateApplicationToEntitlement ::
+  -- | 'stackName'
+  Prelude.Text ->
+  -- | 'entitlementName'
+  Prelude.Text ->
+  -- | 'applicationIdentifier'
+  Prelude.Text ->
+  AssociateApplicationToEntitlement
+newAssociateApplicationToEntitlement
+  pStackName_
+  pEntitlementName_
+  pApplicationIdentifier_ =
+    AssociateApplicationToEntitlement'
+      { stackName =
+          pStackName_,
+        entitlementName = pEntitlementName_,
+        applicationIdentifier =
+          pApplicationIdentifier_
+      }
+
+-- | The name of the stack.
+associateApplicationToEntitlement_stackName :: Lens.Lens' AssociateApplicationToEntitlement Prelude.Text
+associateApplicationToEntitlement_stackName = Lens.lens (\AssociateApplicationToEntitlement' {stackName} -> stackName) (\s@AssociateApplicationToEntitlement' {} a -> s {stackName = a} :: AssociateApplicationToEntitlement)
+
+-- | The name of the entitlement.
+associateApplicationToEntitlement_entitlementName :: Lens.Lens' AssociateApplicationToEntitlement Prelude.Text
+associateApplicationToEntitlement_entitlementName = Lens.lens (\AssociateApplicationToEntitlement' {entitlementName} -> entitlementName) (\s@AssociateApplicationToEntitlement' {} a -> s {entitlementName = a} :: AssociateApplicationToEntitlement)
+
+-- | The identifier of the application.
+associateApplicationToEntitlement_applicationIdentifier :: Lens.Lens' AssociateApplicationToEntitlement Prelude.Text
+associateApplicationToEntitlement_applicationIdentifier = Lens.lens (\AssociateApplicationToEntitlement' {applicationIdentifier} -> applicationIdentifier) (\s@AssociateApplicationToEntitlement' {} a -> s {applicationIdentifier = a} :: AssociateApplicationToEntitlement)
+
+instance
+  Core.AWSRequest
+    AssociateApplicationToEntitlement
+  where
+  type
+    AWSResponse AssociateApplicationToEntitlement =
+      AssociateApplicationToEntitlementResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateApplicationToEntitlementResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    AssociateApplicationToEntitlement
+  where
+  hashWithSalt
+    _salt
+    AssociateApplicationToEntitlement' {..} =
+      _salt
+        `Prelude.hashWithSalt` stackName
+        `Prelude.hashWithSalt` entitlementName
+        `Prelude.hashWithSalt` applicationIdentifier
+
+instance
+  Prelude.NFData
+    AssociateApplicationToEntitlement
+  where
+  rnf AssociateApplicationToEntitlement' {..} =
+    Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf entitlementName
+      `Prelude.seq` Prelude.rnf applicationIdentifier
+
+instance
+  Data.ToHeaders
+    AssociateApplicationToEntitlement
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.AssociateApplicationToEntitlement" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    AssociateApplicationToEntitlement
+  where
+  toJSON AssociateApplicationToEntitlement' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("StackName" Data..= stackName),
+            Prelude.Just
+              ("EntitlementName" Data..= entitlementName),
+            Prelude.Just
+              ( "ApplicationIdentifier"
+                  Data..= applicationIdentifier
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    AssociateApplicationToEntitlement
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    AssociateApplicationToEntitlement
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateApplicationToEntitlementResponse' smart constructor.
+data AssociateApplicationToEntitlementResponse = AssociateApplicationToEntitlementResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateApplicationToEntitlementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'associateApplicationToEntitlementResponse_httpStatus' - The response's http status code.
+newAssociateApplicationToEntitlementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateApplicationToEntitlementResponse
+newAssociateApplicationToEntitlementResponse
+  pHttpStatus_ =
+    AssociateApplicationToEntitlementResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+associateApplicationToEntitlementResponse_httpStatus :: Lens.Lens' AssociateApplicationToEntitlementResponse Prelude.Int
+associateApplicationToEntitlementResponse_httpStatus = Lens.lens (\AssociateApplicationToEntitlementResponse' {httpStatus} -> httpStatus) (\s@AssociateApplicationToEntitlementResponse' {} a -> s {httpStatus = a} :: AssociateApplicationToEntitlementResponse)
+
+instance
+  Prelude.NFData
+    AssociateApplicationToEntitlementResponse
+  where
+  rnf AssociateApplicationToEntitlementResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/AssociateFleet.hs b/gen/Amazonka/AppStream/AssociateFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/AssociateFleet.hs
@@ -0,0 +1,173 @@
+{-# 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.AppStream.AssociateFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified fleet with the specified stack.
+module Amazonka.AppStream.AssociateFleet
+  ( -- * Creating a Request
+    AssociateFleet (..),
+    newAssociateFleet,
+
+    -- * Request Lenses
+    associateFleet_fleetName,
+    associateFleet_stackName,
+
+    -- * Destructuring the Response
+    AssociateFleetResponse (..),
+    newAssociateFleetResponse,
+
+    -- * Response Lenses
+    associateFleetResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newAssociateFleet' smart constructor.
+data AssociateFleet = AssociateFleet'
+  { -- | The name of the fleet.
+    fleetName :: Prelude.Text,
+    -- | The name of the stack.
+    stackName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleetName', 'associateFleet_fleetName' - The name of the fleet.
+--
+-- 'stackName', 'associateFleet_stackName' - The name of the stack.
+newAssociateFleet ::
+  -- | 'fleetName'
+  Prelude.Text ->
+  -- | 'stackName'
+  Prelude.Text ->
+  AssociateFleet
+newAssociateFleet pFleetName_ pStackName_ =
+  AssociateFleet'
+    { fleetName = pFleetName_,
+      stackName = pStackName_
+    }
+
+-- | The name of the fleet.
+associateFleet_fleetName :: Lens.Lens' AssociateFleet Prelude.Text
+associateFleet_fleetName = Lens.lens (\AssociateFleet' {fleetName} -> fleetName) (\s@AssociateFleet' {} a -> s {fleetName = a} :: AssociateFleet)
+
+-- | The name of the stack.
+associateFleet_stackName :: Lens.Lens' AssociateFleet Prelude.Text
+associateFleet_stackName = Lens.lens (\AssociateFleet' {stackName} -> stackName) (\s@AssociateFleet' {} a -> s {stackName = a} :: AssociateFleet)
+
+instance Core.AWSRequest AssociateFleet where
+  type
+    AWSResponse AssociateFleet =
+      AssociateFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          AssociateFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable AssociateFleet where
+  hashWithSalt _salt AssociateFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` fleetName
+      `Prelude.hashWithSalt` stackName
+
+instance Prelude.NFData AssociateFleet where
+  rnf AssociateFleet' {..} =
+    Prelude.rnf fleetName
+      `Prelude.seq` Prelude.rnf stackName
+
+instance Data.ToHeaders AssociateFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.AssociateFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON AssociateFleet where
+  toJSON AssociateFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("FleetName" Data..= fleetName),
+            Prelude.Just ("StackName" Data..= stackName)
+          ]
+      )
+
+instance Data.ToPath AssociateFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery AssociateFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newAssociateFleetResponse' smart constructor.
+data AssociateFleetResponse = AssociateFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AssociateFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'associateFleetResponse_httpStatus' - The response's http status code.
+newAssociateFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  AssociateFleetResponse
+newAssociateFleetResponse pHttpStatus_ =
+  AssociateFleetResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+associateFleetResponse_httpStatus :: Lens.Lens' AssociateFleetResponse Prelude.Int
+associateFleetResponse_httpStatus = Lens.lens (\AssociateFleetResponse' {httpStatus} -> httpStatus) (\s@AssociateFleetResponse' {} a -> s {httpStatus = a} :: AssociateFleetResponse)
+
+instance Prelude.NFData AssociateFleetResponse where
+  rnf AssociateFleetResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/BatchAssociateUserStack.hs b/gen/Amazonka/AppStream/BatchAssociateUserStack.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/BatchAssociateUserStack.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.BatchAssociateUserStack
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Associates the specified users with the specified stacks. Users in a
+-- user pool cannot be assigned to stacks with fleets that are joined to an
+-- Active Directory domain.
+module Amazonka.AppStream.BatchAssociateUserStack
+  ( -- * Creating a Request
+    BatchAssociateUserStack (..),
+    newBatchAssociateUserStack,
+
+    -- * Request Lenses
+    batchAssociateUserStack_userStackAssociations,
+
+    -- * Destructuring the Response
+    BatchAssociateUserStackResponse (..),
+    newBatchAssociateUserStackResponse,
+
+    -- * Response Lenses
+    batchAssociateUserStackResponse_errors,
+    batchAssociateUserStackResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchAssociateUserStack' smart constructor.
+data BatchAssociateUserStack = BatchAssociateUserStack'
+  { -- | The list of UserStackAssociation objects.
+    userStackAssociations :: Prelude.NonEmpty UserStackAssociation
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchAssociateUserStack' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userStackAssociations', 'batchAssociateUserStack_userStackAssociations' - The list of UserStackAssociation objects.
+newBatchAssociateUserStack ::
+  -- | 'userStackAssociations'
+  Prelude.NonEmpty UserStackAssociation ->
+  BatchAssociateUserStack
+newBatchAssociateUserStack pUserStackAssociations_ =
+  BatchAssociateUserStack'
+    { userStackAssociations =
+        Lens.coerced Lens.# pUserStackAssociations_
+    }
+
+-- | The list of UserStackAssociation objects.
+batchAssociateUserStack_userStackAssociations :: Lens.Lens' BatchAssociateUserStack (Prelude.NonEmpty UserStackAssociation)
+batchAssociateUserStack_userStackAssociations = Lens.lens (\BatchAssociateUserStack' {userStackAssociations} -> userStackAssociations) (\s@BatchAssociateUserStack' {} a -> s {userStackAssociations = a} :: BatchAssociateUserStack) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchAssociateUserStack where
+  type
+    AWSResponse BatchAssociateUserStack =
+      BatchAssociateUserStackResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchAssociateUserStackResponse'
+            Prelude.<$> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchAssociateUserStack where
+  hashWithSalt _salt BatchAssociateUserStack' {..} =
+    _salt `Prelude.hashWithSalt` userStackAssociations
+
+instance Prelude.NFData BatchAssociateUserStack where
+  rnf BatchAssociateUserStack' {..} =
+    Prelude.rnf userStackAssociations
+
+instance Data.ToHeaders BatchAssociateUserStack where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.BatchAssociateUserStack" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchAssociateUserStack where
+  toJSON BatchAssociateUserStack' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "UserStackAssociations"
+                  Data..= userStackAssociations
+              )
+          ]
+      )
+
+instance Data.ToPath BatchAssociateUserStack where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchAssociateUserStack where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchAssociateUserStackResponse' smart constructor.
+data BatchAssociateUserStackResponse = BatchAssociateUserStackResponse'
+  { -- | The list of UserStackAssociationError objects.
+    errors :: Prelude.Maybe [UserStackAssociationError],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchAssociateUserStackResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'batchAssociateUserStackResponse_errors' - The list of UserStackAssociationError objects.
+--
+-- 'httpStatus', 'batchAssociateUserStackResponse_httpStatus' - The response's http status code.
+newBatchAssociateUserStackResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchAssociateUserStackResponse
+newBatchAssociateUserStackResponse pHttpStatus_ =
+  BatchAssociateUserStackResponse'
+    { errors =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of UserStackAssociationError objects.
+batchAssociateUserStackResponse_errors :: Lens.Lens' BatchAssociateUserStackResponse (Prelude.Maybe [UserStackAssociationError])
+batchAssociateUserStackResponse_errors = Lens.lens (\BatchAssociateUserStackResponse' {errors} -> errors) (\s@BatchAssociateUserStackResponse' {} a -> s {errors = a} :: BatchAssociateUserStackResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchAssociateUserStackResponse_httpStatus :: Lens.Lens' BatchAssociateUserStackResponse Prelude.Int
+batchAssociateUserStackResponse_httpStatus = Lens.lens (\BatchAssociateUserStackResponse' {httpStatus} -> httpStatus) (\s@BatchAssociateUserStackResponse' {} a -> s {httpStatus = a} :: BatchAssociateUserStackResponse)
+
+instance
+  Prelude.NFData
+    BatchAssociateUserStackResponse
+  where
+  rnf BatchAssociateUserStackResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/BatchDisassociateUserStack.hs b/gen/Amazonka/AppStream/BatchDisassociateUserStack.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/BatchDisassociateUserStack.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.BatchDisassociateUserStack
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates the specified users from the specified stacks.
+module Amazonka.AppStream.BatchDisassociateUserStack
+  ( -- * Creating a Request
+    BatchDisassociateUserStack (..),
+    newBatchDisassociateUserStack,
+
+    -- * Request Lenses
+    batchDisassociateUserStack_userStackAssociations,
+
+    -- * Destructuring the Response
+    BatchDisassociateUserStackResponse (..),
+    newBatchDisassociateUserStackResponse,
+
+    -- * Response Lenses
+    batchDisassociateUserStackResponse_errors,
+    batchDisassociateUserStackResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newBatchDisassociateUserStack' smart constructor.
+data BatchDisassociateUserStack = BatchDisassociateUserStack'
+  { -- | The list of UserStackAssociation objects.
+    userStackAssociations :: Prelude.NonEmpty UserStackAssociation
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDisassociateUserStack' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userStackAssociations', 'batchDisassociateUserStack_userStackAssociations' - The list of UserStackAssociation objects.
+newBatchDisassociateUserStack ::
+  -- | 'userStackAssociations'
+  Prelude.NonEmpty UserStackAssociation ->
+  BatchDisassociateUserStack
+newBatchDisassociateUserStack pUserStackAssociations_ =
+  BatchDisassociateUserStack'
+    { userStackAssociations =
+        Lens.coerced Lens.# pUserStackAssociations_
+    }
+
+-- | The list of UserStackAssociation objects.
+batchDisassociateUserStack_userStackAssociations :: Lens.Lens' BatchDisassociateUserStack (Prelude.NonEmpty UserStackAssociation)
+batchDisassociateUserStack_userStackAssociations = Lens.lens (\BatchDisassociateUserStack' {userStackAssociations} -> userStackAssociations) (\s@BatchDisassociateUserStack' {} a -> s {userStackAssociations = a} :: BatchDisassociateUserStack) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchDisassociateUserStack where
+  type
+    AWSResponse BatchDisassociateUserStack =
+      BatchDisassociateUserStackResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          BatchDisassociateUserStackResponse'
+            Prelude.<$> (x Data..?> "errors" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable BatchDisassociateUserStack where
+  hashWithSalt _salt BatchDisassociateUserStack' {..} =
+    _salt `Prelude.hashWithSalt` userStackAssociations
+
+instance Prelude.NFData BatchDisassociateUserStack where
+  rnf BatchDisassociateUserStack' {..} =
+    Prelude.rnf userStackAssociations
+
+instance Data.ToHeaders BatchDisassociateUserStack where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.BatchDisassociateUserStack" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON BatchDisassociateUserStack where
+  toJSON BatchDisassociateUserStack' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ( "UserStackAssociations"
+                  Data..= userStackAssociations
+              )
+          ]
+      )
+
+instance Data.ToPath BatchDisassociateUserStack where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchDisassociateUserStack where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newBatchDisassociateUserStackResponse' smart constructor.
+data BatchDisassociateUserStackResponse = BatchDisassociateUserStackResponse'
+  { -- | The list of UserStackAssociationError objects.
+    errors :: Prelude.Maybe [UserStackAssociationError],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDisassociateUserStackResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errors', 'batchDisassociateUserStackResponse_errors' - The list of UserStackAssociationError objects.
+--
+-- 'httpStatus', 'batchDisassociateUserStackResponse_httpStatus' - The response's http status code.
+newBatchDisassociateUserStackResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  BatchDisassociateUserStackResponse
+newBatchDisassociateUserStackResponse pHttpStatus_ =
+  BatchDisassociateUserStackResponse'
+    { errors =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of UserStackAssociationError objects.
+batchDisassociateUserStackResponse_errors :: Lens.Lens' BatchDisassociateUserStackResponse (Prelude.Maybe [UserStackAssociationError])
+batchDisassociateUserStackResponse_errors = Lens.lens (\BatchDisassociateUserStackResponse' {errors} -> errors) (\s@BatchDisassociateUserStackResponse' {} a -> s {errors = a} :: BatchDisassociateUserStackResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+batchDisassociateUserStackResponse_httpStatus :: Lens.Lens' BatchDisassociateUserStackResponse Prelude.Int
+batchDisassociateUserStackResponse_httpStatus = Lens.lens (\BatchDisassociateUserStackResponse' {httpStatus} -> httpStatus) (\s@BatchDisassociateUserStackResponse' {} a -> s {httpStatus = a} :: BatchDisassociateUserStackResponse)
+
+instance
+  Prelude.NFData
+    BatchDisassociateUserStackResponse
+  where
+  rnf BatchDisassociateUserStackResponse' {..} =
+    Prelude.rnf errors
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CopyImage.hs b/gen/Amazonka/AppStream/CopyImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CopyImage.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.AppStream.CopyImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Copies the image within the same region or to a new region within the
+-- same AWS account. Note that any tags you added to the image will not be
+-- copied.
+module Amazonka.AppStream.CopyImage
+  ( -- * Creating a Request
+    CopyImage (..),
+    newCopyImage,
+
+    -- * Request Lenses
+    copyImage_destinationImageDescription,
+    copyImage_sourceImageName,
+    copyImage_destinationImageName,
+    copyImage_destinationRegion,
+
+    -- * Destructuring the Response
+    CopyImageResponse (..),
+    newCopyImageResponse,
+
+    -- * Response Lenses
+    copyImageResponse_destinationImageName,
+    copyImageResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCopyImage' smart constructor.
+data CopyImage = CopyImage'
+  { -- | The description that the image will have when it is copied to the
+    -- destination.
+    destinationImageDescription :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image to copy.
+    sourceImageName :: Prelude.Text,
+    -- | The name that the image will have when it is copied to the destination.
+    destinationImageName :: Prelude.Text,
+    -- | The destination region to which the image will be copied. This parameter
+    -- is required, even if you are copying an image within the same region.
+    destinationRegion :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CopyImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationImageDescription', 'copyImage_destinationImageDescription' - The description that the image will have when it is copied to the
+-- destination.
+--
+-- 'sourceImageName', 'copyImage_sourceImageName' - The name of the image to copy.
+--
+-- 'destinationImageName', 'copyImage_destinationImageName' - The name that the image will have when it is copied to the destination.
+--
+-- 'destinationRegion', 'copyImage_destinationRegion' - The destination region to which the image will be copied. This parameter
+-- is required, even if you are copying an image within the same region.
+newCopyImage ::
+  -- | 'sourceImageName'
+  Prelude.Text ->
+  -- | 'destinationImageName'
+  Prelude.Text ->
+  -- | 'destinationRegion'
+  Prelude.Text ->
+  CopyImage
+newCopyImage
+  pSourceImageName_
+  pDestinationImageName_
+  pDestinationRegion_ =
+    CopyImage'
+      { destinationImageDescription =
+          Prelude.Nothing,
+        sourceImageName = pSourceImageName_,
+        destinationImageName = pDestinationImageName_,
+        destinationRegion = pDestinationRegion_
+      }
+
+-- | The description that the image will have when it is copied to the
+-- destination.
+copyImage_destinationImageDescription :: Lens.Lens' CopyImage (Prelude.Maybe Prelude.Text)
+copyImage_destinationImageDescription = Lens.lens (\CopyImage' {destinationImageDescription} -> destinationImageDescription) (\s@CopyImage' {} a -> s {destinationImageDescription = a} :: CopyImage)
+
+-- | The name of the image to copy.
+copyImage_sourceImageName :: Lens.Lens' CopyImage Prelude.Text
+copyImage_sourceImageName = Lens.lens (\CopyImage' {sourceImageName} -> sourceImageName) (\s@CopyImage' {} a -> s {sourceImageName = a} :: CopyImage)
+
+-- | The name that the image will have when it is copied to the destination.
+copyImage_destinationImageName :: Lens.Lens' CopyImage Prelude.Text
+copyImage_destinationImageName = Lens.lens (\CopyImage' {destinationImageName} -> destinationImageName) (\s@CopyImage' {} a -> s {destinationImageName = a} :: CopyImage)
+
+-- | The destination region to which the image will be copied. This parameter
+-- is required, even if you are copying an image within the same region.
+copyImage_destinationRegion :: Lens.Lens' CopyImage Prelude.Text
+copyImage_destinationRegion = Lens.lens (\CopyImage' {destinationRegion} -> destinationRegion) (\s@CopyImage' {} a -> s {destinationRegion = a} :: CopyImage)
+
+instance Core.AWSRequest CopyImage where
+  type AWSResponse CopyImage = CopyImageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CopyImageResponse'
+            Prelude.<$> (x Data..?> "DestinationImageName")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CopyImage where
+  hashWithSalt _salt CopyImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` destinationImageDescription
+      `Prelude.hashWithSalt` sourceImageName
+      `Prelude.hashWithSalt` destinationImageName
+      `Prelude.hashWithSalt` destinationRegion
+
+instance Prelude.NFData CopyImage where
+  rnf CopyImage' {..} =
+    Prelude.rnf destinationImageDescription
+      `Prelude.seq` Prelude.rnf sourceImageName
+      `Prelude.seq` Prelude.rnf destinationImageName
+      `Prelude.seq` Prelude.rnf destinationRegion
+
+instance Data.ToHeaders CopyImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CopyImage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CopyImage where
+  toJSON CopyImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DestinationImageDescription" Data..=)
+              Prelude.<$> destinationImageDescription,
+            Prelude.Just
+              ("SourceImageName" Data..= sourceImageName),
+            Prelude.Just
+              ( "DestinationImageName"
+                  Data..= destinationImageName
+              ),
+            Prelude.Just
+              ("DestinationRegion" Data..= destinationRegion)
+          ]
+      )
+
+instance Data.ToPath CopyImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CopyImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCopyImageResponse' smart constructor.
+data CopyImageResponse = CopyImageResponse'
+  { -- | The name of the destination image.
+    destinationImageName :: 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 'CopyImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'destinationImageName', 'copyImageResponse_destinationImageName' - The name of the destination image.
+--
+-- 'httpStatus', 'copyImageResponse_httpStatus' - The response's http status code.
+newCopyImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CopyImageResponse
+newCopyImageResponse pHttpStatus_ =
+  CopyImageResponse'
+    { destinationImageName =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The name of the destination image.
+copyImageResponse_destinationImageName :: Lens.Lens' CopyImageResponse (Prelude.Maybe Prelude.Text)
+copyImageResponse_destinationImageName = Lens.lens (\CopyImageResponse' {destinationImageName} -> destinationImageName) (\s@CopyImageResponse' {} a -> s {destinationImageName = a} :: CopyImageResponse)
+
+-- | The response's http status code.
+copyImageResponse_httpStatus :: Lens.Lens' CopyImageResponse Prelude.Int
+copyImageResponse_httpStatus = Lens.lens (\CopyImageResponse' {httpStatus} -> httpStatus) (\s@CopyImageResponse' {} a -> s {httpStatus = a} :: CopyImageResponse)
+
+instance Prelude.NFData CopyImageResponse where
+  rnf CopyImageResponse' {..} =
+    Prelude.rnf destinationImageName
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateAppBlock.hs b/gen/Amazonka/AppStream/CreateAppBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateAppBlock.hs
@@ -0,0 +1,255 @@
+{-# 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.AppStream.CreateAppBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an app block.
+--
+-- App blocks are an Amazon AppStream 2.0 resource that stores the details
+-- about the virtual hard disk in an S3 bucket. It also stores the setup
+-- script with details about how to mount the virtual hard disk. The
+-- virtual hard disk includes the application binaries and other files
+-- necessary to launch your applications. Multiple applications can be
+-- assigned to a single app block.
+--
+-- This is only supported for Elastic fleets.
+module Amazonka.AppStream.CreateAppBlock
+  ( -- * Creating a Request
+    CreateAppBlock (..),
+    newCreateAppBlock,
+
+    -- * Request Lenses
+    createAppBlock_description,
+    createAppBlock_displayName,
+    createAppBlock_tags,
+    createAppBlock_name,
+    createAppBlock_sourceS3Location,
+    createAppBlock_setupScriptDetails,
+
+    -- * Destructuring the Response
+    CreateAppBlockResponse (..),
+    newCreateAppBlockResponse,
+
+    -- * Response Lenses
+    createAppBlockResponse_appBlock,
+    createAppBlockResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateAppBlock' smart constructor.
+data CreateAppBlock = CreateAppBlock'
+  { -- | The description of the app block.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The display name of the app block. This is not displayed to the user.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the app block.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the app block.
+    name :: Prelude.Text,
+    -- | The source S3 location of the app block.
+    sourceS3Location :: S3Location,
+    -- | The setup script details of the app block.
+    setupScriptDetails :: ScriptDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAppBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createAppBlock_description' - The description of the app block.
+--
+-- 'displayName', 'createAppBlock_displayName' - The display name of the app block. This is not displayed to the user.
+--
+-- 'tags', 'createAppBlock_tags' - The tags assigned to the app block.
+--
+-- 'name', 'createAppBlock_name' - The name of the app block.
+--
+-- 'sourceS3Location', 'createAppBlock_sourceS3Location' - The source S3 location of the app block.
+--
+-- 'setupScriptDetails', 'createAppBlock_setupScriptDetails' - The setup script details of the app block.
+newCreateAppBlock ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'sourceS3Location'
+  S3Location ->
+  -- | 'setupScriptDetails'
+  ScriptDetails ->
+  CreateAppBlock
+newCreateAppBlock
+  pName_
+  pSourceS3Location_
+  pSetupScriptDetails_ =
+    CreateAppBlock'
+      { description = Prelude.Nothing,
+        displayName = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        name = pName_,
+        sourceS3Location = pSourceS3Location_,
+        setupScriptDetails = pSetupScriptDetails_
+      }
+
+-- | The description of the app block.
+createAppBlock_description :: Lens.Lens' CreateAppBlock (Prelude.Maybe Prelude.Text)
+createAppBlock_description = Lens.lens (\CreateAppBlock' {description} -> description) (\s@CreateAppBlock' {} a -> s {description = a} :: CreateAppBlock)
+
+-- | The display name of the app block. This is not displayed to the user.
+createAppBlock_displayName :: Lens.Lens' CreateAppBlock (Prelude.Maybe Prelude.Text)
+createAppBlock_displayName = Lens.lens (\CreateAppBlock' {displayName} -> displayName) (\s@CreateAppBlock' {} a -> s {displayName = a} :: CreateAppBlock)
+
+-- | The tags assigned to the app block.
+createAppBlock_tags :: Lens.Lens' CreateAppBlock (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createAppBlock_tags = Lens.lens (\CreateAppBlock' {tags} -> tags) (\s@CreateAppBlock' {} a -> s {tags = a} :: CreateAppBlock) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the app block.
+createAppBlock_name :: Lens.Lens' CreateAppBlock Prelude.Text
+createAppBlock_name = Lens.lens (\CreateAppBlock' {name} -> name) (\s@CreateAppBlock' {} a -> s {name = a} :: CreateAppBlock)
+
+-- | The source S3 location of the app block.
+createAppBlock_sourceS3Location :: Lens.Lens' CreateAppBlock S3Location
+createAppBlock_sourceS3Location = Lens.lens (\CreateAppBlock' {sourceS3Location} -> sourceS3Location) (\s@CreateAppBlock' {} a -> s {sourceS3Location = a} :: CreateAppBlock)
+
+-- | The setup script details of the app block.
+createAppBlock_setupScriptDetails :: Lens.Lens' CreateAppBlock ScriptDetails
+createAppBlock_setupScriptDetails = Lens.lens (\CreateAppBlock' {setupScriptDetails} -> setupScriptDetails) (\s@CreateAppBlock' {} a -> s {setupScriptDetails = a} :: CreateAppBlock)
+
+instance Core.AWSRequest CreateAppBlock where
+  type
+    AWSResponse CreateAppBlock =
+      CreateAppBlockResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAppBlockResponse'
+            Prelude.<$> (x Data..?> "AppBlock")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAppBlock where
+  hashWithSalt _salt CreateAppBlock' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` sourceS3Location
+      `Prelude.hashWithSalt` setupScriptDetails
+
+instance Prelude.NFData CreateAppBlock where
+  rnf CreateAppBlock' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sourceS3Location
+      `Prelude.seq` Prelude.rnf setupScriptDetails
+
+instance Data.ToHeaders CreateAppBlock where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateAppBlock" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAppBlock where
+  toJSON CreateAppBlock' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("DisplayName" Data..=) Prelude.<$> displayName,
+            ("Tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("SourceS3Location" Data..= sourceS3Location),
+            Prelude.Just
+              ("SetupScriptDetails" Data..= setupScriptDetails)
+          ]
+      )
+
+instance Data.ToPath CreateAppBlock where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateAppBlock where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAppBlockResponse' smart constructor.
+data CreateAppBlockResponse = CreateAppBlockResponse'
+  { -- | The app block.
+    appBlock :: Prelude.Maybe AppBlock,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAppBlockResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appBlock', 'createAppBlockResponse_appBlock' - The app block.
+--
+-- 'httpStatus', 'createAppBlockResponse_httpStatus' - The response's http status code.
+newCreateAppBlockResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAppBlockResponse
+newCreateAppBlockResponse pHttpStatus_ =
+  CreateAppBlockResponse'
+    { appBlock = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The app block.
+createAppBlockResponse_appBlock :: Lens.Lens' CreateAppBlockResponse (Prelude.Maybe AppBlock)
+createAppBlockResponse_appBlock = Lens.lens (\CreateAppBlockResponse' {appBlock} -> appBlock) (\s@CreateAppBlockResponse' {} a -> s {appBlock = a} :: CreateAppBlockResponse)
+
+-- | The response's http status code.
+createAppBlockResponse_httpStatus :: Lens.Lens' CreateAppBlockResponse Prelude.Int
+createAppBlockResponse_httpStatus = Lens.lens (\CreateAppBlockResponse' {httpStatus} -> httpStatus) (\s@CreateAppBlockResponse' {} a -> s {httpStatus = a} :: CreateAppBlockResponse)
+
+instance Prelude.NFData CreateAppBlockResponse where
+  rnf CreateAppBlockResponse' {..} =
+    Prelude.rnf appBlock
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateApplication.hs b/gen/Amazonka/AppStream/CreateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateApplication.hs
@@ -0,0 +1,337 @@
+{-# 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.AppStream.CreateApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an application.
+--
+-- Applications are an Amazon AppStream 2.0 resource that stores the
+-- details about how to launch applications on Elastic fleet streaming
+-- instances. An application consists of the launch details, icon, and
+-- display name. Applications are associated with an app block that
+-- contains the application binaries and other files. The applications
+-- assigned to an Elastic fleet are the applications users can launch.
+--
+-- This is only supported for Elastic fleets.
+module Amazonka.AppStream.CreateApplication
+  ( -- * Creating a Request
+    CreateApplication (..),
+    newCreateApplication,
+
+    -- * Request Lenses
+    createApplication_description,
+    createApplication_displayName,
+    createApplication_launchParameters,
+    createApplication_tags,
+    createApplication_workingDirectory,
+    createApplication_name,
+    createApplication_iconS3Location,
+    createApplication_launchPath,
+    createApplication_platforms,
+    createApplication_instanceFamilies,
+    createApplication_appBlockArn,
+
+    -- * Destructuring the Response
+    CreateApplicationResponse (..),
+    newCreateApplicationResponse,
+
+    -- * Response Lenses
+    createApplicationResponse_application,
+    createApplicationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateApplication' smart constructor.
+data CreateApplication = CreateApplication'
+  { -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The display name of the application. This name is visible to users in
+    -- the application catalog.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The launch parameters of the application.
+    launchParameters :: Prelude.Maybe Prelude.Text,
+    -- | The tags assigned to the application.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The working directory of the application.
+    workingDirectory :: Prelude.Maybe Prelude.Text,
+    -- | The name of the application. This name is visible to users when display
+    -- name is not specified.
+    name :: Prelude.Text,
+    -- | The location in S3 of the application icon.
+    iconS3Location :: S3Location,
+    -- | The launch path of the application.
+    launchPath :: Prelude.Text,
+    -- | The platforms the application supports. WINDOWS_SERVER_2019 and
+    -- AMAZON_LINUX2 are supported for Elastic fleets.
+    platforms :: [PlatformType],
+    -- | The instance families the application supports. Valid values are
+    -- GENERAL_PURPOSE and GRAPHICS_G4.
+    instanceFamilies :: [Prelude.Text],
+    -- | The app block ARN to which the application should be associated
+    appBlockArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createApplication_description' - The description of the application.
+--
+-- 'displayName', 'createApplication_displayName' - The display name of the application. This name is visible to users in
+-- the application catalog.
+--
+-- 'launchParameters', 'createApplication_launchParameters' - The launch parameters of the application.
+--
+-- 'tags', 'createApplication_tags' - The tags assigned to the application.
+--
+-- 'workingDirectory', 'createApplication_workingDirectory' - The working directory of the application.
+--
+-- 'name', 'createApplication_name' - The name of the application. This name is visible to users when display
+-- name is not specified.
+--
+-- 'iconS3Location', 'createApplication_iconS3Location' - The location in S3 of the application icon.
+--
+-- 'launchPath', 'createApplication_launchPath' - The launch path of the application.
+--
+-- 'platforms', 'createApplication_platforms' - The platforms the application supports. WINDOWS_SERVER_2019 and
+-- AMAZON_LINUX2 are supported for Elastic fleets.
+--
+-- 'instanceFamilies', 'createApplication_instanceFamilies' - The instance families the application supports. Valid values are
+-- GENERAL_PURPOSE and GRAPHICS_G4.
+--
+-- 'appBlockArn', 'createApplication_appBlockArn' - The app block ARN to which the application should be associated
+newCreateApplication ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'iconS3Location'
+  S3Location ->
+  -- | 'launchPath'
+  Prelude.Text ->
+  -- | 'appBlockArn'
+  Prelude.Text ->
+  CreateApplication
+newCreateApplication
+  pName_
+  pIconS3Location_
+  pLaunchPath_
+  pAppBlockArn_ =
+    CreateApplication'
+      { description = Prelude.Nothing,
+        displayName = Prelude.Nothing,
+        launchParameters = Prelude.Nothing,
+        tags = Prelude.Nothing,
+        workingDirectory = Prelude.Nothing,
+        name = pName_,
+        iconS3Location = pIconS3Location_,
+        launchPath = pLaunchPath_,
+        platforms = Prelude.mempty,
+        instanceFamilies = Prelude.mempty,
+        appBlockArn = pAppBlockArn_
+      }
+
+-- | The description of the application.
+createApplication_description :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_description = Lens.lens (\CreateApplication' {description} -> description) (\s@CreateApplication' {} a -> s {description = a} :: CreateApplication)
+
+-- | The display name of the application. This name is visible to users in
+-- the application catalog.
+createApplication_displayName :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_displayName = Lens.lens (\CreateApplication' {displayName} -> displayName) (\s@CreateApplication' {} a -> s {displayName = a} :: CreateApplication)
+
+-- | The launch parameters of the application.
+createApplication_launchParameters :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_launchParameters = Lens.lens (\CreateApplication' {launchParameters} -> launchParameters) (\s@CreateApplication' {} a -> s {launchParameters = a} :: CreateApplication)
+
+-- | The tags assigned to the application.
+createApplication_tags :: Lens.Lens' CreateApplication (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createApplication_tags = Lens.lens (\CreateApplication' {tags} -> tags) (\s@CreateApplication' {} a -> s {tags = a} :: CreateApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The working directory of the application.
+createApplication_workingDirectory :: Lens.Lens' CreateApplication (Prelude.Maybe Prelude.Text)
+createApplication_workingDirectory = Lens.lens (\CreateApplication' {workingDirectory} -> workingDirectory) (\s@CreateApplication' {} a -> s {workingDirectory = a} :: CreateApplication)
+
+-- | The name of the application. This name is visible to users when display
+-- name is not specified.
+createApplication_name :: Lens.Lens' CreateApplication Prelude.Text
+createApplication_name = Lens.lens (\CreateApplication' {name} -> name) (\s@CreateApplication' {} a -> s {name = a} :: CreateApplication)
+
+-- | The location in S3 of the application icon.
+createApplication_iconS3Location :: Lens.Lens' CreateApplication S3Location
+createApplication_iconS3Location = Lens.lens (\CreateApplication' {iconS3Location} -> iconS3Location) (\s@CreateApplication' {} a -> s {iconS3Location = a} :: CreateApplication)
+
+-- | The launch path of the application.
+createApplication_launchPath :: Lens.Lens' CreateApplication Prelude.Text
+createApplication_launchPath = Lens.lens (\CreateApplication' {launchPath} -> launchPath) (\s@CreateApplication' {} a -> s {launchPath = a} :: CreateApplication)
+
+-- | The platforms the application supports. WINDOWS_SERVER_2019 and
+-- AMAZON_LINUX2 are supported for Elastic fleets.
+createApplication_platforms :: Lens.Lens' CreateApplication [PlatformType]
+createApplication_platforms = Lens.lens (\CreateApplication' {platforms} -> platforms) (\s@CreateApplication' {} a -> s {platforms = a} :: CreateApplication) Prelude.. Lens.coerced
+
+-- | The instance families the application supports. Valid values are
+-- GENERAL_PURPOSE and GRAPHICS_G4.
+createApplication_instanceFamilies :: Lens.Lens' CreateApplication [Prelude.Text]
+createApplication_instanceFamilies = Lens.lens (\CreateApplication' {instanceFamilies} -> instanceFamilies) (\s@CreateApplication' {} a -> s {instanceFamilies = a} :: CreateApplication) Prelude.. Lens.coerced
+
+-- | The app block ARN to which the application should be associated
+createApplication_appBlockArn :: Lens.Lens' CreateApplication Prelude.Text
+createApplication_appBlockArn = Lens.lens (\CreateApplication' {appBlockArn} -> appBlockArn) (\s@CreateApplication' {} a -> s {appBlockArn = a} :: CreateApplication)
+
+instance Core.AWSRequest CreateApplication where
+  type
+    AWSResponse CreateApplication =
+      CreateApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateApplicationResponse'
+            Prelude.<$> (x Data..?> "Application")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateApplication where
+  hashWithSalt _salt CreateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` launchParameters
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` workingDirectory
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` iconS3Location
+      `Prelude.hashWithSalt` launchPath
+      `Prelude.hashWithSalt` platforms
+      `Prelude.hashWithSalt` instanceFamilies
+      `Prelude.hashWithSalt` appBlockArn
+
+instance Prelude.NFData CreateApplication where
+  rnf CreateApplication' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf launchParameters
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf workingDirectory
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf iconS3Location
+      `Prelude.seq` Prelude.rnf launchPath
+      `Prelude.seq` Prelude.rnf platforms
+      `Prelude.seq` Prelude.rnf instanceFamilies
+      `Prelude.seq` Prelude.rnf appBlockArn
+
+instance Data.ToHeaders CreateApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateApplication" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateApplication where
+  toJSON CreateApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("DisplayName" Data..=) Prelude.<$> displayName,
+            ("LaunchParameters" Data..=)
+              Prelude.<$> launchParameters,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("WorkingDirectory" Data..=)
+              Prelude.<$> workingDirectory,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("IconS3Location" Data..= iconS3Location),
+            Prelude.Just ("LaunchPath" Data..= launchPath),
+            Prelude.Just ("Platforms" Data..= platforms),
+            Prelude.Just
+              ("InstanceFamilies" Data..= instanceFamilies),
+            Prelude.Just ("AppBlockArn" Data..= appBlockArn)
+          ]
+      )
+
+instance Data.ToPath CreateApplication where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateApplicationResponse' smart constructor.
+data CreateApplicationResponse = CreateApplicationResponse'
+  { application :: Prelude.Maybe Application,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'application', 'createApplicationResponse_application' - Undocumented member.
+--
+-- 'httpStatus', 'createApplicationResponse_httpStatus' - The response's http status code.
+newCreateApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateApplicationResponse
+newCreateApplicationResponse pHttpStatus_ =
+  CreateApplicationResponse'
+    { application =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+createApplicationResponse_application :: Lens.Lens' CreateApplicationResponse (Prelude.Maybe Application)
+createApplicationResponse_application = Lens.lens (\CreateApplicationResponse' {application} -> application) (\s@CreateApplicationResponse' {} a -> s {application = a} :: CreateApplicationResponse)
+
+-- | The response's http status code.
+createApplicationResponse_httpStatus :: Lens.Lens' CreateApplicationResponse Prelude.Int
+createApplicationResponse_httpStatus = Lens.lens (\CreateApplicationResponse' {httpStatus} -> httpStatus) (\s@CreateApplicationResponse' {} a -> s {httpStatus = a} :: CreateApplicationResponse)
+
+instance Prelude.NFData CreateApplicationResponse where
+  rnf CreateApplicationResponse' {..} =
+    Prelude.rnf application
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateDirectoryConfig.hs b/gen/Amazonka/AppStream/CreateDirectoryConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateDirectoryConfig.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.AppStream.CreateDirectoryConfig
+-- 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 Directory Config object in AppStream 2.0. This object includes
+-- the configuration information required to join fleets and image builders
+-- to Microsoft Active Directory domains.
+module Amazonka.AppStream.CreateDirectoryConfig
+  ( -- * Creating a Request
+    CreateDirectoryConfig (..),
+    newCreateDirectoryConfig,
+
+    -- * Request Lenses
+    createDirectoryConfig_certificateBasedAuthProperties,
+    createDirectoryConfig_serviceAccountCredentials,
+    createDirectoryConfig_directoryName,
+    createDirectoryConfig_organizationalUnitDistinguishedNames,
+
+    -- * Destructuring the Response
+    CreateDirectoryConfigResponse (..),
+    newCreateDirectoryConfigResponse,
+
+    -- * Response Lenses
+    createDirectoryConfigResponse_directoryConfig,
+    createDirectoryConfigResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateDirectoryConfig' smart constructor.
+data CreateDirectoryConfig = CreateDirectoryConfig'
+  { -- | The certificate-based authentication properties used to authenticate
+    -- SAML 2.0 Identity Provider (IdP) user identities to Active Directory
+    -- domain-joined streaming instances. Fallback is turned on by default when
+    -- certificate-based authentication is __Enabled__ . Fallback allows users
+    -- to log in using their AD domain password if certificate-based
+    -- authentication is unsuccessful, or to unlock a desktop lock screen.
+    -- __Enabled_no_directory_login_fallback__ enables certificate-based
+    -- authentication, but does not allow users to log in using their AD domain
+    -- password. Users will be disconnected to re-authenticate using
+    -- certificates.
+    certificateBasedAuthProperties :: Prelude.Maybe CertificateBasedAuthProperties,
+    -- | The credentials for the service account used by the fleet or image
+    -- builder to connect to the directory.
+    serviceAccountCredentials :: Prelude.Maybe ServiceAccountCredentials,
+    -- | The fully qualified name of the directory (for example,
+    -- corp.example.com).
+    directoryName :: Prelude.Text,
+    -- | The distinguished names of the organizational units for computer
+    -- accounts.
+    organizationalUnitDistinguishedNames :: [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDirectoryConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateBasedAuthProperties', 'createDirectoryConfig_certificateBasedAuthProperties' - The certificate-based authentication properties used to authenticate
+-- SAML 2.0 Identity Provider (IdP) user identities to Active Directory
+-- domain-joined streaming instances. Fallback is turned on by default when
+-- certificate-based authentication is __Enabled__ . Fallback allows users
+-- to log in using their AD domain password if certificate-based
+-- authentication is unsuccessful, or to unlock a desktop lock screen.
+-- __Enabled_no_directory_login_fallback__ enables certificate-based
+-- authentication, but does not allow users to log in using their AD domain
+-- password. Users will be disconnected to re-authenticate using
+-- certificates.
+--
+-- 'serviceAccountCredentials', 'createDirectoryConfig_serviceAccountCredentials' - The credentials for the service account used by the fleet or image
+-- builder to connect to the directory.
+--
+-- 'directoryName', 'createDirectoryConfig_directoryName' - The fully qualified name of the directory (for example,
+-- corp.example.com).
+--
+-- 'organizationalUnitDistinguishedNames', 'createDirectoryConfig_organizationalUnitDistinguishedNames' - The distinguished names of the organizational units for computer
+-- accounts.
+newCreateDirectoryConfig ::
+  -- | 'directoryName'
+  Prelude.Text ->
+  CreateDirectoryConfig
+newCreateDirectoryConfig pDirectoryName_ =
+  CreateDirectoryConfig'
+    { certificateBasedAuthProperties =
+        Prelude.Nothing,
+      serviceAccountCredentials = Prelude.Nothing,
+      directoryName = pDirectoryName_,
+      organizationalUnitDistinguishedNames =
+        Prelude.mempty
+    }
+
+-- | The certificate-based authentication properties used to authenticate
+-- SAML 2.0 Identity Provider (IdP) user identities to Active Directory
+-- domain-joined streaming instances. Fallback is turned on by default when
+-- certificate-based authentication is __Enabled__ . Fallback allows users
+-- to log in using their AD domain password if certificate-based
+-- authentication is unsuccessful, or to unlock a desktop lock screen.
+-- __Enabled_no_directory_login_fallback__ enables certificate-based
+-- authentication, but does not allow users to log in using their AD domain
+-- password. Users will be disconnected to re-authenticate using
+-- certificates.
+createDirectoryConfig_certificateBasedAuthProperties :: Lens.Lens' CreateDirectoryConfig (Prelude.Maybe CertificateBasedAuthProperties)
+createDirectoryConfig_certificateBasedAuthProperties = Lens.lens (\CreateDirectoryConfig' {certificateBasedAuthProperties} -> certificateBasedAuthProperties) (\s@CreateDirectoryConfig' {} a -> s {certificateBasedAuthProperties = a} :: CreateDirectoryConfig)
+
+-- | The credentials for the service account used by the fleet or image
+-- builder to connect to the directory.
+createDirectoryConfig_serviceAccountCredentials :: Lens.Lens' CreateDirectoryConfig (Prelude.Maybe ServiceAccountCredentials)
+createDirectoryConfig_serviceAccountCredentials = Lens.lens (\CreateDirectoryConfig' {serviceAccountCredentials} -> serviceAccountCredentials) (\s@CreateDirectoryConfig' {} a -> s {serviceAccountCredentials = a} :: CreateDirectoryConfig)
+
+-- | The fully qualified name of the directory (for example,
+-- corp.example.com).
+createDirectoryConfig_directoryName :: Lens.Lens' CreateDirectoryConfig Prelude.Text
+createDirectoryConfig_directoryName = Lens.lens (\CreateDirectoryConfig' {directoryName} -> directoryName) (\s@CreateDirectoryConfig' {} a -> s {directoryName = a} :: CreateDirectoryConfig)
+
+-- | The distinguished names of the organizational units for computer
+-- accounts.
+createDirectoryConfig_organizationalUnitDistinguishedNames :: Lens.Lens' CreateDirectoryConfig [Prelude.Text]
+createDirectoryConfig_organizationalUnitDistinguishedNames = Lens.lens (\CreateDirectoryConfig' {organizationalUnitDistinguishedNames} -> organizationalUnitDistinguishedNames) (\s@CreateDirectoryConfig' {} a -> s {organizationalUnitDistinguishedNames = a} :: CreateDirectoryConfig) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateDirectoryConfig where
+  type
+    AWSResponse CreateDirectoryConfig =
+      CreateDirectoryConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateDirectoryConfigResponse'
+            Prelude.<$> (x Data..?> "DirectoryConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateDirectoryConfig where
+  hashWithSalt _salt CreateDirectoryConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateBasedAuthProperties
+      `Prelude.hashWithSalt` serviceAccountCredentials
+      `Prelude.hashWithSalt` directoryName
+      `Prelude.hashWithSalt` organizationalUnitDistinguishedNames
+
+instance Prelude.NFData CreateDirectoryConfig where
+  rnf CreateDirectoryConfig' {..} =
+    Prelude.rnf certificateBasedAuthProperties
+      `Prelude.seq` Prelude.rnf serviceAccountCredentials
+      `Prelude.seq` Prelude.rnf directoryName
+      `Prelude.seq` Prelude.rnf organizationalUnitDistinguishedNames
+
+instance Data.ToHeaders CreateDirectoryConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateDirectoryConfig" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateDirectoryConfig where
+  toJSON CreateDirectoryConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CertificateBasedAuthProperties" Data..=)
+              Prelude.<$> certificateBasedAuthProperties,
+            ("ServiceAccountCredentials" Data..=)
+              Prelude.<$> serviceAccountCredentials,
+            Prelude.Just ("DirectoryName" Data..= directoryName),
+            Prelude.Just
+              ( "OrganizationalUnitDistinguishedNames"
+                  Data..= organizationalUnitDistinguishedNames
+              )
+          ]
+      )
+
+instance Data.ToPath CreateDirectoryConfig where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDirectoryConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateDirectoryConfigResponse' smart constructor.
+data CreateDirectoryConfigResponse = CreateDirectoryConfigResponse'
+  { -- | Information about the directory configuration.
+    directoryConfig :: Prelude.Maybe DirectoryConfig,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDirectoryConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryConfig', 'createDirectoryConfigResponse_directoryConfig' - Information about the directory configuration.
+--
+-- 'httpStatus', 'createDirectoryConfigResponse_httpStatus' - The response's http status code.
+newCreateDirectoryConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateDirectoryConfigResponse
+newCreateDirectoryConfigResponse pHttpStatus_ =
+  CreateDirectoryConfigResponse'
+    { directoryConfig =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the directory configuration.
+createDirectoryConfigResponse_directoryConfig :: Lens.Lens' CreateDirectoryConfigResponse (Prelude.Maybe DirectoryConfig)
+createDirectoryConfigResponse_directoryConfig = Lens.lens (\CreateDirectoryConfigResponse' {directoryConfig} -> directoryConfig) (\s@CreateDirectoryConfigResponse' {} a -> s {directoryConfig = a} :: CreateDirectoryConfigResponse)
+
+-- | The response's http status code.
+createDirectoryConfigResponse_httpStatus :: Lens.Lens' CreateDirectoryConfigResponse Prelude.Int
+createDirectoryConfigResponse_httpStatus = Lens.lens (\CreateDirectoryConfigResponse' {httpStatus} -> httpStatus) (\s@CreateDirectoryConfigResponse' {} a -> s {httpStatus = a} :: CreateDirectoryConfigResponse)
+
+instance Prelude.NFData CreateDirectoryConfigResponse where
+  rnf CreateDirectoryConfigResponse' {..} =
+    Prelude.rnf directoryConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateEntitlement.hs b/gen/Amazonka/AppStream/CreateEntitlement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateEntitlement.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.AppStream.CreateEntitlement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new entitlement. Entitlements control access to specific
+-- applications within a stack, based on user attributes. Entitlements
+-- apply to SAML 2.0 federated user identities. Amazon AppStream 2.0 user
+-- pool and streaming URL users are entitled to all applications in a
+-- stack. Entitlements don\'t apply to the desktop stream view application,
+-- or to applications managed by a dynamic app provider using the Dynamic
+-- Application Framework.
+module Amazonka.AppStream.CreateEntitlement
+  ( -- * Creating a Request
+    CreateEntitlement (..),
+    newCreateEntitlement,
+
+    -- * Request Lenses
+    createEntitlement_description,
+    createEntitlement_name,
+    createEntitlement_stackName,
+    createEntitlement_appVisibility,
+    createEntitlement_attributes,
+
+    -- * Destructuring the Response
+    CreateEntitlementResponse (..),
+    newCreateEntitlementResponse,
+
+    -- * Response Lenses
+    createEntitlementResponse_entitlement,
+    createEntitlementResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateEntitlement' smart constructor.
+data CreateEntitlement = CreateEntitlement'
+  { -- | The description of the entitlement.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the entitlement.
+    name :: Prelude.Text,
+    -- | The name of the stack with which the entitlement is associated.
+    stackName :: Prelude.Text,
+    -- | Specifies whether all or selected apps are entitled.
+    appVisibility :: AppVisibility,
+    -- | The attributes of the entitlement.
+    attributes :: Prelude.NonEmpty EntitlementAttribute
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEntitlement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createEntitlement_description' - The description of the entitlement.
+--
+-- 'name', 'createEntitlement_name' - The name of the entitlement.
+--
+-- 'stackName', 'createEntitlement_stackName' - The name of the stack with which the entitlement is associated.
+--
+-- 'appVisibility', 'createEntitlement_appVisibility' - Specifies whether all or selected apps are entitled.
+--
+-- 'attributes', 'createEntitlement_attributes' - The attributes of the entitlement.
+newCreateEntitlement ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'stackName'
+  Prelude.Text ->
+  -- | 'appVisibility'
+  AppVisibility ->
+  -- | 'attributes'
+  Prelude.NonEmpty EntitlementAttribute ->
+  CreateEntitlement
+newCreateEntitlement
+  pName_
+  pStackName_
+  pAppVisibility_
+  pAttributes_ =
+    CreateEntitlement'
+      { description = Prelude.Nothing,
+        name = pName_,
+        stackName = pStackName_,
+        appVisibility = pAppVisibility_,
+        attributes = Lens.coerced Lens.# pAttributes_
+      }
+
+-- | The description of the entitlement.
+createEntitlement_description :: Lens.Lens' CreateEntitlement (Prelude.Maybe Prelude.Text)
+createEntitlement_description = Lens.lens (\CreateEntitlement' {description} -> description) (\s@CreateEntitlement' {} a -> s {description = a} :: CreateEntitlement)
+
+-- | The name of the entitlement.
+createEntitlement_name :: Lens.Lens' CreateEntitlement Prelude.Text
+createEntitlement_name = Lens.lens (\CreateEntitlement' {name} -> name) (\s@CreateEntitlement' {} a -> s {name = a} :: CreateEntitlement)
+
+-- | The name of the stack with which the entitlement is associated.
+createEntitlement_stackName :: Lens.Lens' CreateEntitlement Prelude.Text
+createEntitlement_stackName = Lens.lens (\CreateEntitlement' {stackName} -> stackName) (\s@CreateEntitlement' {} a -> s {stackName = a} :: CreateEntitlement)
+
+-- | Specifies whether all or selected apps are entitled.
+createEntitlement_appVisibility :: Lens.Lens' CreateEntitlement AppVisibility
+createEntitlement_appVisibility = Lens.lens (\CreateEntitlement' {appVisibility} -> appVisibility) (\s@CreateEntitlement' {} a -> s {appVisibility = a} :: CreateEntitlement)
+
+-- | The attributes of the entitlement.
+createEntitlement_attributes :: Lens.Lens' CreateEntitlement (Prelude.NonEmpty EntitlementAttribute)
+createEntitlement_attributes = Lens.lens (\CreateEntitlement' {attributes} -> attributes) (\s@CreateEntitlement' {} a -> s {attributes = a} :: CreateEntitlement) Prelude.. Lens.coerced
+
+instance Core.AWSRequest CreateEntitlement where
+  type
+    AWSResponse CreateEntitlement =
+      CreateEntitlementResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateEntitlementResponse'
+            Prelude.<$> (x Data..?> "Entitlement")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateEntitlement where
+  hashWithSalt _salt CreateEntitlement' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` stackName
+      `Prelude.hashWithSalt` appVisibility
+      `Prelude.hashWithSalt` attributes
+
+instance Prelude.NFData CreateEntitlement where
+  rnf CreateEntitlement' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf appVisibility
+      `Prelude.seq` Prelude.rnf attributes
+
+instance Data.ToHeaders CreateEntitlement where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateEntitlement" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEntitlement where
+  toJSON CreateEntitlement' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("StackName" Data..= stackName),
+            Prelude.Just ("AppVisibility" Data..= appVisibility),
+            Prelude.Just ("Attributes" Data..= attributes)
+          ]
+      )
+
+instance Data.ToPath CreateEntitlement where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateEntitlement where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateEntitlementResponse' smart constructor.
+data CreateEntitlementResponse = CreateEntitlementResponse'
+  { -- | The entitlement.
+    entitlement :: Prelude.Maybe Entitlement,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEntitlementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entitlement', 'createEntitlementResponse_entitlement' - The entitlement.
+--
+-- 'httpStatus', 'createEntitlementResponse_httpStatus' - The response's http status code.
+newCreateEntitlementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateEntitlementResponse
+newCreateEntitlementResponse pHttpStatus_ =
+  CreateEntitlementResponse'
+    { entitlement =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The entitlement.
+createEntitlementResponse_entitlement :: Lens.Lens' CreateEntitlementResponse (Prelude.Maybe Entitlement)
+createEntitlementResponse_entitlement = Lens.lens (\CreateEntitlementResponse' {entitlement} -> entitlement) (\s@CreateEntitlementResponse' {} a -> s {entitlement = a} :: CreateEntitlementResponse)
+
+-- | The response's http status code.
+createEntitlementResponse_httpStatus :: Lens.Lens' CreateEntitlementResponse Prelude.Int
+createEntitlementResponse_httpStatus = Lens.lens (\CreateEntitlementResponse' {httpStatus} -> httpStatus) (\s@CreateEntitlementResponse' {} a -> s {httpStatus = a} :: CreateEntitlementResponse)
+
+instance Prelude.NFData CreateEntitlementResponse where
+  rnf CreateEntitlementResponse' {..} =
+    Prelude.rnf entitlement
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateFleet.hs b/gen/Amazonka/AppStream/CreateFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateFleet.hs
@@ -0,0 +1,940 @@
+{-# 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.AppStream.CreateFleet
+-- 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 fleet. A fleet consists of streaming instances that your users
+-- access for their applications and desktops.
+module Amazonka.AppStream.CreateFleet
+  ( -- * Creating a Request
+    CreateFleet (..),
+    newCreateFleet,
+
+    -- * Request Lenses
+    createFleet_computeCapacity,
+    createFleet_description,
+    createFleet_disconnectTimeoutInSeconds,
+    createFleet_displayName,
+    createFleet_domainJoinInfo,
+    createFleet_enableDefaultInternetAccess,
+    createFleet_fleetType,
+    createFleet_iamRoleArn,
+    createFleet_idleDisconnectTimeoutInSeconds,
+    createFleet_imageArn,
+    createFleet_imageName,
+    createFleet_maxConcurrentSessions,
+    createFleet_maxUserDurationInSeconds,
+    createFleet_platform,
+    createFleet_sessionScriptS3Location,
+    createFleet_streamView,
+    createFleet_tags,
+    createFleet_usbDeviceFilterStrings,
+    createFleet_vpcConfig,
+    createFleet_name,
+    createFleet_instanceType,
+
+    -- * Destructuring the Response
+    CreateFleetResponse (..),
+    newCreateFleetResponse,
+
+    -- * Response Lenses
+    createFleetResponse_fleet,
+    createFleetResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateFleet' smart constructor.
+data CreateFleet = CreateFleet'
+  { -- | The desired capacity for the fleet. This is not allowed for Elastic
+    -- fleets. For Elastic fleets, specify MaxConcurrentSessions instead.
+    computeCapacity :: Prelude.Maybe ComputeCapacity,
+    -- | The description to display.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time that a streaming session remains active after users
+    -- disconnect. If users try to reconnect to the streaming session after a
+    -- disconnection or network interruption within this time interval, they
+    -- are connected to their previous session. Otherwise, they are connected
+    -- to a new session with a new streaming instance.
+    --
+    -- Specify a value between 60 and 360000.
+    disconnectTimeoutInSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The fleet name to display.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the directory and organizational unit (OU) to use to join
+    -- the fleet to a Microsoft Active Directory domain. This is not allowed
+    -- for Elastic fleets.
+    domainJoinInfo :: Prelude.Maybe DomainJoinInfo,
+    -- | Enables or disables default internet access for the fleet.
+    enableDefaultInternetAccess :: Prelude.Maybe Prelude.Bool,
+    -- | The fleet type.
+    --
+    -- [ALWAYS_ON]
+    --     Provides users with instant-on access to their apps. You are charged
+    --     for all running instances in your fleet, even if no users are
+    --     streaming apps.
+    --
+    -- [ON_DEMAND]
+    --     Provide users with access to applications after they connect, which
+    --     takes one to two minutes. You are charged for instance streaming
+    --     when users are connected and a small hourly fee for instances that
+    --     are not streaming apps.
+    fleetType :: Prelude.Maybe FleetType,
+    -- | The Amazon Resource Name (ARN) of the IAM role to apply to the fleet. To
+    -- assume a role, a fleet instance calls the AWS Security Token Service
+    -- (STS) @AssumeRole@ API operation and passes the ARN of the role to use.
+    -- The operation creates a new session with temporary credentials.
+    -- AppStream 2.0 retrieves the temporary credentials and creates the
+    -- __appstream_machine_role__ credential profile on the instance.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+    -- in the /Amazon AppStream 2.0 Administration Guide/.
+    iamRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time that users can be idle (inactive) before they are
+    -- disconnected from their streaming session and the
+    -- @DisconnectTimeoutInSeconds@ time interval begins. Users are notified
+    -- before they are disconnected due to inactivity. If they try to reconnect
+    -- to the streaming session before the time interval specified in
+    -- @DisconnectTimeoutInSeconds@ elapses, they are connected to their
+    -- previous session. Users are considered idle when they stop providing
+    -- keyboard or mouse input during their streaming session. File uploads and
+    -- downloads, audio in, audio out, and pixels changing do not qualify as
+    -- user activity. If users continue to be idle after the time interval in
+    -- @IdleDisconnectTimeoutInSeconds@ elapses, they are disconnected.
+    --
+    -- To prevent users from being disconnected due to inactivity, specify a
+    -- value of 0. Otherwise, specify a value between 60 and 3600. The default
+    -- value is 0.
+    --
+    -- If you enable this feature, we recommend that you specify a value that
+    -- corresponds exactly to a whole number of minutes (for example, 60, 120,
+    -- and 180). If you don\'t do this, the value is rounded to the nearest
+    -- minute. For example, if you specify a value of 70, users are
+    -- disconnected after 1 minute of inactivity. If you specify a value that
+    -- is at the midpoint between two different minutes, the value is rounded
+    -- up. For example, if you specify a value of 90, users are disconnected
+    -- after 2 minutes of inactivity.
+    idleDisconnectTimeoutInSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The ARN of the public, private, or shared image to use.
+    imageArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image used to create the fleet.
+    imageName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum concurrent sessions of the Elastic fleet. This is required
+    -- for Elastic fleets, and not allowed for other fleet types.
+    maxConcurrentSessions :: Prelude.Maybe Prelude.Int,
+    -- | The maximum amount of time that a streaming session can remain active,
+    -- in seconds. If users are still connected to a streaming instance five
+    -- minutes before this limit is reached, they are prompted to save any open
+    -- documents before being disconnected. After this time elapses, the
+    -- instance is terminated and replaced by a new instance.
+    --
+    -- Specify a value between 600 and 360000.
+    maxUserDurationInSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The fleet platform. WINDOWS_SERVER_2019 and AMAZON_LINUX2 are supported
+    -- for Elastic fleets.
+    platform :: Prelude.Maybe PlatformType,
+    -- | The S3 location of the session scripts configuration zip file. This only
+    -- applies to Elastic fleets.
+    sessionScriptS3Location :: Prelude.Maybe S3Location,
+    -- | The AppStream 2.0 view that is displayed to your users when they stream
+    -- from the fleet. When @APP@ is specified, only the windows of
+    -- applications opened by users display. When @DESKTOP@ is specified, the
+    -- standard desktop that is provided by the operating system displays.
+    --
+    -- The default value is @APP@.
+    streamView :: Prelude.Maybe StreamView,
+    -- | The tags to associate with the fleet. A tag is a key-value pair, and the
+    -- value is optional. For example, Environment=Test. If you do not specify
+    -- a value, Environment=.
+    --
+    -- If you do not specify a value, the value is set to an empty string.
+    --
+    -- Generally allowed characters are: letters, numbers, and spaces
+    -- representable in UTF-8, and the following special characters:
+    --
+    -- _ . : \/ = + \\ - \@
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+    -- in the /Amazon AppStream 2.0 Administration Guide/.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The USB device filter strings that specify which USB devices a user can
+    -- redirect to the fleet streaming session, when using the Windows native
+    -- client. This is allowed but not required for Elastic fleets.
+    usbDeviceFilterStrings :: Prelude.Maybe [Prelude.Text],
+    -- | The VPC configuration for the fleet. This is required for Elastic
+    -- fleets, but not required for other fleet types. Elastic fleets require
+    -- that you specify at least two subnets in different availability zones.
+    vpcConfig :: Prelude.Maybe VpcConfig,
+    -- | A unique name for the fleet.
+    name :: Prelude.Text,
+    -- | The instance type to use when launching fleet instances. The following
+    -- instance types are available:
+    --
+    -- -   stream.standard.small
+    --
+    -- -   stream.standard.medium
+    --
+    -- -   stream.standard.large
+    --
+    -- -   stream.standard.xlarge
+    --
+    -- -   stream.standard.2xlarge
+    --
+    -- -   stream.compute.large
+    --
+    -- -   stream.compute.xlarge
+    --
+    -- -   stream.compute.2xlarge
+    --
+    -- -   stream.compute.4xlarge
+    --
+    -- -   stream.compute.8xlarge
+    --
+    -- -   stream.memory.large
+    --
+    -- -   stream.memory.xlarge
+    --
+    -- -   stream.memory.2xlarge
+    --
+    -- -   stream.memory.4xlarge
+    --
+    -- -   stream.memory.8xlarge
+    --
+    -- -   stream.memory.z1d.large
+    --
+    -- -   stream.memory.z1d.xlarge
+    --
+    -- -   stream.memory.z1d.2xlarge
+    --
+    -- -   stream.memory.z1d.3xlarge
+    --
+    -- -   stream.memory.z1d.6xlarge
+    --
+    -- -   stream.memory.z1d.12xlarge
+    --
+    -- -   stream.graphics-design.large
+    --
+    -- -   stream.graphics-design.xlarge
+    --
+    -- -   stream.graphics-design.2xlarge
+    --
+    -- -   stream.graphics-design.4xlarge
+    --
+    -- -   stream.graphics-desktop.2xlarge
+    --
+    -- -   stream.graphics.g4dn.xlarge
+    --
+    -- -   stream.graphics.g4dn.2xlarge
+    --
+    -- -   stream.graphics.g4dn.4xlarge
+    --
+    -- -   stream.graphics.g4dn.8xlarge
+    --
+    -- -   stream.graphics.g4dn.12xlarge
+    --
+    -- -   stream.graphics.g4dn.16xlarge
+    --
+    -- -   stream.graphics-pro.4xlarge
+    --
+    -- -   stream.graphics-pro.8xlarge
+    --
+    -- -   stream.graphics-pro.16xlarge
+    --
+    -- The following instance types are available for Elastic fleets:
+    --
+    -- -   stream.standard.small
+    --
+    -- -   stream.standard.medium
+    --
+    -- -   stream.standard.large
+    --
+    -- -   stream.standard.xlarge
+    --
+    -- -   stream.standard.2xlarge
+    instanceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'computeCapacity', 'createFleet_computeCapacity' - The desired capacity for the fleet. This is not allowed for Elastic
+-- fleets. For Elastic fleets, specify MaxConcurrentSessions instead.
+--
+-- 'description', 'createFleet_description' - The description to display.
+--
+-- 'disconnectTimeoutInSeconds', 'createFleet_disconnectTimeoutInSeconds' - The amount of time that a streaming session remains active after users
+-- disconnect. If users try to reconnect to the streaming session after a
+-- disconnection or network interruption within this time interval, they
+-- are connected to their previous session. Otherwise, they are connected
+-- to a new session with a new streaming instance.
+--
+-- Specify a value between 60 and 360000.
+--
+-- 'displayName', 'createFleet_displayName' - The fleet name to display.
+--
+-- 'domainJoinInfo', 'createFleet_domainJoinInfo' - The name of the directory and organizational unit (OU) to use to join
+-- the fleet to a Microsoft Active Directory domain. This is not allowed
+-- for Elastic fleets.
+--
+-- 'enableDefaultInternetAccess', 'createFleet_enableDefaultInternetAccess' - Enables or disables default internet access for the fleet.
+--
+-- 'fleetType', 'createFleet_fleetType' - The fleet type.
+--
+-- [ALWAYS_ON]
+--     Provides users with instant-on access to their apps. You are charged
+--     for all running instances in your fleet, even if no users are
+--     streaming apps.
+--
+-- [ON_DEMAND]
+--     Provide users with access to applications after they connect, which
+--     takes one to two minutes. You are charged for instance streaming
+--     when users are connected and a small hourly fee for instances that
+--     are not streaming apps.
+--
+-- 'iamRoleArn', 'createFleet_iamRoleArn' - The Amazon Resource Name (ARN) of the IAM role to apply to the fleet. To
+-- assume a role, a fleet instance calls the AWS Security Token Service
+-- (STS) @AssumeRole@ API operation and passes the ARN of the role to use.
+-- The operation creates a new session with temporary credentials.
+-- AppStream 2.0 retrieves the temporary credentials and creates the
+-- __appstream_machine_role__ credential profile on the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- 'idleDisconnectTimeoutInSeconds', 'createFleet_idleDisconnectTimeoutInSeconds' - The amount of time that users can be idle (inactive) before they are
+-- disconnected from their streaming session and the
+-- @DisconnectTimeoutInSeconds@ time interval begins. Users are notified
+-- before they are disconnected due to inactivity. If they try to reconnect
+-- to the streaming session before the time interval specified in
+-- @DisconnectTimeoutInSeconds@ elapses, they are connected to their
+-- previous session. Users are considered idle when they stop providing
+-- keyboard or mouse input during their streaming session. File uploads and
+-- downloads, audio in, audio out, and pixels changing do not qualify as
+-- user activity. If users continue to be idle after the time interval in
+-- @IdleDisconnectTimeoutInSeconds@ elapses, they are disconnected.
+--
+-- To prevent users from being disconnected due to inactivity, specify a
+-- value of 0. Otherwise, specify a value between 60 and 3600. The default
+-- value is 0.
+--
+-- If you enable this feature, we recommend that you specify a value that
+-- corresponds exactly to a whole number of minutes (for example, 60, 120,
+-- and 180). If you don\'t do this, the value is rounded to the nearest
+-- minute. For example, if you specify a value of 70, users are
+-- disconnected after 1 minute of inactivity. If you specify a value that
+-- is at the midpoint between two different minutes, the value is rounded
+-- up. For example, if you specify a value of 90, users are disconnected
+-- after 2 minutes of inactivity.
+--
+-- 'imageArn', 'createFleet_imageArn' - The ARN of the public, private, or shared image to use.
+--
+-- 'imageName', 'createFleet_imageName' - The name of the image used to create the fleet.
+--
+-- 'maxConcurrentSessions', 'createFleet_maxConcurrentSessions' - The maximum concurrent sessions of the Elastic fleet. This is required
+-- for Elastic fleets, and not allowed for other fleet types.
+--
+-- 'maxUserDurationInSeconds', 'createFleet_maxUserDurationInSeconds' - The maximum amount of time that a streaming session can remain active,
+-- in seconds. If users are still connected to a streaming instance five
+-- minutes before this limit is reached, they are prompted to save any open
+-- documents before being disconnected. After this time elapses, the
+-- instance is terminated and replaced by a new instance.
+--
+-- Specify a value between 600 and 360000.
+--
+-- 'platform', 'createFleet_platform' - The fleet platform. WINDOWS_SERVER_2019 and AMAZON_LINUX2 are supported
+-- for Elastic fleets.
+--
+-- 'sessionScriptS3Location', 'createFleet_sessionScriptS3Location' - The S3 location of the session scripts configuration zip file. This only
+-- applies to Elastic fleets.
+--
+-- 'streamView', 'createFleet_streamView' - The AppStream 2.0 view that is displayed to your users when they stream
+-- from the fleet. When @APP@ is specified, only the windows of
+-- applications opened by users display. When @DESKTOP@ is specified, the
+-- standard desktop that is provided by the operating system displays.
+--
+-- The default value is @APP@.
+--
+-- 'tags', 'createFleet_tags' - The tags to associate with the fleet. A tag is a key-value pair, and the
+-- value is optional. For example, Environment=Test. If you do not specify
+-- a value, Environment=.
+--
+-- If you do not specify a value, the value is set to an empty string.
+--
+-- Generally allowed characters are: letters, numbers, and spaces
+-- representable in UTF-8, and the following special characters:
+--
+-- _ . : \/ = + \\ - \@
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- 'usbDeviceFilterStrings', 'createFleet_usbDeviceFilterStrings' - The USB device filter strings that specify which USB devices a user can
+-- redirect to the fleet streaming session, when using the Windows native
+-- client. This is allowed but not required for Elastic fleets.
+--
+-- 'vpcConfig', 'createFleet_vpcConfig' - The VPC configuration for the fleet. This is required for Elastic
+-- fleets, but not required for other fleet types. Elastic fleets require
+-- that you specify at least two subnets in different availability zones.
+--
+-- 'name', 'createFleet_name' - A unique name for the fleet.
+--
+-- 'instanceType', 'createFleet_instanceType' - The instance type to use when launching fleet instances. The following
+-- instance types are available:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.standard.xlarge
+--
+-- -   stream.standard.2xlarge
+--
+-- -   stream.compute.large
+--
+-- -   stream.compute.xlarge
+--
+-- -   stream.compute.2xlarge
+--
+-- -   stream.compute.4xlarge
+--
+-- -   stream.compute.8xlarge
+--
+-- -   stream.memory.large
+--
+-- -   stream.memory.xlarge
+--
+-- -   stream.memory.2xlarge
+--
+-- -   stream.memory.4xlarge
+--
+-- -   stream.memory.8xlarge
+--
+-- -   stream.memory.z1d.large
+--
+-- -   stream.memory.z1d.xlarge
+--
+-- -   stream.memory.z1d.2xlarge
+--
+-- -   stream.memory.z1d.3xlarge
+--
+-- -   stream.memory.z1d.6xlarge
+--
+-- -   stream.memory.z1d.12xlarge
+--
+-- -   stream.graphics-design.large
+--
+-- -   stream.graphics-design.xlarge
+--
+-- -   stream.graphics-design.2xlarge
+--
+-- -   stream.graphics-design.4xlarge
+--
+-- -   stream.graphics-desktop.2xlarge
+--
+-- -   stream.graphics.g4dn.xlarge
+--
+-- -   stream.graphics.g4dn.2xlarge
+--
+-- -   stream.graphics.g4dn.4xlarge
+--
+-- -   stream.graphics.g4dn.8xlarge
+--
+-- -   stream.graphics.g4dn.12xlarge
+--
+-- -   stream.graphics.g4dn.16xlarge
+--
+-- -   stream.graphics-pro.4xlarge
+--
+-- -   stream.graphics-pro.8xlarge
+--
+-- -   stream.graphics-pro.16xlarge
+--
+-- The following instance types are available for Elastic fleets:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.standard.xlarge
+--
+-- -   stream.standard.2xlarge
+newCreateFleet ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'instanceType'
+  Prelude.Text ->
+  CreateFleet
+newCreateFleet pName_ pInstanceType_ =
+  CreateFleet'
+    { computeCapacity = Prelude.Nothing,
+      description = Prelude.Nothing,
+      disconnectTimeoutInSeconds = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      domainJoinInfo = Prelude.Nothing,
+      enableDefaultInternetAccess = Prelude.Nothing,
+      fleetType = Prelude.Nothing,
+      iamRoleArn = Prelude.Nothing,
+      idleDisconnectTimeoutInSeconds = Prelude.Nothing,
+      imageArn = Prelude.Nothing,
+      imageName = Prelude.Nothing,
+      maxConcurrentSessions = Prelude.Nothing,
+      maxUserDurationInSeconds = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      sessionScriptS3Location = Prelude.Nothing,
+      streamView = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      usbDeviceFilterStrings = Prelude.Nothing,
+      vpcConfig = Prelude.Nothing,
+      name = pName_,
+      instanceType = pInstanceType_
+    }
+
+-- | The desired capacity for the fleet. This is not allowed for Elastic
+-- fleets. For Elastic fleets, specify MaxConcurrentSessions instead.
+createFleet_computeCapacity :: Lens.Lens' CreateFleet (Prelude.Maybe ComputeCapacity)
+createFleet_computeCapacity = Lens.lens (\CreateFleet' {computeCapacity} -> computeCapacity) (\s@CreateFleet' {} a -> s {computeCapacity = a} :: CreateFleet)
+
+-- | The description to display.
+createFleet_description :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Text)
+createFleet_description = Lens.lens (\CreateFleet' {description} -> description) (\s@CreateFleet' {} a -> s {description = a} :: CreateFleet)
+
+-- | The amount of time that a streaming session remains active after users
+-- disconnect. If users try to reconnect to the streaming session after a
+-- disconnection or network interruption within this time interval, they
+-- are connected to their previous session. Otherwise, they are connected
+-- to a new session with a new streaming instance.
+--
+-- Specify a value between 60 and 360000.
+createFleet_disconnectTimeoutInSeconds :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Int)
+createFleet_disconnectTimeoutInSeconds = Lens.lens (\CreateFleet' {disconnectTimeoutInSeconds} -> disconnectTimeoutInSeconds) (\s@CreateFleet' {} a -> s {disconnectTimeoutInSeconds = a} :: CreateFleet)
+
+-- | The fleet name to display.
+createFleet_displayName :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Text)
+createFleet_displayName = Lens.lens (\CreateFleet' {displayName} -> displayName) (\s@CreateFleet' {} a -> s {displayName = a} :: CreateFleet)
+
+-- | The name of the directory and organizational unit (OU) to use to join
+-- the fleet to a Microsoft Active Directory domain. This is not allowed
+-- for Elastic fleets.
+createFleet_domainJoinInfo :: Lens.Lens' CreateFleet (Prelude.Maybe DomainJoinInfo)
+createFleet_domainJoinInfo = Lens.lens (\CreateFleet' {domainJoinInfo} -> domainJoinInfo) (\s@CreateFleet' {} a -> s {domainJoinInfo = a} :: CreateFleet)
+
+-- | Enables or disables default internet access for the fleet.
+createFleet_enableDefaultInternetAccess :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Bool)
+createFleet_enableDefaultInternetAccess = Lens.lens (\CreateFleet' {enableDefaultInternetAccess} -> enableDefaultInternetAccess) (\s@CreateFleet' {} a -> s {enableDefaultInternetAccess = a} :: CreateFleet)
+
+-- | The fleet type.
+--
+-- [ALWAYS_ON]
+--     Provides users with instant-on access to their apps. You are charged
+--     for all running instances in your fleet, even if no users are
+--     streaming apps.
+--
+-- [ON_DEMAND]
+--     Provide users with access to applications after they connect, which
+--     takes one to two minutes. You are charged for instance streaming
+--     when users are connected and a small hourly fee for instances that
+--     are not streaming apps.
+createFleet_fleetType :: Lens.Lens' CreateFleet (Prelude.Maybe FleetType)
+createFleet_fleetType = Lens.lens (\CreateFleet' {fleetType} -> fleetType) (\s@CreateFleet' {} a -> s {fleetType = a} :: CreateFleet)
+
+-- | The Amazon Resource Name (ARN) of the IAM role to apply to the fleet. To
+-- assume a role, a fleet instance calls the AWS Security Token Service
+-- (STS) @AssumeRole@ API operation and passes the ARN of the role to use.
+-- The operation creates a new session with temporary credentials.
+-- AppStream 2.0 retrieves the temporary credentials and creates the
+-- __appstream_machine_role__ credential profile on the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+createFleet_iamRoleArn :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Text)
+createFleet_iamRoleArn = Lens.lens (\CreateFleet' {iamRoleArn} -> iamRoleArn) (\s@CreateFleet' {} a -> s {iamRoleArn = a} :: CreateFleet)
+
+-- | The amount of time that users can be idle (inactive) before they are
+-- disconnected from their streaming session and the
+-- @DisconnectTimeoutInSeconds@ time interval begins. Users are notified
+-- before they are disconnected due to inactivity. If they try to reconnect
+-- to the streaming session before the time interval specified in
+-- @DisconnectTimeoutInSeconds@ elapses, they are connected to their
+-- previous session. Users are considered idle when they stop providing
+-- keyboard or mouse input during their streaming session. File uploads and
+-- downloads, audio in, audio out, and pixels changing do not qualify as
+-- user activity. If users continue to be idle after the time interval in
+-- @IdleDisconnectTimeoutInSeconds@ elapses, they are disconnected.
+--
+-- To prevent users from being disconnected due to inactivity, specify a
+-- value of 0. Otherwise, specify a value between 60 and 3600. The default
+-- value is 0.
+--
+-- If you enable this feature, we recommend that you specify a value that
+-- corresponds exactly to a whole number of minutes (for example, 60, 120,
+-- and 180). If you don\'t do this, the value is rounded to the nearest
+-- minute. For example, if you specify a value of 70, users are
+-- disconnected after 1 minute of inactivity. If you specify a value that
+-- is at the midpoint between two different minutes, the value is rounded
+-- up. For example, if you specify a value of 90, users are disconnected
+-- after 2 minutes of inactivity.
+createFleet_idleDisconnectTimeoutInSeconds :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Int)
+createFleet_idleDisconnectTimeoutInSeconds = Lens.lens (\CreateFleet' {idleDisconnectTimeoutInSeconds} -> idleDisconnectTimeoutInSeconds) (\s@CreateFleet' {} a -> s {idleDisconnectTimeoutInSeconds = a} :: CreateFleet)
+
+-- | The ARN of the public, private, or shared image to use.
+createFleet_imageArn :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Text)
+createFleet_imageArn = Lens.lens (\CreateFleet' {imageArn} -> imageArn) (\s@CreateFleet' {} a -> s {imageArn = a} :: CreateFleet)
+
+-- | The name of the image used to create the fleet.
+createFleet_imageName :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Text)
+createFleet_imageName = Lens.lens (\CreateFleet' {imageName} -> imageName) (\s@CreateFleet' {} a -> s {imageName = a} :: CreateFleet)
+
+-- | The maximum concurrent sessions of the Elastic fleet. This is required
+-- for Elastic fleets, and not allowed for other fleet types.
+createFleet_maxConcurrentSessions :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Int)
+createFleet_maxConcurrentSessions = Lens.lens (\CreateFleet' {maxConcurrentSessions} -> maxConcurrentSessions) (\s@CreateFleet' {} a -> s {maxConcurrentSessions = a} :: CreateFleet)
+
+-- | The maximum amount of time that a streaming session can remain active,
+-- in seconds. If users are still connected to a streaming instance five
+-- minutes before this limit is reached, they are prompted to save any open
+-- documents before being disconnected. After this time elapses, the
+-- instance is terminated and replaced by a new instance.
+--
+-- Specify a value between 600 and 360000.
+createFleet_maxUserDurationInSeconds :: Lens.Lens' CreateFleet (Prelude.Maybe Prelude.Int)
+createFleet_maxUserDurationInSeconds = Lens.lens (\CreateFleet' {maxUserDurationInSeconds} -> maxUserDurationInSeconds) (\s@CreateFleet' {} a -> s {maxUserDurationInSeconds = a} :: CreateFleet)
+
+-- | The fleet platform. WINDOWS_SERVER_2019 and AMAZON_LINUX2 are supported
+-- for Elastic fleets.
+createFleet_platform :: Lens.Lens' CreateFleet (Prelude.Maybe PlatformType)
+createFleet_platform = Lens.lens (\CreateFleet' {platform} -> platform) (\s@CreateFleet' {} a -> s {platform = a} :: CreateFleet)
+
+-- | The S3 location of the session scripts configuration zip file. This only
+-- applies to Elastic fleets.
+createFleet_sessionScriptS3Location :: Lens.Lens' CreateFleet (Prelude.Maybe S3Location)
+createFleet_sessionScriptS3Location = Lens.lens (\CreateFleet' {sessionScriptS3Location} -> sessionScriptS3Location) (\s@CreateFleet' {} a -> s {sessionScriptS3Location = a} :: CreateFleet)
+
+-- | The AppStream 2.0 view that is displayed to your users when they stream
+-- from the fleet. When @APP@ is specified, only the windows of
+-- applications opened by users display. When @DESKTOP@ is specified, the
+-- standard desktop that is provided by the operating system displays.
+--
+-- The default value is @APP@.
+createFleet_streamView :: Lens.Lens' CreateFleet (Prelude.Maybe StreamView)
+createFleet_streamView = Lens.lens (\CreateFleet' {streamView} -> streamView) (\s@CreateFleet' {} a -> s {streamView = a} :: CreateFleet)
+
+-- | The tags to associate with the fleet. A tag is a key-value pair, and the
+-- value is optional. For example, Environment=Test. If you do not specify
+-- a value, Environment=.
+--
+-- If you do not specify a value, the value is set to an empty string.
+--
+-- Generally allowed characters are: letters, numbers, and spaces
+-- representable in UTF-8, and the following special characters:
+--
+-- _ . : \/ = + \\ - \@
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+createFleet_tags :: Lens.Lens' CreateFleet (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createFleet_tags = Lens.lens (\CreateFleet' {tags} -> tags) (\s@CreateFleet' {} a -> s {tags = a} :: CreateFleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The USB device filter strings that specify which USB devices a user can
+-- redirect to the fleet streaming session, when using the Windows native
+-- client. This is allowed but not required for Elastic fleets.
+createFleet_usbDeviceFilterStrings :: Lens.Lens' CreateFleet (Prelude.Maybe [Prelude.Text])
+createFleet_usbDeviceFilterStrings = Lens.lens (\CreateFleet' {usbDeviceFilterStrings} -> usbDeviceFilterStrings) (\s@CreateFleet' {} a -> s {usbDeviceFilterStrings = a} :: CreateFleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The VPC configuration for the fleet. This is required for Elastic
+-- fleets, but not required for other fleet types. Elastic fleets require
+-- that you specify at least two subnets in different availability zones.
+createFleet_vpcConfig :: Lens.Lens' CreateFleet (Prelude.Maybe VpcConfig)
+createFleet_vpcConfig = Lens.lens (\CreateFleet' {vpcConfig} -> vpcConfig) (\s@CreateFleet' {} a -> s {vpcConfig = a} :: CreateFleet)
+
+-- | A unique name for the fleet.
+createFleet_name :: Lens.Lens' CreateFleet Prelude.Text
+createFleet_name = Lens.lens (\CreateFleet' {name} -> name) (\s@CreateFleet' {} a -> s {name = a} :: CreateFleet)
+
+-- | The instance type to use when launching fleet instances. The following
+-- instance types are available:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.standard.xlarge
+--
+-- -   stream.standard.2xlarge
+--
+-- -   stream.compute.large
+--
+-- -   stream.compute.xlarge
+--
+-- -   stream.compute.2xlarge
+--
+-- -   stream.compute.4xlarge
+--
+-- -   stream.compute.8xlarge
+--
+-- -   stream.memory.large
+--
+-- -   stream.memory.xlarge
+--
+-- -   stream.memory.2xlarge
+--
+-- -   stream.memory.4xlarge
+--
+-- -   stream.memory.8xlarge
+--
+-- -   stream.memory.z1d.large
+--
+-- -   stream.memory.z1d.xlarge
+--
+-- -   stream.memory.z1d.2xlarge
+--
+-- -   stream.memory.z1d.3xlarge
+--
+-- -   stream.memory.z1d.6xlarge
+--
+-- -   stream.memory.z1d.12xlarge
+--
+-- -   stream.graphics-design.large
+--
+-- -   stream.graphics-design.xlarge
+--
+-- -   stream.graphics-design.2xlarge
+--
+-- -   stream.graphics-design.4xlarge
+--
+-- -   stream.graphics-desktop.2xlarge
+--
+-- -   stream.graphics.g4dn.xlarge
+--
+-- -   stream.graphics.g4dn.2xlarge
+--
+-- -   stream.graphics.g4dn.4xlarge
+--
+-- -   stream.graphics.g4dn.8xlarge
+--
+-- -   stream.graphics.g4dn.12xlarge
+--
+-- -   stream.graphics.g4dn.16xlarge
+--
+-- -   stream.graphics-pro.4xlarge
+--
+-- -   stream.graphics-pro.8xlarge
+--
+-- -   stream.graphics-pro.16xlarge
+--
+-- The following instance types are available for Elastic fleets:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.standard.xlarge
+--
+-- -   stream.standard.2xlarge
+createFleet_instanceType :: Lens.Lens' CreateFleet Prelude.Text
+createFleet_instanceType = Lens.lens (\CreateFleet' {instanceType} -> instanceType) (\s@CreateFleet' {} a -> s {instanceType = a} :: CreateFleet)
+
+instance Core.AWSRequest CreateFleet where
+  type AWSResponse CreateFleet = CreateFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateFleetResponse'
+            Prelude.<$> (x Data..?> "Fleet")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateFleet where
+  hashWithSalt _salt CreateFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` computeCapacity
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` disconnectTimeoutInSeconds
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` domainJoinInfo
+      `Prelude.hashWithSalt` enableDefaultInternetAccess
+      `Prelude.hashWithSalt` fleetType
+      `Prelude.hashWithSalt` iamRoleArn
+      `Prelude.hashWithSalt` idleDisconnectTimeoutInSeconds
+      `Prelude.hashWithSalt` imageArn
+      `Prelude.hashWithSalt` imageName
+      `Prelude.hashWithSalt` maxConcurrentSessions
+      `Prelude.hashWithSalt` maxUserDurationInSeconds
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` sessionScriptS3Location
+      `Prelude.hashWithSalt` streamView
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` usbDeviceFilterStrings
+      `Prelude.hashWithSalt` vpcConfig
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` instanceType
+
+instance Prelude.NFData CreateFleet where
+  rnf CreateFleet' {..} =
+    Prelude.rnf computeCapacity
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disconnectTimeoutInSeconds
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf domainJoinInfo
+      `Prelude.seq` Prelude.rnf enableDefaultInternetAccess
+      `Prelude.seq` Prelude.rnf fleetType
+      `Prelude.seq` Prelude.rnf iamRoleArn
+      `Prelude.seq` Prelude.rnf idleDisconnectTimeoutInSeconds
+      `Prelude.seq` Prelude.rnf imageArn
+      `Prelude.seq` Prelude.rnf imageName
+      `Prelude.seq` Prelude.rnf maxConcurrentSessions
+      `Prelude.seq` Prelude.rnf maxUserDurationInSeconds
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf sessionScriptS3Location
+      `Prelude.seq` Prelude.rnf streamView
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf usbDeviceFilterStrings
+      `Prelude.seq` Prelude.rnf vpcConfig
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf instanceType
+
+instance Data.ToHeaders CreateFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateFleet where
+  toJSON CreateFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ComputeCapacity" Data..=)
+              Prelude.<$> computeCapacity,
+            ("Description" Data..=) Prelude.<$> description,
+            ("DisconnectTimeoutInSeconds" Data..=)
+              Prelude.<$> disconnectTimeoutInSeconds,
+            ("DisplayName" Data..=) Prelude.<$> displayName,
+            ("DomainJoinInfo" Data..=)
+              Prelude.<$> domainJoinInfo,
+            ("EnableDefaultInternetAccess" Data..=)
+              Prelude.<$> enableDefaultInternetAccess,
+            ("FleetType" Data..=) Prelude.<$> fleetType,
+            ("IamRoleArn" Data..=) Prelude.<$> iamRoleArn,
+            ("IdleDisconnectTimeoutInSeconds" Data..=)
+              Prelude.<$> idleDisconnectTimeoutInSeconds,
+            ("ImageArn" Data..=) Prelude.<$> imageArn,
+            ("ImageName" Data..=) Prelude.<$> imageName,
+            ("MaxConcurrentSessions" Data..=)
+              Prelude.<$> maxConcurrentSessions,
+            ("MaxUserDurationInSeconds" Data..=)
+              Prelude.<$> maxUserDurationInSeconds,
+            ("Platform" Data..=) Prelude.<$> platform,
+            ("SessionScriptS3Location" Data..=)
+              Prelude.<$> sessionScriptS3Location,
+            ("StreamView" Data..=) Prelude.<$> streamView,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("UsbDeviceFilterStrings" Data..=)
+              Prelude.<$> usbDeviceFilterStrings,
+            ("VpcConfig" Data..=) Prelude.<$> vpcConfig,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("InstanceType" Data..= instanceType)
+          ]
+      )
+
+instance Data.ToPath CreateFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateFleetResponse' smart constructor.
+data CreateFleetResponse = CreateFleetResponse'
+  { -- | Information about the fleet.
+    fleet :: Prelude.Maybe Fleet,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleet', 'createFleetResponse_fleet' - Information about the fleet.
+--
+-- 'httpStatus', 'createFleetResponse_httpStatus' - The response's http status code.
+newCreateFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateFleetResponse
+newCreateFleetResponse pHttpStatus_ =
+  CreateFleetResponse'
+    { fleet = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the fleet.
+createFleetResponse_fleet :: Lens.Lens' CreateFleetResponse (Prelude.Maybe Fleet)
+createFleetResponse_fleet = Lens.lens (\CreateFleetResponse' {fleet} -> fleet) (\s@CreateFleetResponse' {} a -> s {fleet = a} :: CreateFleetResponse)
+
+-- | The response's http status code.
+createFleetResponse_httpStatus :: Lens.Lens' CreateFleetResponse Prelude.Int
+createFleetResponse_httpStatus = Lens.lens (\CreateFleetResponse' {httpStatus} -> httpStatus) (\s@CreateFleetResponse' {} a -> s {httpStatus = a} :: CreateFleetResponse)
+
+instance Prelude.NFData CreateFleetResponse where
+  rnf CreateFleetResponse' {..} =
+    Prelude.rnf fleet
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateImageBuilder.hs b/gen/Amazonka/AppStream/CreateImageBuilder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateImageBuilder.hs
@@ -0,0 +1,625 @@
+{-# 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.AppStream.CreateImageBuilder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an image builder. An image builder is a virtual machine that is
+-- used to create an image.
+--
+-- The initial state of the builder is @PENDING@. When it is ready, the
+-- state is @RUNNING@.
+module Amazonka.AppStream.CreateImageBuilder
+  ( -- * Creating a Request
+    CreateImageBuilder (..),
+    newCreateImageBuilder,
+
+    -- * Request Lenses
+    createImageBuilder_accessEndpoints,
+    createImageBuilder_appstreamAgentVersion,
+    createImageBuilder_description,
+    createImageBuilder_displayName,
+    createImageBuilder_domainJoinInfo,
+    createImageBuilder_enableDefaultInternetAccess,
+    createImageBuilder_iamRoleArn,
+    createImageBuilder_imageArn,
+    createImageBuilder_imageName,
+    createImageBuilder_tags,
+    createImageBuilder_vpcConfig,
+    createImageBuilder_name,
+    createImageBuilder_instanceType,
+
+    -- * Destructuring the Response
+    CreateImageBuilderResponse (..),
+    newCreateImageBuilderResponse,
+
+    -- * Response Lenses
+    createImageBuilderResponse_imageBuilder,
+    createImageBuilderResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateImageBuilder' smart constructor.
+data CreateImageBuilder = CreateImageBuilder'
+  { -- | The list of interface VPC endpoint (interface endpoint) objects.
+    -- Administrators can connect to the image builder only through the
+    -- specified endpoints.
+    accessEndpoints :: Prelude.Maybe (Prelude.NonEmpty AccessEndpoint),
+    -- | The version of the AppStream 2.0 agent to use for this image builder. To
+    -- use the latest version of the AppStream 2.0 agent, specify [LATEST].
+    appstreamAgentVersion :: Prelude.Maybe Prelude.Text,
+    -- | The description to display.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The image builder name to display.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the directory and organizational unit (OU) to use to join
+    -- the image builder to a Microsoft Active Directory domain.
+    domainJoinInfo :: Prelude.Maybe DomainJoinInfo,
+    -- | Enables or disables default internet access for the image builder.
+    enableDefaultInternetAccess :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the IAM role to apply to the image
+    -- builder. To assume a role, the image builder calls the AWS Security
+    -- Token Service (STS) @AssumeRole@ API operation and passes the ARN of the
+    -- role to use. The operation creates a new session with temporary
+    -- credentials. AppStream 2.0 retrieves the temporary credentials and
+    -- creates the __appstream_machine_role__ credential profile on the
+    -- instance.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+    -- in the /Amazon AppStream 2.0 Administration Guide/.
+    iamRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the public, private, or shared image to use.
+    imageArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image used to create the image builder.
+    imageName :: Prelude.Maybe Prelude.Text,
+    -- | The tags to associate with the image builder. A tag is a key-value pair,
+    -- and the value is optional. For example, Environment=Test. If you do not
+    -- specify a value, Environment=.
+    --
+    -- Generally allowed characters are: letters, numbers, and spaces
+    -- representable in UTF-8, and the following special characters:
+    --
+    -- _ . : \/ = + \\ - \@
+    --
+    -- If you do not specify a value, the value is set to an empty string.
+    --
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+    -- in the /Amazon AppStream 2.0 Administration Guide/.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The VPC configuration for the image builder. You can specify only one
+    -- subnet.
+    vpcConfig :: Prelude.Maybe VpcConfig,
+    -- | A unique name for the image builder.
+    name :: Prelude.Text,
+    -- | The instance type to use when launching the image builder. The following
+    -- instance types are available:
+    --
+    -- -   stream.standard.small
+    --
+    -- -   stream.standard.medium
+    --
+    -- -   stream.standard.large
+    --
+    -- -   stream.compute.large
+    --
+    -- -   stream.compute.xlarge
+    --
+    -- -   stream.compute.2xlarge
+    --
+    -- -   stream.compute.4xlarge
+    --
+    -- -   stream.compute.8xlarge
+    --
+    -- -   stream.memory.large
+    --
+    -- -   stream.memory.xlarge
+    --
+    -- -   stream.memory.2xlarge
+    --
+    -- -   stream.memory.4xlarge
+    --
+    -- -   stream.memory.8xlarge
+    --
+    -- -   stream.memory.z1d.large
+    --
+    -- -   stream.memory.z1d.xlarge
+    --
+    -- -   stream.memory.z1d.2xlarge
+    --
+    -- -   stream.memory.z1d.3xlarge
+    --
+    -- -   stream.memory.z1d.6xlarge
+    --
+    -- -   stream.memory.z1d.12xlarge
+    --
+    -- -   stream.graphics-design.large
+    --
+    -- -   stream.graphics-design.xlarge
+    --
+    -- -   stream.graphics-design.2xlarge
+    --
+    -- -   stream.graphics-design.4xlarge
+    --
+    -- -   stream.graphics-desktop.2xlarge
+    --
+    -- -   stream.graphics.g4dn.xlarge
+    --
+    -- -   stream.graphics.g4dn.2xlarge
+    --
+    -- -   stream.graphics.g4dn.4xlarge
+    --
+    -- -   stream.graphics.g4dn.8xlarge
+    --
+    -- -   stream.graphics.g4dn.12xlarge
+    --
+    -- -   stream.graphics.g4dn.16xlarge
+    --
+    -- -   stream.graphics-pro.4xlarge
+    --
+    -- -   stream.graphics-pro.8xlarge
+    --
+    -- -   stream.graphics-pro.16xlarge
+    instanceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImageBuilder' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessEndpoints', 'createImageBuilder_accessEndpoints' - The list of interface VPC endpoint (interface endpoint) objects.
+-- Administrators can connect to the image builder only through the
+-- specified endpoints.
+--
+-- 'appstreamAgentVersion', 'createImageBuilder_appstreamAgentVersion' - The version of the AppStream 2.0 agent to use for this image builder. To
+-- use the latest version of the AppStream 2.0 agent, specify [LATEST].
+--
+-- 'description', 'createImageBuilder_description' - The description to display.
+--
+-- 'displayName', 'createImageBuilder_displayName' - The image builder name to display.
+--
+-- 'domainJoinInfo', 'createImageBuilder_domainJoinInfo' - The name of the directory and organizational unit (OU) to use to join
+-- the image builder to a Microsoft Active Directory domain.
+--
+-- 'enableDefaultInternetAccess', 'createImageBuilder_enableDefaultInternetAccess' - Enables or disables default internet access for the image builder.
+--
+-- 'iamRoleArn', 'createImageBuilder_iamRoleArn' - The Amazon Resource Name (ARN) of the IAM role to apply to the image
+-- builder. To assume a role, the image builder calls the AWS Security
+-- Token Service (STS) @AssumeRole@ API operation and passes the ARN of the
+-- role to use. The operation creates a new session with temporary
+-- credentials. AppStream 2.0 retrieves the temporary credentials and
+-- creates the __appstream_machine_role__ credential profile on the
+-- instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- 'imageArn', 'createImageBuilder_imageArn' - The ARN of the public, private, or shared image to use.
+--
+-- 'imageName', 'createImageBuilder_imageName' - The name of the image used to create the image builder.
+--
+-- 'tags', 'createImageBuilder_tags' - The tags to associate with the image builder. A tag is a key-value pair,
+-- and the value is optional. For example, Environment=Test. If you do not
+-- specify a value, Environment=.
+--
+-- Generally allowed characters are: letters, numbers, and spaces
+-- representable in UTF-8, and the following special characters:
+--
+-- _ . : \/ = + \\ - \@
+--
+-- If you do not specify a value, the value is set to an empty string.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- 'vpcConfig', 'createImageBuilder_vpcConfig' - The VPC configuration for the image builder. You can specify only one
+-- subnet.
+--
+-- 'name', 'createImageBuilder_name' - A unique name for the image builder.
+--
+-- 'instanceType', 'createImageBuilder_instanceType' - The instance type to use when launching the image builder. The following
+-- instance types are available:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.compute.large
+--
+-- -   stream.compute.xlarge
+--
+-- -   stream.compute.2xlarge
+--
+-- -   stream.compute.4xlarge
+--
+-- -   stream.compute.8xlarge
+--
+-- -   stream.memory.large
+--
+-- -   stream.memory.xlarge
+--
+-- -   stream.memory.2xlarge
+--
+-- -   stream.memory.4xlarge
+--
+-- -   stream.memory.8xlarge
+--
+-- -   stream.memory.z1d.large
+--
+-- -   stream.memory.z1d.xlarge
+--
+-- -   stream.memory.z1d.2xlarge
+--
+-- -   stream.memory.z1d.3xlarge
+--
+-- -   stream.memory.z1d.6xlarge
+--
+-- -   stream.memory.z1d.12xlarge
+--
+-- -   stream.graphics-design.large
+--
+-- -   stream.graphics-design.xlarge
+--
+-- -   stream.graphics-design.2xlarge
+--
+-- -   stream.graphics-design.4xlarge
+--
+-- -   stream.graphics-desktop.2xlarge
+--
+-- -   stream.graphics.g4dn.xlarge
+--
+-- -   stream.graphics.g4dn.2xlarge
+--
+-- -   stream.graphics.g4dn.4xlarge
+--
+-- -   stream.graphics.g4dn.8xlarge
+--
+-- -   stream.graphics.g4dn.12xlarge
+--
+-- -   stream.graphics.g4dn.16xlarge
+--
+-- -   stream.graphics-pro.4xlarge
+--
+-- -   stream.graphics-pro.8xlarge
+--
+-- -   stream.graphics-pro.16xlarge
+newCreateImageBuilder ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'instanceType'
+  Prelude.Text ->
+  CreateImageBuilder
+newCreateImageBuilder pName_ pInstanceType_ =
+  CreateImageBuilder'
+    { accessEndpoints =
+        Prelude.Nothing,
+      appstreamAgentVersion = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      domainJoinInfo = Prelude.Nothing,
+      enableDefaultInternetAccess = Prelude.Nothing,
+      iamRoleArn = Prelude.Nothing,
+      imageArn = Prelude.Nothing,
+      imageName = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      vpcConfig = Prelude.Nothing,
+      name = pName_,
+      instanceType = pInstanceType_
+    }
+
+-- | The list of interface VPC endpoint (interface endpoint) objects.
+-- Administrators can connect to the image builder only through the
+-- specified endpoints.
+createImageBuilder_accessEndpoints :: Lens.Lens' CreateImageBuilder (Prelude.Maybe (Prelude.NonEmpty AccessEndpoint))
+createImageBuilder_accessEndpoints = Lens.lens (\CreateImageBuilder' {accessEndpoints} -> accessEndpoints) (\s@CreateImageBuilder' {} a -> s {accessEndpoints = a} :: CreateImageBuilder) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the AppStream 2.0 agent to use for this image builder. To
+-- use the latest version of the AppStream 2.0 agent, specify [LATEST].
+createImageBuilder_appstreamAgentVersion :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
+createImageBuilder_appstreamAgentVersion = Lens.lens (\CreateImageBuilder' {appstreamAgentVersion} -> appstreamAgentVersion) (\s@CreateImageBuilder' {} a -> s {appstreamAgentVersion = a} :: CreateImageBuilder)
+
+-- | The description to display.
+createImageBuilder_description :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
+createImageBuilder_description = Lens.lens (\CreateImageBuilder' {description} -> description) (\s@CreateImageBuilder' {} a -> s {description = a} :: CreateImageBuilder)
+
+-- | The image builder name to display.
+createImageBuilder_displayName :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
+createImageBuilder_displayName = Lens.lens (\CreateImageBuilder' {displayName} -> displayName) (\s@CreateImageBuilder' {} a -> s {displayName = a} :: CreateImageBuilder)
+
+-- | The name of the directory and organizational unit (OU) to use to join
+-- the image builder to a Microsoft Active Directory domain.
+createImageBuilder_domainJoinInfo :: Lens.Lens' CreateImageBuilder (Prelude.Maybe DomainJoinInfo)
+createImageBuilder_domainJoinInfo = Lens.lens (\CreateImageBuilder' {domainJoinInfo} -> domainJoinInfo) (\s@CreateImageBuilder' {} a -> s {domainJoinInfo = a} :: CreateImageBuilder)
+
+-- | Enables or disables default internet access for the image builder.
+createImageBuilder_enableDefaultInternetAccess :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Bool)
+createImageBuilder_enableDefaultInternetAccess = Lens.lens (\CreateImageBuilder' {enableDefaultInternetAccess} -> enableDefaultInternetAccess) (\s@CreateImageBuilder' {} a -> s {enableDefaultInternetAccess = a} :: CreateImageBuilder)
+
+-- | The Amazon Resource Name (ARN) of the IAM role to apply to the image
+-- builder. To assume a role, the image builder calls the AWS Security
+-- Token Service (STS) @AssumeRole@ API operation and passes the ARN of the
+-- role to use. The operation creates a new session with temporary
+-- credentials. AppStream 2.0 retrieves the temporary credentials and
+-- creates the __appstream_machine_role__ credential profile on the
+-- instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+createImageBuilder_iamRoleArn :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
+createImageBuilder_iamRoleArn = Lens.lens (\CreateImageBuilder' {iamRoleArn} -> iamRoleArn) (\s@CreateImageBuilder' {} a -> s {iamRoleArn = a} :: CreateImageBuilder)
+
+-- | The ARN of the public, private, or shared image to use.
+createImageBuilder_imageArn :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
+createImageBuilder_imageArn = Lens.lens (\CreateImageBuilder' {imageArn} -> imageArn) (\s@CreateImageBuilder' {} a -> s {imageArn = a} :: CreateImageBuilder)
+
+-- | The name of the image used to create the image builder.
+createImageBuilder_imageName :: Lens.Lens' CreateImageBuilder (Prelude.Maybe Prelude.Text)
+createImageBuilder_imageName = Lens.lens (\CreateImageBuilder' {imageName} -> imageName) (\s@CreateImageBuilder' {} a -> s {imageName = a} :: CreateImageBuilder)
+
+-- | The tags to associate with the image builder. A tag is a key-value pair,
+-- and the value is optional. For example, Environment=Test. If you do not
+-- specify a value, Environment=.
+--
+-- Generally allowed characters are: letters, numbers, and spaces
+-- representable in UTF-8, and the following special characters:
+--
+-- _ . : \/ = + \\ - \@
+--
+-- If you do not specify a value, the value is set to an empty string.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+createImageBuilder_tags :: Lens.Lens' CreateImageBuilder (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createImageBuilder_tags = Lens.lens (\CreateImageBuilder' {tags} -> tags) (\s@CreateImageBuilder' {} a -> s {tags = a} :: CreateImageBuilder) Prelude.. Lens.mapping Lens.coerced
+
+-- | The VPC configuration for the image builder. You can specify only one
+-- subnet.
+createImageBuilder_vpcConfig :: Lens.Lens' CreateImageBuilder (Prelude.Maybe VpcConfig)
+createImageBuilder_vpcConfig = Lens.lens (\CreateImageBuilder' {vpcConfig} -> vpcConfig) (\s@CreateImageBuilder' {} a -> s {vpcConfig = a} :: CreateImageBuilder)
+
+-- | A unique name for the image builder.
+createImageBuilder_name :: Lens.Lens' CreateImageBuilder Prelude.Text
+createImageBuilder_name = Lens.lens (\CreateImageBuilder' {name} -> name) (\s@CreateImageBuilder' {} a -> s {name = a} :: CreateImageBuilder)
+
+-- | The instance type to use when launching the image builder. The following
+-- instance types are available:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.compute.large
+--
+-- -   stream.compute.xlarge
+--
+-- -   stream.compute.2xlarge
+--
+-- -   stream.compute.4xlarge
+--
+-- -   stream.compute.8xlarge
+--
+-- -   stream.memory.large
+--
+-- -   stream.memory.xlarge
+--
+-- -   stream.memory.2xlarge
+--
+-- -   stream.memory.4xlarge
+--
+-- -   stream.memory.8xlarge
+--
+-- -   stream.memory.z1d.large
+--
+-- -   stream.memory.z1d.xlarge
+--
+-- -   stream.memory.z1d.2xlarge
+--
+-- -   stream.memory.z1d.3xlarge
+--
+-- -   stream.memory.z1d.6xlarge
+--
+-- -   stream.memory.z1d.12xlarge
+--
+-- -   stream.graphics-design.large
+--
+-- -   stream.graphics-design.xlarge
+--
+-- -   stream.graphics-design.2xlarge
+--
+-- -   stream.graphics-design.4xlarge
+--
+-- -   stream.graphics-desktop.2xlarge
+--
+-- -   stream.graphics.g4dn.xlarge
+--
+-- -   stream.graphics.g4dn.2xlarge
+--
+-- -   stream.graphics.g4dn.4xlarge
+--
+-- -   stream.graphics.g4dn.8xlarge
+--
+-- -   stream.graphics.g4dn.12xlarge
+--
+-- -   stream.graphics.g4dn.16xlarge
+--
+-- -   stream.graphics-pro.4xlarge
+--
+-- -   stream.graphics-pro.8xlarge
+--
+-- -   stream.graphics-pro.16xlarge
+createImageBuilder_instanceType :: Lens.Lens' CreateImageBuilder Prelude.Text
+createImageBuilder_instanceType = Lens.lens (\CreateImageBuilder' {instanceType} -> instanceType) (\s@CreateImageBuilder' {} a -> s {instanceType = a} :: CreateImageBuilder)
+
+instance Core.AWSRequest CreateImageBuilder where
+  type
+    AWSResponse CreateImageBuilder =
+      CreateImageBuilderResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateImageBuilderResponse'
+            Prelude.<$> (x Data..?> "ImageBuilder")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateImageBuilder where
+  hashWithSalt _salt CreateImageBuilder' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessEndpoints
+      `Prelude.hashWithSalt` appstreamAgentVersion
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` domainJoinInfo
+      `Prelude.hashWithSalt` enableDefaultInternetAccess
+      `Prelude.hashWithSalt` iamRoleArn
+      `Prelude.hashWithSalt` imageArn
+      `Prelude.hashWithSalt` imageName
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` vpcConfig
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` instanceType
+
+instance Prelude.NFData CreateImageBuilder where
+  rnf CreateImageBuilder' {..} =
+    Prelude.rnf accessEndpoints
+      `Prelude.seq` Prelude.rnf appstreamAgentVersion
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf domainJoinInfo
+      `Prelude.seq` Prelude.rnf enableDefaultInternetAccess
+      `Prelude.seq` Prelude.rnf iamRoleArn
+      `Prelude.seq` Prelude.rnf imageArn
+      `Prelude.seq` Prelude.rnf imageName
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf vpcConfig
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf instanceType
+
+instance Data.ToHeaders CreateImageBuilder where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateImageBuilder" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateImageBuilder where
+  toJSON CreateImageBuilder' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessEndpoints" Data..=)
+              Prelude.<$> accessEndpoints,
+            ("AppstreamAgentVersion" Data..=)
+              Prelude.<$> appstreamAgentVersion,
+            ("Description" Data..=) Prelude.<$> description,
+            ("DisplayName" Data..=) Prelude.<$> displayName,
+            ("DomainJoinInfo" Data..=)
+              Prelude.<$> domainJoinInfo,
+            ("EnableDefaultInternetAccess" Data..=)
+              Prelude.<$> enableDefaultInternetAccess,
+            ("IamRoleArn" Data..=) Prelude.<$> iamRoleArn,
+            ("ImageArn" Data..=) Prelude.<$> imageArn,
+            ("ImageName" Data..=) Prelude.<$> imageName,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("VpcConfig" Data..=) Prelude.<$> vpcConfig,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("InstanceType" Data..= instanceType)
+          ]
+      )
+
+instance Data.ToPath CreateImageBuilder where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateImageBuilder where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateImageBuilderResponse' smart constructor.
+data CreateImageBuilderResponse = CreateImageBuilderResponse'
+  { -- | Information about the image builder.
+    imageBuilder :: Prelude.Maybe ImageBuilder,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImageBuilderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageBuilder', 'createImageBuilderResponse_imageBuilder' - Information about the image builder.
+--
+-- 'httpStatus', 'createImageBuilderResponse_httpStatus' - The response's http status code.
+newCreateImageBuilderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateImageBuilderResponse
+newCreateImageBuilderResponse pHttpStatus_ =
+  CreateImageBuilderResponse'
+    { imageBuilder =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the image builder.
+createImageBuilderResponse_imageBuilder :: Lens.Lens' CreateImageBuilderResponse (Prelude.Maybe ImageBuilder)
+createImageBuilderResponse_imageBuilder = Lens.lens (\CreateImageBuilderResponse' {imageBuilder} -> imageBuilder) (\s@CreateImageBuilderResponse' {} a -> s {imageBuilder = a} :: CreateImageBuilderResponse)
+
+-- | The response's http status code.
+createImageBuilderResponse_httpStatus :: Lens.Lens' CreateImageBuilderResponse Prelude.Int
+createImageBuilderResponse_httpStatus = Lens.lens (\CreateImageBuilderResponse' {httpStatus} -> httpStatus) (\s@CreateImageBuilderResponse' {} a -> s {httpStatus = a} :: CreateImageBuilderResponse)
+
+instance Prelude.NFData CreateImageBuilderResponse where
+  rnf CreateImageBuilderResponse' {..} =
+    Prelude.rnf imageBuilder
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateImageBuilderStreamingURL.hs b/gen/Amazonka/AppStream/CreateImageBuilderStreamingURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateImageBuilderStreamingURL.hs
@@ -0,0 +1,222 @@
+{-# 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.AppStream.CreateImageBuilderStreamingURL
+-- 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 URL to start an image builder streaming session.
+module Amazonka.AppStream.CreateImageBuilderStreamingURL
+  ( -- * Creating a Request
+    CreateImageBuilderStreamingURL (..),
+    newCreateImageBuilderStreamingURL,
+
+    -- * Request Lenses
+    createImageBuilderStreamingURL_validity,
+    createImageBuilderStreamingURL_name,
+
+    -- * Destructuring the Response
+    CreateImageBuilderStreamingURLResponse (..),
+    newCreateImageBuilderStreamingURLResponse,
+
+    -- * Response Lenses
+    createImageBuilderStreamingURLResponse_expires,
+    createImageBuilderStreamingURLResponse_streamingURL,
+    createImageBuilderStreamingURLResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateImageBuilderStreamingURL' smart constructor.
+data CreateImageBuilderStreamingURL = CreateImageBuilderStreamingURL'
+  { -- | The time that the streaming URL will be valid, in seconds. Specify a
+    -- value between 1 and 604800 seconds. The default is 3600 seconds.
+    validity :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the image builder.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateImageBuilderStreamingURL' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'validity', 'createImageBuilderStreamingURL_validity' - The time that the streaming URL will be valid, in seconds. Specify a
+-- value between 1 and 604800 seconds. The default is 3600 seconds.
+--
+-- 'name', 'createImageBuilderStreamingURL_name' - The name of the image builder.
+newCreateImageBuilderStreamingURL ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateImageBuilderStreamingURL
+newCreateImageBuilderStreamingURL pName_ =
+  CreateImageBuilderStreamingURL'
+    { validity =
+        Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The time that the streaming URL will be valid, in seconds. Specify a
+-- value between 1 and 604800 seconds. The default is 3600 seconds.
+createImageBuilderStreamingURL_validity :: Lens.Lens' CreateImageBuilderStreamingURL (Prelude.Maybe Prelude.Integer)
+createImageBuilderStreamingURL_validity = Lens.lens (\CreateImageBuilderStreamingURL' {validity} -> validity) (\s@CreateImageBuilderStreamingURL' {} a -> s {validity = a} :: CreateImageBuilderStreamingURL)
+
+-- | The name of the image builder.
+createImageBuilderStreamingURL_name :: Lens.Lens' CreateImageBuilderStreamingURL Prelude.Text
+createImageBuilderStreamingURL_name = Lens.lens (\CreateImageBuilderStreamingURL' {name} -> name) (\s@CreateImageBuilderStreamingURL' {} a -> s {name = a} :: CreateImageBuilderStreamingURL)
+
+instance
+  Core.AWSRequest
+    CreateImageBuilderStreamingURL
+  where
+  type
+    AWSResponse CreateImageBuilderStreamingURL =
+      CreateImageBuilderStreamingURLResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateImageBuilderStreamingURLResponse'
+            Prelude.<$> (x Data..?> "Expires")
+            Prelude.<*> (x Data..?> "StreamingURL")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateImageBuilderStreamingURL
+  where
+  hashWithSalt
+    _salt
+    CreateImageBuilderStreamingURL' {..} =
+      _salt
+        `Prelude.hashWithSalt` validity
+        `Prelude.hashWithSalt` name
+
+instance
+  Prelude.NFData
+    CreateImageBuilderStreamingURL
+  where
+  rnf CreateImageBuilderStreamingURL' {..} =
+    Prelude.rnf validity `Prelude.seq` Prelude.rnf name
+
+instance
+  Data.ToHeaders
+    CreateImageBuilderStreamingURL
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateImageBuilderStreamingURL" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateImageBuilderStreamingURL where
+  toJSON CreateImageBuilderStreamingURL' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Validity" Data..=) Prelude.<$> validity,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateImageBuilderStreamingURL where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateImageBuilderStreamingURL where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateImageBuilderStreamingURLResponse' smart constructor.
+data CreateImageBuilderStreamingURLResponse = CreateImageBuilderStreamingURLResponse'
+  { -- | The elapsed time, in seconds after the Unix epoch, when this URL
+    -- expires.
+    expires :: Prelude.Maybe Data.POSIX,
+    -- | The URL to start the AppStream 2.0 streaming session.
+    streamingURL :: 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 'CreateImageBuilderStreamingURLResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'expires', 'createImageBuilderStreamingURLResponse_expires' - The elapsed time, in seconds after the Unix epoch, when this URL
+-- expires.
+--
+-- 'streamingURL', 'createImageBuilderStreamingURLResponse_streamingURL' - The URL to start the AppStream 2.0 streaming session.
+--
+-- 'httpStatus', 'createImageBuilderStreamingURLResponse_httpStatus' - The response's http status code.
+newCreateImageBuilderStreamingURLResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateImageBuilderStreamingURLResponse
+newCreateImageBuilderStreamingURLResponse
+  pHttpStatus_ =
+    CreateImageBuilderStreamingURLResponse'
+      { expires =
+          Prelude.Nothing,
+        streamingURL = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The elapsed time, in seconds after the Unix epoch, when this URL
+-- expires.
+createImageBuilderStreamingURLResponse_expires :: Lens.Lens' CreateImageBuilderStreamingURLResponse (Prelude.Maybe Prelude.UTCTime)
+createImageBuilderStreamingURLResponse_expires = Lens.lens (\CreateImageBuilderStreamingURLResponse' {expires} -> expires) (\s@CreateImageBuilderStreamingURLResponse' {} a -> s {expires = a} :: CreateImageBuilderStreamingURLResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The URL to start the AppStream 2.0 streaming session.
+createImageBuilderStreamingURLResponse_streamingURL :: Lens.Lens' CreateImageBuilderStreamingURLResponse (Prelude.Maybe Prelude.Text)
+createImageBuilderStreamingURLResponse_streamingURL = Lens.lens (\CreateImageBuilderStreamingURLResponse' {streamingURL} -> streamingURL) (\s@CreateImageBuilderStreamingURLResponse' {} a -> s {streamingURL = a} :: CreateImageBuilderStreamingURLResponse)
+
+-- | The response's http status code.
+createImageBuilderStreamingURLResponse_httpStatus :: Lens.Lens' CreateImageBuilderStreamingURLResponse Prelude.Int
+createImageBuilderStreamingURLResponse_httpStatus = Lens.lens (\CreateImageBuilderStreamingURLResponse' {httpStatus} -> httpStatus) (\s@CreateImageBuilderStreamingURLResponse' {} a -> s {httpStatus = a} :: CreateImageBuilderStreamingURLResponse)
+
+instance
+  Prelude.NFData
+    CreateImageBuilderStreamingURLResponse
+  where
+  rnf CreateImageBuilderStreamingURLResponse' {..} =
+    Prelude.rnf expires
+      `Prelude.seq` Prelude.rnf streamingURL
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateStack.hs b/gen/Amazonka/AppStream/CreateStack.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateStack.hs
@@ -0,0 +1,389 @@
+{-# 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.AppStream.CreateStack
+-- 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 stack to start streaming applications to users. A stack
+-- consists of an associated fleet, user access policies, and storage
+-- configurations.
+module Amazonka.AppStream.CreateStack
+  ( -- * Creating a Request
+    CreateStack (..),
+    newCreateStack,
+
+    -- * Request Lenses
+    createStack_accessEndpoints,
+    createStack_applicationSettings,
+    createStack_description,
+    createStack_displayName,
+    createStack_embedHostDomains,
+    createStack_feedbackURL,
+    createStack_redirectURL,
+    createStack_storageConnectors,
+    createStack_streamingExperienceSettings,
+    createStack_tags,
+    createStack_userSettings,
+    createStack_name,
+
+    -- * Destructuring the Response
+    CreateStackResponse (..),
+    newCreateStackResponse,
+
+    -- * Response Lenses
+    createStackResponse_stack,
+    createStackResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateStack' smart constructor.
+data CreateStack = CreateStack'
+  { -- | The list of interface VPC endpoint (interface endpoint) objects. Users
+    -- of the stack can connect to AppStream 2.0 only through the specified
+    -- endpoints.
+    accessEndpoints :: Prelude.Maybe (Prelude.NonEmpty AccessEndpoint),
+    -- | The persistent application settings for users of a stack. When these
+    -- settings are enabled, changes that users make to applications and
+    -- Windows settings are automatically saved after each session and applied
+    -- to the next session.
+    applicationSettings :: Prelude.Maybe ApplicationSettings,
+    -- | The description to display.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The stack name to display.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The domains where AppStream 2.0 streaming sessions can be embedded in an
+    -- iframe. You must approve the domains that you want to host embedded
+    -- AppStream 2.0 streaming sessions.
+    embedHostDomains :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The URL that users are redirected to after they click the Send Feedback
+    -- link. If no URL is specified, no Send Feedback link is displayed.
+    feedbackURL :: Prelude.Maybe Prelude.Text,
+    -- | The URL that users are redirected to after their streaming session ends.
+    redirectURL :: Prelude.Maybe Prelude.Text,
+    -- | The storage connectors to enable.
+    storageConnectors :: Prelude.Maybe [StorageConnector],
+    -- | The streaming protocol you want your stack to prefer. This can be UDP or
+    -- TCP. Currently, UDP is only supported in the Windows native client.
+    streamingExperienceSettings :: Prelude.Maybe StreamingExperienceSettings,
+    -- | The tags to associate with the stack. A tag is a key-value pair, and the
+    -- value is optional. For example, Environment=Test. If you do not specify
+    -- a value, Environment=.
+    --
+    -- If you do not specify a value, the value is set to an empty string.
+    --
+    -- Generally allowed characters are: letters, numbers, and spaces
+    -- representable in UTF-8, and the following special characters:
+    --
+    -- _ . : \/ = + \\ - \@
+    --
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+    -- in the /Amazon AppStream 2.0 Administration Guide/.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The actions that are enabled or disabled for users during their
+    -- streaming sessions. By default, these actions are enabled.
+    userSettings :: Prelude.Maybe (Prelude.NonEmpty UserSetting),
+    -- | The name of the stack.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStack' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessEndpoints', 'createStack_accessEndpoints' - The list of interface VPC endpoint (interface endpoint) objects. Users
+-- of the stack can connect to AppStream 2.0 only through the specified
+-- endpoints.
+--
+-- 'applicationSettings', 'createStack_applicationSettings' - The persistent application settings for users of a stack. When these
+-- settings are enabled, changes that users make to applications and
+-- Windows settings are automatically saved after each session and applied
+-- to the next session.
+--
+-- 'description', 'createStack_description' - The description to display.
+--
+-- 'displayName', 'createStack_displayName' - The stack name to display.
+--
+-- 'embedHostDomains', 'createStack_embedHostDomains' - The domains where AppStream 2.0 streaming sessions can be embedded in an
+-- iframe. You must approve the domains that you want to host embedded
+-- AppStream 2.0 streaming sessions.
+--
+-- 'feedbackURL', 'createStack_feedbackURL' - The URL that users are redirected to after they click the Send Feedback
+-- link. If no URL is specified, no Send Feedback link is displayed.
+--
+-- 'redirectURL', 'createStack_redirectURL' - The URL that users are redirected to after their streaming session ends.
+--
+-- 'storageConnectors', 'createStack_storageConnectors' - The storage connectors to enable.
+--
+-- 'streamingExperienceSettings', 'createStack_streamingExperienceSettings' - The streaming protocol you want your stack to prefer. This can be UDP or
+-- TCP. Currently, UDP is only supported in the Windows native client.
+--
+-- 'tags', 'createStack_tags' - The tags to associate with the stack. A tag is a key-value pair, and the
+-- value is optional. For example, Environment=Test. If you do not specify
+-- a value, Environment=.
+--
+-- If you do not specify a value, the value is set to an empty string.
+--
+-- Generally allowed characters are: letters, numbers, and spaces
+-- representable in UTF-8, and the following special characters:
+--
+-- _ . : \/ = + \\ - \@
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- 'userSettings', 'createStack_userSettings' - The actions that are enabled or disabled for users during their
+-- streaming sessions. By default, these actions are enabled.
+--
+-- 'name', 'createStack_name' - The name of the stack.
+newCreateStack ::
+  -- | 'name'
+  Prelude.Text ->
+  CreateStack
+newCreateStack pName_ =
+  CreateStack'
+    { accessEndpoints = Prelude.Nothing,
+      applicationSettings = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      embedHostDomains = Prelude.Nothing,
+      feedbackURL = Prelude.Nothing,
+      redirectURL = Prelude.Nothing,
+      storageConnectors = Prelude.Nothing,
+      streamingExperienceSettings = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      userSettings = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The list of interface VPC endpoint (interface endpoint) objects. Users
+-- of the stack can connect to AppStream 2.0 only through the specified
+-- endpoints.
+createStack_accessEndpoints :: Lens.Lens' CreateStack (Prelude.Maybe (Prelude.NonEmpty AccessEndpoint))
+createStack_accessEndpoints = Lens.lens (\CreateStack' {accessEndpoints} -> accessEndpoints) (\s@CreateStack' {} a -> s {accessEndpoints = a} :: CreateStack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The persistent application settings for users of a stack. When these
+-- settings are enabled, changes that users make to applications and
+-- Windows settings are automatically saved after each session and applied
+-- to the next session.
+createStack_applicationSettings :: Lens.Lens' CreateStack (Prelude.Maybe ApplicationSettings)
+createStack_applicationSettings = Lens.lens (\CreateStack' {applicationSettings} -> applicationSettings) (\s@CreateStack' {} a -> s {applicationSettings = a} :: CreateStack)
+
+-- | The description to display.
+createStack_description :: Lens.Lens' CreateStack (Prelude.Maybe Prelude.Text)
+createStack_description = Lens.lens (\CreateStack' {description} -> description) (\s@CreateStack' {} a -> s {description = a} :: CreateStack)
+
+-- | The stack name to display.
+createStack_displayName :: Lens.Lens' CreateStack (Prelude.Maybe Prelude.Text)
+createStack_displayName = Lens.lens (\CreateStack' {displayName} -> displayName) (\s@CreateStack' {} a -> s {displayName = a} :: CreateStack)
+
+-- | The domains where AppStream 2.0 streaming sessions can be embedded in an
+-- iframe. You must approve the domains that you want to host embedded
+-- AppStream 2.0 streaming sessions.
+createStack_embedHostDomains :: Lens.Lens' CreateStack (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+createStack_embedHostDomains = Lens.lens (\CreateStack' {embedHostDomains} -> embedHostDomains) (\s@CreateStack' {} a -> s {embedHostDomains = a} :: CreateStack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The URL that users are redirected to after they click the Send Feedback
+-- link. If no URL is specified, no Send Feedback link is displayed.
+createStack_feedbackURL :: Lens.Lens' CreateStack (Prelude.Maybe Prelude.Text)
+createStack_feedbackURL = Lens.lens (\CreateStack' {feedbackURL} -> feedbackURL) (\s@CreateStack' {} a -> s {feedbackURL = a} :: CreateStack)
+
+-- | The URL that users are redirected to after their streaming session ends.
+createStack_redirectURL :: Lens.Lens' CreateStack (Prelude.Maybe Prelude.Text)
+createStack_redirectURL = Lens.lens (\CreateStack' {redirectURL} -> redirectURL) (\s@CreateStack' {} a -> s {redirectURL = a} :: CreateStack)
+
+-- | The storage connectors to enable.
+createStack_storageConnectors :: Lens.Lens' CreateStack (Prelude.Maybe [StorageConnector])
+createStack_storageConnectors = Lens.lens (\CreateStack' {storageConnectors} -> storageConnectors) (\s@CreateStack' {} a -> s {storageConnectors = a} :: CreateStack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The streaming protocol you want your stack to prefer. This can be UDP or
+-- TCP. Currently, UDP is only supported in the Windows native client.
+createStack_streamingExperienceSettings :: Lens.Lens' CreateStack (Prelude.Maybe StreamingExperienceSettings)
+createStack_streamingExperienceSettings = Lens.lens (\CreateStack' {streamingExperienceSettings} -> streamingExperienceSettings) (\s@CreateStack' {} a -> s {streamingExperienceSettings = a} :: CreateStack)
+
+-- | The tags to associate with the stack. A tag is a key-value pair, and the
+-- value is optional. For example, Environment=Test. If you do not specify
+-- a value, Environment=.
+--
+-- If you do not specify a value, the value is set to an empty string.
+--
+-- Generally allowed characters are: letters, numbers, and spaces
+-- representable in UTF-8, and the following special characters:
+--
+-- _ . : \/ = + \\ - \@
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+createStack_tags :: Lens.Lens' CreateStack (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createStack_tags = Lens.lens (\CreateStack' {tags} -> tags) (\s@CreateStack' {} a -> s {tags = a} :: CreateStack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The actions that are enabled or disabled for users during their
+-- streaming sessions. By default, these actions are enabled.
+createStack_userSettings :: Lens.Lens' CreateStack (Prelude.Maybe (Prelude.NonEmpty UserSetting))
+createStack_userSettings = Lens.lens (\CreateStack' {userSettings} -> userSettings) (\s@CreateStack' {} a -> s {userSettings = a} :: CreateStack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the stack.
+createStack_name :: Lens.Lens' CreateStack Prelude.Text
+createStack_name = Lens.lens (\CreateStack' {name} -> name) (\s@CreateStack' {} a -> s {name = a} :: CreateStack)
+
+instance Core.AWSRequest CreateStack where
+  type AWSResponse CreateStack = CreateStackResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateStackResponse'
+            Prelude.<$> (x Data..?> "Stack")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateStack where
+  hashWithSalt _salt CreateStack' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessEndpoints
+      `Prelude.hashWithSalt` applicationSettings
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` embedHostDomains
+      `Prelude.hashWithSalt` feedbackURL
+      `Prelude.hashWithSalt` redirectURL
+      `Prelude.hashWithSalt` storageConnectors
+      `Prelude.hashWithSalt` streamingExperienceSettings
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` userSettings
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CreateStack where
+  rnf CreateStack' {..} =
+    Prelude.rnf accessEndpoints
+      `Prelude.seq` Prelude.rnf applicationSettings
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf embedHostDomains
+      `Prelude.seq` Prelude.rnf feedbackURL
+      `Prelude.seq` Prelude.rnf redirectURL
+      `Prelude.seq` Prelude.rnf storageConnectors
+      `Prelude.seq` Prelude.rnf streamingExperienceSettings
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf userSettings
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders CreateStack where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateStack" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateStack where
+  toJSON CreateStack' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessEndpoints" Data..=)
+              Prelude.<$> accessEndpoints,
+            ("ApplicationSettings" Data..=)
+              Prelude.<$> applicationSettings,
+            ("Description" Data..=) Prelude.<$> description,
+            ("DisplayName" Data..=) Prelude.<$> displayName,
+            ("EmbedHostDomains" Data..=)
+              Prelude.<$> embedHostDomains,
+            ("FeedbackURL" Data..=) Prelude.<$> feedbackURL,
+            ("RedirectURL" Data..=) Prelude.<$> redirectURL,
+            ("StorageConnectors" Data..=)
+              Prelude.<$> storageConnectors,
+            ("StreamingExperienceSettings" Data..=)
+              Prelude.<$> streamingExperienceSettings,
+            ("Tags" Data..=) Prelude.<$> tags,
+            ("UserSettings" Data..=) Prelude.<$> userSettings,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath CreateStack where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateStack where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateStackResponse' smart constructor.
+data CreateStackResponse = CreateStackResponse'
+  { -- | Information about the stack.
+    stack :: Prelude.Maybe Stack,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStackResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stack', 'createStackResponse_stack' - Information about the stack.
+--
+-- 'httpStatus', 'createStackResponse_httpStatus' - The response's http status code.
+newCreateStackResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStackResponse
+newCreateStackResponse pHttpStatus_ =
+  CreateStackResponse'
+    { stack = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the stack.
+createStackResponse_stack :: Lens.Lens' CreateStackResponse (Prelude.Maybe Stack)
+createStackResponse_stack = Lens.lens (\CreateStackResponse' {stack} -> stack) (\s@CreateStackResponse' {} a -> s {stack = a} :: CreateStackResponse)
+
+-- | The response's http status code.
+createStackResponse_httpStatus :: Lens.Lens' CreateStackResponse Prelude.Int
+createStackResponse_httpStatus = Lens.lens (\CreateStackResponse' {httpStatus} -> httpStatus) (\s@CreateStackResponse' {} a -> s {httpStatus = a} :: CreateStackResponse)
+
+instance Prelude.NFData CreateStackResponse where
+  rnf CreateStackResponse' {..} =
+    Prelude.rnf stack
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateStreamingURL.hs b/gen/Amazonka/AppStream/CreateStreamingURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateStreamingURL.hs
@@ -0,0 +1,285 @@
+{-# 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.AppStream.CreateStreamingURL
+-- 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 temporary URL to start an AppStream 2.0 streaming session for
+-- the specified user. A streaming URL enables application streaming to be
+-- tested without user setup.
+module Amazonka.AppStream.CreateStreamingURL
+  ( -- * Creating a Request
+    CreateStreamingURL (..),
+    newCreateStreamingURL,
+
+    -- * Request Lenses
+    createStreamingURL_applicationId,
+    createStreamingURL_sessionContext,
+    createStreamingURL_validity,
+    createStreamingURL_stackName,
+    createStreamingURL_fleetName,
+    createStreamingURL_userId,
+
+    -- * Destructuring the Response
+    CreateStreamingURLResponse (..),
+    newCreateStreamingURLResponse,
+
+    -- * Response Lenses
+    createStreamingURLResponse_expires,
+    createStreamingURLResponse_streamingURL,
+    createStreamingURLResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateStreamingURL' smart constructor.
+data CreateStreamingURL = CreateStreamingURL'
+  { -- | The name of the application to launch after the session starts. This is
+    -- the name that you specified as __Name__ in the Image Assistant. If your
+    -- fleet is enabled for the __Desktop__ stream view, you can also choose to
+    -- launch directly to the operating system desktop. To do so, specify
+    -- __Desktop__.
+    applicationId :: Prelude.Maybe Prelude.Text,
+    -- | The session context. For more information, see
+    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-stacks-fleets.html#managing-stacks-fleets-parameters Session Context>
+    -- in the /Amazon AppStream 2.0 Administration Guide/.
+    sessionContext :: Prelude.Maybe Prelude.Text,
+    -- | The time that the streaming URL will be valid, in seconds. Specify a
+    -- value between 1 and 604800 seconds. The default is 60 seconds.
+    validity :: Prelude.Maybe Prelude.Integer,
+    -- | The name of the stack.
+    stackName :: Prelude.Text,
+    -- | The name of the fleet.
+    fleetName :: Prelude.Text,
+    -- | The identifier of the user.
+    userId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateStreamingURL' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationId', 'createStreamingURL_applicationId' - The name of the application to launch after the session starts. This is
+-- the name that you specified as __Name__ in the Image Assistant. If your
+-- fleet is enabled for the __Desktop__ stream view, you can also choose to
+-- launch directly to the operating system desktop. To do so, specify
+-- __Desktop__.
+--
+-- 'sessionContext', 'createStreamingURL_sessionContext' - The session context. For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-stacks-fleets.html#managing-stacks-fleets-parameters Session Context>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- 'validity', 'createStreamingURL_validity' - The time that the streaming URL will be valid, in seconds. Specify a
+-- value between 1 and 604800 seconds. The default is 60 seconds.
+--
+-- 'stackName', 'createStreamingURL_stackName' - The name of the stack.
+--
+-- 'fleetName', 'createStreamingURL_fleetName' - The name of the fleet.
+--
+-- 'userId', 'createStreamingURL_userId' - The identifier of the user.
+newCreateStreamingURL ::
+  -- | 'stackName'
+  Prelude.Text ->
+  -- | 'fleetName'
+  Prelude.Text ->
+  -- | 'userId'
+  Prelude.Text ->
+  CreateStreamingURL
+newCreateStreamingURL
+  pStackName_
+  pFleetName_
+  pUserId_ =
+    CreateStreamingURL'
+      { applicationId =
+          Prelude.Nothing,
+        sessionContext = Prelude.Nothing,
+        validity = Prelude.Nothing,
+        stackName = pStackName_,
+        fleetName = pFleetName_,
+        userId = pUserId_
+      }
+
+-- | The name of the application to launch after the session starts. This is
+-- the name that you specified as __Name__ in the Image Assistant. If your
+-- fleet is enabled for the __Desktop__ stream view, you can also choose to
+-- launch directly to the operating system desktop. To do so, specify
+-- __Desktop__.
+createStreamingURL_applicationId :: Lens.Lens' CreateStreamingURL (Prelude.Maybe Prelude.Text)
+createStreamingURL_applicationId = Lens.lens (\CreateStreamingURL' {applicationId} -> applicationId) (\s@CreateStreamingURL' {} a -> s {applicationId = a} :: CreateStreamingURL)
+
+-- | The session context. For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/managing-stacks-fleets.html#managing-stacks-fleets-parameters Session Context>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+createStreamingURL_sessionContext :: Lens.Lens' CreateStreamingURL (Prelude.Maybe Prelude.Text)
+createStreamingURL_sessionContext = Lens.lens (\CreateStreamingURL' {sessionContext} -> sessionContext) (\s@CreateStreamingURL' {} a -> s {sessionContext = a} :: CreateStreamingURL)
+
+-- | The time that the streaming URL will be valid, in seconds. Specify a
+-- value between 1 and 604800 seconds. The default is 60 seconds.
+createStreamingURL_validity :: Lens.Lens' CreateStreamingURL (Prelude.Maybe Prelude.Integer)
+createStreamingURL_validity = Lens.lens (\CreateStreamingURL' {validity} -> validity) (\s@CreateStreamingURL' {} a -> s {validity = a} :: CreateStreamingURL)
+
+-- | The name of the stack.
+createStreamingURL_stackName :: Lens.Lens' CreateStreamingURL Prelude.Text
+createStreamingURL_stackName = Lens.lens (\CreateStreamingURL' {stackName} -> stackName) (\s@CreateStreamingURL' {} a -> s {stackName = a} :: CreateStreamingURL)
+
+-- | The name of the fleet.
+createStreamingURL_fleetName :: Lens.Lens' CreateStreamingURL Prelude.Text
+createStreamingURL_fleetName = Lens.lens (\CreateStreamingURL' {fleetName} -> fleetName) (\s@CreateStreamingURL' {} a -> s {fleetName = a} :: CreateStreamingURL)
+
+-- | The identifier of the user.
+createStreamingURL_userId :: Lens.Lens' CreateStreamingURL Prelude.Text
+createStreamingURL_userId = Lens.lens (\CreateStreamingURL' {userId} -> userId) (\s@CreateStreamingURL' {} a -> s {userId = a} :: CreateStreamingURL)
+
+instance Core.AWSRequest CreateStreamingURL where
+  type
+    AWSResponse CreateStreamingURL =
+      CreateStreamingURLResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateStreamingURLResponse'
+            Prelude.<$> (x Data..?> "Expires")
+            Prelude.<*> (x Data..?> "StreamingURL")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateStreamingURL where
+  hashWithSalt _salt CreateStreamingURL' {..} =
+    _salt
+      `Prelude.hashWithSalt` applicationId
+      `Prelude.hashWithSalt` sessionContext
+      `Prelude.hashWithSalt` validity
+      `Prelude.hashWithSalt` stackName
+      `Prelude.hashWithSalt` fleetName
+      `Prelude.hashWithSalt` userId
+
+instance Prelude.NFData CreateStreamingURL where
+  rnf CreateStreamingURL' {..} =
+    Prelude.rnf applicationId
+      `Prelude.seq` Prelude.rnf sessionContext
+      `Prelude.seq` Prelude.rnf validity
+      `Prelude.seq` Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf fleetName
+      `Prelude.seq` Prelude.rnf userId
+
+instance Data.ToHeaders CreateStreamingURL where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateStreamingURL" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateStreamingURL where
+  toJSON CreateStreamingURL' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ApplicationId" Data..=) Prelude.<$> applicationId,
+            ("SessionContext" Data..=)
+              Prelude.<$> sessionContext,
+            ("Validity" Data..=) Prelude.<$> validity,
+            Prelude.Just ("StackName" Data..= stackName),
+            Prelude.Just ("FleetName" Data..= fleetName),
+            Prelude.Just ("UserId" Data..= userId)
+          ]
+      )
+
+instance Data.ToPath CreateStreamingURL where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateStreamingURL where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateStreamingURLResponse' smart constructor.
+data CreateStreamingURLResponse = CreateStreamingURLResponse'
+  { -- | The elapsed time, in seconds after the Unix epoch, when this URL
+    -- expires.
+    expires :: Prelude.Maybe Data.POSIX,
+    -- | The URL to start the AppStream 2.0 streaming session.
+    streamingURL :: 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 'CreateStreamingURLResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'expires', 'createStreamingURLResponse_expires' - The elapsed time, in seconds after the Unix epoch, when this URL
+-- expires.
+--
+-- 'streamingURL', 'createStreamingURLResponse_streamingURL' - The URL to start the AppStream 2.0 streaming session.
+--
+-- 'httpStatus', 'createStreamingURLResponse_httpStatus' - The response's http status code.
+newCreateStreamingURLResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateStreamingURLResponse
+newCreateStreamingURLResponse pHttpStatus_ =
+  CreateStreamingURLResponse'
+    { expires =
+        Prelude.Nothing,
+      streamingURL = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The elapsed time, in seconds after the Unix epoch, when this URL
+-- expires.
+createStreamingURLResponse_expires :: Lens.Lens' CreateStreamingURLResponse (Prelude.Maybe Prelude.UTCTime)
+createStreamingURLResponse_expires = Lens.lens (\CreateStreamingURLResponse' {expires} -> expires) (\s@CreateStreamingURLResponse' {} a -> s {expires = a} :: CreateStreamingURLResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The URL to start the AppStream 2.0 streaming session.
+createStreamingURLResponse_streamingURL :: Lens.Lens' CreateStreamingURLResponse (Prelude.Maybe Prelude.Text)
+createStreamingURLResponse_streamingURL = Lens.lens (\CreateStreamingURLResponse' {streamingURL} -> streamingURL) (\s@CreateStreamingURLResponse' {} a -> s {streamingURL = a} :: CreateStreamingURLResponse)
+
+-- | The response's http status code.
+createStreamingURLResponse_httpStatus :: Lens.Lens' CreateStreamingURLResponse Prelude.Int
+createStreamingURLResponse_httpStatus = Lens.lens (\CreateStreamingURLResponse' {httpStatus} -> httpStatus) (\s@CreateStreamingURLResponse' {} a -> s {httpStatus = a} :: CreateStreamingURLResponse)
+
+instance Prelude.NFData CreateStreamingURLResponse where
+  rnf CreateStreamingURLResponse' {..} =
+    Prelude.rnf expires
+      `Prelude.seq` Prelude.rnf streamingURL
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateUpdatedImage.hs b/gen/Amazonka/AppStream/CreateUpdatedImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateUpdatedImage.hs
@@ -0,0 +1,319 @@
+{-# 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.AppStream.CreateUpdatedImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new image with the latest Windows operating system updates,
+-- driver updates, and AppStream 2.0 agent software.
+--
+-- For more information, see the \"Update an Image by Using Managed
+-- AppStream 2.0 Image Updates\" section in
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/administer-images.html Administer Your AppStream 2.0 Images>,
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+module Amazonka.AppStream.CreateUpdatedImage
+  ( -- * Creating a Request
+    CreateUpdatedImage (..),
+    newCreateUpdatedImage,
+
+    -- * Request Lenses
+    createUpdatedImage_dryRun,
+    createUpdatedImage_newImageDescription,
+    createUpdatedImage_newImageDisplayName,
+    createUpdatedImage_newImageTags,
+    createUpdatedImage_existingImageName,
+    createUpdatedImage_newImageName,
+
+    -- * Destructuring the Response
+    CreateUpdatedImageResponse (..),
+    newCreateUpdatedImageResponse,
+
+    -- * Response Lenses
+    createUpdatedImageResponse_canUpdateImage,
+    createUpdatedImageResponse_image,
+    createUpdatedImageResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateUpdatedImage' smart constructor.
+data CreateUpdatedImage = CreateUpdatedImage'
+  { -- | Indicates whether to display the status of image update availability
+    -- before AppStream 2.0 initiates the process of creating a new updated
+    -- image. If this value is set to @true@, AppStream 2.0 displays whether
+    -- image updates are available. If this value is set to @false@, AppStream
+    -- 2.0 initiates the process of creating a new updated image without
+    -- displaying whether image updates are available.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The description to display for the new image.
+    newImageDescription' :: Prelude.Maybe Prelude.Text,
+    -- | The name to display for the new image.
+    newImageDisplayName' :: Prelude.Maybe Prelude.Text,
+    -- | The tags to associate with the new image. A tag is a key-value pair, and
+    -- the value is optional. For example, Environment=Test. If you do not
+    -- specify a value, Environment=.
+    --
+    -- Generally allowed characters are: letters, numbers, and spaces
+    -- representable in UTF-8, and the following special characters:
+    --
+    -- _ . : \/ = + \\ - \@
+    --
+    -- If you do not specify a value, the value is set to an empty string.
+    --
+    -- For more information about tags, see
+    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+    -- in the /Amazon AppStream 2.0 Administration Guide/.
+    newImageTags' :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the image to update.
+    existingImageName :: Prelude.Text,
+    -- | The name of the new image. The name must be unique within the AWS
+    -- account and Region.
+    newImageName' :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUpdatedImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'dryRun', 'createUpdatedImage_dryRun' - Indicates whether to display the status of image update availability
+-- before AppStream 2.0 initiates the process of creating a new updated
+-- image. If this value is set to @true@, AppStream 2.0 displays whether
+-- image updates are available. If this value is set to @false@, AppStream
+-- 2.0 initiates the process of creating a new updated image without
+-- displaying whether image updates are available.
+--
+-- 'newImageDescription'', 'createUpdatedImage_newImageDescription' - The description to display for the new image.
+--
+-- 'newImageDisplayName'', 'createUpdatedImage_newImageDisplayName' - The name to display for the new image.
+--
+-- 'newImageTags'', 'createUpdatedImage_newImageTags' - The tags to associate with the new image. A tag is a key-value pair, and
+-- the value is optional. For example, Environment=Test. If you do not
+-- specify a value, Environment=.
+--
+-- Generally allowed characters are: letters, numbers, and spaces
+-- representable in UTF-8, and the following special characters:
+--
+-- _ . : \/ = + \\ - \@
+--
+-- If you do not specify a value, the value is set to an empty string.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- 'existingImageName', 'createUpdatedImage_existingImageName' - The name of the image to update.
+--
+-- 'newImageName'', 'createUpdatedImage_newImageName' - The name of the new image. The name must be unique within the AWS
+-- account and Region.
+newCreateUpdatedImage ::
+  -- | 'existingImageName'
+  Prelude.Text ->
+  -- | 'newImageName''
+  Prelude.Text ->
+  CreateUpdatedImage
+newCreateUpdatedImage
+  pExistingImageName_
+  pNewImageName_ =
+    CreateUpdatedImage'
+      { dryRun = Prelude.Nothing,
+        newImageDescription' = Prelude.Nothing,
+        newImageDisplayName' = Prelude.Nothing,
+        newImageTags' = Prelude.Nothing,
+        existingImageName = pExistingImageName_,
+        newImageName' = pNewImageName_
+      }
+
+-- | Indicates whether to display the status of image update availability
+-- before AppStream 2.0 initiates the process of creating a new updated
+-- image. If this value is set to @true@, AppStream 2.0 displays whether
+-- image updates are available. If this value is set to @false@, AppStream
+-- 2.0 initiates the process of creating a new updated image without
+-- displaying whether image updates are available.
+createUpdatedImage_dryRun :: Lens.Lens' CreateUpdatedImage (Prelude.Maybe Prelude.Bool)
+createUpdatedImage_dryRun = Lens.lens (\CreateUpdatedImage' {dryRun} -> dryRun) (\s@CreateUpdatedImage' {} a -> s {dryRun = a} :: CreateUpdatedImage)
+
+-- | The description to display for the new image.
+createUpdatedImage_newImageDescription :: Lens.Lens' CreateUpdatedImage (Prelude.Maybe Prelude.Text)
+createUpdatedImage_newImageDescription = Lens.lens (\CreateUpdatedImage' {newImageDescription'} -> newImageDescription') (\s@CreateUpdatedImage' {} a -> s {newImageDescription' = a} :: CreateUpdatedImage)
+
+-- | The name to display for the new image.
+createUpdatedImage_newImageDisplayName :: Lens.Lens' CreateUpdatedImage (Prelude.Maybe Prelude.Text)
+createUpdatedImage_newImageDisplayName = Lens.lens (\CreateUpdatedImage' {newImageDisplayName'} -> newImageDisplayName') (\s@CreateUpdatedImage' {} a -> s {newImageDisplayName' = a} :: CreateUpdatedImage)
+
+-- | The tags to associate with the new image. A tag is a key-value pair, and
+-- the value is optional. For example, Environment=Test. If you do not
+-- specify a value, Environment=.
+--
+-- Generally allowed characters are: letters, numbers, and spaces
+-- representable in UTF-8, and the following special characters:
+--
+-- _ . : \/ = + \\ - \@
+--
+-- If you do not specify a value, the value is set to an empty string.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+createUpdatedImage_newImageTags :: Lens.Lens' CreateUpdatedImage (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+createUpdatedImage_newImageTags = Lens.lens (\CreateUpdatedImage' {newImageTags'} -> newImageTags') (\s@CreateUpdatedImage' {} a -> s {newImageTags' = a} :: CreateUpdatedImage) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the image to update.
+createUpdatedImage_existingImageName :: Lens.Lens' CreateUpdatedImage Prelude.Text
+createUpdatedImage_existingImageName = Lens.lens (\CreateUpdatedImage' {existingImageName} -> existingImageName) (\s@CreateUpdatedImage' {} a -> s {existingImageName = a} :: CreateUpdatedImage)
+
+-- | The name of the new image. The name must be unique within the AWS
+-- account and Region.
+createUpdatedImage_newImageName :: Lens.Lens' CreateUpdatedImage Prelude.Text
+createUpdatedImage_newImageName = Lens.lens (\CreateUpdatedImage' {newImageName'} -> newImageName') (\s@CreateUpdatedImage' {} a -> s {newImageName' = a} :: CreateUpdatedImage)
+
+instance Core.AWSRequest CreateUpdatedImage where
+  type
+    AWSResponse CreateUpdatedImage =
+      CreateUpdatedImageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateUpdatedImageResponse'
+            Prelude.<$> (x Data..?> "canUpdateImage")
+            Prelude.<*> (x Data..?> "image")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateUpdatedImage where
+  hashWithSalt _salt CreateUpdatedImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` newImageDescription'
+      `Prelude.hashWithSalt` newImageDisplayName'
+      `Prelude.hashWithSalt` newImageTags'
+      `Prelude.hashWithSalt` existingImageName
+      `Prelude.hashWithSalt` newImageName'
+
+instance Prelude.NFData CreateUpdatedImage where
+  rnf CreateUpdatedImage' {..} =
+    Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf newImageDescription'
+      `Prelude.seq` Prelude.rnf newImageDisplayName'
+      `Prelude.seq` Prelude.rnf newImageTags'
+      `Prelude.seq` Prelude.rnf existingImageName
+      `Prelude.seq` Prelude.rnf newImageName'
+
+instance Data.ToHeaders CreateUpdatedImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateUpdatedImage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateUpdatedImage where
+  toJSON CreateUpdatedImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("dryRun" Data..=) Prelude.<$> dryRun,
+            ("newImageDescription" Data..=)
+              Prelude.<$> newImageDescription',
+            ("newImageDisplayName" Data..=)
+              Prelude.<$> newImageDisplayName',
+            ("newImageTags" Data..=) Prelude.<$> newImageTags',
+            Prelude.Just
+              ("existingImageName" Data..= existingImageName),
+            Prelude.Just ("newImageName" Data..= newImageName')
+          ]
+      )
+
+instance Data.ToPath CreateUpdatedImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateUpdatedImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateUpdatedImageResponse' smart constructor.
+data CreateUpdatedImageResponse = CreateUpdatedImageResponse'
+  { -- | Indicates whether a new image can be created.
+    canUpdateImage :: Prelude.Maybe Prelude.Bool,
+    image :: Prelude.Maybe Image,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUpdatedImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'canUpdateImage', 'createUpdatedImageResponse_canUpdateImage' - Indicates whether a new image can be created.
+--
+-- 'image', 'createUpdatedImageResponse_image' - Undocumented member.
+--
+-- 'httpStatus', 'createUpdatedImageResponse_httpStatus' - The response's http status code.
+newCreateUpdatedImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateUpdatedImageResponse
+newCreateUpdatedImageResponse pHttpStatus_ =
+  CreateUpdatedImageResponse'
+    { canUpdateImage =
+        Prelude.Nothing,
+      image = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Indicates whether a new image can be created.
+createUpdatedImageResponse_canUpdateImage :: Lens.Lens' CreateUpdatedImageResponse (Prelude.Maybe Prelude.Bool)
+createUpdatedImageResponse_canUpdateImage = Lens.lens (\CreateUpdatedImageResponse' {canUpdateImage} -> canUpdateImage) (\s@CreateUpdatedImageResponse' {} a -> s {canUpdateImage = a} :: CreateUpdatedImageResponse)
+
+-- | Undocumented member.
+createUpdatedImageResponse_image :: Lens.Lens' CreateUpdatedImageResponse (Prelude.Maybe Image)
+createUpdatedImageResponse_image = Lens.lens (\CreateUpdatedImageResponse' {image} -> image) (\s@CreateUpdatedImageResponse' {} a -> s {image = a} :: CreateUpdatedImageResponse)
+
+-- | The response's http status code.
+createUpdatedImageResponse_httpStatus :: Lens.Lens' CreateUpdatedImageResponse Prelude.Int
+createUpdatedImageResponse_httpStatus = Lens.lens (\CreateUpdatedImageResponse' {httpStatus} -> httpStatus) (\s@CreateUpdatedImageResponse' {} a -> s {httpStatus = a} :: CreateUpdatedImageResponse)
+
+instance Prelude.NFData CreateUpdatedImageResponse where
+  rnf CreateUpdatedImageResponse' {..} =
+    Prelude.rnf canUpdateImage
+      `Prelude.seq` Prelude.rnf image
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateUsageReportSubscription.hs b/gen/Amazonka/AppStream/CreateUsageReportSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateUsageReportSubscription.hs
@@ -0,0 +1,194 @@
+{-# 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.AppStream.CreateUsageReportSubscription
+-- 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 usage report subscription. Usage reports are generated daily.
+module Amazonka.AppStream.CreateUsageReportSubscription
+  ( -- * Creating a Request
+    CreateUsageReportSubscription (..),
+    newCreateUsageReportSubscription,
+
+    -- * Destructuring the Response
+    CreateUsageReportSubscriptionResponse (..),
+    newCreateUsageReportSubscriptionResponse,
+
+    -- * Response Lenses
+    createUsageReportSubscriptionResponse_s3BucketName,
+    createUsageReportSubscriptionResponse_schedule,
+    createUsageReportSubscriptionResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateUsageReportSubscription' smart constructor.
+data CreateUsageReportSubscription = CreateUsageReportSubscription'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUsageReportSubscription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCreateUsageReportSubscription ::
+  CreateUsageReportSubscription
+newCreateUsageReportSubscription =
+  CreateUsageReportSubscription'
+
+instance
+  Core.AWSRequest
+    CreateUsageReportSubscription
+  where
+  type
+    AWSResponse CreateUsageReportSubscription =
+      CreateUsageReportSubscriptionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateUsageReportSubscriptionResponse'
+            Prelude.<$> (x Data..?> "S3BucketName")
+            Prelude.<*> (x Data..?> "Schedule")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    CreateUsageReportSubscription
+  where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData CreateUsageReportSubscription where
+  rnf _ = ()
+
+instance Data.ToHeaders CreateUsageReportSubscription where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateUsageReportSubscription" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateUsageReportSubscription where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath CreateUsageReportSubscription where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateUsageReportSubscription where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateUsageReportSubscriptionResponse' smart constructor.
+data CreateUsageReportSubscriptionResponse = CreateUsageReportSubscriptionResponse'
+  { -- | The Amazon S3 bucket where generated reports are stored.
+    --
+    -- If you enabled on-instance session scripts and Amazon S3 logging for
+    -- your session script configuration, AppStream 2.0 created an S3 bucket to
+    -- store the script output. The bucket is unique to your account and
+    -- Region. When you enable usage reporting in this case, AppStream 2.0 uses
+    -- the same bucket to store your usage reports. If you haven\'t already
+    -- enabled on-instance session scripts, when you enable usage reports,
+    -- AppStream 2.0 creates a new S3 bucket.
+    s3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The schedule for generating usage reports.
+    schedule :: Prelude.Maybe UsageReportSchedule,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUsageReportSubscriptionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3BucketName', 'createUsageReportSubscriptionResponse_s3BucketName' - The Amazon S3 bucket where generated reports are stored.
+--
+-- If you enabled on-instance session scripts and Amazon S3 logging for
+-- your session script configuration, AppStream 2.0 created an S3 bucket to
+-- store the script output. The bucket is unique to your account and
+-- Region. When you enable usage reporting in this case, AppStream 2.0 uses
+-- the same bucket to store your usage reports. If you haven\'t already
+-- enabled on-instance session scripts, when you enable usage reports,
+-- AppStream 2.0 creates a new S3 bucket.
+--
+-- 'schedule', 'createUsageReportSubscriptionResponse_schedule' - The schedule for generating usage reports.
+--
+-- 'httpStatus', 'createUsageReportSubscriptionResponse_httpStatus' - The response's http status code.
+newCreateUsageReportSubscriptionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateUsageReportSubscriptionResponse
+newCreateUsageReportSubscriptionResponse pHttpStatus_ =
+  CreateUsageReportSubscriptionResponse'
+    { s3BucketName =
+        Prelude.Nothing,
+      schedule = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon S3 bucket where generated reports are stored.
+--
+-- If you enabled on-instance session scripts and Amazon S3 logging for
+-- your session script configuration, AppStream 2.0 created an S3 bucket to
+-- store the script output. The bucket is unique to your account and
+-- Region. When you enable usage reporting in this case, AppStream 2.0 uses
+-- the same bucket to store your usage reports. If you haven\'t already
+-- enabled on-instance session scripts, when you enable usage reports,
+-- AppStream 2.0 creates a new S3 bucket.
+createUsageReportSubscriptionResponse_s3BucketName :: Lens.Lens' CreateUsageReportSubscriptionResponse (Prelude.Maybe Prelude.Text)
+createUsageReportSubscriptionResponse_s3BucketName = Lens.lens (\CreateUsageReportSubscriptionResponse' {s3BucketName} -> s3BucketName) (\s@CreateUsageReportSubscriptionResponse' {} a -> s {s3BucketName = a} :: CreateUsageReportSubscriptionResponse)
+
+-- | The schedule for generating usage reports.
+createUsageReportSubscriptionResponse_schedule :: Lens.Lens' CreateUsageReportSubscriptionResponse (Prelude.Maybe UsageReportSchedule)
+createUsageReportSubscriptionResponse_schedule = Lens.lens (\CreateUsageReportSubscriptionResponse' {schedule} -> schedule) (\s@CreateUsageReportSubscriptionResponse' {} a -> s {schedule = a} :: CreateUsageReportSubscriptionResponse)
+
+-- | The response's http status code.
+createUsageReportSubscriptionResponse_httpStatus :: Lens.Lens' CreateUsageReportSubscriptionResponse Prelude.Int
+createUsageReportSubscriptionResponse_httpStatus = Lens.lens (\CreateUsageReportSubscriptionResponse' {httpStatus} -> httpStatus) (\s@CreateUsageReportSubscriptionResponse' {} a -> s {httpStatus = a} :: CreateUsageReportSubscriptionResponse)
+
+instance
+  Prelude.NFData
+    CreateUsageReportSubscriptionResponse
+  where
+  rnf CreateUsageReportSubscriptionResponse' {..} =
+    Prelude.rnf s3BucketName
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/CreateUser.hs b/gen/Amazonka/AppStream/CreateUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/CreateUser.hs
@@ -0,0 +1,246 @@
+{-# 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.AppStream.CreateUser
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new user in the user pool.
+module Amazonka.AppStream.CreateUser
+  ( -- * Creating a Request
+    CreateUser (..),
+    newCreateUser,
+
+    -- * Request Lenses
+    createUser_firstName,
+    createUser_lastName,
+    createUser_messageAction,
+    createUser_userName,
+    createUser_authenticationType,
+
+    -- * Destructuring the Response
+    CreateUserResponse (..),
+    newCreateUserResponse,
+
+    -- * Response Lenses
+    createUserResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newCreateUser' smart constructor.
+data CreateUser = CreateUser'
+  { -- | The first name, or given name, of the user.
+    firstName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The last name, or surname, of the user.
+    lastName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The action to take for the welcome email that is sent to a user after
+    -- the user is created in the user pool. If you specify SUPPRESS, no email
+    -- is sent. If you specify RESEND, do not specify the first name or last
+    -- name of the user. If the value is null, the email is sent.
+    --
+    -- The temporary password in the welcome email is valid for only 7 days. If
+    -- users don’t set their passwords within 7 days, you must send them a new
+    -- welcome email.
+    messageAction :: Prelude.Maybe MessageAction,
+    -- | The email address of the user.
+    --
+    -- Users\' email addresses are case-sensitive. During login, if they
+    -- specify an email address that doesn\'t use the same capitalization as
+    -- the email address specified when their user pool account was created, a
+    -- \"user does not exist\" error message displays.
+    userName :: Data.Sensitive Prelude.Text,
+    -- | The authentication type for the user. You must specify USERPOOL.
+    authenticationType :: AuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUser' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'firstName', 'createUser_firstName' - The first name, or given name, of the user.
+--
+-- 'lastName', 'createUser_lastName' - The last name, or surname, of the user.
+--
+-- 'messageAction', 'createUser_messageAction' - The action to take for the welcome email that is sent to a user after
+-- the user is created in the user pool. If you specify SUPPRESS, no email
+-- is sent. If you specify RESEND, do not specify the first name or last
+-- name of the user. If the value is null, the email is sent.
+--
+-- The temporary password in the welcome email is valid for only 7 days. If
+-- users don’t set their passwords within 7 days, you must send them a new
+-- welcome email.
+--
+-- 'userName', 'createUser_userName' - The email address of the user.
+--
+-- Users\' email addresses are case-sensitive. During login, if they
+-- specify an email address that doesn\'t use the same capitalization as
+-- the email address specified when their user pool account was created, a
+-- \"user does not exist\" error message displays.
+--
+-- 'authenticationType', 'createUser_authenticationType' - The authentication type for the user. You must specify USERPOOL.
+newCreateUser ::
+  -- | 'userName'
+  Prelude.Text ->
+  -- | 'authenticationType'
+  AuthenticationType ->
+  CreateUser
+newCreateUser pUserName_ pAuthenticationType_ =
+  CreateUser'
+    { firstName = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      messageAction = Prelude.Nothing,
+      userName = Data._Sensitive Lens.# pUserName_,
+      authenticationType = pAuthenticationType_
+    }
+
+-- | The first name, or given name, of the user.
+createUser_firstName :: Lens.Lens' CreateUser (Prelude.Maybe Prelude.Text)
+createUser_firstName = Lens.lens (\CreateUser' {firstName} -> firstName) (\s@CreateUser' {} a -> s {firstName = a} :: CreateUser) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The last name, or surname, of the user.
+createUser_lastName :: Lens.Lens' CreateUser (Prelude.Maybe Prelude.Text)
+createUser_lastName = Lens.lens (\CreateUser' {lastName} -> lastName) (\s@CreateUser' {} a -> s {lastName = a} :: CreateUser) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The action to take for the welcome email that is sent to a user after
+-- the user is created in the user pool. If you specify SUPPRESS, no email
+-- is sent. If you specify RESEND, do not specify the first name or last
+-- name of the user. If the value is null, the email is sent.
+--
+-- The temporary password in the welcome email is valid for only 7 days. If
+-- users don’t set their passwords within 7 days, you must send them a new
+-- welcome email.
+createUser_messageAction :: Lens.Lens' CreateUser (Prelude.Maybe MessageAction)
+createUser_messageAction = Lens.lens (\CreateUser' {messageAction} -> messageAction) (\s@CreateUser' {} a -> s {messageAction = a} :: CreateUser)
+
+-- | The email address of the user.
+--
+-- Users\' email addresses are case-sensitive. During login, if they
+-- specify an email address that doesn\'t use the same capitalization as
+-- the email address specified when their user pool account was created, a
+-- \"user does not exist\" error message displays.
+createUser_userName :: Lens.Lens' CreateUser Prelude.Text
+createUser_userName = Lens.lens (\CreateUser' {userName} -> userName) (\s@CreateUser' {} a -> s {userName = a} :: CreateUser) Prelude.. Data._Sensitive
+
+-- | The authentication type for the user. You must specify USERPOOL.
+createUser_authenticationType :: Lens.Lens' CreateUser AuthenticationType
+createUser_authenticationType = Lens.lens (\CreateUser' {authenticationType} -> authenticationType) (\s@CreateUser' {} a -> s {authenticationType = a} :: CreateUser)
+
+instance Core.AWSRequest CreateUser where
+  type AWSResponse CreateUser = CreateUserResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CreateUserResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateUser where
+  hashWithSalt _salt CreateUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` messageAction
+      `Prelude.hashWithSalt` userName
+      `Prelude.hashWithSalt` authenticationType
+
+instance Prelude.NFData CreateUser where
+  rnf CreateUser' {..} =
+    Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf messageAction
+      `Prelude.seq` Prelude.rnf userName
+      `Prelude.seq` Prelude.rnf authenticationType
+
+instance Data.ToHeaders CreateUser where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.CreateUser" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateUser where
+  toJSON CreateUser' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("FirstName" Data..=) Prelude.<$> firstName,
+            ("LastName" Data..=) Prelude.<$> lastName,
+            ("MessageAction" Data..=) Prelude.<$> messageAction,
+            Prelude.Just ("UserName" Data..= userName),
+            Prelude.Just
+              ("AuthenticationType" Data..= authenticationType)
+          ]
+      )
+
+instance Data.ToPath CreateUser where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateUser where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateUserResponse' smart constructor.
+data CreateUserResponse = CreateUserResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateUserResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createUserResponse_httpStatus' - The response's http status code.
+newCreateUserResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateUserResponse
+newCreateUserResponse pHttpStatus_ =
+  CreateUserResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+createUserResponse_httpStatus :: Lens.Lens' CreateUserResponse Prelude.Int
+createUserResponse_httpStatus = Lens.lens (\CreateUserResponse' {httpStatus} -> httpStatus) (\s@CreateUserResponse' {} a -> s {httpStatus = a} :: CreateUserResponse)
+
+instance Prelude.NFData CreateUserResponse where
+  rnf CreateUserResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteAppBlock.hs b/gen/Amazonka/AppStream/DeleteAppBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteAppBlock.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DeleteAppBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an app block.
+module Amazonka.AppStream.DeleteAppBlock
+  ( -- * Creating a Request
+    DeleteAppBlock (..),
+    newDeleteAppBlock,
+
+    -- * Request Lenses
+    deleteAppBlock_name,
+
+    -- * Destructuring the Response
+    DeleteAppBlockResponse (..),
+    newDeleteAppBlockResponse,
+
+    -- * Response Lenses
+    deleteAppBlockResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteAppBlock' smart constructor.
+data DeleteAppBlock = DeleteAppBlock'
+  { -- | The name of the app block.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAppBlock_name' - The name of the app block.
+newDeleteAppBlock ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteAppBlock
+newDeleteAppBlock pName_ =
+  DeleteAppBlock' {name = pName_}
+
+-- | The name of the app block.
+deleteAppBlock_name :: Lens.Lens' DeleteAppBlock Prelude.Text
+deleteAppBlock_name = Lens.lens (\DeleteAppBlock' {name} -> name) (\s@DeleteAppBlock' {} a -> s {name = a} :: DeleteAppBlock)
+
+instance Core.AWSRequest DeleteAppBlock where
+  type
+    AWSResponse DeleteAppBlock =
+      DeleteAppBlockResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAppBlockResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteAppBlock where
+  hashWithSalt _salt DeleteAppBlock' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteAppBlock where
+  rnf DeleteAppBlock' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteAppBlock where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteAppBlock" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAppBlock where
+  toJSON DeleteAppBlock' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteAppBlock where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteAppBlock where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAppBlockResponse' smart constructor.
+data DeleteAppBlockResponse = DeleteAppBlockResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppBlockResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAppBlockResponse_httpStatus' - The response's http status code.
+newDeleteAppBlockResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAppBlockResponse
+newDeleteAppBlockResponse pHttpStatus_ =
+  DeleteAppBlockResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteAppBlockResponse_httpStatus :: Lens.Lens' DeleteAppBlockResponse Prelude.Int
+deleteAppBlockResponse_httpStatus = Lens.lens (\DeleteAppBlockResponse' {httpStatus} -> httpStatus) (\s@DeleteAppBlockResponse' {} a -> s {httpStatus = a} :: DeleteAppBlockResponse)
+
+instance Prelude.NFData DeleteAppBlockResponse where
+  rnf DeleteAppBlockResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteApplication.hs b/gen/Amazonka/AppStream/DeleteApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteApplication.hs
@@ -0,0 +1,156 @@
+{-# 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.AppStream.DeleteApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an application.
+module Amazonka.AppStream.DeleteApplication
+  ( -- * Creating a Request
+    DeleteApplication (..),
+    newDeleteApplication,
+
+    -- * Request Lenses
+    deleteApplication_name,
+
+    -- * Destructuring the Response
+    DeleteApplicationResponse (..),
+    newDeleteApplicationResponse,
+
+    -- * Response Lenses
+    deleteApplicationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteApplication' smart constructor.
+data DeleteApplication = DeleteApplication'
+  { -- | The name of the application.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'deleteApplication_name' - The name of the application.
+newDeleteApplication ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteApplication
+newDeleteApplication pName_ =
+  DeleteApplication' {name = pName_}
+
+-- | The name of the application.
+deleteApplication_name :: Lens.Lens' DeleteApplication Prelude.Text
+deleteApplication_name = Lens.lens (\DeleteApplication' {name} -> name) (\s@DeleteApplication' {} a -> s {name = a} :: DeleteApplication)
+
+instance Core.AWSRequest DeleteApplication where
+  type
+    AWSResponse DeleteApplication =
+      DeleteApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteApplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteApplication where
+  hashWithSalt _salt DeleteApplication' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteApplication where
+  rnf DeleteApplication' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteApplication" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteApplication where
+  toJSON DeleteApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteApplication where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteApplicationResponse' smart constructor.
+data DeleteApplicationResponse = DeleteApplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteApplicationResponse_httpStatus' - The response's http status code.
+newDeleteApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteApplicationResponse
+newDeleteApplicationResponse pHttpStatus_ =
+  DeleteApplicationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteApplicationResponse_httpStatus :: Lens.Lens' DeleteApplicationResponse Prelude.Int
+deleteApplicationResponse_httpStatus = Lens.lens (\DeleteApplicationResponse' {httpStatus} -> httpStatus) (\s@DeleteApplicationResponse' {} a -> s {httpStatus = a} :: DeleteApplicationResponse)
+
+instance Prelude.NFData DeleteApplicationResponse where
+  rnf DeleteApplicationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteDirectoryConfig.hs b/gen/Amazonka/AppStream/DeleteDirectoryConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteDirectoryConfig.hs
@@ -0,0 +1,164 @@
+{-# 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.AppStream.DeleteDirectoryConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified Directory Config object from AppStream 2.0. This
+-- object includes the information required to join streaming instances to
+-- an Active Directory domain.
+module Amazonka.AppStream.DeleteDirectoryConfig
+  ( -- * Creating a Request
+    DeleteDirectoryConfig (..),
+    newDeleteDirectoryConfig,
+
+    -- * Request Lenses
+    deleteDirectoryConfig_directoryName,
+
+    -- * Destructuring the Response
+    DeleteDirectoryConfigResponse (..),
+    newDeleteDirectoryConfigResponse,
+
+    -- * Response Lenses
+    deleteDirectoryConfigResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteDirectoryConfig' smart constructor.
+data DeleteDirectoryConfig = DeleteDirectoryConfig'
+  { -- | The name of the directory configuration.
+    directoryName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDirectoryConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryName', 'deleteDirectoryConfig_directoryName' - The name of the directory configuration.
+newDeleteDirectoryConfig ::
+  -- | 'directoryName'
+  Prelude.Text ->
+  DeleteDirectoryConfig
+newDeleteDirectoryConfig pDirectoryName_ =
+  DeleteDirectoryConfig'
+    { directoryName =
+        pDirectoryName_
+    }
+
+-- | The name of the directory configuration.
+deleteDirectoryConfig_directoryName :: Lens.Lens' DeleteDirectoryConfig Prelude.Text
+deleteDirectoryConfig_directoryName = Lens.lens (\DeleteDirectoryConfig' {directoryName} -> directoryName) (\s@DeleteDirectoryConfig' {} a -> s {directoryName = a} :: DeleteDirectoryConfig)
+
+instance Core.AWSRequest DeleteDirectoryConfig where
+  type
+    AWSResponse DeleteDirectoryConfig =
+      DeleteDirectoryConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteDirectoryConfigResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteDirectoryConfig where
+  hashWithSalt _salt DeleteDirectoryConfig' {..} =
+    _salt `Prelude.hashWithSalt` directoryName
+
+instance Prelude.NFData DeleteDirectoryConfig where
+  rnf DeleteDirectoryConfig' {..} =
+    Prelude.rnf directoryName
+
+instance Data.ToHeaders DeleteDirectoryConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteDirectoryConfig" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteDirectoryConfig where
+  toJSON DeleteDirectoryConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DirectoryName" Data..= directoryName)
+          ]
+      )
+
+instance Data.ToPath DeleteDirectoryConfig where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDirectoryConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteDirectoryConfigResponse' smart constructor.
+data DeleteDirectoryConfigResponse = DeleteDirectoryConfigResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDirectoryConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteDirectoryConfigResponse_httpStatus' - The response's http status code.
+newDeleteDirectoryConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteDirectoryConfigResponse
+newDeleteDirectoryConfigResponse pHttpStatus_ =
+  DeleteDirectoryConfigResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteDirectoryConfigResponse_httpStatus :: Lens.Lens' DeleteDirectoryConfigResponse Prelude.Int
+deleteDirectoryConfigResponse_httpStatus = Lens.lens (\DeleteDirectoryConfigResponse' {httpStatus} -> httpStatus) (\s@DeleteDirectoryConfigResponse' {} a -> s {httpStatus = a} :: DeleteDirectoryConfigResponse)
+
+instance Prelude.NFData DeleteDirectoryConfigResponse where
+  rnf DeleteDirectoryConfigResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteEntitlement.hs b/gen/Amazonka/AppStream/DeleteEntitlement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteEntitlement.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DeleteEntitlement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified entitlement.
+module Amazonka.AppStream.DeleteEntitlement
+  ( -- * Creating a Request
+    DeleteEntitlement (..),
+    newDeleteEntitlement,
+
+    -- * Request Lenses
+    deleteEntitlement_name,
+    deleteEntitlement_stackName,
+
+    -- * Destructuring the Response
+    DeleteEntitlementResponse (..),
+    newDeleteEntitlementResponse,
+
+    -- * Response Lenses
+    deleteEntitlementResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteEntitlement' smart constructor.
+data DeleteEntitlement = DeleteEntitlement'
+  { -- | The name of the entitlement.
+    name :: Prelude.Text,
+    -- | The name of the stack with which the entitlement is associated.
+    stackName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEntitlement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEntitlement_name' - The name of the entitlement.
+--
+-- 'stackName', 'deleteEntitlement_stackName' - The name of the stack with which the entitlement is associated.
+newDeleteEntitlement ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'stackName'
+  Prelude.Text ->
+  DeleteEntitlement
+newDeleteEntitlement pName_ pStackName_ =
+  DeleteEntitlement'
+    { name = pName_,
+      stackName = pStackName_
+    }
+
+-- | The name of the entitlement.
+deleteEntitlement_name :: Lens.Lens' DeleteEntitlement Prelude.Text
+deleteEntitlement_name = Lens.lens (\DeleteEntitlement' {name} -> name) (\s@DeleteEntitlement' {} a -> s {name = a} :: DeleteEntitlement)
+
+-- | The name of the stack with which the entitlement is associated.
+deleteEntitlement_stackName :: Lens.Lens' DeleteEntitlement Prelude.Text
+deleteEntitlement_stackName = Lens.lens (\DeleteEntitlement' {stackName} -> stackName) (\s@DeleteEntitlement' {} a -> s {stackName = a} :: DeleteEntitlement)
+
+instance Core.AWSRequest DeleteEntitlement where
+  type
+    AWSResponse DeleteEntitlement =
+      DeleteEntitlementResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEntitlementResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEntitlement where
+  hashWithSalt _salt DeleteEntitlement' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` stackName
+
+instance Prelude.NFData DeleteEntitlement where
+  rnf DeleteEntitlement' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf stackName
+
+instance Data.ToHeaders DeleteEntitlement where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteEntitlement" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteEntitlement where
+  toJSON DeleteEntitlement' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("StackName" Data..= stackName)
+          ]
+      )
+
+instance Data.ToPath DeleteEntitlement where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteEntitlement where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEntitlementResponse' smart constructor.
+data DeleteEntitlementResponse = DeleteEntitlementResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEntitlementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEntitlementResponse_httpStatus' - The response's http status code.
+newDeleteEntitlementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEntitlementResponse
+newDeleteEntitlementResponse pHttpStatus_ =
+  DeleteEntitlementResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteEntitlementResponse_httpStatus :: Lens.Lens' DeleteEntitlementResponse Prelude.Int
+deleteEntitlementResponse_httpStatus = Lens.lens (\DeleteEntitlementResponse' {httpStatus} -> httpStatus) (\s@DeleteEntitlementResponse' {} a -> s {httpStatus = a} :: DeleteEntitlementResponse)
+
+instance Prelude.NFData DeleteEntitlementResponse where
+  rnf DeleteEntitlementResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteFleet.hs b/gen/Amazonka/AppStream/DeleteFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteFleet.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DeleteFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified fleet.
+module Amazonka.AppStream.DeleteFleet
+  ( -- * Creating a Request
+    DeleteFleet (..),
+    newDeleteFleet,
+
+    -- * Request Lenses
+    deleteFleet_name,
+
+    -- * Destructuring the Response
+    DeleteFleetResponse (..),
+    newDeleteFleetResponse,
+
+    -- * Response Lenses
+    deleteFleetResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteFleet' smart constructor.
+data DeleteFleet = DeleteFleet'
+  { -- | The name of the fleet.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteFleet_name' - The name of the fleet.
+newDeleteFleet ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteFleet
+newDeleteFleet pName_ = DeleteFleet' {name = pName_}
+
+-- | The name of the fleet.
+deleteFleet_name :: Lens.Lens' DeleteFleet Prelude.Text
+deleteFleet_name = Lens.lens (\DeleteFleet' {name} -> name) (\s@DeleteFleet' {} a -> s {name = a} :: DeleteFleet)
+
+instance Core.AWSRequest DeleteFleet where
+  type AWSResponse DeleteFleet = DeleteFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteFleet where
+  hashWithSalt _salt DeleteFleet' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteFleet where
+  rnf DeleteFleet' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteFleet where
+  toJSON DeleteFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteFleetResponse' smart constructor.
+data DeleteFleetResponse = DeleteFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteFleetResponse_httpStatus' - The response's http status code.
+newDeleteFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteFleetResponse
+newDeleteFleetResponse pHttpStatus_ =
+  DeleteFleetResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteFleetResponse_httpStatus :: Lens.Lens' DeleteFleetResponse Prelude.Int
+deleteFleetResponse_httpStatus = Lens.lens (\DeleteFleetResponse' {httpStatus} -> httpStatus) (\s@DeleteFleetResponse' {} a -> s {httpStatus = a} :: DeleteFleetResponse)
+
+instance Prelude.NFData DeleteFleetResponse where
+  rnf DeleteFleetResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteImage.hs b/gen/Amazonka/AppStream/DeleteImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteImage.hs
@@ -0,0 +1,166 @@
+{-# 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.AppStream.DeleteImage
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified image. You cannot delete an image when it is in
+-- use. After you delete an image, you cannot provision new capacity using
+-- the image.
+module Amazonka.AppStream.DeleteImage
+  ( -- * Creating a Request
+    DeleteImage (..),
+    newDeleteImage,
+
+    -- * Request Lenses
+    deleteImage_name,
+
+    -- * Destructuring the Response
+    DeleteImageResponse (..),
+    newDeleteImageResponse,
+
+    -- * Response Lenses
+    deleteImageResponse_image,
+    deleteImageResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteImage' smart constructor.
+data DeleteImage = DeleteImage'
+  { -- | The name of the image.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteImage_name' - The name of the image.
+newDeleteImage ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteImage
+newDeleteImage pName_ = DeleteImage' {name = pName_}
+
+-- | The name of the image.
+deleteImage_name :: Lens.Lens' DeleteImage Prelude.Text
+deleteImage_name = Lens.lens (\DeleteImage' {name} -> name) (\s@DeleteImage' {} a -> s {name = a} :: DeleteImage)
+
+instance Core.AWSRequest DeleteImage where
+  type AWSResponse DeleteImage = DeleteImageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteImageResponse'
+            Prelude.<$> (x Data..?> "Image")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteImage where
+  hashWithSalt _salt DeleteImage' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteImage where
+  rnf DeleteImage' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteImage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteImage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteImage where
+  toJSON DeleteImage' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteImage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteImage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteImageResponse' smart constructor.
+data DeleteImageResponse = DeleteImageResponse'
+  { -- | Information about the image.
+    image :: Prelude.Maybe Image,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'image', 'deleteImageResponse_image' - Information about the image.
+--
+-- 'httpStatus', 'deleteImageResponse_httpStatus' - The response's http status code.
+newDeleteImageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteImageResponse
+newDeleteImageResponse pHttpStatus_ =
+  DeleteImageResponse'
+    { image = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the image.
+deleteImageResponse_image :: Lens.Lens' DeleteImageResponse (Prelude.Maybe Image)
+deleteImageResponse_image = Lens.lens (\DeleteImageResponse' {image} -> image) (\s@DeleteImageResponse' {} a -> s {image = a} :: DeleteImageResponse)
+
+-- | The response's http status code.
+deleteImageResponse_httpStatus :: Lens.Lens' DeleteImageResponse Prelude.Int
+deleteImageResponse_httpStatus = Lens.lens (\DeleteImageResponse' {httpStatus} -> httpStatus) (\s@DeleteImageResponse' {} a -> s {httpStatus = a} :: DeleteImageResponse)
+
+instance Prelude.NFData DeleteImageResponse where
+  rnf DeleteImageResponse' {..} =
+    Prelude.rnf image
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteImageBuilder.hs b/gen/Amazonka/AppStream/DeleteImageBuilder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteImageBuilder.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DeleteImageBuilder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified image builder and releases the capacity.
+module Amazonka.AppStream.DeleteImageBuilder
+  ( -- * Creating a Request
+    DeleteImageBuilder (..),
+    newDeleteImageBuilder,
+
+    -- * Request Lenses
+    deleteImageBuilder_name,
+
+    -- * Destructuring the Response
+    DeleteImageBuilderResponse (..),
+    newDeleteImageBuilderResponse,
+
+    -- * Response Lenses
+    deleteImageBuilderResponse_imageBuilder,
+    deleteImageBuilderResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteImageBuilder' smart constructor.
+data DeleteImageBuilder = DeleteImageBuilder'
+  { -- | The name of the image builder.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImageBuilder' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteImageBuilder_name' - The name of the image builder.
+newDeleteImageBuilder ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteImageBuilder
+newDeleteImageBuilder pName_ =
+  DeleteImageBuilder' {name = pName_}
+
+-- | The name of the image builder.
+deleteImageBuilder_name :: Lens.Lens' DeleteImageBuilder Prelude.Text
+deleteImageBuilder_name = Lens.lens (\DeleteImageBuilder' {name} -> name) (\s@DeleteImageBuilder' {} a -> s {name = a} :: DeleteImageBuilder)
+
+instance Core.AWSRequest DeleteImageBuilder where
+  type
+    AWSResponse DeleteImageBuilder =
+      DeleteImageBuilderResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DeleteImageBuilderResponse'
+            Prelude.<$> (x Data..?> "ImageBuilder")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteImageBuilder where
+  hashWithSalt _salt DeleteImageBuilder' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteImageBuilder where
+  rnf DeleteImageBuilder' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteImageBuilder where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteImageBuilder" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteImageBuilder where
+  toJSON DeleteImageBuilder' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteImageBuilder where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteImageBuilder where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteImageBuilderResponse' smart constructor.
+data DeleteImageBuilderResponse = DeleteImageBuilderResponse'
+  { -- | Information about the image builder.
+    imageBuilder :: Prelude.Maybe ImageBuilder,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImageBuilderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageBuilder', 'deleteImageBuilderResponse_imageBuilder' - Information about the image builder.
+--
+-- 'httpStatus', 'deleteImageBuilderResponse_httpStatus' - The response's http status code.
+newDeleteImageBuilderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteImageBuilderResponse
+newDeleteImageBuilderResponse pHttpStatus_ =
+  DeleteImageBuilderResponse'
+    { imageBuilder =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the image builder.
+deleteImageBuilderResponse_imageBuilder :: Lens.Lens' DeleteImageBuilderResponse (Prelude.Maybe ImageBuilder)
+deleteImageBuilderResponse_imageBuilder = Lens.lens (\DeleteImageBuilderResponse' {imageBuilder} -> imageBuilder) (\s@DeleteImageBuilderResponse' {} a -> s {imageBuilder = a} :: DeleteImageBuilderResponse)
+
+-- | The response's http status code.
+deleteImageBuilderResponse_httpStatus :: Lens.Lens' DeleteImageBuilderResponse Prelude.Int
+deleteImageBuilderResponse_httpStatus = Lens.lens (\DeleteImageBuilderResponse' {httpStatus} -> httpStatus) (\s@DeleteImageBuilderResponse' {} a -> s {httpStatus = a} :: DeleteImageBuilderResponse)
+
+instance Prelude.NFData DeleteImageBuilderResponse where
+  rnf DeleteImageBuilderResponse' {..} =
+    Prelude.rnf imageBuilder
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteImagePermissions.hs b/gen/Amazonka/AppStream/DeleteImagePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteImagePermissions.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.AppStream.DeleteImagePermissions
+-- 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 permissions for the specified private image. After you delete
+-- permissions for an image, AWS accounts to which you previously granted
+-- these permissions can no longer use the image.
+module Amazonka.AppStream.DeleteImagePermissions
+  ( -- * Creating a Request
+    DeleteImagePermissions (..),
+    newDeleteImagePermissions,
+
+    -- * Request Lenses
+    deleteImagePermissions_name,
+    deleteImagePermissions_sharedAccountId,
+
+    -- * Destructuring the Response
+    DeleteImagePermissionsResponse (..),
+    newDeleteImagePermissionsResponse,
+
+    -- * Response Lenses
+    deleteImagePermissionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteImagePermissions' smart constructor.
+data DeleteImagePermissions = DeleteImagePermissions'
+  { -- | The name of the private image.
+    name :: Prelude.Text,
+    -- | The 12-digit identifier of the AWS account for which to delete image
+    -- permissions.
+    sharedAccountId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImagePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteImagePermissions_name' - The name of the private image.
+--
+-- 'sharedAccountId', 'deleteImagePermissions_sharedAccountId' - The 12-digit identifier of the AWS account for which to delete image
+-- permissions.
+newDeleteImagePermissions ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'sharedAccountId'
+  Prelude.Text ->
+  DeleteImagePermissions
+newDeleteImagePermissions pName_ pSharedAccountId_ =
+  DeleteImagePermissions'
+    { name = pName_,
+      sharedAccountId = pSharedAccountId_
+    }
+
+-- | The name of the private image.
+deleteImagePermissions_name :: Lens.Lens' DeleteImagePermissions Prelude.Text
+deleteImagePermissions_name = Lens.lens (\DeleteImagePermissions' {name} -> name) (\s@DeleteImagePermissions' {} a -> s {name = a} :: DeleteImagePermissions)
+
+-- | The 12-digit identifier of the AWS account for which to delete image
+-- permissions.
+deleteImagePermissions_sharedAccountId :: Lens.Lens' DeleteImagePermissions Prelude.Text
+deleteImagePermissions_sharedAccountId = Lens.lens (\DeleteImagePermissions' {sharedAccountId} -> sharedAccountId) (\s@DeleteImagePermissions' {} a -> s {sharedAccountId = a} :: DeleteImagePermissions)
+
+instance Core.AWSRequest DeleteImagePermissions where
+  type
+    AWSResponse DeleteImagePermissions =
+      DeleteImagePermissionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteImagePermissionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteImagePermissions where
+  hashWithSalt _salt DeleteImagePermissions' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` sharedAccountId
+
+instance Prelude.NFData DeleteImagePermissions where
+  rnf DeleteImagePermissions' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sharedAccountId
+
+instance Data.ToHeaders DeleteImagePermissions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteImagePermissions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteImagePermissions where
+  toJSON DeleteImagePermissions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("SharedAccountId" Data..= sharedAccountId)
+          ]
+      )
+
+instance Data.ToPath DeleteImagePermissions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteImagePermissions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteImagePermissionsResponse' smart constructor.
+data DeleteImagePermissionsResponse = DeleteImagePermissionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteImagePermissionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteImagePermissionsResponse_httpStatus' - The response's http status code.
+newDeleteImagePermissionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteImagePermissionsResponse
+newDeleteImagePermissionsResponse pHttpStatus_ =
+  DeleteImagePermissionsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteImagePermissionsResponse_httpStatus :: Lens.Lens' DeleteImagePermissionsResponse Prelude.Int
+deleteImagePermissionsResponse_httpStatus = Lens.lens (\DeleteImagePermissionsResponse' {httpStatus} -> httpStatus) (\s@DeleteImagePermissionsResponse' {} a -> s {httpStatus = a} :: DeleteImagePermissionsResponse)
+
+instance
+  Prelude.NFData
+    DeleteImagePermissionsResponse
+  where
+  rnf DeleteImagePermissionsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteStack.hs b/gen/Amazonka/AppStream/DeleteStack.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteStack.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DeleteStack
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified stack. After the stack is deleted, the application
+-- streaming environment provided by the stack is no longer available to
+-- users. Also, any reservations made for application streaming sessions
+-- for the stack are released.
+module Amazonka.AppStream.DeleteStack
+  ( -- * Creating a Request
+    DeleteStack (..),
+    newDeleteStack,
+
+    -- * Request Lenses
+    deleteStack_name,
+
+    -- * Destructuring the Response
+    DeleteStackResponse (..),
+    newDeleteStackResponse,
+
+    -- * Response Lenses
+    deleteStackResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteStack' smart constructor.
+data DeleteStack = DeleteStack'
+  { -- | The name of the stack.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStack' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteStack_name' - The name of the stack.
+newDeleteStack ::
+  -- | 'name'
+  Prelude.Text ->
+  DeleteStack
+newDeleteStack pName_ = DeleteStack' {name = pName_}
+
+-- | The name of the stack.
+deleteStack_name :: Lens.Lens' DeleteStack Prelude.Text
+deleteStack_name = Lens.lens (\DeleteStack' {name} -> name) (\s@DeleteStack' {} a -> s {name = a} :: DeleteStack)
+
+instance Core.AWSRequest DeleteStack where
+  type AWSResponse DeleteStack = DeleteStackResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteStackResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteStack where
+  hashWithSalt _salt DeleteStack' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeleteStack where
+  rnf DeleteStack' {..} = Prelude.rnf name
+
+instance Data.ToHeaders DeleteStack where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteStack" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteStack where
+  toJSON DeleteStack' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Name" Data..= name)]
+      )
+
+instance Data.ToPath DeleteStack where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteStack where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteStackResponse' smart constructor.
+data DeleteStackResponse = DeleteStackResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteStackResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteStackResponse_httpStatus' - The response's http status code.
+newDeleteStackResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteStackResponse
+newDeleteStackResponse pHttpStatus_ =
+  DeleteStackResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteStackResponse_httpStatus :: Lens.Lens' DeleteStackResponse Prelude.Int
+deleteStackResponse_httpStatus = Lens.lens (\DeleteStackResponse' {httpStatus} -> httpStatus) (\s@DeleteStackResponse' {} a -> s {httpStatus = a} :: DeleteStackResponse)
+
+instance Prelude.NFData DeleteStackResponse where
+  rnf DeleteStackResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteUsageReportSubscription.hs b/gen/Amazonka/AppStream/DeleteUsageReportSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteUsageReportSubscription.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DeleteUsageReportSubscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables usage report generation.
+module Amazonka.AppStream.DeleteUsageReportSubscription
+  ( -- * Creating a Request
+    DeleteUsageReportSubscription (..),
+    newDeleteUsageReportSubscription,
+
+    -- * Destructuring the Response
+    DeleteUsageReportSubscriptionResponse (..),
+    newDeleteUsageReportSubscriptionResponse,
+
+    -- * Response Lenses
+    deleteUsageReportSubscriptionResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteUsageReportSubscription' smart constructor.
+data DeleteUsageReportSubscription = DeleteUsageReportSubscription'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteUsageReportSubscription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteUsageReportSubscription ::
+  DeleteUsageReportSubscription
+newDeleteUsageReportSubscription =
+  DeleteUsageReportSubscription'
+
+instance
+  Core.AWSRequest
+    DeleteUsageReportSubscription
+  where
+  type
+    AWSResponse DeleteUsageReportSubscription =
+      DeleteUsageReportSubscriptionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteUsageReportSubscriptionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteUsageReportSubscription
+  where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DeleteUsageReportSubscription where
+  rnf _ = ()
+
+instance Data.ToHeaders DeleteUsageReportSubscription where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteUsageReportSubscription" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteUsageReportSubscription where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath DeleteUsageReportSubscription where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteUsageReportSubscription where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteUsageReportSubscriptionResponse' smart constructor.
+data DeleteUsageReportSubscriptionResponse = DeleteUsageReportSubscriptionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteUsageReportSubscriptionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteUsageReportSubscriptionResponse_httpStatus' - The response's http status code.
+newDeleteUsageReportSubscriptionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteUsageReportSubscriptionResponse
+newDeleteUsageReportSubscriptionResponse pHttpStatus_ =
+  DeleteUsageReportSubscriptionResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteUsageReportSubscriptionResponse_httpStatus :: Lens.Lens' DeleteUsageReportSubscriptionResponse Prelude.Int
+deleteUsageReportSubscriptionResponse_httpStatus = Lens.lens (\DeleteUsageReportSubscriptionResponse' {httpStatus} -> httpStatus) (\s@DeleteUsageReportSubscriptionResponse' {} a -> s {httpStatus = a} :: DeleteUsageReportSubscriptionResponse)
+
+instance
+  Prelude.NFData
+    DeleteUsageReportSubscriptionResponse
+  where
+  rnf DeleteUsageReportSubscriptionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DeleteUser.hs b/gen/Amazonka/AppStream/DeleteUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DeleteUser.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DeleteUser
+-- 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 user from the user pool.
+module Amazonka.AppStream.DeleteUser
+  ( -- * Creating a Request
+    DeleteUser (..),
+    newDeleteUser,
+
+    -- * Request Lenses
+    deleteUser_userName,
+    deleteUser_authenticationType,
+
+    -- * Destructuring the Response
+    DeleteUserResponse (..),
+    newDeleteUserResponse,
+
+    -- * Response Lenses
+    deleteUserResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDeleteUser' smart constructor.
+data DeleteUser = DeleteUser'
+  { -- | The email address of the user.
+    --
+    -- Users\' email addresses are case-sensitive.
+    userName :: Data.Sensitive Prelude.Text,
+    -- | The authentication type for the user. You must specify USERPOOL.
+    authenticationType :: AuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteUser' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userName', 'deleteUser_userName' - The email address of the user.
+--
+-- Users\' email addresses are case-sensitive.
+--
+-- 'authenticationType', 'deleteUser_authenticationType' - The authentication type for the user. You must specify USERPOOL.
+newDeleteUser ::
+  -- | 'userName'
+  Prelude.Text ->
+  -- | 'authenticationType'
+  AuthenticationType ->
+  DeleteUser
+newDeleteUser pUserName_ pAuthenticationType_ =
+  DeleteUser'
+    { userName =
+        Data._Sensitive Lens.# pUserName_,
+      authenticationType = pAuthenticationType_
+    }
+
+-- | The email address of the user.
+--
+-- Users\' email addresses are case-sensitive.
+deleteUser_userName :: Lens.Lens' DeleteUser Prelude.Text
+deleteUser_userName = Lens.lens (\DeleteUser' {userName} -> userName) (\s@DeleteUser' {} a -> s {userName = a} :: DeleteUser) Prelude.. Data._Sensitive
+
+-- | The authentication type for the user. You must specify USERPOOL.
+deleteUser_authenticationType :: Lens.Lens' DeleteUser AuthenticationType
+deleteUser_authenticationType = Lens.lens (\DeleteUser' {authenticationType} -> authenticationType) (\s@DeleteUser' {} a -> s {authenticationType = a} :: DeleteUser)
+
+instance Core.AWSRequest DeleteUser where
+  type AWSResponse DeleteUser = DeleteUserResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteUserResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteUser where
+  hashWithSalt _salt DeleteUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` userName
+      `Prelude.hashWithSalt` authenticationType
+
+instance Prelude.NFData DeleteUser where
+  rnf DeleteUser' {..} =
+    Prelude.rnf userName
+      `Prelude.seq` Prelude.rnf authenticationType
+
+instance Data.ToHeaders DeleteUser where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DeleteUser" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteUser where
+  toJSON DeleteUser' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("UserName" Data..= userName),
+            Prelude.Just
+              ("AuthenticationType" Data..= authenticationType)
+          ]
+      )
+
+instance Data.ToPath DeleteUser where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteUser where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteUserResponse' smart constructor.
+data DeleteUserResponse = DeleteUserResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteUserResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteUserResponse_httpStatus' - The response's http status code.
+newDeleteUserResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteUserResponse
+newDeleteUserResponse pHttpStatus_ =
+  DeleteUserResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteUserResponse_httpStatus :: Lens.Lens' DeleteUserResponse Prelude.Int
+deleteUserResponse_httpStatus = Lens.lens (\DeleteUserResponse' {httpStatus} -> httpStatus) (\s@DeleteUserResponse' {} a -> s {httpStatus = a} :: DeleteUserResponse)
+
+instance Prelude.NFData DeleteUserResponse where
+  rnf DeleteUserResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeAppBlocks.hs b/gen/Amazonka/AppStream/DescribeAppBlocks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeAppBlocks.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DescribeAppBlocks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more app blocks.
+module Amazonka.AppStream.DescribeAppBlocks
+  ( -- * Creating a Request
+    DescribeAppBlocks (..),
+    newDescribeAppBlocks,
+
+    -- * Request Lenses
+    describeAppBlocks_arns,
+    describeAppBlocks_maxResults,
+    describeAppBlocks_nextToken,
+
+    -- * Destructuring the Response
+    DescribeAppBlocksResponse (..),
+    newDescribeAppBlocksResponse,
+
+    -- * Response Lenses
+    describeAppBlocksResponse_appBlocks,
+    describeAppBlocksResponse_nextToken,
+    describeAppBlocksResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeAppBlocks' smart constructor.
+data DescribeAppBlocks = DescribeAppBlocks'
+  { -- | The ARNs of the app blocks.
+    arns :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The pagination token used to retrieve the next page of results for this
+    -- operation.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAppBlocks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arns', 'describeAppBlocks_arns' - The ARNs of the app blocks.
+--
+-- 'maxResults', 'describeAppBlocks_maxResults' - The maximum size of each page of results.
+--
+-- 'nextToken', 'describeAppBlocks_nextToken' - The pagination token used to retrieve the next page of results for this
+-- operation.
+newDescribeAppBlocks ::
+  DescribeAppBlocks
+newDescribeAppBlocks =
+  DescribeAppBlocks'
+    { arns = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The ARNs of the app blocks.
+describeAppBlocks_arns :: Lens.Lens' DescribeAppBlocks (Prelude.Maybe [Prelude.Text])
+describeAppBlocks_arns = Lens.lens (\DescribeAppBlocks' {arns} -> arns) (\s@DescribeAppBlocks' {} a -> s {arns = a} :: DescribeAppBlocks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum size of each page of results.
+describeAppBlocks_maxResults :: Lens.Lens' DescribeAppBlocks (Prelude.Maybe Prelude.Int)
+describeAppBlocks_maxResults = Lens.lens (\DescribeAppBlocks' {maxResults} -> maxResults) (\s@DescribeAppBlocks' {} a -> s {maxResults = a} :: DescribeAppBlocks)
+
+-- | The pagination token used to retrieve the next page of results for this
+-- operation.
+describeAppBlocks_nextToken :: Lens.Lens' DescribeAppBlocks (Prelude.Maybe Prelude.Text)
+describeAppBlocks_nextToken = Lens.lens (\DescribeAppBlocks' {nextToken} -> nextToken) (\s@DescribeAppBlocks' {} a -> s {nextToken = a} :: DescribeAppBlocks)
+
+instance Core.AWSRequest DescribeAppBlocks where
+  type
+    AWSResponse DescribeAppBlocks =
+      DescribeAppBlocksResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAppBlocksResponse'
+            Prelude.<$> (x Data..?> "AppBlocks" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAppBlocks where
+  hashWithSalt _salt DescribeAppBlocks' {..} =
+    _salt
+      `Prelude.hashWithSalt` arns
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeAppBlocks where
+  rnf DescribeAppBlocks' {..} =
+    Prelude.rnf arns
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeAppBlocks where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeAppBlocks" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAppBlocks where
+  toJSON DescribeAppBlocks' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Arns" Data..=) Prelude.<$> arns,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeAppBlocks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAppBlocks where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAppBlocksResponse' smart constructor.
+data DescribeAppBlocksResponse = DescribeAppBlocksResponse'
+  { -- | The app blocks in the list.
+    appBlocks :: Prelude.Maybe [AppBlock],
+    -- | The pagination token used to retrieve the next page of results for this
+    -- operation.
+    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 'DescribeAppBlocksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appBlocks', 'describeAppBlocksResponse_appBlocks' - The app blocks in the list.
+--
+-- 'nextToken', 'describeAppBlocksResponse_nextToken' - The pagination token used to retrieve the next page of results for this
+-- operation.
+--
+-- 'httpStatus', 'describeAppBlocksResponse_httpStatus' - The response's http status code.
+newDescribeAppBlocksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAppBlocksResponse
+newDescribeAppBlocksResponse pHttpStatus_ =
+  DescribeAppBlocksResponse'
+    { appBlocks =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The app blocks in the list.
+describeAppBlocksResponse_appBlocks :: Lens.Lens' DescribeAppBlocksResponse (Prelude.Maybe [AppBlock])
+describeAppBlocksResponse_appBlocks = Lens.lens (\DescribeAppBlocksResponse' {appBlocks} -> appBlocks) (\s@DescribeAppBlocksResponse' {} a -> s {appBlocks = a} :: DescribeAppBlocksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token used to retrieve the next page of results for this
+-- operation.
+describeAppBlocksResponse_nextToken :: Lens.Lens' DescribeAppBlocksResponse (Prelude.Maybe Prelude.Text)
+describeAppBlocksResponse_nextToken = Lens.lens (\DescribeAppBlocksResponse' {nextToken} -> nextToken) (\s@DescribeAppBlocksResponse' {} a -> s {nextToken = a} :: DescribeAppBlocksResponse)
+
+-- | The response's http status code.
+describeAppBlocksResponse_httpStatus :: Lens.Lens' DescribeAppBlocksResponse Prelude.Int
+describeAppBlocksResponse_httpStatus = Lens.lens (\DescribeAppBlocksResponse' {httpStatus} -> httpStatus) (\s@DescribeAppBlocksResponse' {} a -> s {httpStatus = a} :: DescribeAppBlocksResponse)
+
+instance Prelude.NFData DescribeAppBlocksResponse where
+  rnf DescribeAppBlocksResponse' {..} =
+    Prelude.rnf appBlocks
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeApplicationFleetAssociations.hs b/gen/Amazonka/AppStream/DescribeApplicationFleetAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeApplicationFleetAssociations.hs
@@ -0,0 +1,258 @@
+{-# 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.AppStream.DescribeApplicationFleetAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more application fleet
+-- associations. Either ApplicationArn or FleetName must be specified.
+module Amazonka.AppStream.DescribeApplicationFleetAssociations
+  ( -- * Creating a Request
+    DescribeApplicationFleetAssociations (..),
+    newDescribeApplicationFleetAssociations,
+
+    -- * Request Lenses
+    describeApplicationFleetAssociations_applicationArn,
+    describeApplicationFleetAssociations_fleetName,
+    describeApplicationFleetAssociations_maxResults,
+    describeApplicationFleetAssociations_nextToken,
+
+    -- * Destructuring the Response
+    DescribeApplicationFleetAssociationsResponse (..),
+    newDescribeApplicationFleetAssociationsResponse,
+
+    -- * Response Lenses
+    describeApplicationFleetAssociationsResponse_applicationFleetAssociations,
+    describeApplicationFleetAssociationsResponse_nextToken,
+    describeApplicationFleetAssociationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeApplicationFleetAssociations' smart constructor.
+data DescribeApplicationFleetAssociations = DescribeApplicationFleetAssociations'
+  { -- | The ARN of the application.
+    applicationArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the fleet.
+    fleetName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The pagination token used to retrieve the next page of results for this
+    -- operation.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeApplicationFleetAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationArn', 'describeApplicationFleetAssociations_applicationArn' - The ARN of the application.
+--
+-- 'fleetName', 'describeApplicationFleetAssociations_fleetName' - The name of the fleet.
+--
+-- 'maxResults', 'describeApplicationFleetAssociations_maxResults' - The maximum size of each page of results.
+--
+-- 'nextToken', 'describeApplicationFleetAssociations_nextToken' - The pagination token used to retrieve the next page of results for this
+-- operation.
+newDescribeApplicationFleetAssociations ::
+  DescribeApplicationFleetAssociations
+newDescribeApplicationFleetAssociations =
+  DescribeApplicationFleetAssociations'
+    { applicationArn =
+        Prelude.Nothing,
+      fleetName = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The ARN of the application.
+describeApplicationFleetAssociations_applicationArn :: Lens.Lens' DescribeApplicationFleetAssociations (Prelude.Maybe Prelude.Text)
+describeApplicationFleetAssociations_applicationArn = Lens.lens (\DescribeApplicationFleetAssociations' {applicationArn} -> applicationArn) (\s@DescribeApplicationFleetAssociations' {} a -> s {applicationArn = a} :: DescribeApplicationFleetAssociations)
+
+-- | The name of the fleet.
+describeApplicationFleetAssociations_fleetName :: Lens.Lens' DescribeApplicationFleetAssociations (Prelude.Maybe Prelude.Text)
+describeApplicationFleetAssociations_fleetName = Lens.lens (\DescribeApplicationFleetAssociations' {fleetName} -> fleetName) (\s@DescribeApplicationFleetAssociations' {} a -> s {fleetName = a} :: DescribeApplicationFleetAssociations)
+
+-- | The maximum size of each page of results.
+describeApplicationFleetAssociations_maxResults :: Lens.Lens' DescribeApplicationFleetAssociations (Prelude.Maybe Prelude.Int)
+describeApplicationFleetAssociations_maxResults = Lens.lens (\DescribeApplicationFleetAssociations' {maxResults} -> maxResults) (\s@DescribeApplicationFleetAssociations' {} a -> s {maxResults = a} :: DescribeApplicationFleetAssociations)
+
+-- | The pagination token used to retrieve the next page of results for this
+-- operation.
+describeApplicationFleetAssociations_nextToken :: Lens.Lens' DescribeApplicationFleetAssociations (Prelude.Maybe Prelude.Text)
+describeApplicationFleetAssociations_nextToken = Lens.lens (\DescribeApplicationFleetAssociations' {nextToken} -> nextToken) (\s@DescribeApplicationFleetAssociations' {} a -> s {nextToken = a} :: DescribeApplicationFleetAssociations)
+
+instance
+  Core.AWSRequest
+    DescribeApplicationFleetAssociations
+  where
+  type
+    AWSResponse DescribeApplicationFleetAssociations =
+      DescribeApplicationFleetAssociationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeApplicationFleetAssociationsResponse'
+            Prelude.<$> (x Data..?> "ApplicationFleetAssociations")
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeApplicationFleetAssociations
+  where
+  hashWithSalt
+    _salt
+    DescribeApplicationFleetAssociations' {..} =
+      _salt
+        `Prelude.hashWithSalt` applicationArn
+        `Prelude.hashWithSalt` fleetName
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeApplicationFleetAssociations
+  where
+  rnf DescribeApplicationFleetAssociations' {..} =
+    Prelude.rnf applicationArn
+      `Prelude.seq` Prelude.rnf fleetName
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeApplicationFleetAssociations
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeApplicationFleetAssociations" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DescribeApplicationFleetAssociations
+  where
+  toJSON DescribeApplicationFleetAssociations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ApplicationArn" Data..=)
+              Prelude.<$> applicationArn,
+            ("FleetName" Data..=) Prelude.<$> fleetName,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance
+  Data.ToPath
+    DescribeApplicationFleetAssociations
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeApplicationFleetAssociations
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeApplicationFleetAssociationsResponse' smart constructor.
+data DescribeApplicationFleetAssociationsResponse = DescribeApplicationFleetAssociationsResponse'
+  { -- | The application fleet associations in the list.
+    applicationFleetAssociations :: Prelude.Maybe (Prelude.NonEmpty ApplicationFleetAssociation),
+    -- | The pagination token used to retrieve the next page of results for this
+    -- operation.
+    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 'DescribeApplicationFleetAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationFleetAssociations', 'describeApplicationFleetAssociationsResponse_applicationFleetAssociations' - The application fleet associations in the list.
+--
+-- 'nextToken', 'describeApplicationFleetAssociationsResponse_nextToken' - The pagination token used to retrieve the next page of results for this
+-- operation.
+--
+-- 'httpStatus', 'describeApplicationFleetAssociationsResponse_httpStatus' - The response's http status code.
+newDescribeApplicationFleetAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeApplicationFleetAssociationsResponse
+newDescribeApplicationFleetAssociationsResponse
+  pHttpStatus_ =
+    DescribeApplicationFleetAssociationsResponse'
+      { applicationFleetAssociations =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The application fleet associations in the list.
+describeApplicationFleetAssociationsResponse_applicationFleetAssociations :: Lens.Lens' DescribeApplicationFleetAssociationsResponse (Prelude.Maybe (Prelude.NonEmpty ApplicationFleetAssociation))
+describeApplicationFleetAssociationsResponse_applicationFleetAssociations = Lens.lens (\DescribeApplicationFleetAssociationsResponse' {applicationFleetAssociations} -> applicationFleetAssociations) (\s@DescribeApplicationFleetAssociationsResponse' {} a -> s {applicationFleetAssociations = a} :: DescribeApplicationFleetAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token used to retrieve the next page of results for this
+-- operation.
+describeApplicationFleetAssociationsResponse_nextToken :: Lens.Lens' DescribeApplicationFleetAssociationsResponse (Prelude.Maybe Prelude.Text)
+describeApplicationFleetAssociationsResponse_nextToken = Lens.lens (\DescribeApplicationFleetAssociationsResponse' {nextToken} -> nextToken) (\s@DescribeApplicationFleetAssociationsResponse' {} a -> s {nextToken = a} :: DescribeApplicationFleetAssociationsResponse)
+
+-- | The response's http status code.
+describeApplicationFleetAssociationsResponse_httpStatus :: Lens.Lens' DescribeApplicationFleetAssociationsResponse Prelude.Int
+describeApplicationFleetAssociationsResponse_httpStatus = Lens.lens (\DescribeApplicationFleetAssociationsResponse' {httpStatus} -> httpStatus) (\s@DescribeApplicationFleetAssociationsResponse' {} a -> s {httpStatus = a} :: DescribeApplicationFleetAssociationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeApplicationFleetAssociationsResponse
+  where
+  rnf DescribeApplicationFleetAssociationsResponse' {..} =
+    Prelude.rnf applicationFleetAssociations
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeApplications.hs b/gen/Amazonka/AppStream/DescribeApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeApplications.hs
@@ -0,0 +1,215 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DescribeApplications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more applications.
+module Amazonka.AppStream.DescribeApplications
+  ( -- * Creating a Request
+    DescribeApplications (..),
+    newDescribeApplications,
+
+    -- * Request Lenses
+    describeApplications_arns,
+    describeApplications_maxResults,
+    describeApplications_nextToken,
+
+    -- * Destructuring the Response
+    DescribeApplicationsResponse (..),
+    newDescribeApplicationsResponse,
+
+    -- * Response Lenses
+    describeApplicationsResponse_applications,
+    describeApplicationsResponse_nextToken,
+    describeApplicationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeApplications' smart constructor.
+data DescribeApplications = DescribeApplications'
+  { -- | The ARNs for the applications.
+    arns :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The pagination token used to retrieve the next page of results for this
+    -- operation.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeApplications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arns', 'describeApplications_arns' - The ARNs for the applications.
+--
+-- 'maxResults', 'describeApplications_maxResults' - The maximum size of each page of results.
+--
+-- 'nextToken', 'describeApplications_nextToken' - The pagination token used to retrieve the next page of results for this
+-- operation.
+newDescribeApplications ::
+  DescribeApplications
+newDescribeApplications =
+  DescribeApplications'
+    { arns = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The ARNs for the applications.
+describeApplications_arns :: Lens.Lens' DescribeApplications (Prelude.Maybe [Prelude.Text])
+describeApplications_arns = Lens.lens (\DescribeApplications' {arns} -> arns) (\s@DescribeApplications' {} a -> s {arns = a} :: DescribeApplications) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum size of each page of results.
+describeApplications_maxResults :: Lens.Lens' DescribeApplications (Prelude.Maybe Prelude.Int)
+describeApplications_maxResults = Lens.lens (\DescribeApplications' {maxResults} -> maxResults) (\s@DescribeApplications' {} a -> s {maxResults = a} :: DescribeApplications)
+
+-- | The pagination token used to retrieve the next page of results for this
+-- operation.
+describeApplications_nextToken :: Lens.Lens' DescribeApplications (Prelude.Maybe Prelude.Text)
+describeApplications_nextToken = Lens.lens (\DescribeApplications' {nextToken} -> nextToken) (\s@DescribeApplications' {} a -> s {nextToken = a} :: DescribeApplications)
+
+instance Core.AWSRequest DescribeApplications where
+  type
+    AWSResponse DescribeApplications =
+      DescribeApplicationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeApplicationsResponse'
+            Prelude.<$> (x Data..?> "Applications" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeApplications where
+  hashWithSalt _salt DescribeApplications' {..} =
+    _salt
+      `Prelude.hashWithSalt` arns
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeApplications where
+  rnf DescribeApplications' {..} =
+    Prelude.rnf arns
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeApplications where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeApplications" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeApplications where
+  toJSON DescribeApplications' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Arns" Data..=) Prelude.<$> arns,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeApplications where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeApplications where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeApplicationsResponse' smart constructor.
+data DescribeApplicationsResponse = DescribeApplicationsResponse'
+  { -- | The applications in the list.
+    applications :: Prelude.Maybe [Application],
+    -- | The pagination token used to retrieve the next page of results for this
+    -- operation.
+    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 'DescribeApplicationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applications', 'describeApplicationsResponse_applications' - The applications in the list.
+--
+-- 'nextToken', 'describeApplicationsResponse_nextToken' - The pagination token used to retrieve the next page of results for this
+-- operation.
+--
+-- 'httpStatus', 'describeApplicationsResponse_httpStatus' - The response's http status code.
+newDescribeApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeApplicationsResponse
+newDescribeApplicationsResponse pHttpStatus_ =
+  DescribeApplicationsResponse'
+    { applications =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The applications in the list.
+describeApplicationsResponse_applications :: Lens.Lens' DescribeApplicationsResponse (Prelude.Maybe [Application])
+describeApplicationsResponse_applications = Lens.lens (\DescribeApplicationsResponse' {applications} -> applications) (\s@DescribeApplicationsResponse' {} a -> s {applications = a} :: DescribeApplicationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token used to retrieve the next page of results for this
+-- operation.
+describeApplicationsResponse_nextToken :: Lens.Lens' DescribeApplicationsResponse (Prelude.Maybe Prelude.Text)
+describeApplicationsResponse_nextToken = Lens.lens (\DescribeApplicationsResponse' {nextToken} -> nextToken) (\s@DescribeApplicationsResponse' {} a -> s {nextToken = a} :: DescribeApplicationsResponse)
+
+-- | The response's http status code.
+describeApplicationsResponse_httpStatus :: Lens.Lens' DescribeApplicationsResponse Prelude.Int
+describeApplicationsResponse_httpStatus = Lens.lens (\DescribeApplicationsResponse' {httpStatus} -> httpStatus) (\s@DescribeApplicationsResponse' {} a -> s {httpStatus = a} :: DescribeApplicationsResponse)
+
+instance Prelude.NFData DescribeApplicationsResponse where
+  rnf DescribeApplicationsResponse' {..} =
+    Prelude.rnf applications
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeDirectoryConfigs.hs b/gen/Amazonka/AppStream/DescribeDirectoryConfigs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeDirectoryConfigs.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.AppStream.DescribeDirectoryConfigs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more specified Directory Config
+-- objects for AppStream 2.0, if the names for these objects are provided.
+-- Otherwise, all Directory Config objects in the account are described.
+-- These objects include the configuration information required to join
+-- fleets and image builders to Microsoft Active Directory domains.
+--
+-- Although the response syntax in this topic includes the account
+-- password, this password is not returned in the actual response.
+--
+-- This operation returns paginated results.
+module Amazonka.AppStream.DescribeDirectoryConfigs
+  ( -- * Creating a Request
+    DescribeDirectoryConfigs (..),
+    newDescribeDirectoryConfigs,
+
+    -- * Request Lenses
+    describeDirectoryConfigs_directoryNames,
+    describeDirectoryConfigs_maxResults,
+    describeDirectoryConfigs_nextToken,
+
+    -- * Destructuring the Response
+    DescribeDirectoryConfigsResponse (..),
+    newDescribeDirectoryConfigsResponse,
+
+    -- * Response Lenses
+    describeDirectoryConfigsResponse_directoryConfigs,
+    describeDirectoryConfigsResponse_nextToken,
+    describeDirectoryConfigsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeDirectoryConfigs' smart constructor.
+data DescribeDirectoryConfigs = DescribeDirectoryConfigs'
+  { -- | The directory names.
+    directoryNames :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeDirectoryConfigs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryNames', 'describeDirectoryConfigs_directoryNames' - The directory names.
+--
+-- 'maxResults', 'describeDirectoryConfigs_maxResults' - The maximum size of each page of results.
+--
+-- 'nextToken', 'describeDirectoryConfigs_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+newDescribeDirectoryConfigs ::
+  DescribeDirectoryConfigs
+newDescribeDirectoryConfigs =
+  DescribeDirectoryConfigs'
+    { directoryNames =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The directory names.
+describeDirectoryConfigs_directoryNames :: Lens.Lens' DescribeDirectoryConfigs (Prelude.Maybe [Prelude.Text])
+describeDirectoryConfigs_directoryNames = Lens.lens (\DescribeDirectoryConfigs' {directoryNames} -> directoryNames) (\s@DescribeDirectoryConfigs' {} a -> s {directoryNames = a} :: DescribeDirectoryConfigs) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum size of each page of results.
+describeDirectoryConfigs_maxResults :: Lens.Lens' DescribeDirectoryConfigs (Prelude.Maybe Prelude.Int)
+describeDirectoryConfigs_maxResults = Lens.lens (\DescribeDirectoryConfigs' {maxResults} -> maxResults) (\s@DescribeDirectoryConfigs' {} a -> s {maxResults = a} :: DescribeDirectoryConfigs)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeDirectoryConfigs_nextToken :: Lens.Lens' DescribeDirectoryConfigs (Prelude.Maybe Prelude.Text)
+describeDirectoryConfigs_nextToken = Lens.lens (\DescribeDirectoryConfigs' {nextToken} -> nextToken) (\s@DescribeDirectoryConfigs' {} a -> s {nextToken = a} :: DescribeDirectoryConfigs)
+
+instance Core.AWSPager DescribeDirectoryConfigs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeDirectoryConfigsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeDirectoryConfigsResponse_directoryConfigs
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeDirectoryConfigs_nextToken
+          Lens..~ rs
+          Lens.^? describeDirectoryConfigsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeDirectoryConfigs where
+  type
+    AWSResponse DescribeDirectoryConfigs =
+      DescribeDirectoryConfigsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeDirectoryConfigsResponse'
+            Prelude.<$> ( x
+                            Data..?> "DirectoryConfigs"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeDirectoryConfigs where
+  hashWithSalt _salt DescribeDirectoryConfigs' {..} =
+    _salt
+      `Prelude.hashWithSalt` directoryNames
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeDirectoryConfigs where
+  rnf DescribeDirectoryConfigs' {..} =
+    Prelude.rnf directoryNames
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeDirectoryConfigs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeDirectoryConfigs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeDirectoryConfigs where
+  toJSON DescribeDirectoryConfigs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DirectoryNames" Data..=)
+              Prelude.<$> directoryNames,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeDirectoryConfigs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeDirectoryConfigs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeDirectoryConfigsResponse' smart constructor.
+data DescribeDirectoryConfigsResponse = DescribeDirectoryConfigsResponse'
+  { -- | Information about the directory configurations. Note that although the
+    -- response syntax in this topic includes the account password, this
+    -- password is not returned in the actual response.
+    directoryConfigs :: Prelude.Maybe [DirectoryConfig],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    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 'DescribeDirectoryConfigsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryConfigs', 'describeDirectoryConfigsResponse_directoryConfigs' - Information about the directory configurations. Note that although the
+-- response syntax in this topic includes the account password, this
+-- password is not returned in the actual response.
+--
+-- 'nextToken', 'describeDirectoryConfigsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'httpStatus', 'describeDirectoryConfigsResponse_httpStatus' - The response's http status code.
+newDescribeDirectoryConfigsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeDirectoryConfigsResponse
+newDescribeDirectoryConfigsResponse pHttpStatus_ =
+  DescribeDirectoryConfigsResponse'
+    { directoryConfigs =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the directory configurations. Note that although the
+-- response syntax in this topic includes the account password, this
+-- password is not returned in the actual response.
+describeDirectoryConfigsResponse_directoryConfigs :: Lens.Lens' DescribeDirectoryConfigsResponse (Prelude.Maybe [DirectoryConfig])
+describeDirectoryConfigsResponse_directoryConfigs = Lens.lens (\DescribeDirectoryConfigsResponse' {directoryConfigs} -> directoryConfigs) (\s@DescribeDirectoryConfigsResponse' {} a -> s {directoryConfigs = a} :: DescribeDirectoryConfigsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeDirectoryConfigsResponse_nextToken :: Lens.Lens' DescribeDirectoryConfigsResponse (Prelude.Maybe Prelude.Text)
+describeDirectoryConfigsResponse_nextToken = Lens.lens (\DescribeDirectoryConfigsResponse' {nextToken} -> nextToken) (\s@DescribeDirectoryConfigsResponse' {} a -> s {nextToken = a} :: DescribeDirectoryConfigsResponse)
+
+-- | The response's http status code.
+describeDirectoryConfigsResponse_httpStatus :: Lens.Lens' DescribeDirectoryConfigsResponse Prelude.Int
+describeDirectoryConfigsResponse_httpStatus = Lens.lens (\DescribeDirectoryConfigsResponse' {httpStatus} -> httpStatus) (\s@DescribeDirectoryConfigsResponse' {} a -> s {httpStatus = a} :: DescribeDirectoryConfigsResponse)
+
+instance
+  Prelude.NFData
+    DescribeDirectoryConfigsResponse
+  where
+  rnf DescribeDirectoryConfigsResponse' {..} =
+    Prelude.rnf directoryConfigs
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeEntitlements.hs b/gen/Amazonka/AppStream/DescribeEntitlements.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeEntitlements.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.AppStream.DescribeEntitlements
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one of more entitlements.
+module Amazonka.AppStream.DescribeEntitlements
+  ( -- * Creating a Request
+    DescribeEntitlements (..),
+    newDescribeEntitlements,
+
+    -- * Request Lenses
+    describeEntitlements_maxResults,
+    describeEntitlements_name,
+    describeEntitlements_nextToken,
+    describeEntitlements_stackName,
+
+    -- * Destructuring the Response
+    DescribeEntitlementsResponse (..),
+    newDescribeEntitlementsResponse,
+
+    -- * Response Lenses
+    describeEntitlementsResponse_entitlements,
+    describeEntitlementsResponse_nextToken,
+    describeEntitlementsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeEntitlements' smart constructor.
+data DescribeEntitlements = DescribeEntitlements'
+  { -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The name of the entitlement.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The pagination token used to retrieve the next page of results for this
+    -- operation.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stack with which the entitlement is associated.
+    stackName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEntitlements' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeEntitlements_maxResults' - The maximum size of each page of results.
+--
+-- 'name', 'describeEntitlements_name' - The name of the entitlement.
+--
+-- 'nextToken', 'describeEntitlements_nextToken' - The pagination token used to retrieve the next page of results for this
+-- operation.
+--
+-- 'stackName', 'describeEntitlements_stackName' - The name of the stack with which the entitlement is associated.
+newDescribeEntitlements ::
+  -- | 'stackName'
+  Prelude.Text ->
+  DescribeEntitlements
+newDescribeEntitlements pStackName_ =
+  DescribeEntitlements'
+    { maxResults = Prelude.Nothing,
+      name = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      stackName = pStackName_
+    }
+
+-- | The maximum size of each page of results.
+describeEntitlements_maxResults :: Lens.Lens' DescribeEntitlements (Prelude.Maybe Prelude.Int)
+describeEntitlements_maxResults = Lens.lens (\DescribeEntitlements' {maxResults} -> maxResults) (\s@DescribeEntitlements' {} a -> s {maxResults = a} :: DescribeEntitlements)
+
+-- | The name of the entitlement.
+describeEntitlements_name :: Lens.Lens' DescribeEntitlements (Prelude.Maybe Prelude.Text)
+describeEntitlements_name = Lens.lens (\DescribeEntitlements' {name} -> name) (\s@DescribeEntitlements' {} a -> s {name = a} :: DescribeEntitlements)
+
+-- | The pagination token used to retrieve the next page of results for this
+-- operation.
+describeEntitlements_nextToken :: Lens.Lens' DescribeEntitlements (Prelude.Maybe Prelude.Text)
+describeEntitlements_nextToken = Lens.lens (\DescribeEntitlements' {nextToken} -> nextToken) (\s@DescribeEntitlements' {} a -> s {nextToken = a} :: DescribeEntitlements)
+
+-- | The name of the stack with which the entitlement is associated.
+describeEntitlements_stackName :: Lens.Lens' DescribeEntitlements Prelude.Text
+describeEntitlements_stackName = Lens.lens (\DescribeEntitlements' {stackName} -> stackName) (\s@DescribeEntitlements' {} a -> s {stackName = a} :: DescribeEntitlements)
+
+instance Core.AWSRequest DescribeEntitlements where
+  type
+    AWSResponse DescribeEntitlements =
+      DescribeEntitlementsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeEntitlementsResponse'
+            Prelude.<$> (x Data..?> "Entitlements" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeEntitlements where
+  hashWithSalt _salt DescribeEntitlements' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` stackName
+
+instance Prelude.NFData DescribeEntitlements where
+  rnf DescribeEntitlements' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf stackName
+
+instance Data.ToHeaders DescribeEntitlements where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeEntitlements" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeEntitlements where
+  toJSON DescribeEntitlements' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("Name" Data..=) Prelude.<$> name,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("StackName" Data..= stackName)
+          ]
+      )
+
+instance Data.ToPath DescribeEntitlements where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeEntitlements where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeEntitlementsResponse' smart constructor.
+data DescribeEntitlementsResponse = DescribeEntitlementsResponse'
+  { -- | The entitlements.
+    entitlements :: Prelude.Maybe [Entitlement],
+    -- | The pagination token used to retrieve the next page of results for this
+    -- operation.
+    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 'DescribeEntitlementsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entitlements', 'describeEntitlementsResponse_entitlements' - The entitlements.
+--
+-- 'nextToken', 'describeEntitlementsResponse_nextToken' - The pagination token used to retrieve the next page of results for this
+-- operation.
+--
+-- 'httpStatus', 'describeEntitlementsResponse_httpStatus' - The response's http status code.
+newDescribeEntitlementsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeEntitlementsResponse
+newDescribeEntitlementsResponse pHttpStatus_ =
+  DescribeEntitlementsResponse'
+    { entitlements =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The entitlements.
+describeEntitlementsResponse_entitlements :: Lens.Lens' DescribeEntitlementsResponse (Prelude.Maybe [Entitlement])
+describeEntitlementsResponse_entitlements = Lens.lens (\DescribeEntitlementsResponse' {entitlements} -> entitlements) (\s@DescribeEntitlementsResponse' {} a -> s {entitlements = a} :: DescribeEntitlementsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token used to retrieve the next page of results for this
+-- operation.
+describeEntitlementsResponse_nextToken :: Lens.Lens' DescribeEntitlementsResponse (Prelude.Maybe Prelude.Text)
+describeEntitlementsResponse_nextToken = Lens.lens (\DescribeEntitlementsResponse' {nextToken} -> nextToken) (\s@DescribeEntitlementsResponse' {} a -> s {nextToken = a} :: DescribeEntitlementsResponse)
+
+-- | The response's http status code.
+describeEntitlementsResponse_httpStatus :: Lens.Lens' DescribeEntitlementsResponse Prelude.Int
+describeEntitlementsResponse_httpStatus = Lens.lens (\DescribeEntitlementsResponse' {httpStatus} -> httpStatus) (\s@DescribeEntitlementsResponse' {} a -> s {httpStatus = a} :: DescribeEntitlementsResponse)
+
+instance Prelude.NFData DescribeEntitlementsResponse where
+  rnf DescribeEntitlementsResponse' {..} =
+    Prelude.rnf entitlements
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeFleets.hs b/gen/Amazonka/AppStream/DescribeFleets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeFleets.hs
@@ -0,0 +1,227 @@
+{-# 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.AppStream.DescribeFleets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more specified fleets, if the
+-- fleet names are provided. Otherwise, all fleets in the account are
+-- described.
+--
+-- This operation returns paginated results.
+module Amazonka.AppStream.DescribeFleets
+  ( -- * Creating a Request
+    DescribeFleets (..),
+    newDescribeFleets,
+
+    -- * Request Lenses
+    describeFleets_names,
+    describeFleets_nextToken,
+
+    -- * Destructuring the Response
+    DescribeFleetsResponse (..),
+    newDescribeFleetsResponse,
+
+    -- * Response Lenses
+    describeFleetsResponse_fleets,
+    describeFleetsResponse_nextToken,
+    describeFleetsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeFleets' smart constructor.
+data DescribeFleets = DescribeFleets'
+  { -- | The names of the fleets to describe.
+    names :: Prelude.Maybe [Prelude.Text],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeFleets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'names', 'describeFleets_names' - The names of the fleets to describe.
+--
+-- 'nextToken', 'describeFleets_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+newDescribeFleets ::
+  DescribeFleets
+newDescribeFleets =
+  DescribeFleets'
+    { names = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The names of the fleets to describe.
+describeFleets_names :: Lens.Lens' DescribeFleets (Prelude.Maybe [Prelude.Text])
+describeFleets_names = Lens.lens (\DescribeFleets' {names} -> names) (\s@DescribeFleets' {} a -> s {names = a} :: DescribeFleets) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeFleets_nextToken :: Lens.Lens' DescribeFleets (Prelude.Maybe Prelude.Text)
+describeFleets_nextToken = Lens.lens (\DescribeFleets' {nextToken} -> nextToken) (\s@DescribeFleets' {} a -> s {nextToken = a} :: DescribeFleets)
+
+instance Core.AWSPager DescribeFleets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeFleetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeFleetsResponse_fleets
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeFleets_nextToken
+          Lens..~ rs
+          Lens.^? describeFleetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeFleets where
+  type
+    AWSResponse DescribeFleets =
+      DescribeFleetsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeFleetsResponse'
+            Prelude.<$> (x Data..?> "Fleets" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeFleets where
+  hashWithSalt _salt DescribeFleets' {..} =
+    _salt
+      `Prelude.hashWithSalt` names
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeFleets where
+  rnf DescribeFleets' {..} =
+    Prelude.rnf names
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeFleets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeFleets" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeFleets where
+  toJSON DescribeFleets' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Names" Data..=) Prelude.<$> names,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeFleets where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeFleets where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeFleetsResponse' smart constructor.
+data DescribeFleetsResponse = DescribeFleetsResponse'
+  { -- | Information about the fleets.
+    fleets :: Prelude.Maybe [Fleet],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    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 'DescribeFleetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleets', 'describeFleetsResponse_fleets' - Information about the fleets.
+--
+-- 'nextToken', 'describeFleetsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'httpStatus', 'describeFleetsResponse_httpStatus' - The response's http status code.
+newDescribeFleetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeFleetsResponse
+newDescribeFleetsResponse pHttpStatus_ =
+  DescribeFleetsResponse'
+    { fleets = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the fleets.
+describeFleetsResponse_fleets :: Lens.Lens' DescribeFleetsResponse (Prelude.Maybe [Fleet])
+describeFleetsResponse_fleets = Lens.lens (\DescribeFleetsResponse' {fleets} -> fleets) (\s@DescribeFleetsResponse' {} a -> s {fleets = a} :: DescribeFleetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeFleetsResponse_nextToken :: Lens.Lens' DescribeFleetsResponse (Prelude.Maybe Prelude.Text)
+describeFleetsResponse_nextToken = Lens.lens (\DescribeFleetsResponse' {nextToken} -> nextToken) (\s@DescribeFleetsResponse' {} a -> s {nextToken = a} :: DescribeFleetsResponse)
+
+-- | The response's http status code.
+describeFleetsResponse_httpStatus :: Lens.Lens' DescribeFleetsResponse Prelude.Int
+describeFleetsResponse_httpStatus = Lens.lens (\DescribeFleetsResponse' {httpStatus} -> httpStatus) (\s@DescribeFleetsResponse' {} a -> s {httpStatus = a} :: DescribeFleetsResponse)
+
+instance Prelude.NFData DescribeFleetsResponse where
+  rnf DescribeFleetsResponse' {..} =
+    Prelude.rnf fleets
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeImageBuilders.hs b/gen/Amazonka/AppStream/DescribeImageBuilders.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeImageBuilders.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.AppStream.DescribeImageBuilders
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more specified image builders, if
+-- the image builder names are provided. Otherwise, all image builders in
+-- the account are described.
+--
+-- This operation returns paginated results.
+module Amazonka.AppStream.DescribeImageBuilders
+  ( -- * Creating a Request
+    DescribeImageBuilders (..),
+    newDescribeImageBuilders,
+
+    -- * Request Lenses
+    describeImageBuilders_maxResults,
+    describeImageBuilders_names,
+    describeImageBuilders_nextToken,
+
+    -- * Destructuring the Response
+    DescribeImageBuildersResponse (..),
+    newDescribeImageBuildersResponse,
+
+    -- * Response Lenses
+    describeImageBuildersResponse_imageBuilders,
+    describeImageBuildersResponse_nextToken,
+    describeImageBuildersResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeImageBuilders' smart constructor.
+data DescribeImageBuilders = DescribeImageBuilders'
+  { -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The names of the image builders to describe.
+    names :: Prelude.Maybe [Prelude.Text],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImageBuilders' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeImageBuilders_maxResults' - The maximum size of each page of results.
+--
+-- 'names', 'describeImageBuilders_names' - The names of the image builders to describe.
+--
+-- 'nextToken', 'describeImageBuilders_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+newDescribeImageBuilders ::
+  DescribeImageBuilders
+newDescribeImageBuilders =
+  DescribeImageBuilders'
+    { maxResults =
+        Prelude.Nothing,
+      names = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum size of each page of results.
+describeImageBuilders_maxResults :: Lens.Lens' DescribeImageBuilders (Prelude.Maybe Prelude.Int)
+describeImageBuilders_maxResults = Lens.lens (\DescribeImageBuilders' {maxResults} -> maxResults) (\s@DescribeImageBuilders' {} a -> s {maxResults = a} :: DescribeImageBuilders)
+
+-- | The names of the image builders to describe.
+describeImageBuilders_names :: Lens.Lens' DescribeImageBuilders (Prelude.Maybe [Prelude.Text])
+describeImageBuilders_names = Lens.lens (\DescribeImageBuilders' {names} -> names) (\s@DescribeImageBuilders' {} a -> s {names = a} :: DescribeImageBuilders) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeImageBuilders_nextToken :: Lens.Lens' DescribeImageBuilders (Prelude.Maybe Prelude.Text)
+describeImageBuilders_nextToken = Lens.lens (\DescribeImageBuilders' {nextToken} -> nextToken) (\s@DescribeImageBuilders' {} a -> s {nextToken = a} :: DescribeImageBuilders)
+
+instance Core.AWSPager DescribeImageBuilders where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeImageBuildersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeImageBuildersResponse_imageBuilders
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeImageBuilders_nextToken
+          Lens..~ rs
+          Lens.^? describeImageBuildersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeImageBuilders where
+  type
+    AWSResponse DescribeImageBuilders =
+      DescribeImageBuildersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeImageBuildersResponse'
+            Prelude.<$> (x Data..?> "ImageBuilders" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeImageBuilders where
+  hashWithSalt _salt DescribeImageBuilders' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` names
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeImageBuilders where
+  rnf DescribeImageBuilders' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf names
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeImageBuilders where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeImageBuilders" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeImageBuilders where
+  toJSON DescribeImageBuilders' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("Names" Data..=) Prelude.<$> names,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeImageBuilders where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeImageBuilders where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeImageBuildersResponse' smart constructor.
+data DescribeImageBuildersResponse = DescribeImageBuildersResponse'
+  { -- | Information about the image builders.
+    imageBuilders :: Prelude.Maybe [ImageBuilder],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    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 'DescribeImageBuildersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageBuilders', 'describeImageBuildersResponse_imageBuilders' - Information about the image builders.
+--
+-- 'nextToken', 'describeImageBuildersResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'httpStatus', 'describeImageBuildersResponse_httpStatus' - The response's http status code.
+newDescribeImageBuildersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeImageBuildersResponse
+newDescribeImageBuildersResponse pHttpStatus_ =
+  DescribeImageBuildersResponse'
+    { imageBuilders =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the image builders.
+describeImageBuildersResponse_imageBuilders :: Lens.Lens' DescribeImageBuildersResponse (Prelude.Maybe [ImageBuilder])
+describeImageBuildersResponse_imageBuilders = Lens.lens (\DescribeImageBuildersResponse' {imageBuilders} -> imageBuilders) (\s@DescribeImageBuildersResponse' {} a -> s {imageBuilders = a} :: DescribeImageBuildersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeImageBuildersResponse_nextToken :: Lens.Lens' DescribeImageBuildersResponse (Prelude.Maybe Prelude.Text)
+describeImageBuildersResponse_nextToken = Lens.lens (\DescribeImageBuildersResponse' {nextToken} -> nextToken) (\s@DescribeImageBuildersResponse' {} a -> s {nextToken = a} :: DescribeImageBuildersResponse)
+
+-- | The response's http status code.
+describeImageBuildersResponse_httpStatus :: Lens.Lens' DescribeImageBuildersResponse Prelude.Int
+describeImageBuildersResponse_httpStatus = Lens.lens (\DescribeImageBuildersResponse' {httpStatus} -> httpStatus) (\s@DescribeImageBuildersResponse' {} a -> s {httpStatus = a} :: DescribeImageBuildersResponse)
+
+instance Prelude.NFData DescribeImageBuildersResponse where
+  rnf DescribeImageBuildersResponse' {..} =
+    Prelude.rnf imageBuilders
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeImagePermissions.hs b/gen/Amazonka/AppStream/DescribeImagePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeImagePermissions.hs
@@ -0,0 +1,258 @@
+{-# 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.AppStream.DescribeImagePermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes the permissions for shared AWS account
+-- IDs on a private image that you own.
+module Amazonka.AppStream.DescribeImagePermissions
+  ( -- * Creating a Request
+    DescribeImagePermissions (..),
+    newDescribeImagePermissions,
+
+    -- * Request Lenses
+    describeImagePermissions_maxResults,
+    describeImagePermissions_nextToken,
+    describeImagePermissions_sharedAwsAccountIds,
+    describeImagePermissions_name,
+
+    -- * Destructuring the Response
+    DescribeImagePermissionsResponse (..),
+    newDescribeImagePermissionsResponse,
+
+    -- * Response Lenses
+    describeImagePermissionsResponse_name,
+    describeImagePermissionsResponse_nextToken,
+    describeImagePermissionsResponse_sharedImagePermissionsList,
+    describeImagePermissionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeImagePermissions' smart constructor.
+data DescribeImagePermissions = DescribeImagePermissions'
+  { -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The 12-digit identifier of one or more AWS accounts with which the image
+    -- is shared.
+    sharedAwsAccountIds :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The name of the private image for which to describe permissions. The
+    -- image must be one that you own.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImagePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeImagePermissions_maxResults' - The maximum size of each page of results.
+--
+-- 'nextToken', 'describeImagePermissions_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'sharedAwsAccountIds', 'describeImagePermissions_sharedAwsAccountIds' - The 12-digit identifier of one or more AWS accounts with which the image
+-- is shared.
+--
+-- 'name', 'describeImagePermissions_name' - The name of the private image for which to describe permissions. The
+-- image must be one that you own.
+newDescribeImagePermissions ::
+  -- | 'name'
+  Prelude.Text ->
+  DescribeImagePermissions
+newDescribeImagePermissions pName_ =
+  DescribeImagePermissions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sharedAwsAccountIds = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The maximum size of each page of results.
+describeImagePermissions_maxResults :: Lens.Lens' DescribeImagePermissions (Prelude.Maybe Prelude.Natural)
+describeImagePermissions_maxResults = Lens.lens (\DescribeImagePermissions' {maxResults} -> maxResults) (\s@DescribeImagePermissions' {} a -> s {maxResults = a} :: DescribeImagePermissions)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeImagePermissions_nextToken :: Lens.Lens' DescribeImagePermissions (Prelude.Maybe Prelude.Text)
+describeImagePermissions_nextToken = Lens.lens (\DescribeImagePermissions' {nextToken} -> nextToken) (\s@DescribeImagePermissions' {} a -> s {nextToken = a} :: DescribeImagePermissions)
+
+-- | The 12-digit identifier of one or more AWS accounts with which the image
+-- is shared.
+describeImagePermissions_sharedAwsAccountIds :: Lens.Lens' DescribeImagePermissions (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+describeImagePermissions_sharedAwsAccountIds = Lens.lens (\DescribeImagePermissions' {sharedAwsAccountIds} -> sharedAwsAccountIds) (\s@DescribeImagePermissions' {} a -> s {sharedAwsAccountIds = a} :: DescribeImagePermissions) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the private image for which to describe permissions. The
+-- image must be one that you own.
+describeImagePermissions_name :: Lens.Lens' DescribeImagePermissions Prelude.Text
+describeImagePermissions_name = Lens.lens (\DescribeImagePermissions' {name} -> name) (\s@DescribeImagePermissions' {} a -> s {name = a} :: DescribeImagePermissions)
+
+instance Core.AWSRequest DescribeImagePermissions where
+  type
+    AWSResponse DescribeImagePermissions =
+      DescribeImagePermissionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeImagePermissionsResponse'
+            Prelude.<$> (x Data..?> "Name")
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "SharedImagePermissionsList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeImagePermissions where
+  hashWithSalt _salt DescribeImagePermissions' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` sharedAwsAccountIds
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DescribeImagePermissions where
+  rnf DescribeImagePermissions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sharedAwsAccountIds
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders DescribeImagePermissions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeImagePermissions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeImagePermissions where
+  toJSON DescribeImagePermissions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("SharedAwsAccountIds" Data..=)
+              Prelude.<$> sharedAwsAccountIds,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath DescribeImagePermissions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeImagePermissions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeImagePermissionsResponse' smart constructor.
+data DescribeImagePermissionsResponse = DescribeImagePermissionsResponse'
+  { -- | The name of the private image.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The permissions for a private image that you own.
+    sharedImagePermissionsList :: Prelude.Maybe [SharedImagePermissions],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImagePermissionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeImagePermissionsResponse_name' - The name of the private image.
+--
+-- 'nextToken', 'describeImagePermissionsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'sharedImagePermissionsList', 'describeImagePermissionsResponse_sharedImagePermissionsList' - The permissions for a private image that you own.
+--
+-- 'httpStatus', 'describeImagePermissionsResponse_httpStatus' - The response's http status code.
+newDescribeImagePermissionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeImagePermissionsResponse
+newDescribeImagePermissionsResponse pHttpStatus_ =
+  DescribeImagePermissionsResponse'
+    { name =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      sharedImagePermissionsList =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The name of the private image.
+describeImagePermissionsResponse_name :: Lens.Lens' DescribeImagePermissionsResponse (Prelude.Maybe Prelude.Text)
+describeImagePermissionsResponse_name = Lens.lens (\DescribeImagePermissionsResponse' {name} -> name) (\s@DescribeImagePermissionsResponse' {} a -> s {name = a} :: DescribeImagePermissionsResponse)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeImagePermissionsResponse_nextToken :: Lens.Lens' DescribeImagePermissionsResponse (Prelude.Maybe Prelude.Text)
+describeImagePermissionsResponse_nextToken = Lens.lens (\DescribeImagePermissionsResponse' {nextToken} -> nextToken) (\s@DescribeImagePermissionsResponse' {} a -> s {nextToken = a} :: DescribeImagePermissionsResponse)
+
+-- | The permissions for a private image that you own.
+describeImagePermissionsResponse_sharedImagePermissionsList :: Lens.Lens' DescribeImagePermissionsResponse (Prelude.Maybe [SharedImagePermissions])
+describeImagePermissionsResponse_sharedImagePermissionsList = Lens.lens (\DescribeImagePermissionsResponse' {sharedImagePermissionsList} -> sharedImagePermissionsList) (\s@DescribeImagePermissionsResponse' {} a -> s {sharedImagePermissionsList = a} :: DescribeImagePermissionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeImagePermissionsResponse_httpStatus :: Lens.Lens' DescribeImagePermissionsResponse Prelude.Int
+describeImagePermissionsResponse_httpStatus = Lens.lens (\DescribeImagePermissionsResponse' {httpStatus} -> httpStatus) (\s@DescribeImagePermissionsResponse' {} a -> s {httpStatus = a} :: DescribeImagePermissionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeImagePermissionsResponse
+  where
+  rnf DescribeImagePermissionsResponse' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sharedImagePermissionsList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeImages.hs b/gen/Amazonka/AppStream/DescribeImages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeImages.hs
@@ -0,0 +1,266 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DescribeImages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more specified images, if the
+-- image names or image ARNs are provided. Otherwise, all images in the
+-- account are described.
+--
+-- This operation returns paginated results.
+module Amazonka.AppStream.DescribeImages
+  ( -- * Creating a Request
+    DescribeImages (..),
+    newDescribeImages,
+
+    -- * Request Lenses
+    describeImages_arns,
+    describeImages_maxResults,
+    describeImages_names,
+    describeImages_nextToken,
+    describeImages_type,
+
+    -- * Destructuring the Response
+    DescribeImagesResponse (..),
+    newDescribeImagesResponse,
+
+    -- * Response Lenses
+    describeImagesResponse_images,
+    describeImagesResponse_nextToken,
+    describeImagesResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeImages' smart constructor.
+data DescribeImages = DescribeImages'
+  { -- | The ARNs of the public, private, and shared images to describe.
+    arns :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The names of the public or private images to describe.
+    names :: Prelude.Maybe [Prelude.Text],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The type of image (public, private, or shared) to describe.
+    type' :: Prelude.Maybe VisibilityType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeImages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'arns', 'describeImages_arns' - The ARNs of the public, private, and shared images to describe.
+--
+-- 'maxResults', 'describeImages_maxResults' - The maximum size of each page of results.
+--
+-- 'names', 'describeImages_names' - The names of the public or private images to describe.
+--
+-- 'nextToken', 'describeImages_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'type'', 'describeImages_type' - The type of image (public, private, or shared) to describe.
+newDescribeImages ::
+  DescribeImages
+newDescribeImages =
+  DescribeImages'
+    { arns = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      names = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The ARNs of the public, private, and shared images to describe.
+describeImages_arns :: Lens.Lens' DescribeImages (Prelude.Maybe [Prelude.Text])
+describeImages_arns = Lens.lens (\DescribeImages' {arns} -> arns) (\s@DescribeImages' {} a -> s {arns = a} :: DescribeImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum size of each page of results.
+describeImages_maxResults :: Lens.Lens' DescribeImages (Prelude.Maybe Prelude.Natural)
+describeImages_maxResults = Lens.lens (\DescribeImages' {maxResults} -> maxResults) (\s@DescribeImages' {} a -> s {maxResults = a} :: DescribeImages)
+
+-- | The names of the public or private images to describe.
+describeImages_names :: Lens.Lens' DescribeImages (Prelude.Maybe [Prelude.Text])
+describeImages_names = Lens.lens (\DescribeImages' {names} -> names) (\s@DescribeImages' {} a -> s {names = a} :: DescribeImages) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeImages_nextToken :: Lens.Lens' DescribeImages (Prelude.Maybe Prelude.Text)
+describeImages_nextToken = Lens.lens (\DescribeImages' {nextToken} -> nextToken) (\s@DescribeImages' {} a -> s {nextToken = a} :: DescribeImages)
+
+-- | The type of image (public, private, or shared) to describe.
+describeImages_type :: Lens.Lens' DescribeImages (Prelude.Maybe VisibilityType)
+describeImages_type = Lens.lens (\DescribeImages' {type'} -> type') (\s@DescribeImages' {} a -> s {type' = a} :: DescribeImages)
+
+instance Core.AWSPager DescribeImages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeImagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeImagesResponse_images
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeImages_nextToken
+          Lens..~ rs
+          Lens.^? describeImagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeImages where
+  type
+    AWSResponse DescribeImages =
+      DescribeImagesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeImagesResponse'
+            Prelude.<$> (x Data..?> "Images" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeImages where
+  hashWithSalt _salt DescribeImages' {..} =
+    _salt
+      `Prelude.hashWithSalt` arns
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` names
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData DescribeImages where
+  rnf DescribeImages' {..} =
+    Prelude.rnf arns
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf names
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf type'
+
+instance Data.ToHeaders DescribeImages where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeImages" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeImages where
+  toJSON DescribeImages' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Arns" Data..=) Prelude.<$> arns,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("Names" Data..=) Prelude.<$> names,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("Type" Data..=) Prelude.<$> type'
+          ]
+      )
+
+instance Data.ToPath DescribeImages where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeImages where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeImagesResponse' smart constructor.
+data DescribeImagesResponse = DescribeImagesResponse'
+  { -- | Information about the images.
+    images :: Prelude.Maybe [Image],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    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 'DescribeImagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'images', 'describeImagesResponse_images' - Information about the images.
+--
+-- 'nextToken', 'describeImagesResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'httpStatus', 'describeImagesResponse_httpStatus' - The response's http status code.
+newDescribeImagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeImagesResponse
+newDescribeImagesResponse pHttpStatus_ =
+  DescribeImagesResponse'
+    { images = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the images.
+describeImagesResponse_images :: Lens.Lens' DescribeImagesResponse (Prelude.Maybe [Image])
+describeImagesResponse_images = Lens.lens (\DescribeImagesResponse' {images} -> images) (\s@DescribeImagesResponse' {} a -> s {images = a} :: DescribeImagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeImagesResponse_nextToken :: Lens.Lens' DescribeImagesResponse (Prelude.Maybe Prelude.Text)
+describeImagesResponse_nextToken = Lens.lens (\DescribeImagesResponse' {nextToken} -> nextToken) (\s@DescribeImagesResponse' {} a -> s {nextToken = a} :: DescribeImagesResponse)
+
+-- | The response's http status code.
+describeImagesResponse_httpStatus :: Lens.Lens' DescribeImagesResponse Prelude.Int
+describeImagesResponse_httpStatus = Lens.lens (\DescribeImagesResponse' {httpStatus} -> httpStatus) (\s@DescribeImagesResponse' {} a -> s {httpStatus = a} :: DescribeImagesResponse)
+
+instance Prelude.NFData DescribeImagesResponse where
+  rnf DescribeImagesResponse' {..} =
+    Prelude.rnf images
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeSessions.hs b/gen/Amazonka/AppStream/DescribeSessions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeSessions.hs
@@ -0,0 +1,300 @@
+{-# 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.AppStream.DescribeSessions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes the streaming sessions for a specified
+-- stack and fleet. If a UserId is provided for the stack and fleet, only
+-- streaming sessions for that user are described. If an authentication
+-- type is not provided, the default is to authenticate users using a
+-- streaming URL.
+--
+-- This operation returns paginated results.
+module Amazonka.AppStream.DescribeSessions
+  ( -- * Creating a Request
+    DescribeSessions (..),
+    newDescribeSessions,
+
+    -- * Request Lenses
+    describeSessions_authenticationType,
+    describeSessions_limit,
+    describeSessions_nextToken,
+    describeSessions_userId,
+    describeSessions_stackName,
+    describeSessions_fleetName,
+
+    -- * Destructuring the Response
+    DescribeSessionsResponse (..),
+    newDescribeSessionsResponse,
+
+    -- * Response Lenses
+    describeSessionsResponse_nextToken,
+    describeSessionsResponse_sessions,
+    describeSessionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeSessions' smart constructor.
+data DescribeSessions = DescribeSessions'
+  { -- | The authentication method. Specify @API@ for a user authenticated using
+    -- a streaming URL or @SAML@ for a SAML federated user. The default is to
+    -- authenticate users using a streaming URL.
+    authenticationType :: Prelude.Maybe AuthenticationType,
+    -- | The size of each page of results. The default value is 20 and the
+    -- maximum value is 50.
+    limit :: Prelude.Maybe Prelude.Int,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The user identifier (ID). If you specify a user ID, you must also
+    -- specify the authentication type.
+    userId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stack. This value is case-sensitive.
+    stackName :: Prelude.Text,
+    -- | The name of the fleet. This value is case-sensitive.
+    fleetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSessions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authenticationType', 'describeSessions_authenticationType' - The authentication method. Specify @API@ for a user authenticated using
+-- a streaming URL or @SAML@ for a SAML federated user. The default is to
+-- authenticate users using a streaming URL.
+--
+-- 'limit', 'describeSessions_limit' - The size of each page of results. The default value is 20 and the
+-- maximum value is 50.
+--
+-- 'nextToken', 'describeSessions_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'userId', 'describeSessions_userId' - The user identifier (ID). If you specify a user ID, you must also
+-- specify the authentication type.
+--
+-- 'stackName', 'describeSessions_stackName' - The name of the stack. This value is case-sensitive.
+--
+-- 'fleetName', 'describeSessions_fleetName' - The name of the fleet. This value is case-sensitive.
+newDescribeSessions ::
+  -- | 'stackName'
+  Prelude.Text ->
+  -- | 'fleetName'
+  Prelude.Text ->
+  DescribeSessions
+newDescribeSessions pStackName_ pFleetName_ =
+  DescribeSessions'
+    { authenticationType =
+        Prelude.Nothing,
+      limit = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      userId = Prelude.Nothing,
+      stackName = pStackName_,
+      fleetName = pFleetName_
+    }
+
+-- | The authentication method. Specify @API@ for a user authenticated using
+-- a streaming URL or @SAML@ for a SAML federated user. The default is to
+-- authenticate users using a streaming URL.
+describeSessions_authenticationType :: Lens.Lens' DescribeSessions (Prelude.Maybe AuthenticationType)
+describeSessions_authenticationType = Lens.lens (\DescribeSessions' {authenticationType} -> authenticationType) (\s@DescribeSessions' {} a -> s {authenticationType = a} :: DescribeSessions)
+
+-- | The size of each page of results. The default value is 20 and the
+-- maximum value is 50.
+describeSessions_limit :: Lens.Lens' DescribeSessions (Prelude.Maybe Prelude.Int)
+describeSessions_limit = Lens.lens (\DescribeSessions' {limit} -> limit) (\s@DescribeSessions' {} a -> s {limit = a} :: DescribeSessions)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeSessions_nextToken :: Lens.Lens' DescribeSessions (Prelude.Maybe Prelude.Text)
+describeSessions_nextToken = Lens.lens (\DescribeSessions' {nextToken} -> nextToken) (\s@DescribeSessions' {} a -> s {nextToken = a} :: DescribeSessions)
+
+-- | The user identifier (ID). If you specify a user ID, you must also
+-- specify the authentication type.
+describeSessions_userId :: Lens.Lens' DescribeSessions (Prelude.Maybe Prelude.Text)
+describeSessions_userId = Lens.lens (\DescribeSessions' {userId} -> userId) (\s@DescribeSessions' {} a -> s {userId = a} :: DescribeSessions)
+
+-- | The name of the stack. This value is case-sensitive.
+describeSessions_stackName :: Lens.Lens' DescribeSessions Prelude.Text
+describeSessions_stackName = Lens.lens (\DescribeSessions' {stackName} -> stackName) (\s@DescribeSessions' {} a -> s {stackName = a} :: DescribeSessions)
+
+-- | The name of the fleet. This value is case-sensitive.
+describeSessions_fleetName :: Lens.Lens' DescribeSessions Prelude.Text
+describeSessions_fleetName = Lens.lens (\DescribeSessions' {fleetName} -> fleetName) (\s@DescribeSessions' {} a -> s {fleetName = a} :: DescribeSessions)
+
+instance Core.AWSPager DescribeSessions where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeSessionsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeSessionsResponse_sessions
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeSessions_nextToken
+          Lens..~ rs
+          Lens.^? describeSessionsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeSessions where
+  type
+    AWSResponse DescribeSessions =
+      DescribeSessionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeSessionsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Sessions" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeSessions where
+  hashWithSalt _salt DescribeSessions' {..} =
+    _salt
+      `Prelude.hashWithSalt` authenticationType
+      `Prelude.hashWithSalt` limit
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` userId
+      `Prelude.hashWithSalt` stackName
+      `Prelude.hashWithSalt` fleetName
+
+instance Prelude.NFData DescribeSessions where
+  rnf DescribeSessions' {..} =
+    Prelude.rnf authenticationType
+      `Prelude.seq` Prelude.rnf limit
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf userId
+      `Prelude.seq` Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf fleetName
+
+instance Data.ToHeaders DescribeSessions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeSessions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeSessions where
+  toJSON DescribeSessions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AuthenticationType" Data..=)
+              Prelude.<$> authenticationType,
+            ("Limit" Data..=) Prelude.<$> limit,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("UserId" Data..=) Prelude.<$> userId,
+            Prelude.Just ("StackName" Data..= stackName),
+            Prelude.Just ("FleetName" Data..= fleetName)
+          ]
+      )
+
+instance Data.ToPath DescribeSessions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeSessions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeSessionsResponse' smart constructor.
+data DescribeSessionsResponse = DescribeSessionsResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the streaming sessions.
+    sessions :: Prelude.Maybe [Session],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeSessionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeSessionsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'sessions', 'describeSessionsResponse_sessions' - Information about the streaming sessions.
+--
+-- 'httpStatus', 'describeSessionsResponse_httpStatus' - The response's http status code.
+newDescribeSessionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeSessionsResponse
+newDescribeSessionsResponse pHttpStatus_ =
+  DescribeSessionsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      sessions = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeSessionsResponse_nextToken :: Lens.Lens' DescribeSessionsResponse (Prelude.Maybe Prelude.Text)
+describeSessionsResponse_nextToken = Lens.lens (\DescribeSessionsResponse' {nextToken} -> nextToken) (\s@DescribeSessionsResponse' {} a -> s {nextToken = a} :: DescribeSessionsResponse)
+
+-- | Information about the streaming sessions.
+describeSessionsResponse_sessions :: Lens.Lens' DescribeSessionsResponse (Prelude.Maybe [Session])
+describeSessionsResponse_sessions = Lens.lens (\DescribeSessionsResponse' {sessions} -> sessions) (\s@DescribeSessionsResponse' {} a -> s {sessions = a} :: DescribeSessionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeSessionsResponse_httpStatus :: Lens.Lens' DescribeSessionsResponse Prelude.Int
+describeSessionsResponse_httpStatus = Lens.lens (\DescribeSessionsResponse' {httpStatus} -> httpStatus) (\s@DescribeSessionsResponse' {} a -> s {httpStatus = a} :: DescribeSessionsResponse)
+
+instance Prelude.NFData DescribeSessionsResponse where
+  rnf DescribeSessionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf sessions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeStacks.hs b/gen/Amazonka/AppStream/DescribeStacks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeStacks.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DescribeStacks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more specified stacks, if the
+-- stack names are provided. Otherwise, all stacks in the account are
+-- described.
+--
+-- This operation returns paginated results.
+module Amazonka.AppStream.DescribeStacks
+  ( -- * Creating a Request
+    DescribeStacks (..),
+    newDescribeStacks,
+
+    -- * Request Lenses
+    describeStacks_names,
+    describeStacks_nextToken,
+
+    -- * Destructuring the Response
+    DescribeStacksResponse (..),
+    newDescribeStacksResponse,
+
+    -- * Response Lenses
+    describeStacksResponse_nextToken,
+    describeStacksResponse_stacks,
+    describeStacksResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeStacks' smart constructor.
+data DescribeStacks = DescribeStacks'
+  { -- | The names of the stacks to describe.
+    names :: Prelude.Maybe [Prelude.Text],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeStacks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'names', 'describeStacks_names' - The names of the stacks to describe.
+--
+-- 'nextToken', 'describeStacks_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+newDescribeStacks ::
+  DescribeStacks
+newDescribeStacks =
+  DescribeStacks'
+    { names = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The names of the stacks to describe.
+describeStacks_names :: Lens.Lens' DescribeStacks (Prelude.Maybe [Prelude.Text])
+describeStacks_names = Lens.lens (\DescribeStacks' {names} -> names) (\s@DescribeStacks' {} a -> s {names = a} :: DescribeStacks) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeStacks_nextToken :: Lens.Lens' DescribeStacks (Prelude.Maybe Prelude.Text)
+describeStacks_nextToken = Lens.lens (\DescribeStacks' {nextToken} -> nextToken) (\s@DescribeStacks' {} a -> s {nextToken = a} :: DescribeStacks)
+
+instance Core.AWSPager DescribeStacks where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeStacksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeStacksResponse_stacks
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeStacks_nextToken
+          Lens..~ rs
+          Lens.^? describeStacksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeStacks where
+  type
+    AWSResponse DescribeStacks =
+      DescribeStacksResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeStacksResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Stacks" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeStacks where
+  hashWithSalt _salt DescribeStacks' {..} =
+    _salt
+      `Prelude.hashWithSalt` names
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeStacks where
+  rnf DescribeStacks' {..} =
+    Prelude.rnf names
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeStacks where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeStacks" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeStacks where
+  toJSON DescribeStacks' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Names" Data..=) Prelude.<$> names,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeStacks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeStacks where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeStacksResponse' smart constructor.
+data DescribeStacksResponse = DescribeStacksResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the stacks.
+    stacks :: Prelude.Maybe [Stack],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeStacksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeStacksResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'stacks', 'describeStacksResponse_stacks' - Information about the stacks.
+--
+-- 'httpStatus', 'describeStacksResponse_httpStatus' - The response's http status code.
+newDescribeStacksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeStacksResponse
+newDescribeStacksResponse pHttpStatus_ =
+  DescribeStacksResponse'
+    { nextToken =
+        Prelude.Nothing,
+      stacks = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeStacksResponse_nextToken :: Lens.Lens' DescribeStacksResponse (Prelude.Maybe Prelude.Text)
+describeStacksResponse_nextToken = Lens.lens (\DescribeStacksResponse' {nextToken} -> nextToken) (\s@DescribeStacksResponse' {} a -> s {nextToken = a} :: DescribeStacksResponse)
+
+-- | Information about the stacks.
+describeStacksResponse_stacks :: Lens.Lens' DescribeStacksResponse (Prelude.Maybe [Stack])
+describeStacksResponse_stacks = Lens.lens (\DescribeStacksResponse' {stacks} -> stacks) (\s@DescribeStacksResponse' {} a -> s {stacks = a} :: DescribeStacksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeStacksResponse_httpStatus :: Lens.Lens' DescribeStacksResponse Prelude.Int
+describeStacksResponse_httpStatus = Lens.lens (\DescribeStacksResponse' {httpStatus} -> httpStatus) (\s@DescribeStacksResponse' {} a -> s {httpStatus = a} :: DescribeStacksResponse)
+
+instance Prelude.NFData DescribeStacksResponse where
+  rnf DescribeStacksResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf stacks
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeUsageReportSubscriptions.hs b/gen/Amazonka/AppStream/DescribeUsageReportSubscriptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeUsageReportSubscriptions.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DescribeUsageReportSubscriptions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more usage report subscriptions.
+module Amazonka.AppStream.DescribeUsageReportSubscriptions
+  ( -- * Creating a Request
+    DescribeUsageReportSubscriptions (..),
+    newDescribeUsageReportSubscriptions,
+
+    -- * Request Lenses
+    describeUsageReportSubscriptions_maxResults,
+    describeUsageReportSubscriptions_nextToken,
+
+    -- * Destructuring the Response
+    DescribeUsageReportSubscriptionsResponse (..),
+    newDescribeUsageReportSubscriptionsResponse,
+
+    -- * Response Lenses
+    describeUsageReportSubscriptionsResponse_nextToken,
+    describeUsageReportSubscriptionsResponse_usageReportSubscriptions,
+    describeUsageReportSubscriptionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeUsageReportSubscriptions' smart constructor.
+data DescribeUsageReportSubscriptions = DescribeUsageReportSubscriptions'
+  { -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeUsageReportSubscriptions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeUsageReportSubscriptions_maxResults' - The maximum size of each page of results.
+--
+-- 'nextToken', 'describeUsageReportSubscriptions_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+newDescribeUsageReportSubscriptions ::
+  DescribeUsageReportSubscriptions
+newDescribeUsageReportSubscriptions =
+  DescribeUsageReportSubscriptions'
+    { maxResults =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum size of each page of results.
+describeUsageReportSubscriptions_maxResults :: Lens.Lens' DescribeUsageReportSubscriptions (Prelude.Maybe Prelude.Int)
+describeUsageReportSubscriptions_maxResults = Lens.lens (\DescribeUsageReportSubscriptions' {maxResults} -> maxResults) (\s@DescribeUsageReportSubscriptions' {} a -> s {maxResults = a} :: DescribeUsageReportSubscriptions)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeUsageReportSubscriptions_nextToken :: Lens.Lens' DescribeUsageReportSubscriptions (Prelude.Maybe Prelude.Text)
+describeUsageReportSubscriptions_nextToken = Lens.lens (\DescribeUsageReportSubscriptions' {nextToken} -> nextToken) (\s@DescribeUsageReportSubscriptions' {} a -> s {nextToken = a} :: DescribeUsageReportSubscriptions)
+
+instance
+  Core.AWSRequest
+    DescribeUsageReportSubscriptions
+  where
+  type
+    AWSResponse DescribeUsageReportSubscriptions =
+      DescribeUsageReportSubscriptionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeUsageReportSubscriptionsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> ( x
+                            Data..?> "UsageReportSubscriptions"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeUsageReportSubscriptions
+  where
+  hashWithSalt
+    _salt
+    DescribeUsageReportSubscriptions' {..} =
+      _salt
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+
+instance
+  Prelude.NFData
+    DescribeUsageReportSubscriptions
+  where
+  rnf DescribeUsageReportSubscriptions' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance
+  Data.ToHeaders
+    DescribeUsageReportSubscriptions
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeUsageReportSubscriptions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeUsageReportSubscriptions where
+  toJSON DescribeUsageReportSubscriptions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeUsageReportSubscriptions where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DescribeUsageReportSubscriptions
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeUsageReportSubscriptionsResponse' smart constructor.
+data DescribeUsageReportSubscriptionsResponse = DescribeUsageReportSubscriptionsResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the usage report subscription.
+    usageReportSubscriptions :: Prelude.Maybe [UsageReportSubscription],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeUsageReportSubscriptionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeUsageReportSubscriptionsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'usageReportSubscriptions', 'describeUsageReportSubscriptionsResponse_usageReportSubscriptions' - Information about the usage report subscription.
+--
+-- 'httpStatus', 'describeUsageReportSubscriptionsResponse_httpStatus' - The response's http status code.
+newDescribeUsageReportSubscriptionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeUsageReportSubscriptionsResponse
+newDescribeUsageReportSubscriptionsResponse
+  pHttpStatus_ =
+    DescribeUsageReportSubscriptionsResponse'
+      { nextToken =
+          Prelude.Nothing,
+        usageReportSubscriptions =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeUsageReportSubscriptionsResponse_nextToken :: Lens.Lens' DescribeUsageReportSubscriptionsResponse (Prelude.Maybe Prelude.Text)
+describeUsageReportSubscriptionsResponse_nextToken = Lens.lens (\DescribeUsageReportSubscriptionsResponse' {nextToken} -> nextToken) (\s@DescribeUsageReportSubscriptionsResponse' {} a -> s {nextToken = a} :: DescribeUsageReportSubscriptionsResponse)
+
+-- | Information about the usage report subscription.
+describeUsageReportSubscriptionsResponse_usageReportSubscriptions :: Lens.Lens' DescribeUsageReportSubscriptionsResponse (Prelude.Maybe [UsageReportSubscription])
+describeUsageReportSubscriptionsResponse_usageReportSubscriptions = Lens.lens (\DescribeUsageReportSubscriptionsResponse' {usageReportSubscriptions} -> usageReportSubscriptions) (\s@DescribeUsageReportSubscriptionsResponse' {} a -> s {usageReportSubscriptions = a} :: DescribeUsageReportSubscriptionsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeUsageReportSubscriptionsResponse_httpStatus :: Lens.Lens' DescribeUsageReportSubscriptionsResponse Prelude.Int
+describeUsageReportSubscriptionsResponse_httpStatus = Lens.lens (\DescribeUsageReportSubscriptionsResponse' {httpStatus} -> httpStatus) (\s@DescribeUsageReportSubscriptionsResponse' {} a -> s {httpStatus = a} :: DescribeUsageReportSubscriptionsResponse)
+
+instance
+  Prelude.NFData
+    DescribeUsageReportSubscriptionsResponse
+  where
+  rnf DescribeUsageReportSubscriptionsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf usageReportSubscriptions
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeUserStackAssociations.hs b/gen/Amazonka/AppStream/DescribeUserStackAssociations.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeUserStackAssociations.hs
@@ -0,0 +1,293 @@
+{-# 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.AppStream.DescribeUserStackAssociations
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes the UserStackAssociation objects. You
+-- must specify either or both of the following:
+--
+-- -   The stack name
+--
+-- -   The user name (email address of the user associated with the stack)
+--     and the authentication type for the user
+--
+-- This operation returns paginated results.
+module Amazonka.AppStream.DescribeUserStackAssociations
+  ( -- * Creating a Request
+    DescribeUserStackAssociations (..),
+    newDescribeUserStackAssociations,
+
+    -- * Request Lenses
+    describeUserStackAssociations_authenticationType,
+    describeUserStackAssociations_maxResults,
+    describeUserStackAssociations_nextToken,
+    describeUserStackAssociations_stackName,
+    describeUserStackAssociations_userName,
+
+    -- * Destructuring the Response
+    DescribeUserStackAssociationsResponse (..),
+    newDescribeUserStackAssociationsResponse,
+
+    -- * Response Lenses
+    describeUserStackAssociationsResponse_nextToken,
+    describeUserStackAssociationsResponse_userStackAssociations,
+    describeUserStackAssociationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeUserStackAssociations' smart constructor.
+data DescribeUserStackAssociations = DescribeUserStackAssociations'
+  { -- | The authentication type for the user who is associated with the stack.
+    -- You must specify USERPOOL.
+    authenticationType :: Prelude.Maybe AuthenticationType,
+    -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stack that is associated with the user.
+    stackName :: Prelude.Maybe Prelude.Text,
+    -- | The email address of the user who is associated with the stack.
+    --
+    -- Users\' email addresses are case-sensitive.
+    userName :: Prelude.Maybe (Data.Sensitive Prelude.Text)
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeUserStackAssociations' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authenticationType', 'describeUserStackAssociations_authenticationType' - The authentication type for the user who is associated with the stack.
+-- You must specify USERPOOL.
+--
+-- 'maxResults', 'describeUserStackAssociations_maxResults' - The maximum size of each page of results.
+--
+-- 'nextToken', 'describeUserStackAssociations_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'stackName', 'describeUserStackAssociations_stackName' - The name of the stack that is associated with the user.
+--
+-- 'userName', 'describeUserStackAssociations_userName' - The email address of the user who is associated with the stack.
+--
+-- Users\' email addresses are case-sensitive.
+newDescribeUserStackAssociations ::
+  DescribeUserStackAssociations
+newDescribeUserStackAssociations =
+  DescribeUserStackAssociations'
+    { authenticationType =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      stackName = Prelude.Nothing,
+      userName = Prelude.Nothing
+    }
+
+-- | The authentication type for the user who is associated with the stack.
+-- You must specify USERPOOL.
+describeUserStackAssociations_authenticationType :: Lens.Lens' DescribeUserStackAssociations (Prelude.Maybe AuthenticationType)
+describeUserStackAssociations_authenticationType = Lens.lens (\DescribeUserStackAssociations' {authenticationType} -> authenticationType) (\s@DescribeUserStackAssociations' {} a -> s {authenticationType = a} :: DescribeUserStackAssociations)
+
+-- | The maximum size of each page of results.
+describeUserStackAssociations_maxResults :: Lens.Lens' DescribeUserStackAssociations (Prelude.Maybe Prelude.Natural)
+describeUserStackAssociations_maxResults = Lens.lens (\DescribeUserStackAssociations' {maxResults} -> maxResults) (\s@DescribeUserStackAssociations' {} a -> s {maxResults = a} :: DescribeUserStackAssociations)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeUserStackAssociations_nextToken :: Lens.Lens' DescribeUserStackAssociations (Prelude.Maybe Prelude.Text)
+describeUserStackAssociations_nextToken = Lens.lens (\DescribeUserStackAssociations' {nextToken} -> nextToken) (\s@DescribeUserStackAssociations' {} a -> s {nextToken = a} :: DescribeUserStackAssociations)
+
+-- | The name of the stack that is associated with the user.
+describeUserStackAssociations_stackName :: Lens.Lens' DescribeUserStackAssociations (Prelude.Maybe Prelude.Text)
+describeUserStackAssociations_stackName = Lens.lens (\DescribeUserStackAssociations' {stackName} -> stackName) (\s@DescribeUserStackAssociations' {} a -> s {stackName = a} :: DescribeUserStackAssociations)
+
+-- | The email address of the user who is associated with the stack.
+--
+-- Users\' email addresses are case-sensitive.
+describeUserStackAssociations_userName :: Lens.Lens' DescribeUserStackAssociations (Prelude.Maybe Prelude.Text)
+describeUserStackAssociations_userName = Lens.lens (\DescribeUserStackAssociations' {userName} -> userName) (\s@DescribeUserStackAssociations' {} a -> s {userName = a} :: DescribeUserStackAssociations) Prelude.. Lens.mapping Data._Sensitive
+
+instance Core.AWSPager DescribeUserStackAssociations where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeUserStackAssociationsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeUserStackAssociationsResponse_userStackAssociations
+            Prelude.. Lens._Just
+            Prelude.. Lens.to Prelude.toList
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeUserStackAssociations_nextToken
+          Lens..~ rs
+          Lens.^? describeUserStackAssociationsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeUserStackAssociations
+  where
+  type
+    AWSResponse DescribeUserStackAssociations =
+      DescribeUserStackAssociationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeUserStackAssociationsResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "UserStackAssociations")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeUserStackAssociations
+  where
+  hashWithSalt _salt DescribeUserStackAssociations' {..} =
+    _salt
+      `Prelude.hashWithSalt` authenticationType
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` stackName
+      `Prelude.hashWithSalt` userName
+
+instance Prelude.NFData DescribeUserStackAssociations where
+  rnf DescribeUserStackAssociations' {..} =
+    Prelude.rnf authenticationType
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf userName
+
+instance Data.ToHeaders DescribeUserStackAssociations where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeUserStackAssociations" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeUserStackAssociations where
+  toJSON DescribeUserStackAssociations' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AuthenticationType" Data..=)
+              Prelude.<$> authenticationType,
+            ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            ("StackName" Data..=) Prelude.<$> stackName,
+            ("UserName" Data..=) Prelude.<$> userName
+          ]
+      )
+
+instance Data.ToPath DescribeUserStackAssociations where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeUserStackAssociations where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeUserStackAssociationsResponse' smart constructor.
+data DescribeUserStackAssociationsResponse = DescribeUserStackAssociationsResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The UserStackAssociation objects.
+    userStackAssociations :: Prelude.Maybe (Prelude.NonEmpty UserStackAssociation),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeUserStackAssociationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeUserStackAssociationsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'userStackAssociations', 'describeUserStackAssociationsResponse_userStackAssociations' - The UserStackAssociation objects.
+--
+-- 'httpStatus', 'describeUserStackAssociationsResponse_httpStatus' - The response's http status code.
+newDescribeUserStackAssociationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeUserStackAssociationsResponse
+newDescribeUserStackAssociationsResponse pHttpStatus_ =
+  DescribeUserStackAssociationsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      userStackAssociations =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeUserStackAssociationsResponse_nextToken :: Lens.Lens' DescribeUserStackAssociationsResponse (Prelude.Maybe Prelude.Text)
+describeUserStackAssociationsResponse_nextToken = Lens.lens (\DescribeUserStackAssociationsResponse' {nextToken} -> nextToken) (\s@DescribeUserStackAssociationsResponse' {} a -> s {nextToken = a} :: DescribeUserStackAssociationsResponse)
+
+-- | The UserStackAssociation objects.
+describeUserStackAssociationsResponse_userStackAssociations :: Lens.Lens' DescribeUserStackAssociationsResponse (Prelude.Maybe (Prelude.NonEmpty UserStackAssociation))
+describeUserStackAssociationsResponse_userStackAssociations = Lens.lens (\DescribeUserStackAssociationsResponse' {userStackAssociations} -> userStackAssociations) (\s@DescribeUserStackAssociationsResponse' {} a -> s {userStackAssociations = a} :: DescribeUserStackAssociationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeUserStackAssociationsResponse_httpStatus :: Lens.Lens' DescribeUserStackAssociationsResponse Prelude.Int
+describeUserStackAssociationsResponse_httpStatus = Lens.lens (\DescribeUserStackAssociationsResponse' {httpStatus} -> httpStatus) (\s@DescribeUserStackAssociationsResponse' {} a -> s {httpStatus = a} :: DescribeUserStackAssociationsResponse)
+
+instance
+  Prelude.NFData
+    DescribeUserStackAssociationsResponse
+  where
+  rnf DescribeUserStackAssociationsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf userStackAssociations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DescribeUsers.hs b/gen/Amazonka/AppStream/DescribeUsers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DescribeUsers.hs
@@ -0,0 +1,245 @@
+{-# 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.AppStream.DescribeUsers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list that describes one or more specified users in the user
+-- pool.
+--
+-- This operation returns paginated results.
+module Amazonka.AppStream.DescribeUsers
+  ( -- * Creating a Request
+    DescribeUsers (..),
+    newDescribeUsers,
+
+    -- * Request Lenses
+    describeUsers_maxResults,
+    describeUsers_nextToken,
+    describeUsers_authenticationType,
+
+    -- * Destructuring the Response
+    DescribeUsersResponse (..),
+    newDescribeUsersResponse,
+
+    -- * Response Lenses
+    describeUsersResponse_nextToken,
+    describeUsersResponse_users,
+    describeUsersResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDescribeUsers' smart constructor.
+data DescribeUsers = DescribeUsers'
+  { -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The authentication type for the users in the user pool to describe. You
+    -- must specify USERPOOL.
+    authenticationType :: AuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeUsers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeUsers_maxResults' - The maximum size of each page of results.
+--
+-- 'nextToken', 'describeUsers_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'authenticationType', 'describeUsers_authenticationType' - The authentication type for the users in the user pool to describe. You
+-- must specify USERPOOL.
+newDescribeUsers ::
+  -- | 'authenticationType'
+  AuthenticationType ->
+  DescribeUsers
+newDescribeUsers pAuthenticationType_ =
+  DescribeUsers'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      authenticationType = pAuthenticationType_
+    }
+
+-- | The maximum size of each page of results.
+describeUsers_maxResults :: Lens.Lens' DescribeUsers (Prelude.Maybe Prelude.Int)
+describeUsers_maxResults = Lens.lens (\DescribeUsers' {maxResults} -> maxResults) (\s@DescribeUsers' {} a -> s {maxResults = a} :: DescribeUsers)
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+describeUsers_nextToken :: Lens.Lens' DescribeUsers (Prelude.Maybe Prelude.Text)
+describeUsers_nextToken = Lens.lens (\DescribeUsers' {nextToken} -> nextToken) (\s@DescribeUsers' {} a -> s {nextToken = a} :: DescribeUsers)
+
+-- | The authentication type for the users in the user pool to describe. You
+-- must specify USERPOOL.
+describeUsers_authenticationType :: Lens.Lens' DescribeUsers AuthenticationType
+describeUsers_authenticationType = Lens.lens (\DescribeUsers' {authenticationType} -> authenticationType) (\s@DescribeUsers' {} a -> s {authenticationType = a} :: DescribeUsers)
+
+instance Core.AWSPager DescribeUsers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeUsersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeUsersResponse_users
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeUsers_nextToken
+          Lens..~ rs
+          Lens.^? describeUsersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeUsers where
+  type
+    AWSResponse DescribeUsers =
+      DescribeUsersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeUsersResponse'
+            Prelude.<$> (x Data..?> "NextToken")
+            Prelude.<*> (x Data..?> "Users" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeUsers where
+  hashWithSalt _salt DescribeUsers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` authenticationType
+
+instance Prelude.NFData DescribeUsers where
+  rnf DescribeUsers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf authenticationType
+
+instance Data.ToHeaders DescribeUsers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DescribeUsers" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeUsers where
+  toJSON DescribeUsers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("AuthenticationType" Data..= authenticationType)
+          ]
+      )
+
+instance Data.ToPath DescribeUsers where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeUsers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeUsersResponse' smart constructor.
+data DescribeUsersResponse = DescribeUsersResponse'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about users in the user pool.
+    users :: Prelude.Maybe [User],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeUsersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeUsersResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'users', 'describeUsersResponse_users' - Information about users in the user pool.
+--
+-- 'httpStatus', 'describeUsersResponse_httpStatus' - The response's http status code.
+newDescribeUsersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeUsersResponse
+newDescribeUsersResponse pHttpStatus_ =
+  DescribeUsersResponse'
+    { nextToken = Prelude.Nothing,
+      users = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+describeUsersResponse_nextToken :: Lens.Lens' DescribeUsersResponse (Prelude.Maybe Prelude.Text)
+describeUsersResponse_nextToken = Lens.lens (\DescribeUsersResponse' {nextToken} -> nextToken) (\s@DescribeUsersResponse' {} a -> s {nextToken = a} :: DescribeUsersResponse)
+
+-- | Information about users in the user pool.
+describeUsersResponse_users :: Lens.Lens' DescribeUsersResponse (Prelude.Maybe [User])
+describeUsersResponse_users = Lens.lens (\DescribeUsersResponse' {users} -> users) (\s@DescribeUsersResponse' {} a -> s {users = a} :: DescribeUsersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeUsersResponse_httpStatus :: Lens.Lens' DescribeUsersResponse Prelude.Int
+describeUsersResponse_httpStatus = Lens.lens (\DescribeUsersResponse' {httpStatus} -> httpStatus) (\s@DescribeUsersResponse' {} a -> s {httpStatus = a} :: DescribeUsersResponse)
+
+instance Prelude.NFData DescribeUsersResponse where
+  rnf DescribeUsersResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf users
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DisableUser.hs b/gen/Amazonka/AppStream/DisableUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DisableUser.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.AppStream.DisableUser
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disables the specified user in the user pool. Users can\'t sign in to
+-- AppStream 2.0 until they are re-enabled. This action does not delete the
+-- user.
+module Amazonka.AppStream.DisableUser
+  ( -- * Creating a Request
+    DisableUser (..),
+    newDisableUser,
+
+    -- * Request Lenses
+    disableUser_userName,
+    disableUser_authenticationType,
+
+    -- * Destructuring the Response
+    DisableUserResponse (..),
+    newDisableUserResponse,
+
+    -- * Response Lenses
+    disableUserResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisableUser' smart constructor.
+data DisableUser = DisableUser'
+  { -- | The email address of the user.
+    --
+    -- Users\' email addresses are case-sensitive.
+    userName :: Data.Sensitive Prelude.Text,
+    -- | The authentication type for the user. You must specify USERPOOL.
+    authenticationType :: AuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableUser' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userName', 'disableUser_userName' - The email address of the user.
+--
+-- Users\' email addresses are case-sensitive.
+--
+-- 'authenticationType', 'disableUser_authenticationType' - The authentication type for the user. You must specify USERPOOL.
+newDisableUser ::
+  -- | 'userName'
+  Prelude.Text ->
+  -- | 'authenticationType'
+  AuthenticationType ->
+  DisableUser
+newDisableUser pUserName_ pAuthenticationType_ =
+  DisableUser'
+    { userName =
+        Data._Sensitive Lens.# pUserName_,
+      authenticationType = pAuthenticationType_
+    }
+
+-- | The email address of the user.
+--
+-- Users\' email addresses are case-sensitive.
+disableUser_userName :: Lens.Lens' DisableUser Prelude.Text
+disableUser_userName = Lens.lens (\DisableUser' {userName} -> userName) (\s@DisableUser' {} a -> s {userName = a} :: DisableUser) Prelude.. Data._Sensitive
+
+-- | The authentication type for the user. You must specify USERPOOL.
+disableUser_authenticationType :: Lens.Lens' DisableUser AuthenticationType
+disableUser_authenticationType = Lens.lens (\DisableUser' {authenticationType} -> authenticationType) (\s@DisableUser' {} a -> s {authenticationType = a} :: DisableUser)
+
+instance Core.AWSRequest DisableUser where
+  type AWSResponse DisableUser = DisableUserResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisableUserResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisableUser where
+  hashWithSalt _salt DisableUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` userName
+      `Prelude.hashWithSalt` authenticationType
+
+instance Prelude.NFData DisableUser where
+  rnf DisableUser' {..} =
+    Prelude.rnf userName
+      `Prelude.seq` Prelude.rnf authenticationType
+
+instance Data.ToHeaders DisableUser where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DisableUser" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisableUser where
+  toJSON DisableUser' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("UserName" Data..= userName),
+            Prelude.Just
+              ("AuthenticationType" Data..= authenticationType)
+          ]
+      )
+
+instance Data.ToPath DisableUser where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisableUser where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisableUserResponse' smart constructor.
+data DisableUserResponse = DisableUserResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisableUserResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disableUserResponse_httpStatus' - The response's http status code.
+newDisableUserResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisableUserResponse
+newDisableUserResponse pHttpStatus_ =
+  DisableUserResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+disableUserResponse_httpStatus :: Lens.Lens' DisableUserResponse Prelude.Int
+disableUserResponse_httpStatus = Lens.lens (\DisableUserResponse' {httpStatus} -> httpStatus) (\s@DisableUserResponse' {} a -> s {httpStatus = a} :: DisableUserResponse)
+
+instance Prelude.NFData DisableUserResponse where
+  rnf DisableUserResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DisassociateApplicationFleet.hs b/gen/Amazonka/AppStream/DisassociateApplicationFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DisassociateApplicationFleet.hs
@@ -0,0 +1,186 @@
+{-# 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.AppStream.DisassociateApplicationFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates the specified application from the fleet.
+module Amazonka.AppStream.DisassociateApplicationFleet
+  ( -- * Creating a Request
+    DisassociateApplicationFleet (..),
+    newDisassociateApplicationFleet,
+
+    -- * Request Lenses
+    disassociateApplicationFleet_fleetName,
+    disassociateApplicationFleet_applicationArn,
+
+    -- * Destructuring the Response
+    DisassociateApplicationFleetResponse (..),
+    newDisassociateApplicationFleetResponse,
+
+    -- * Response Lenses
+    disassociateApplicationFleetResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateApplicationFleet' smart constructor.
+data DisassociateApplicationFleet = DisassociateApplicationFleet'
+  { -- | The name of the fleet.
+    fleetName :: Prelude.Text,
+    -- | The ARN of the application.
+    applicationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateApplicationFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleetName', 'disassociateApplicationFleet_fleetName' - The name of the fleet.
+--
+-- 'applicationArn', 'disassociateApplicationFleet_applicationArn' - The ARN of the application.
+newDisassociateApplicationFleet ::
+  -- | 'fleetName'
+  Prelude.Text ->
+  -- | 'applicationArn'
+  Prelude.Text ->
+  DisassociateApplicationFleet
+newDisassociateApplicationFleet
+  pFleetName_
+  pApplicationArn_ =
+    DisassociateApplicationFleet'
+      { fleetName =
+          pFleetName_,
+        applicationArn = pApplicationArn_
+      }
+
+-- | The name of the fleet.
+disassociateApplicationFleet_fleetName :: Lens.Lens' DisassociateApplicationFleet Prelude.Text
+disassociateApplicationFleet_fleetName = Lens.lens (\DisassociateApplicationFleet' {fleetName} -> fleetName) (\s@DisassociateApplicationFleet' {} a -> s {fleetName = a} :: DisassociateApplicationFleet)
+
+-- | The ARN of the application.
+disassociateApplicationFleet_applicationArn :: Lens.Lens' DisassociateApplicationFleet Prelude.Text
+disassociateApplicationFleet_applicationArn = Lens.lens (\DisassociateApplicationFleet' {applicationArn} -> applicationArn) (\s@DisassociateApplicationFleet' {} a -> s {applicationArn = a} :: DisassociateApplicationFleet)
+
+instance Core.AWSRequest DisassociateApplicationFleet where
+  type
+    AWSResponse DisassociateApplicationFleet =
+      DisassociateApplicationFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateApplicationFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateApplicationFleet
+  where
+  hashWithSalt _salt DisassociateApplicationFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` fleetName
+      `Prelude.hashWithSalt` applicationArn
+
+instance Prelude.NFData DisassociateApplicationFleet where
+  rnf DisassociateApplicationFleet' {..} =
+    Prelude.rnf fleetName
+      `Prelude.seq` Prelude.rnf applicationArn
+
+instance Data.ToHeaders DisassociateApplicationFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DisassociateApplicationFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateApplicationFleet where
+  toJSON DisassociateApplicationFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("FleetName" Data..= fleetName),
+            Prelude.Just
+              ("ApplicationArn" Data..= applicationArn)
+          ]
+      )
+
+instance Data.ToPath DisassociateApplicationFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateApplicationFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateApplicationFleetResponse' smart constructor.
+data DisassociateApplicationFleetResponse = DisassociateApplicationFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateApplicationFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateApplicationFleetResponse_httpStatus' - The response's http status code.
+newDisassociateApplicationFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateApplicationFleetResponse
+newDisassociateApplicationFleetResponse pHttpStatus_ =
+  DisassociateApplicationFleetResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateApplicationFleetResponse_httpStatus :: Lens.Lens' DisassociateApplicationFleetResponse Prelude.Int
+disassociateApplicationFleetResponse_httpStatus = Lens.lens (\DisassociateApplicationFleetResponse' {httpStatus} -> httpStatus) (\s@DisassociateApplicationFleetResponse' {} a -> s {httpStatus = a} :: DisassociateApplicationFleetResponse)
+
+instance
+  Prelude.NFData
+    DisassociateApplicationFleetResponse
+  where
+  rnf DisassociateApplicationFleetResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DisassociateApplicationFromEntitlement.hs b/gen/Amazonka/AppStream/DisassociateApplicationFromEntitlement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DisassociateApplicationFromEntitlement.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DisassociateApplicationFromEntitlement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified application from the specified entitlement.
+module Amazonka.AppStream.DisassociateApplicationFromEntitlement
+  ( -- * Creating a Request
+    DisassociateApplicationFromEntitlement (..),
+    newDisassociateApplicationFromEntitlement,
+
+    -- * Request Lenses
+    disassociateApplicationFromEntitlement_stackName,
+    disassociateApplicationFromEntitlement_entitlementName,
+    disassociateApplicationFromEntitlement_applicationIdentifier,
+
+    -- * Destructuring the Response
+    DisassociateApplicationFromEntitlementResponse (..),
+    newDisassociateApplicationFromEntitlementResponse,
+
+    -- * Response Lenses
+    disassociateApplicationFromEntitlementResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateApplicationFromEntitlement' smart constructor.
+data DisassociateApplicationFromEntitlement = DisassociateApplicationFromEntitlement'
+  { -- | The name of the stack with which the entitlement is associated.
+    stackName :: Prelude.Text,
+    -- | The name of the entitlement.
+    entitlementName :: Prelude.Text,
+    -- | The identifier of the application to remove from the entitlement.
+    applicationIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateApplicationFromEntitlement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stackName', 'disassociateApplicationFromEntitlement_stackName' - The name of the stack with which the entitlement is associated.
+--
+-- 'entitlementName', 'disassociateApplicationFromEntitlement_entitlementName' - The name of the entitlement.
+--
+-- 'applicationIdentifier', 'disassociateApplicationFromEntitlement_applicationIdentifier' - The identifier of the application to remove from the entitlement.
+newDisassociateApplicationFromEntitlement ::
+  -- | 'stackName'
+  Prelude.Text ->
+  -- | 'entitlementName'
+  Prelude.Text ->
+  -- | 'applicationIdentifier'
+  Prelude.Text ->
+  DisassociateApplicationFromEntitlement
+newDisassociateApplicationFromEntitlement
+  pStackName_
+  pEntitlementName_
+  pApplicationIdentifier_ =
+    DisassociateApplicationFromEntitlement'
+      { stackName =
+          pStackName_,
+        entitlementName = pEntitlementName_,
+        applicationIdentifier =
+          pApplicationIdentifier_
+      }
+
+-- | The name of the stack with which the entitlement is associated.
+disassociateApplicationFromEntitlement_stackName :: Lens.Lens' DisassociateApplicationFromEntitlement Prelude.Text
+disassociateApplicationFromEntitlement_stackName = Lens.lens (\DisassociateApplicationFromEntitlement' {stackName} -> stackName) (\s@DisassociateApplicationFromEntitlement' {} a -> s {stackName = a} :: DisassociateApplicationFromEntitlement)
+
+-- | The name of the entitlement.
+disassociateApplicationFromEntitlement_entitlementName :: Lens.Lens' DisassociateApplicationFromEntitlement Prelude.Text
+disassociateApplicationFromEntitlement_entitlementName = Lens.lens (\DisassociateApplicationFromEntitlement' {entitlementName} -> entitlementName) (\s@DisassociateApplicationFromEntitlement' {} a -> s {entitlementName = a} :: DisassociateApplicationFromEntitlement)
+
+-- | The identifier of the application to remove from the entitlement.
+disassociateApplicationFromEntitlement_applicationIdentifier :: Lens.Lens' DisassociateApplicationFromEntitlement Prelude.Text
+disassociateApplicationFromEntitlement_applicationIdentifier = Lens.lens (\DisassociateApplicationFromEntitlement' {applicationIdentifier} -> applicationIdentifier) (\s@DisassociateApplicationFromEntitlement' {} a -> s {applicationIdentifier = a} :: DisassociateApplicationFromEntitlement)
+
+instance
+  Core.AWSRequest
+    DisassociateApplicationFromEntitlement
+  where
+  type
+    AWSResponse
+      DisassociateApplicationFromEntitlement =
+      DisassociateApplicationFromEntitlementResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateApplicationFromEntitlementResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DisassociateApplicationFromEntitlement
+  where
+  hashWithSalt
+    _salt
+    DisassociateApplicationFromEntitlement' {..} =
+      _salt
+        `Prelude.hashWithSalt` stackName
+        `Prelude.hashWithSalt` entitlementName
+        `Prelude.hashWithSalt` applicationIdentifier
+
+instance
+  Prelude.NFData
+    DisassociateApplicationFromEntitlement
+  where
+  rnf DisassociateApplicationFromEntitlement' {..} =
+    Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf entitlementName
+      `Prelude.seq` Prelude.rnf applicationIdentifier
+
+instance
+  Data.ToHeaders
+    DisassociateApplicationFromEntitlement
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DisassociateApplicationFromEntitlement" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DisassociateApplicationFromEntitlement
+  where
+  toJSON DisassociateApplicationFromEntitlement' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("StackName" Data..= stackName),
+            Prelude.Just
+              ("EntitlementName" Data..= entitlementName),
+            Prelude.Just
+              ( "ApplicationIdentifier"
+                  Data..= applicationIdentifier
+              )
+          ]
+      )
+
+instance
+  Data.ToPath
+    DisassociateApplicationFromEntitlement
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DisassociateApplicationFromEntitlement
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateApplicationFromEntitlementResponse' smart constructor.
+data DisassociateApplicationFromEntitlementResponse = DisassociateApplicationFromEntitlementResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateApplicationFromEntitlementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateApplicationFromEntitlementResponse_httpStatus' - The response's http status code.
+newDisassociateApplicationFromEntitlementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateApplicationFromEntitlementResponse
+newDisassociateApplicationFromEntitlementResponse
+  pHttpStatus_ =
+    DisassociateApplicationFromEntitlementResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+disassociateApplicationFromEntitlementResponse_httpStatus :: Lens.Lens' DisassociateApplicationFromEntitlementResponse Prelude.Int
+disassociateApplicationFromEntitlementResponse_httpStatus = Lens.lens (\DisassociateApplicationFromEntitlementResponse' {httpStatus} -> httpStatus) (\s@DisassociateApplicationFromEntitlementResponse' {} a -> s {httpStatus = a} :: DisassociateApplicationFromEntitlementResponse)
+
+instance
+  Prelude.NFData
+    DisassociateApplicationFromEntitlementResponse
+  where
+  rnf
+    DisassociateApplicationFromEntitlementResponse' {..} =
+      Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/DisassociateFleet.hs b/gen/Amazonka/AppStream/DisassociateFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/DisassociateFleet.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.DisassociateFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates the specified fleet from the specified stack.
+module Amazonka.AppStream.DisassociateFleet
+  ( -- * Creating a Request
+    DisassociateFleet (..),
+    newDisassociateFleet,
+
+    -- * Request Lenses
+    disassociateFleet_fleetName,
+    disassociateFleet_stackName,
+
+    -- * Destructuring the Response
+    DisassociateFleetResponse (..),
+    newDisassociateFleetResponse,
+
+    -- * Response Lenses
+    disassociateFleetResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newDisassociateFleet' smart constructor.
+data DisassociateFleet = DisassociateFleet'
+  { -- | The name of the fleet.
+    fleetName :: Prelude.Text,
+    -- | The name of the stack.
+    stackName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleetName', 'disassociateFleet_fleetName' - The name of the fleet.
+--
+-- 'stackName', 'disassociateFleet_stackName' - The name of the stack.
+newDisassociateFleet ::
+  -- | 'fleetName'
+  Prelude.Text ->
+  -- | 'stackName'
+  Prelude.Text ->
+  DisassociateFleet
+newDisassociateFleet pFleetName_ pStackName_ =
+  DisassociateFleet'
+    { fleetName = pFleetName_,
+      stackName = pStackName_
+    }
+
+-- | The name of the fleet.
+disassociateFleet_fleetName :: Lens.Lens' DisassociateFleet Prelude.Text
+disassociateFleet_fleetName = Lens.lens (\DisassociateFleet' {fleetName} -> fleetName) (\s@DisassociateFleet' {} a -> s {fleetName = a} :: DisassociateFleet)
+
+-- | The name of the stack.
+disassociateFleet_stackName :: Lens.Lens' DisassociateFleet Prelude.Text
+disassociateFleet_stackName = Lens.lens (\DisassociateFleet' {stackName} -> stackName) (\s@DisassociateFleet' {} a -> s {stackName = a} :: DisassociateFleet)
+
+instance Core.AWSRequest DisassociateFleet where
+  type
+    AWSResponse DisassociateFleet =
+      DisassociateFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateFleet where
+  hashWithSalt _salt DisassociateFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` fleetName
+      `Prelude.hashWithSalt` stackName
+
+instance Prelude.NFData DisassociateFleet where
+  rnf DisassociateFleet' {..} =
+    Prelude.rnf fleetName
+      `Prelude.seq` Prelude.rnf stackName
+
+instance Data.ToHeaders DisassociateFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.DisassociateFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateFleet where
+  toJSON DisassociateFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("FleetName" Data..= fleetName),
+            Prelude.Just ("StackName" Data..= stackName)
+          ]
+      )
+
+instance Data.ToPath DisassociateFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateFleetResponse' smart constructor.
+data DisassociateFleetResponse = DisassociateFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateFleetResponse_httpStatus' - The response's http status code.
+newDisassociateFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateFleetResponse
+newDisassociateFleetResponse pHttpStatus_ =
+  DisassociateFleetResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateFleetResponse_httpStatus :: Lens.Lens' DisassociateFleetResponse Prelude.Int
+disassociateFleetResponse_httpStatus = Lens.lens (\DisassociateFleetResponse' {httpStatus} -> httpStatus) (\s@DisassociateFleetResponse' {} a -> s {httpStatus = a} :: DisassociateFleetResponse)
+
+instance Prelude.NFData DisassociateFleetResponse where
+  rnf DisassociateFleetResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/EnableUser.hs b/gen/Amazonka/AppStream/EnableUser.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/EnableUser.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.EnableUser
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Enables a user in the user pool. After being enabled, users can sign in
+-- to AppStream 2.0 and open applications from the stacks to which they are
+-- assigned.
+module Amazonka.AppStream.EnableUser
+  ( -- * Creating a Request
+    EnableUser (..),
+    newEnableUser,
+
+    -- * Request Lenses
+    enableUser_userName,
+    enableUser_authenticationType,
+
+    -- * Destructuring the Response
+    EnableUserResponse (..),
+    newEnableUserResponse,
+
+    -- * Response Lenses
+    enableUserResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newEnableUser' smart constructor.
+data EnableUser = EnableUser'
+  { -- | The email address of the user.
+    --
+    -- Users\' email addresses are case-sensitive. During login, if they
+    -- specify an email address that doesn\'t use the same capitalization as
+    -- the email address specified when their user pool account was created, a
+    -- \"user does not exist\" error message displays.
+    userName :: Data.Sensitive Prelude.Text,
+    -- | The authentication type for the user. You must specify USERPOOL.
+    authenticationType :: AuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableUser' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'userName', 'enableUser_userName' - The email address of the user.
+--
+-- Users\' email addresses are case-sensitive. During login, if they
+-- specify an email address that doesn\'t use the same capitalization as
+-- the email address specified when their user pool account was created, a
+-- \"user does not exist\" error message displays.
+--
+-- 'authenticationType', 'enableUser_authenticationType' - The authentication type for the user. You must specify USERPOOL.
+newEnableUser ::
+  -- | 'userName'
+  Prelude.Text ->
+  -- | 'authenticationType'
+  AuthenticationType ->
+  EnableUser
+newEnableUser pUserName_ pAuthenticationType_ =
+  EnableUser'
+    { userName =
+        Data._Sensitive Lens.# pUserName_,
+      authenticationType = pAuthenticationType_
+    }
+
+-- | The email address of the user.
+--
+-- Users\' email addresses are case-sensitive. During login, if they
+-- specify an email address that doesn\'t use the same capitalization as
+-- the email address specified when their user pool account was created, a
+-- \"user does not exist\" error message displays.
+enableUser_userName :: Lens.Lens' EnableUser Prelude.Text
+enableUser_userName = Lens.lens (\EnableUser' {userName} -> userName) (\s@EnableUser' {} a -> s {userName = a} :: EnableUser) Prelude.. Data._Sensitive
+
+-- | The authentication type for the user. You must specify USERPOOL.
+enableUser_authenticationType :: Lens.Lens' EnableUser AuthenticationType
+enableUser_authenticationType = Lens.lens (\EnableUser' {authenticationType} -> authenticationType) (\s@EnableUser' {} a -> s {authenticationType = a} :: EnableUser)
+
+instance Core.AWSRequest EnableUser where
+  type AWSResponse EnableUser = EnableUserResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          EnableUserResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable EnableUser where
+  hashWithSalt _salt EnableUser' {..} =
+    _salt
+      `Prelude.hashWithSalt` userName
+      `Prelude.hashWithSalt` authenticationType
+
+instance Prelude.NFData EnableUser where
+  rnf EnableUser' {..} =
+    Prelude.rnf userName
+      `Prelude.seq` Prelude.rnf authenticationType
+
+instance Data.ToHeaders EnableUser where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.EnableUser" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON EnableUser where
+  toJSON EnableUser' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("UserName" Data..= userName),
+            Prelude.Just
+              ("AuthenticationType" Data..= authenticationType)
+          ]
+      )
+
+instance Data.ToPath EnableUser where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery EnableUser where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newEnableUserResponse' smart constructor.
+data EnableUserResponse = EnableUserResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnableUserResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'enableUserResponse_httpStatus' - The response's http status code.
+newEnableUserResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  EnableUserResponse
+newEnableUserResponse pHttpStatus_ =
+  EnableUserResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+enableUserResponse_httpStatus :: Lens.Lens' EnableUserResponse Prelude.Int
+enableUserResponse_httpStatus = Lens.lens (\EnableUserResponse' {httpStatus} -> httpStatus) (\s@EnableUserResponse' {} a -> s {httpStatus = a} :: EnableUserResponse)
+
+instance Prelude.NFData EnableUserResponse where
+  rnf EnableUserResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/ExpireSession.hs b/gen/Amazonka/AppStream/ExpireSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/ExpireSession.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.ExpireSession
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Immediately stops the specified streaming session.
+module Amazonka.AppStream.ExpireSession
+  ( -- * Creating a Request
+    ExpireSession (..),
+    newExpireSession,
+
+    -- * Request Lenses
+    expireSession_sessionId,
+
+    -- * Destructuring the Response
+    ExpireSessionResponse (..),
+    newExpireSessionResponse,
+
+    -- * Response Lenses
+    expireSessionResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newExpireSession' smart constructor.
+data ExpireSession = ExpireSession'
+  { -- | The identifier of the streaming session.
+    sessionId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExpireSession' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'expireSession_sessionId' - The identifier of the streaming session.
+newExpireSession ::
+  -- | 'sessionId'
+  Prelude.Text ->
+  ExpireSession
+newExpireSession pSessionId_ =
+  ExpireSession' {sessionId = pSessionId_}
+
+-- | The identifier of the streaming session.
+expireSession_sessionId :: Lens.Lens' ExpireSession Prelude.Text
+expireSession_sessionId = Lens.lens (\ExpireSession' {sessionId} -> sessionId) (\s@ExpireSession' {} a -> s {sessionId = a} :: ExpireSession)
+
+instance Core.AWSRequest ExpireSession where
+  type
+    AWSResponse ExpireSession =
+      ExpireSessionResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ExpireSessionResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ExpireSession where
+  hashWithSalt _salt ExpireSession' {..} =
+    _salt `Prelude.hashWithSalt` sessionId
+
+instance Prelude.NFData ExpireSession where
+  rnf ExpireSession' {..} = Prelude.rnf sessionId
+
+instance Data.ToHeaders ExpireSession where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.ExpireSession" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ExpireSession where
+  toJSON ExpireSession' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("SessionId" Data..= sessionId)]
+      )
+
+instance Data.ToPath ExpireSession where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ExpireSession where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newExpireSessionResponse' smart constructor.
+data ExpireSessionResponse = ExpireSessionResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ExpireSessionResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'expireSessionResponse_httpStatus' - The response's http status code.
+newExpireSessionResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ExpireSessionResponse
+newExpireSessionResponse pHttpStatus_ =
+  ExpireSessionResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+expireSessionResponse_httpStatus :: Lens.Lens' ExpireSessionResponse Prelude.Int
+expireSessionResponse_httpStatus = Lens.lens (\ExpireSessionResponse' {httpStatus} -> httpStatus) (\s@ExpireSessionResponse' {} a -> s {httpStatus = a} :: ExpireSessionResponse)
+
+instance Prelude.NFData ExpireSessionResponse where
+  rnf ExpireSessionResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/Lens.hs b/gen/Amazonka/AppStream/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Lens.hs
@@ -0,0 +1,904 @@
+{-# 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.AppStream.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.AppStream.Lens
+  ( -- * Operations
+
+    -- ** AssociateApplicationFleet
+    associateApplicationFleet_fleetName,
+    associateApplicationFleet_applicationArn,
+    associateApplicationFleetResponse_applicationFleetAssociation,
+    associateApplicationFleetResponse_httpStatus,
+
+    -- ** AssociateApplicationToEntitlement
+    associateApplicationToEntitlement_stackName,
+    associateApplicationToEntitlement_entitlementName,
+    associateApplicationToEntitlement_applicationIdentifier,
+    associateApplicationToEntitlementResponse_httpStatus,
+
+    -- ** AssociateFleet
+    associateFleet_fleetName,
+    associateFleet_stackName,
+    associateFleetResponse_httpStatus,
+
+    -- ** BatchAssociateUserStack
+    batchAssociateUserStack_userStackAssociations,
+    batchAssociateUserStackResponse_errors,
+    batchAssociateUserStackResponse_httpStatus,
+
+    -- ** BatchDisassociateUserStack
+    batchDisassociateUserStack_userStackAssociations,
+    batchDisassociateUserStackResponse_errors,
+    batchDisassociateUserStackResponse_httpStatus,
+
+    -- ** CopyImage
+    copyImage_destinationImageDescription,
+    copyImage_sourceImageName,
+    copyImage_destinationImageName,
+    copyImage_destinationRegion,
+    copyImageResponse_destinationImageName,
+    copyImageResponse_httpStatus,
+
+    -- ** CreateAppBlock
+    createAppBlock_description,
+    createAppBlock_displayName,
+    createAppBlock_tags,
+    createAppBlock_name,
+    createAppBlock_sourceS3Location,
+    createAppBlock_setupScriptDetails,
+    createAppBlockResponse_appBlock,
+    createAppBlockResponse_httpStatus,
+
+    -- ** CreateApplication
+    createApplication_description,
+    createApplication_displayName,
+    createApplication_launchParameters,
+    createApplication_tags,
+    createApplication_workingDirectory,
+    createApplication_name,
+    createApplication_iconS3Location,
+    createApplication_launchPath,
+    createApplication_platforms,
+    createApplication_instanceFamilies,
+    createApplication_appBlockArn,
+    createApplicationResponse_application,
+    createApplicationResponse_httpStatus,
+
+    -- ** CreateDirectoryConfig
+    createDirectoryConfig_certificateBasedAuthProperties,
+    createDirectoryConfig_serviceAccountCredentials,
+    createDirectoryConfig_directoryName,
+    createDirectoryConfig_organizationalUnitDistinguishedNames,
+    createDirectoryConfigResponse_directoryConfig,
+    createDirectoryConfigResponse_httpStatus,
+
+    -- ** CreateEntitlement
+    createEntitlement_description,
+    createEntitlement_name,
+    createEntitlement_stackName,
+    createEntitlement_appVisibility,
+    createEntitlement_attributes,
+    createEntitlementResponse_entitlement,
+    createEntitlementResponse_httpStatus,
+
+    -- ** CreateFleet
+    createFleet_computeCapacity,
+    createFleet_description,
+    createFleet_disconnectTimeoutInSeconds,
+    createFleet_displayName,
+    createFleet_domainJoinInfo,
+    createFleet_enableDefaultInternetAccess,
+    createFleet_fleetType,
+    createFleet_iamRoleArn,
+    createFleet_idleDisconnectTimeoutInSeconds,
+    createFleet_imageArn,
+    createFleet_imageName,
+    createFleet_maxConcurrentSessions,
+    createFleet_maxUserDurationInSeconds,
+    createFleet_platform,
+    createFleet_sessionScriptS3Location,
+    createFleet_streamView,
+    createFleet_tags,
+    createFleet_usbDeviceFilterStrings,
+    createFleet_vpcConfig,
+    createFleet_name,
+    createFleet_instanceType,
+    createFleetResponse_fleet,
+    createFleetResponse_httpStatus,
+
+    -- ** CreateImageBuilder
+    createImageBuilder_accessEndpoints,
+    createImageBuilder_appstreamAgentVersion,
+    createImageBuilder_description,
+    createImageBuilder_displayName,
+    createImageBuilder_domainJoinInfo,
+    createImageBuilder_enableDefaultInternetAccess,
+    createImageBuilder_iamRoleArn,
+    createImageBuilder_imageArn,
+    createImageBuilder_imageName,
+    createImageBuilder_tags,
+    createImageBuilder_vpcConfig,
+    createImageBuilder_name,
+    createImageBuilder_instanceType,
+    createImageBuilderResponse_imageBuilder,
+    createImageBuilderResponse_httpStatus,
+
+    -- ** CreateImageBuilderStreamingURL
+    createImageBuilderStreamingURL_validity,
+    createImageBuilderStreamingURL_name,
+    createImageBuilderStreamingURLResponse_expires,
+    createImageBuilderStreamingURLResponse_streamingURL,
+    createImageBuilderStreamingURLResponse_httpStatus,
+
+    -- ** CreateStack
+    createStack_accessEndpoints,
+    createStack_applicationSettings,
+    createStack_description,
+    createStack_displayName,
+    createStack_embedHostDomains,
+    createStack_feedbackURL,
+    createStack_redirectURL,
+    createStack_storageConnectors,
+    createStack_streamingExperienceSettings,
+    createStack_tags,
+    createStack_userSettings,
+    createStack_name,
+    createStackResponse_stack,
+    createStackResponse_httpStatus,
+
+    -- ** CreateStreamingURL
+    createStreamingURL_applicationId,
+    createStreamingURL_sessionContext,
+    createStreamingURL_validity,
+    createStreamingURL_stackName,
+    createStreamingURL_fleetName,
+    createStreamingURL_userId,
+    createStreamingURLResponse_expires,
+    createStreamingURLResponse_streamingURL,
+    createStreamingURLResponse_httpStatus,
+
+    -- ** CreateUpdatedImage
+    createUpdatedImage_dryRun,
+    createUpdatedImage_newImageDescription,
+    createUpdatedImage_newImageDisplayName,
+    createUpdatedImage_newImageTags,
+    createUpdatedImage_existingImageName,
+    createUpdatedImage_newImageName,
+    createUpdatedImageResponse_canUpdateImage,
+    createUpdatedImageResponse_image,
+    createUpdatedImageResponse_httpStatus,
+
+    -- ** CreateUsageReportSubscription
+    createUsageReportSubscriptionResponse_s3BucketName,
+    createUsageReportSubscriptionResponse_schedule,
+    createUsageReportSubscriptionResponse_httpStatus,
+
+    -- ** CreateUser
+    createUser_firstName,
+    createUser_lastName,
+    createUser_messageAction,
+    createUser_userName,
+    createUser_authenticationType,
+    createUserResponse_httpStatus,
+
+    -- ** DeleteAppBlock
+    deleteAppBlock_name,
+    deleteAppBlockResponse_httpStatus,
+
+    -- ** DeleteApplication
+    deleteApplication_name,
+    deleteApplicationResponse_httpStatus,
+
+    -- ** DeleteDirectoryConfig
+    deleteDirectoryConfig_directoryName,
+    deleteDirectoryConfigResponse_httpStatus,
+
+    -- ** DeleteEntitlement
+    deleteEntitlement_name,
+    deleteEntitlement_stackName,
+    deleteEntitlementResponse_httpStatus,
+
+    -- ** DeleteFleet
+    deleteFleet_name,
+    deleteFleetResponse_httpStatus,
+
+    -- ** DeleteImage
+    deleteImage_name,
+    deleteImageResponse_image,
+    deleteImageResponse_httpStatus,
+
+    -- ** DeleteImageBuilder
+    deleteImageBuilder_name,
+    deleteImageBuilderResponse_imageBuilder,
+    deleteImageBuilderResponse_httpStatus,
+
+    -- ** DeleteImagePermissions
+    deleteImagePermissions_name,
+    deleteImagePermissions_sharedAccountId,
+    deleteImagePermissionsResponse_httpStatus,
+
+    -- ** DeleteStack
+    deleteStack_name,
+    deleteStackResponse_httpStatus,
+
+    -- ** DeleteUsageReportSubscription
+    deleteUsageReportSubscriptionResponse_httpStatus,
+
+    -- ** DeleteUser
+    deleteUser_userName,
+    deleteUser_authenticationType,
+    deleteUserResponse_httpStatus,
+
+    -- ** DescribeAppBlocks
+    describeAppBlocks_arns,
+    describeAppBlocks_maxResults,
+    describeAppBlocks_nextToken,
+    describeAppBlocksResponse_appBlocks,
+    describeAppBlocksResponse_nextToken,
+    describeAppBlocksResponse_httpStatus,
+
+    -- ** DescribeApplicationFleetAssociations
+    describeApplicationFleetAssociations_applicationArn,
+    describeApplicationFleetAssociations_fleetName,
+    describeApplicationFleetAssociations_maxResults,
+    describeApplicationFleetAssociations_nextToken,
+    describeApplicationFleetAssociationsResponse_applicationFleetAssociations,
+    describeApplicationFleetAssociationsResponse_nextToken,
+    describeApplicationFleetAssociationsResponse_httpStatus,
+
+    -- ** DescribeApplications
+    describeApplications_arns,
+    describeApplications_maxResults,
+    describeApplications_nextToken,
+    describeApplicationsResponse_applications,
+    describeApplicationsResponse_nextToken,
+    describeApplicationsResponse_httpStatus,
+
+    -- ** DescribeDirectoryConfigs
+    describeDirectoryConfigs_directoryNames,
+    describeDirectoryConfigs_maxResults,
+    describeDirectoryConfigs_nextToken,
+    describeDirectoryConfigsResponse_directoryConfigs,
+    describeDirectoryConfigsResponse_nextToken,
+    describeDirectoryConfigsResponse_httpStatus,
+
+    -- ** DescribeEntitlements
+    describeEntitlements_maxResults,
+    describeEntitlements_name,
+    describeEntitlements_nextToken,
+    describeEntitlements_stackName,
+    describeEntitlementsResponse_entitlements,
+    describeEntitlementsResponse_nextToken,
+    describeEntitlementsResponse_httpStatus,
+
+    -- ** DescribeFleets
+    describeFleets_names,
+    describeFleets_nextToken,
+    describeFleetsResponse_fleets,
+    describeFleetsResponse_nextToken,
+    describeFleetsResponse_httpStatus,
+
+    -- ** DescribeImageBuilders
+    describeImageBuilders_maxResults,
+    describeImageBuilders_names,
+    describeImageBuilders_nextToken,
+    describeImageBuildersResponse_imageBuilders,
+    describeImageBuildersResponse_nextToken,
+    describeImageBuildersResponse_httpStatus,
+
+    -- ** DescribeImagePermissions
+    describeImagePermissions_maxResults,
+    describeImagePermissions_nextToken,
+    describeImagePermissions_sharedAwsAccountIds,
+    describeImagePermissions_name,
+    describeImagePermissionsResponse_name,
+    describeImagePermissionsResponse_nextToken,
+    describeImagePermissionsResponse_sharedImagePermissionsList,
+    describeImagePermissionsResponse_httpStatus,
+
+    -- ** DescribeImages
+    describeImages_arns,
+    describeImages_maxResults,
+    describeImages_names,
+    describeImages_nextToken,
+    describeImages_type,
+    describeImagesResponse_images,
+    describeImagesResponse_nextToken,
+    describeImagesResponse_httpStatus,
+
+    -- ** DescribeSessions
+    describeSessions_authenticationType,
+    describeSessions_limit,
+    describeSessions_nextToken,
+    describeSessions_userId,
+    describeSessions_stackName,
+    describeSessions_fleetName,
+    describeSessionsResponse_nextToken,
+    describeSessionsResponse_sessions,
+    describeSessionsResponse_httpStatus,
+
+    -- ** DescribeStacks
+    describeStacks_names,
+    describeStacks_nextToken,
+    describeStacksResponse_nextToken,
+    describeStacksResponse_stacks,
+    describeStacksResponse_httpStatus,
+
+    -- ** DescribeUsageReportSubscriptions
+    describeUsageReportSubscriptions_maxResults,
+    describeUsageReportSubscriptions_nextToken,
+    describeUsageReportSubscriptionsResponse_nextToken,
+    describeUsageReportSubscriptionsResponse_usageReportSubscriptions,
+    describeUsageReportSubscriptionsResponse_httpStatus,
+
+    -- ** DescribeUserStackAssociations
+    describeUserStackAssociations_authenticationType,
+    describeUserStackAssociations_maxResults,
+    describeUserStackAssociations_nextToken,
+    describeUserStackAssociations_stackName,
+    describeUserStackAssociations_userName,
+    describeUserStackAssociationsResponse_nextToken,
+    describeUserStackAssociationsResponse_userStackAssociations,
+    describeUserStackAssociationsResponse_httpStatus,
+
+    -- ** DescribeUsers
+    describeUsers_maxResults,
+    describeUsers_nextToken,
+    describeUsers_authenticationType,
+    describeUsersResponse_nextToken,
+    describeUsersResponse_users,
+    describeUsersResponse_httpStatus,
+
+    -- ** DisableUser
+    disableUser_userName,
+    disableUser_authenticationType,
+    disableUserResponse_httpStatus,
+
+    -- ** DisassociateApplicationFleet
+    disassociateApplicationFleet_fleetName,
+    disassociateApplicationFleet_applicationArn,
+    disassociateApplicationFleetResponse_httpStatus,
+
+    -- ** DisassociateApplicationFromEntitlement
+    disassociateApplicationFromEntitlement_stackName,
+    disassociateApplicationFromEntitlement_entitlementName,
+    disassociateApplicationFromEntitlement_applicationIdentifier,
+    disassociateApplicationFromEntitlementResponse_httpStatus,
+
+    -- ** DisassociateFleet
+    disassociateFleet_fleetName,
+    disassociateFleet_stackName,
+    disassociateFleetResponse_httpStatus,
+
+    -- ** EnableUser
+    enableUser_userName,
+    enableUser_authenticationType,
+    enableUserResponse_httpStatus,
+
+    -- ** ExpireSession
+    expireSession_sessionId,
+    expireSessionResponse_httpStatus,
+
+    -- ** ListAssociatedFleets
+    listAssociatedFleets_nextToken,
+    listAssociatedFleets_stackName,
+    listAssociatedFleetsResponse_names,
+    listAssociatedFleetsResponse_nextToken,
+    listAssociatedFleetsResponse_httpStatus,
+
+    -- ** ListAssociatedStacks
+    listAssociatedStacks_nextToken,
+    listAssociatedStacks_fleetName,
+    listAssociatedStacksResponse_names,
+    listAssociatedStacksResponse_nextToken,
+    listAssociatedStacksResponse_httpStatus,
+
+    -- ** ListEntitledApplications
+    listEntitledApplications_maxResults,
+    listEntitledApplications_nextToken,
+    listEntitledApplications_stackName,
+    listEntitledApplications_entitlementName,
+    listEntitledApplicationsResponse_entitledApplications,
+    listEntitledApplicationsResponse_nextToken,
+    listEntitledApplicationsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceArn,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** StartFleet
+    startFleet_name,
+    startFleetResponse_httpStatus,
+
+    -- ** StartImageBuilder
+    startImageBuilder_appstreamAgentVersion,
+    startImageBuilder_name,
+    startImageBuilderResponse_imageBuilder,
+    startImageBuilderResponse_httpStatus,
+
+    -- ** StopFleet
+    stopFleet_name,
+    stopFleetResponse_httpStatus,
+
+    -- ** StopImageBuilder
+    stopImageBuilder_name,
+    stopImageBuilderResponse_imageBuilder,
+    stopImageBuilderResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceArn,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateApplication
+    updateApplication_appBlockArn,
+    updateApplication_attributesToDelete,
+    updateApplication_description,
+    updateApplication_displayName,
+    updateApplication_iconS3Location,
+    updateApplication_launchParameters,
+    updateApplication_launchPath,
+    updateApplication_workingDirectory,
+    updateApplication_name,
+    updateApplicationResponse_application,
+    updateApplicationResponse_httpStatus,
+
+    -- ** UpdateDirectoryConfig
+    updateDirectoryConfig_certificateBasedAuthProperties,
+    updateDirectoryConfig_organizationalUnitDistinguishedNames,
+    updateDirectoryConfig_serviceAccountCredentials,
+    updateDirectoryConfig_directoryName,
+    updateDirectoryConfigResponse_directoryConfig,
+    updateDirectoryConfigResponse_httpStatus,
+
+    -- ** UpdateEntitlement
+    updateEntitlement_appVisibility,
+    updateEntitlement_attributes,
+    updateEntitlement_description,
+    updateEntitlement_name,
+    updateEntitlement_stackName,
+    updateEntitlementResponse_entitlement,
+    updateEntitlementResponse_httpStatus,
+
+    -- ** UpdateFleet
+    updateFleet_attributesToDelete,
+    updateFleet_computeCapacity,
+    updateFleet_deleteVpcConfig,
+    updateFleet_description,
+    updateFleet_disconnectTimeoutInSeconds,
+    updateFleet_displayName,
+    updateFleet_domainJoinInfo,
+    updateFleet_enableDefaultInternetAccess,
+    updateFleet_iamRoleArn,
+    updateFleet_idleDisconnectTimeoutInSeconds,
+    updateFleet_imageArn,
+    updateFleet_imageName,
+    updateFleet_instanceType,
+    updateFleet_maxConcurrentSessions,
+    updateFleet_maxUserDurationInSeconds,
+    updateFleet_name,
+    updateFleet_platform,
+    updateFleet_sessionScriptS3Location,
+    updateFleet_streamView,
+    updateFleet_usbDeviceFilterStrings,
+    updateFleet_vpcConfig,
+    updateFleetResponse_fleet,
+    updateFleetResponse_httpStatus,
+
+    -- ** UpdateImagePermissions
+    updateImagePermissions_name,
+    updateImagePermissions_sharedAccountId,
+    updateImagePermissions_imagePermissions,
+    updateImagePermissionsResponse_httpStatus,
+
+    -- ** UpdateStack
+    updateStack_accessEndpoints,
+    updateStack_applicationSettings,
+    updateStack_attributesToDelete,
+    updateStack_deleteStorageConnectors,
+    updateStack_description,
+    updateStack_displayName,
+    updateStack_embedHostDomains,
+    updateStack_feedbackURL,
+    updateStack_redirectURL,
+    updateStack_storageConnectors,
+    updateStack_streamingExperienceSettings,
+    updateStack_userSettings,
+    updateStack_name,
+    updateStackResponse_stack,
+    updateStackResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AccessEndpoint
+    accessEndpoint_vpceId,
+    accessEndpoint_endpointType,
+
+    -- ** AppBlock
+    appBlock_createdTime,
+    appBlock_description,
+    appBlock_displayName,
+    appBlock_sourceS3Location,
+    appBlock_name,
+    appBlock_arn,
+    appBlock_setupScriptDetails,
+
+    -- ** Application
+    application_appBlockArn,
+    application_arn,
+    application_createdTime,
+    application_description,
+    application_displayName,
+    application_enabled,
+    application_iconS3Location,
+    application_iconURL,
+    application_instanceFamilies,
+    application_launchParameters,
+    application_launchPath,
+    application_metadata,
+    application_name,
+    application_platforms,
+    application_workingDirectory,
+
+    -- ** ApplicationFleetAssociation
+    applicationFleetAssociation_fleetName,
+    applicationFleetAssociation_applicationArn,
+
+    -- ** ApplicationSettings
+    applicationSettings_settingsGroup,
+    applicationSettings_enabled,
+
+    -- ** ApplicationSettingsResponse
+    applicationSettingsResponse_enabled,
+    applicationSettingsResponse_s3BucketName,
+    applicationSettingsResponse_settingsGroup,
+
+    -- ** CertificateBasedAuthProperties
+    certificateBasedAuthProperties_certificateAuthorityArn,
+    certificateBasedAuthProperties_status,
+
+    -- ** ComputeCapacity
+    computeCapacity_desiredInstances,
+
+    -- ** ComputeCapacityStatus
+    computeCapacityStatus_available,
+    computeCapacityStatus_inUse,
+    computeCapacityStatus_running,
+    computeCapacityStatus_desired,
+
+    -- ** DirectoryConfig
+    directoryConfig_certificateBasedAuthProperties,
+    directoryConfig_createdTime,
+    directoryConfig_organizationalUnitDistinguishedNames,
+    directoryConfig_serviceAccountCredentials,
+    directoryConfig_directoryName,
+
+    -- ** DomainJoinInfo
+    domainJoinInfo_directoryName,
+    domainJoinInfo_organizationalUnitDistinguishedName,
+
+    -- ** EntitledApplication
+    entitledApplication_applicationIdentifier,
+
+    -- ** Entitlement
+    entitlement_createdTime,
+    entitlement_description,
+    entitlement_lastModifiedTime,
+    entitlement_name,
+    entitlement_stackName,
+    entitlement_appVisibility,
+    entitlement_attributes,
+
+    -- ** EntitlementAttribute
+    entitlementAttribute_name,
+    entitlementAttribute_value,
+
+    -- ** Fleet
+    fleet_createdTime,
+    fleet_description,
+    fleet_disconnectTimeoutInSeconds,
+    fleet_displayName,
+    fleet_domainJoinInfo,
+    fleet_enableDefaultInternetAccess,
+    fleet_fleetErrors,
+    fleet_fleetType,
+    fleet_iamRoleArn,
+    fleet_idleDisconnectTimeoutInSeconds,
+    fleet_imageArn,
+    fleet_imageName,
+    fleet_maxConcurrentSessions,
+    fleet_maxUserDurationInSeconds,
+    fleet_platform,
+    fleet_sessionScriptS3Location,
+    fleet_streamView,
+    fleet_usbDeviceFilterStrings,
+    fleet_vpcConfig,
+    fleet_arn,
+    fleet_name,
+    fleet_instanceType,
+    fleet_computeCapacityStatus,
+    fleet_state,
+
+    -- ** FleetError
+    fleetError_errorCode,
+    fleetError_errorMessage,
+
+    -- ** Image
+    image_applications,
+    image_appstreamAgentVersion,
+    image_arn,
+    image_baseImageArn,
+    image_createdTime,
+    image_description,
+    image_displayName,
+    image_imageBuilderName,
+    image_imageBuilderSupported,
+    image_imageErrors,
+    image_imagePermissions,
+    image_platform,
+    image_publicBaseImageReleasedDate,
+    image_state,
+    image_stateChangeReason,
+    image_visibility,
+    image_name,
+
+    -- ** ImageBuilder
+    imageBuilder_accessEndpoints,
+    imageBuilder_appstreamAgentVersion,
+    imageBuilder_arn,
+    imageBuilder_createdTime,
+    imageBuilder_description,
+    imageBuilder_displayName,
+    imageBuilder_domainJoinInfo,
+    imageBuilder_enableDefaultInternetAccess,
+    imageBuilder_iamRoleArn,
+    imageBuilder_imageArn,
+    imageBuilder_imageBuilderErrors,
+    imageBuilder_instanceType,
+    imageBuilder_networkAccessConfiguration,
+    imageBuilder_platform,
+    imageBuilder_state,
+    imageBuilder_stateChangeReason,
+    imageBuilder_vpcConfig,
+    imageBuilder_name,
+
+    -- ** ImageBuilderStateChangeReason
+    imageBuilderStateChangeReason_code,
+    imageBuilderStateChangeReason_message,
+
+    -- ** ImagePermissions
+    imagePermissions_allowFleet,
+    imagePermissions_allowImageBuilder,
+
+    -- ** ImageStateChangeReason
+    imageStateChangeReason_code,
+    imageStateChangeReason_message,
+
+    -- ** LastReportGenerationExecutionError
+    lastReportGenerationExecutionError_errorCode,
+    lastReportGenerationExecutionError_errorMessage,
+
+    -- ** NetworkAccessConfiguration
+    networkAccessConfiguration_eniId,
+    networkAccessConfiguration_eniPrivateIpAddress,
+
+    -- ** ResourceError
+    resourceError_errorCode,
+    resourceError_errorMessage,
+    resourceError_errorTimestamp,
+
+    -- ** S3Location
+    s3Location_s3Bucket,
+    s3Location_s3Key,
+
+    -- ** ScriptDetails
+    scriptDetails_executableParameters,
+    scriptDetails_scriptS3Location,
+    scriptDetails_executablePath,
+    scriptDetails_timeoutInSeconds,
+
+    -- ** ServiceAccountCredentials
+    serviceAccountCredentials_accountName,
+    serviceAccountCredentials_accountPassword,
+
+    -- ** Session
+    session_authenticationType,
+    session_connectionState,
+    session_maxExpirationTime,
+    session_networkAccessConfiguration,
+    session_startTime,
+    session_id,
+    session_userId,
+    session_stackName,
+    session_fleetName,
+    session_state,
+
+    -- ** SharedImagePermissions
+    sharedImagePermissions_sharedAccountId,
+    sharedImagePermissions_imagePermissions,
+
+    -- ** Stack
+    stack_accessEndpoints,
+    stack_applicationSettings,
+    stack_arn,
+    stack_createdTime,
+    stack_description,
+    stack_displayName,
+    stack_embedHostDomains,
+    stack_feedbackURL,
+    stack_redirectURL,
+    stack_stackErrors,
+    stack_storageConnectors,
+    stack_streamingExperienceSettings,
+    stack_userSettings,
+    stack_name,
+
+    -- ** StackError
+    stackError_errorCode,
+    stackError_errorMessage,
+
+    -- ** StorageConnector
+    storageConnector_domains,
+    storageConnector_resourceIdentifier,
+    storageConnector_connectorType,
+
+    -- ** StreamingExperienceSettings
+    streamingExperienceSettings_preferredProtocol,
+
+    -- ** UsageReportSubscription
+    usageReportSubscription_lastGeneratedReportDate,
+    usageReportSubscription_s3BucketName,
+    usageReportSubscription_schedule,
+    usageReportSubscription_subscriptionErrors,
+
+    -- ** User
+    user_arn,
+    user_createdTime,
+    user_enabled,
+    user_firstName,
+    user_lastName,
+    user_status,
+    user_userName,
+    user_authenticationType,
+
+    -- ** UserSetting
+    userSetting_action,
+    userSetting_permission,
+
+    -- ** UserStackAssociation
+    userStackAssociation_sendEmailNotification,
+    userStackAssociation_stackName,
+    userStackAssociation_userName,
+    userStackAssociation_authenticationType,
+
+    -- ** UserStackAssociationError
+    userStackAssociationError_errorCode,
+    userStackAssociationError_errorMessage,
+    userStackAssociationError_userStackAssociation,
+
+    -- ** VpcConfig
+    vpcConfig_securityGroupIds,
+    vpcConfig_subnetIds,
+  )
+where
+
+import Amazonka.AppStream.AssociateApplicationFleet
+import Amazonka.AppStream.AssociateApplicationToEntitlement
+import Amazonka.AppStream.AssociateFleet
+import Amazonka.AppStream.BatchAssociateUserStack
+import Amazonka.AppStream.BatchDisassociateUserStack
+import Amazonka.AppStream.CopyImage
+import Amazonka.AppStream.CreateAppBlock
+import Amazonka.AppStream.CreateApplication
+import Amazonka.AppStream.CreateDirectoryConfig
+import Amazonka.AppStream.CreateEntitlement
+import Amazonka.AppStream.CreateFleet
+import Amazonka.AppStream.CreateImageBuilder
+import Amazonka.AppStream.CreateImageBuilderStreamingURL
+import Amazonka.AppStream.CreateStack
+import Amazonka.AppStream.CreateStreamingURL
+import Amazonka.AppStream.CreateUpdatedImage
+import Amazonka.AppStream.CreateUsageReportSubscription
+import Amazonka.AppStream.CreateUser
+import Amazonka.AppStream.DeleteAppBlock
+import Amazonka.AppStream.DeleteApplication
+import Amazonka.AppStream.DeleteDirectoryConfig
+import Amazonka.AppStream.DeleteEntitlement
+import Amazonka.AppStream.DeleteFleet
+import Amazonka.AppStream.DeleteImage
+import Amazonka.AppStream.DeleteImageBuilder
+import Amazonka.AppStream.DeleteImagePermissions
+import Amazonka.AppStream.DeleteStack
+import Amazonka.AppStream.DeleteUsageReportSubscription
+import Amazonka.AppStream.DeleteUser
+import Amazonka.AppStream.DescribeAppBlocks
+import Amazonka.AppStream.DescribeApplicationFleetAssociations
+import Amazonka.AppStream.DescribeApplications
+import Amazonka.AppStream.DescribeDirectoryConfigs
+import Amazonka.AppStream.DescribeEntitlements
+import Amazonka.AppStream.DescribeFleets
+import Amazonka.AppStream.DescribeImageBuilders
+import Amazonka.AppStream.DescribeImagePermissions
+import Amazonka.AppStream.DescribeImages
+import Amazonka.AppStream.DescribeSessions
+import Amazonka.AppStream.DescribeStacks
+import Amazonka.AppStream.DescribeUsageReportSubscriptions
+import Amazonka.AppStream.DescribeUserStackAssociations
+import Amazonka.AppStream.DescribeUsers
+import Amazonka.AppStream.DisableUser
+import Amazonka.AppStream.DisassociateApplicationFleet
+import Amazonka.AppStream.DisassociateApplicationFromEntitlement
+import Amazonka.AppStream.DisassociateFleet
+import Amazonka.AppStream.EnableUser
+import Amazonka.AppStream.ExpireSession
+import Amazonka.AppStream.ListAssociatedFleets
+import Amazonka.AppStream.ListAssociatedStacks
+import Amazonka.AppStream.ListEntitledApplications
+import Amazonka.AppStream.ListTagsForResource
+import Amazonka.AppStream.StartFleet
+import Amazonka.AppStream.StartImageBuilder
+import Amazonka.AppStream.StopFleet
+import Amazonka.AppStream.StopImageBuilder
+import Amazonka.AppStream.TagResource
+import Amazonka.AppStream.Types.AccessEndpoint
+import Amazonka.AppStream.Types.AppBlock
+import Amazonka.AppStream.Types.Application
+import Amazonka.AppStream.Types.ApplicationFleetAssociation
+import Amazonka.AppStream.Types.ApplicationSettings
+import Amazonka.AppStream.Types.ApplicationSettingsResponse
+import Amazonka.AppStream.Types.CertificateBasedAuthProperties
+import Amazonka.AppStream.Types.ComputeCapacity
+import Amazonka.AppStream.Types.ComputeCapacityStatus
+import Amazonka.AppStream.Types.DirectoryConfig
+import Amazonka.AppStream.Types.DomainJoinInfo
+import Amazonka.AppStream.Types.EntitledApplication
+import Amazonka.AppStream.Types.Entitlement
+import Amazonka.AppStream.Types.EntitlementAttribute
+import Amazonka.AppStream.Types.Fleet
+import Amazonka.AppStream.Types.FleetError
+import Amazonka.AppStream.Types.Image
+import Amazonka.AppStream.Types.ImageBuilder
+import Amazonka.AppStream.Types.ImageBuilderStateChangeReason
+import Amazonka.AppStream.Types.ImagePermissions
+import Amazonka.AppStream.Types.ImageStateChangeReason
+import Amazonka.AppStream.Types.LastReportGenerationExecutionError
+import Amazonka.AppStream.Types.NetworkAccessConfiguration
+import Amazonka.AppStream.Types.ResourceError
+import Amazonka.AppStream.Types.S3Location
+import Amazonka.AppStream.Types.ScriptDetails
+import Amazonka.AppStream.Types.ServiceAccountCredentials
+import Amazonka.AppStream.Types.Session
+import Amazonka.AppStream.Types.SharedImagePermissions
+import Amazonka.AppStream.Types.Stack
+import Amazonka.AppStream.Types.StackError
+import Amazonka.AppStream.Types.StorageConnector
+import Amazonka.AppStream.Types.StreamingExperienceSettings
+import Amazonka.AppStream.Types.UsageReportSubscription
+import Amazonka.AppStream.Types.User
+import Amazonka.AppStream.Types.UserSetting
+import Amazonka.AppStream.Types.UserStackAssociation
+import Amazonka.AppStream.Types.UserStackAssociationError
+import Amazonka.AppStream.Types.VpcConfig
+import Amazonka.AppStream.UntagResource
+import Amazonka.AppStream.UpdateApplication
+import Amazonka.AppStream.UpdateDirectoryConfig
+import Amazonka.AppStream.UpdateEntitlement
+import Amazonka.AppStream.UpdateFleet
+import Amazonka.AppStream.UpdateImagePermissions
+import Amazonka.AppStream.UpdateStack
diff --git a/gen/Amazonka/AppStream/ListAssociatedFleets.hs b/gen/Amazonka/AppStream/ListAssociatedFleets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/ListAssociatedFleets.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.ListAssociatedFleets
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the name of the fleet that is associated with the specified
+-- stack.
+--
+-- This operation returns paginated results.
+module Amazonka.AppStream.ListAssociatedFleets
+  ( -- * Creating a Request
+    ListAssociatedFleets (..),
+    newListAssociatedFleets,
+
+    -- * Request Lenses
+    listAssociatedFleets_nextToken,
+    listAssociatedFleets_stackName,
+
+    -- * Destructuring the Response
+    ListAssociatedFleetsResponse (..),
+    newListAssociatedFleetsResponse,
+
+    -- * Response Lenses
+    listAssociatedFleetsResponse_names,
+    listAssociatedFleetsResponse_nextToken,
+    listAssociatedFleetsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAssociatedFleets' smart constructor.
+data ListAssociatedFleets = ListAssociatedFleets'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stack.
+    stackName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAssociatedFleets' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAssociatedFleets_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'stackName', 'listAssociatedFleets_stackName' - The name of the stack.
+newListAssociatedFleets ::
+  -- | 'stackName'
+  Prelude.Text ->
+  ListAssociatedFleets
+newListAssociatedFleets pStackName_ =
+  ListAssociatedFleets'
+    { nextToken = Prelude.Nothing,
+      stackName = pStackName_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+listAssociatedFleets_nextToken :: Lens.Lens' ListAssociatedFleets (Prelude.Maybe Prelude.Text)
+listAssociatedFleets_nextToken = Lens.lens (\ListAssociatedFleets' {nextToken} -> nextToken) (\s@ListAssociatedFleets' {} a -> s {nextToken = a} :: ListAssociatedFleets)
+
+-- | The name of the stack.
+listAssociatedFleets_stackName :: Lens.Lens' ListAssociatedFleets Prelude.Text
+listAssociatedFleets_stackName = Lens.lens (\ListAssociatedFleets' {stackName} -> stackName) (\s@ListAssociatedFleets' {} a -> s {stackName = a} :: ListAssociatedFleets)
+
+instance Core.AWSPager ListAssociatedFleets where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAssociatedFleetsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAssociatedFleetsResponse_names
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAssociatedFleets_nextToken
+          Lens..~ rs
+          Lens.^? listAssociatedFleetsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAssociatedFleets where
+  type
+    AWSResponse ListAssociatedFleets =
+      ListAssociatedFleetsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAssociatedFleetsResponse'
+            Prelude.<$> (x Data..?> "Names" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAssociatedFleets where
+  hashWithSalt _salt ListAssociatedFleets' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` stackName
+
+instance Prelude.NFData ListAssociatedFleets where
+  rnf ListAssociatedFleets' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf stackName
+
+instance Data.ToHeaders ListAssociatedFleets where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.ListAssociatedFleets" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAssociatedFleets where
+  toJSON ListAssociatedFleets' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("StackName" Data..= stackName)
+          ]
+      )
+
+instance Data.ToPath ListAssociatedFleets where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListAssociatedFleets where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAssociatedFleetsResponse' smart constructor.
+data ListAssociatedFleetsResponse = ListAssociatedFleetsResponse'
+  { -- | The name of the fleet.
+    names :: Prelude.Maybe [Prelude.Text],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    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 'ListAssociatedFleetsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'names', 'listAssociatedFleetsResponse_names' - The name of the fleet.
+--
+-- 'nextToken', 'listAssociatedFleetsResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'httpStatus', 'listAssociatedFleetsResponse_httpStatus' - The response's http status code.
+newListAssociatedFleetsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAssociatedFleetsResponse
+newListAssociatedFleetsResponse pHttpStatus_ =
+  ListAssociatedFleetsResponse'
+    { names =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The name of the fleet.
+listAssociatedFleetsResponse_names :: Lens.Lens' ListAssociatedFleetsResponse (Prelude.Maybe [Prelude.Text])
+listAssociatedFleetsResponse_names = Lens.lens (\ListAssociatedFleetsResponse' {names} -> names) (\s@ListAssociatedFleetsResponse' {} a -> s {names = a} :: ListAssociatedFleetsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+listAssociatedFleetsResponse_nextToken :: Lens.Lens' ListAssociatedFleetsResponse (Prelude.Maybe Prelude.Text)
+listAssociatedFleetsResponse_nextToken = Lens.lens (\ListAssociatedFleetsResponse' {nextToken} -> nextToken) (\s@ListAssociatedFleetsResponse' {} a -> s {nextToken = a} :: ListAssociatedFleetsResponse)
+
+-- | The response's http status code.
+listAssociatedFleetsResponse_httpStatus :: Lens.Lens' ListAssociatedFleetsResponse Prelude.Int
+listAssociatedFleetsResponse_httpStatus = Lens.lens (\ListAssociatedFleetsResponse' {httpStatus} -> httpStatus) (\s@ListAssociatedFleetsResponse' {} a -> s {httpStatus = a} :: ListAssociatedFleetsResponse)
+
+instance Prelude.NFData ListAssociatedFleetsResponse where
+  rnf ListAssociatedFleetsResponse' {..} =
+    Prelude.rnf names
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/ListAssociatedStacks.hs b/gen/Amazonka/AppStream/ListAssociatedStacks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/ListAssociatedStacks.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.ListAssociatedStacks
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the name of the stack with which the specified fleet is
+-- associated.
+--
+-- This operation returns paginated results.
+module Amazonka.AppStream.ListAssociatedStacks
+  ( -- * Creating a Request
+    ListAssociatedStacks (..),
+    newListAssociatedStacks,
+
+    -- * Request Lenses
+    listAssociatedStacks_nextToken,
+    listAssociatedStacks_fleetName,
+
+    -- * Destructuring the Response
+    ListAssociatedStacksResponse (..),
+    newListAssociatedStacksResponse,
+
+    -- * Response Lenses
+    listAssociatedStacksResponse_names,
+    listAssociatedStacksResponse_nextToken,
+    listAssociatedStacksResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListAssociatedStacks' smart constructor.
+data ListAssociatedStacks = ListAssociatedStacks'
+  { -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If this value is null, it retrieves the first page.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the fleet.
+    fleetName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListAssociatedStacks' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listAssociatedStacks_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+--
+-- 'fleetName', 'listAssociatedStacks_fleetName' - The name of the fleet.
+newListAssociatedStacks ::
+  -- | 'fleetName'
+  Prelude.Text ->
+  ListAssociatedStacks
+newListAssociatedStacks pFleetName_ =
+  ListAssociatedStacks'
+    { nextToken = Prelude.Nothing,
+      fleetName = pFleetName_
+    }
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If this value is null, it retrieves the first page.
+listAssociatedStacks_nextToken :: Lens.Lens' ListAssociatedStacks (Prelude.Maybe Prelude.Text)
+listAssociatedStacks_nextToken = Lens.lens (\ListAssociatedStacks' {nextToken} -> nextToken) (\s@ListAssociatedStacks' {} a -> s {nextToken = a} :: ListAssociatedStacks)
+
+-- | The name of the fleet.
+listAssociatedStacks_fleetName :: Lens.Lens' ListAssociatedStacks Prelude.Text
+listAssociatedStacks_fleetName = Lens.lens (\ListAssociatedStacks' {fleetName} -> fleetName) (\s@ListAssociatedStacks' {} a -> s {fleetName = a} :: ListAssociatedStacks)
+
+instance Core.AWSPager ListAssociatedStacks where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAssociatedStacksResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAssociatedStacksResponse_names
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listAssociatedStacks_nextToken
+          Lens..~ rs
+          Lens.^? listAssociatedStacksResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListAssociatedStacks where
+  type
+    AWSResponse ListAssociatedStacks =
+      ListAssociatedStacksResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAssociatedStacksResponse'
+            Prelude.<$> (x Data..?> "Names" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListAssociatedStacks where
+  hashWithSalt _salt ListAssociatedStacks' {..} =
+    _salt
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` fleetName
+
+instance Prelude.NFData ListAssociatedStacks where
+  rnf ListAssociatedStacks' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf fleetName
+
+instance Data.ToHeaders ListAssociatedStacks where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.ListAssociatedStacks" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListAssociatedStacks where
+  toJSON ListAssociatedStacks' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("FleetName" Data..= fleetName)
+          ]
+      )
+
+instance Data.ToPath ListAssociatedStacks where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListAssociatedStacks where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAssociatedStacksResponse' smart constructor.
+data ListAssociatedStacksResponse = ListAssociatedStacksResponse'
+  { -- | The name of the stack.
+    names :: Prelude.Maybe [Prelude.Text],
+    -- | The pagination token to use to retrieve the next page of results for
+    -- this operation. If there are no more pages, this value is null.
+    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 'ListAssociatedStacksResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'names', 'listAssociatedStacksResponse_names' - The name of the stack.
+--
+-- 'nextToken', 'listAssociatedStacksResponse_nextToken' - The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+--
+-- 'httpStatus', 'listAssociatedStacksResponse_httpStatus' - The response's http status code.
+newListAssociatedStacksResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAssociatedStacksResponse
+newListAssociatedStacksResponse pHttpStatus_ =
+  ListAssociatedStacksResponse'
+    { names =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The name of the stack.
+listAssociatedStacksResponse_names :: Lens.Lens' ListAssociatedStacksResponse (Prelude.Maybe [Prelude.Text])
+listAssociatedStacksResponse_names = Lens.lens (\ListAssociatedStacksResponse' {names} -> names) (\s@ListAssociatedStacksResponse' {} a -> s {names = a} :: ListAssociatedStacksResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token to use to retrieve the next page of results for
+-- this operation. If there are no more pages, this value is null.
+listAssociatedStacksResponse_nextToken :: Lens.Lens' ListAssociatedStacksResponse (Prelude.Maybe Prelude.Text)
+listAssociatedStacksResponse_nextToken = Lens.lens (\ListAssociatedStacksResponse' {nextToken} -> nextToken) (\s@ListAssociatedStacksResponse' {} a -> s {nextToken = a} :: ListAssociatedStacksResponse)
+
+-- | The response's http status code.
+listAssociatedStacksResponse_httpStatus :: Lens.Lens' ListAssociatedStacksResponse Prelude.Int
+listAssociatedStacksResponse_httpStatus = Lens.lens (\ListAssociatedStacksResponse' {httpStatus} -> httpStatus) (\s@ListAssociatedStacksResponse' {} a -> s {httpStatus = a} :: ListAssociatedStacksResponse)
+
+instance Prelude.NFData ListAssociatedStacksResponse where
+  rnf ListAssociatedStacksResponse' {..} =
+    Prelude.rnf names
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/ListEntitledApplications.hs b/gen/Amazonka/AppStream/ListEntitledApplications.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/ListEntitledApplications.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.AppStream.ListEntitledApplications
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of entitled applications.
+module Amazonka.AppStream.ListEntitledApplications
+  ( -- * Creating a Request
+    ListEntitledApplications (..),
+    newListEntitledApplications,
+
+    -- * Request Lenses
+    listEntitledApplications_maxResults,
+    listEntitledApplications_nextToken,
+    listEntitledApplications_stackName,
+    listEntitledApplications_entitlementName,
+
+    -- * Destructuring the Response
+    ListEntitledApplicationsResponse (..),
+    newListEntitledApplicationsResponse,
+
+    -- * Response Lenses
+    listEntitledApplicationsResponse_entitledApplications,
+    listEntitledApplicationsResponse_nextToken,
+    listEntitledApplicationsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListEntitledApplications' smart constructor.
+data ListEntitledApplications = ListEntitledApplications'
+  { -- | The maximum size of each page of results.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The pagination token used to retrieve the next page of results for this
+    -- operation.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The name of the stack with which the entitlement is associated.
+    stackName :: Prelude.Text,
+    -- | The name of the entitlement.
+    entitlementName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEntitledApplications' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'listEntitledApplications_maxResults' - The maximum size of each page of results.
+--
+-- 'nextToken', 'listEntitledApplications_nextToken' - The pagination token used to retrieve the next page of results for this
+-- operation.
+--
+-- 'stackName', 'listEntitledApplications_stackName' - The name of the stack with which the entitlement is associated.
+--
+-- 'entitlementName', 'listEntitledApplications_entitlementName' - The name of the entitlement.
+newListEntitledApplications ::
+  -- | 'stackName'
+  Prelude.Text ->
+  -- | 'entitlementName'
+  Prelude.Text ->
+  ListEntitledApplications
+newListEntitledApplications
+  pStackName_
+  pEntitlementName_ =
+    ListEntitledApplications'
+      { maxResults =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        stackName = pStackName_,
+        entitlementName = pEntitlementName_
+      }
+
+-- | The maximum size of each page of results.
+listEntitledApplications_maxResults :: Lens.Lens' ListEntitledApplications (Prelude.Maybe Prelude.Int)
+listEntitledApplications_maxResults = Lens.lens (\ListEntitledApplications' {maxResults} -> maxResults) (\s@ListEntitledApplications' {} a -> s {maxResults = a} :: ListEntitledApplications)
+
+-- | The pagination token used to retrieve the next page of results for this
+-- operation.
+listEntitledApplications_nextToken :: Lens.Lens' ListEntitledApplications (Prelude.Maybe Prelude.Text)
+listEntitledApplications_nextToken = Lens.lens (\ListEntitledApplications' {nextToken} -> nextToken) (\s@ListEntitledApplications' {} a -> s {nextToken = a} :: ListEntitledApplications)
+
+-- | The name of the stack with which the entitlement is associated.
+listEntitledApplications_stackName :: Lens.Lens' ListEntitledApplications Prelude.Text
+listEntitledApplications_stackName = Lens.lens (\ListEntitledApplications' {stackName} -> stackName) (\s@ListEntitledApplications' {} a -> s {stackName = a} :: ListEntitledApplications)
+
+-- | The name of the entitlement.
+listEntitledApplications_entitlementName :: Lens.Lens' ListEntitledApplications Prelude.Text
+listEntitledApplications_entitlementName = Lens.lens (\ListEntitledApplications' {entitlementName} -> entitlementName) (\s@ListEntitledApplications' {} a -> s {entitlementName = a} :: ListEntitledApplications)
+
+instance Core.AWSRequest ListEntitledApplications where
+  type
+    AWSResponse ListEntitledApplications =
+      ListEntitledApplicationsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEntitledApplicationsResponse'
+            Prelude.<$> ( x
+                            Data..?> "EntitledApplications"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEntitledApplications where
+  hashWithSalt _salt ListEntitledApplications' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` stackName
+      `Prelude.hashWithSalt` entitlementName
+
+instance Prelude.NFData ListEntitledApplications where
+  rnf ListEntitledApplications' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf entitlementName
+
+instance Data.ToHeaders ListEntitledApplications where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.ListEntitledApplications" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListEntitledApplications where
+  toJSON ListEntitledApplications' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("StackName" Data..= stackName),
+            Prelude.Just
+              ("EntitlementName" Data..= entitlementName)
+          ]
+      )
+
+instance Data.ToPath ListEntitledApplications where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListEntitledApplications where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListEntitledApplicationsResponse' smart constructor.
+data ListEntitledApplicationsResponse = ListEntitledApplicationsResponse'
+  { -- | The entitled applications.
+    entitledApplications :: Prelude.Maybe [EntitledApplication],
+    -- | The pagination token used to retrieve the next page of results for this
+    -- operation.
+    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 'ListEntitledApplicationsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entitledApplications', 'listEntitledApplicationsResponse_entitledApplications' - The entitled applications.
+--
+-- 'nextToken', 'listEntitledApplicationsResponse_nextToken' - The pagination token used to retrieve the next page of results for this
+-- operation.
+--
+-- 'httpStatus', 'listEntitledApplicationsResponse_httpStatus' - The response's http status code.
+newListEntitledApplicationsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEntitledApplicationsResponse
+newListEntitledApplicationsResponse pHttpStatus_ =
+  ListEntitledApplicationsResponse'
+    { entitledApplications =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The entitled applications.
+listEntitledApplicationsResponse_entitledApplications :: Lens.Lens' ListEntitledApplicationsResponse (Prelude.Maybe [EntitledApplication])
+listEntitledApplicationsResponse_entitledApplications = Lens.lens (\ListEntitledApplicationsResponse' {entitledApplications} -> entitledApplications) (\s@ListEntitledApplicationsResponse' {} a -> s {entitledApplications = a} :: ListEntitledApplicationsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The pagination token used to retrieve the next page of results for this
+-- operation.
+listEntitledApplicationsResponse_nextToken :: Lens.Lens' ListEntitledApplicationsResponse (Prelude.Maybe Prelude.Text)
+listEntitledApplicationsResponse_nextToken = Lens.lens (\ListEntitledApplicationsResponse' {nextToken} -> nextToken) (\s@ListEntitledApplicationsResponse' {} a -> s {nextToken = a} :: ListEntitledApplicationsResponse)
+
+-- | The response's http status code.
+listEntitledApplicationsResponse_httpStatus :: Lens.Lens' ListEntitledApplicationsResponse Prelude.Int
+listEntitledApplicationsResponse_httpStatus = Lens.lens (\ListEntitledApplicationsResponse' {httpStatus} -> httpStatus) (\s@ListEntitledApplicationsResponse' {} a -> s {httpStatus = a} :: ListEntitledApplicationsResponse)
+
+instance
+  Prelude.NFData
+    ListEntitledApplicationsResponse
+  where
+  rnf ListEntitledApplicationsResponse' {..} =
+    Prelude.rnf entitledApplications
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/ListTagsForResource.hs b/gen/Amazonka/AppStream/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/ListTagsForResource.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.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)
+--
+-- Retrieves a list of all tags for the specified AppStream 2.0 resource.
+-- You can tag AppStream 2.0 image builders, images, fleets, and stacks.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+module Amazonka.AppStream.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceArn,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newListTagsForResource' smart constructor.
+data ListTagsForResource = ListTagsForResource'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'listTagsForResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+newListTagsForResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceArn_ =
+  ListTagsForResource' {resourceArn = pResourceArn_}
+
+-- | The Amazon Resource Name (ARN) of the resource.
+listTagsForResource_resourceArn :: Lens.Lens' ListTagsForResource Prelude.Text
+listTagsForResource_resourceArn = Lens.lens (\ListTagsForResource' {resourceArn} -> resourceArn) (\s@ListTagsForResource' {} a -> s {resourceArn = a} :: ListTagsForResource)
+
+instance Core.AWSRequest ListTagsForResource where
+  type
+    AWSResponse ListTagsForResource =
+      ListTagsForResourceResponse
+  request overrides =
+    Request.postJSON (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
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.ListTagsForResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListTagsForResource where
+  toJSON ListTagsForResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ResourceArn" Data..= resourceArn)]
+      )
+
+instance Data.ToPath ListTagsForResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListTagsForResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+  { -- | The information about the tags.
+    tags :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The information about the tags.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The information about the tags.
+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/AppStream/StartFleet.hs b/gen/Amazonka/AppStream/StartFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/StartFleet.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.StartFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts the specified fleet.
+module Amazonka.AppStream.StartFleet
+  ( -- * Creating a Request
+    StartFleet (..),
+    newStartFleet,
+
+    -- * Request Lenses
+    startFleet_name,
+
+    -- * Destructuring the Response
+    StartFleetResponse (..),
+    newStartFleetResponse,
+
+    -- * Response Lenses
+    startFleetResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartFleet' smart constructor.
+data StartFleet = StartFleet'
+  { -- | The name of the fleet.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startFleet_name' - The name of the fleet.
+newStartFleet ::
+  -- | 'name'
+  Prelude.Text ->
+  StartFleet
+newStartFleet pName_ = StartFleet' {name = pName_}
+
+-- | The name of the fleet.
+startFleet_name :: Lens.Lens' StartFleet Prelude.Text
+startFleet_name = Lens.lens (\StartFleet' {name} -> name) (\s@StartFleet' {} a -> s {name = a} :: StartFleet)
+
+instance Core.AWSRequest StartFleet where
+  type AWSResponse StartFleet = StartFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartFleet where
+  hashWithSalt _salt StartFleet' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData StartFleet where
+  rnf StartFleet' {..} = Prelude.rnf name
+
+instance Data.ToHeaders StartFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.StartFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartFleet where
+  toJSON StartFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Name" Data..= name)]
+      )
+
+instance Data.ToPath StartFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartFleetResponse' smart constructor.
+data StartFleetResponse = StartFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startFleetResponse_httpStatus' - The response's http status code.
+newStartFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartFleetResponse
+newStartFleetResponse pHttpStatus_ =
+  StartFleetResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+startFleetResponse_httpStatus :: Lens.Lens' StartFleetResponse Prelude.Int
+startFleetResponse_httpStatus = Lens.lens (\StartFleetResponse' {httpStatus} -> httpStatus) (\s@StartFleetResponse' {} a -> s {httpStatus = a} :: StartFleetResponse)
+
+instance Prelude.NFData StartFleetResponse where
+  rnf StartFleetResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/StartImageBuilder.hs b/gen/Amazonka/AppStream/StartImageBuilder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/StartImageBuilder.hs
@@ -0,0 +1,191 @@
+{-# 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.AppStream.StartImageBuilder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts the specified image builder.
+module Amazonka.AppStream.StartImageBuilder
+  ( -- * Creating a Request
+    StartImageBuilder (..),
+    newStartImageBuilder,
+
+    -- * Request Lenses
+    startImageBuilder_appstreamAgentVersion,
+    startImageBuilder_name,
+
+    -- * Destructuring the Response
+    StartImageBuilderResponse (..),
+    newStartImageBuilderResponse,
+
+    -- * Response Lenses
+    startImageBuilderResponse_imageBuilder,
+    startImageBuilderResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStartImageBuilder' smart constructor.
+data StartImageBuilder = StartImageBuilder'
+  { -- | The version of the AppStream 2.0 agent to use for this image builder. To
+    -- use the latest version of the AppStream 2.0 agent, specify [LATEST].
+    appstreamAgentVersion :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image builder.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartImageBuilder' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appstreamAgentVersion', 'startImageBuilder_appstreamAgentVersion' - The version of the AppStream 2.0 agent to use for this image builder. To
+-- use the latest version of the AppStream 2.0 agent, specify [LATEST].
+--
+-- 'name', 'startImageBuilder_name' - The name of the image builder.
+newStartImageBuilder ::
+  -- | 'name'
+  Prelude.Text ->
+  StartImageBuilder
+newStartImageBuilder pName_ =
+  StartImageBuilder'
+    { appstreamAgentVersion =
+        Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The version of the AppStream 2.0 agent to use for this image builder. To
+-- use the latest version of the AppStream 2.0 agent, specify [LATEST].
+startImageBuilder_appstreamAgentVersion :: Lens.Lens' StartImageBuilder (Prelude.Maybe Prelude.Text)
+startImageBuilder_appstreamAgentVersion = Lens.lens (\StartImageBuilder' {appstreamAgentVersion} -> appstreamAgentVersion) (\s@StartImageBuilder' {} a -> s {appstreamAgentVersion = a} :: StartImageBuilder)
+
+-- | The name of the image builder.
+startImageBuilder_name :: Lens.Lens' StartImageBuilder Prelude.Text
+startImageBuilder_name = Lens.lens (\StartImageBuilder' {name} -> name) (\s@StartImageBuilder' {} a -> s {name = a} :: StartImageBuilder)
+
+instance Core.AWSRequest StartImageBuilder where
+  type
+    AWSResponse StartImageBuilder =
+      StartImageBuilderResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartImageBuilderResponse'
+            Prelude.<$> (x Data..?> "ImageBuilder")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartImageBuilder where
+  hashWithSalt _salt StartImageBuilder' {..} =
+    _salt
+      `Prelude.hashWithSalt` appstreamAgentVersion
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData StartImageBuilder where
+  rnf StartImageBuilder' {..} =
+    Prelude.rnf appstreamAgentVersion
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders StartImageBuilder where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.StartImageBuilder" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartImageBuilder where
+  toJSON StartImageBuilder' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AppstreamAgentVersion" Data..=)
+              Prelude.<$> appstreamAgentVersion,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath StartImageBuilder where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartImageBuilder where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartImageBuilderResponse' smart constructor.
+data StartImageBuilderResponse = StartImageBuilderResponse'
+  { -- | Information about the image builder.
+    imageBuilder :: Prelude.Maybe ImageBuilder,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartImageBuilderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageBuilder', 'startImageBuilderResponse_imageBuilder' - Information about the image builder.
+--
+-- 'httpStatus', 'startImageBuilderResponse_httpStatus' - The response's http status code.
+newStartImageBuilderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartImageBuilderResponse
+newStartImageBuilderResponse pHttpStatus_ =
+  StartImageBuilderResponse'
+    { imageBuilder =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the image builder.
+startImageBuilderResponse_imageBuilder :: Lens.Lens' StartImageBuilderResponse (Prelude.Maybe ImageBuilder)
+startImageBuilderResponse_imageBuilder = Lens.lens (\StartImageBuilderResponse' {imageBuilder} -> imageBuilder) (\s@StartImageBuilderResponse' {} a -> s {imageBuilder = a} :: StartImageBuilderResponse)
+
+-- | The response's http status code.
+startImageBuilderResponse_httpStatus :: Lens.Lens' StartImageBuilderResponse Prelude.Int
+startImageBuilderResponse_httpStatus = Lens.lens (\StartImageBuilderResponse' {httpStatus} -> httpStatus) (\s@StartImageBuilderResponse' {} a -> s {httpStatus = a} :: StartImageBuilderResponse)
+
+instance Prelude.NFData StartImageBuilderResponse where
+  rnf StartImageBuilderResponse' {..} =
+    Prelude.rnf imageBuilder
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/StopFleet.hs b/gen/Amazonka/AppStream/StopFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/StopFleet.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.StopFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops the specified fleet.
+module Amazonka.AppStream.StopFleet
+  ( -- * Creating a Request
+    StopFleet (..),
+    newStopFleet,
+
+    -- * Request Lenses
+    stopFleet_name,
+
+    -- * Destructuring the Response
+    StopFleetResponse (..),
+    newStopFleetResponse,
+
+    -- * Response Lenses
+    stopFleetResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopFleet' smart constructor.
+data StopFleet = StopFleet'
+  { -- | The name of the fleet.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'stopFleet_name' - The name of the fleet.
+newStopFleet ::
+  -- | 'name'
+  Prelude.Text ->
+  StopFleet
+newStopFleet pName_ = StopFleet' {name = pName_}
+
+-- | The name of the fleet.
+stopFleet_name :: Lens.Lens' StopFleet Prelude.Text
+stopFleet_name = Lens.lens (\StopFleet' {name} -> name) (\s@StopFleet' {} a -> s {name = a} :: StopFleet)
+
+instance Core.AWSRequest StopFleet where
+  type AWSResponse StopFleet = StopFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StopFleetResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopFleet where
+  hashWithSalt _salt StopFleet' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData StopFleet where
+  rnf StopFleet' {..} = Prelude.rnf name
+
+instance Data.ToHeaders StopFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.StopFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopFleet where
+  toJSON StopFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Name" Data..= name)]
+      )
+
+instance Data.ToPath StopFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopFleetResponse' smart constructor.
+data StopFleetResponse = StopFleetResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'stopFleetResponse_httpStatus' - The response's http status code.
+newStopFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopFleetResponse
+newStopFleetResponse pHttpStatus_ =
+  StopFleetResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+stopFleetResponse_httpStatus :: Lens.Lens' StopFleetResponse Prelude.Int
+stopFleetResponse_httpStatus = Lens.lens (\StopFleetResponse' {httpStatus} -> httpStatus) (\s@StopFleetResponse' {} a -> s {httpStatus = a} :: StopFleetResponse)
+
+instance Prelude.NFData StopFleetResponse where
+  rnf StopFleetResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/StopImageBuilder.hs b/gen/Amazonka/AppStream/StopImageBuilder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/StopImageBuilder.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.StopImageBuilder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops the specified image builder.
+module Amazonka.AppStream.StopImageBuilder
+  ( -- * Creating a Request
+    StopImageBuilder (..),
+    newStopImageBuilder,
+
+    -- * Request Lenses
+    stopImageBuilder_name,
+
+    -- * Destructuring the Response
+    StopImageBuilderResponse (..),
+    newStopImageBuilderResponse,
+
+    -- * Response Lenses
+    stopImageBuilderResponse_imageBuilder,
+    stopImageBuilderResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newStopImageBuilder' smart constructor.
+data StopImageBuilder = StopImageBuilder'
+  { -- | The name of the image builder.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopImageBuilder' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'stopImageBuilder_name' - The name of the image builder.
+newStopImageBuilder ::
+  -- | 'name'
+  Prelude.Text ->
+  StopImageBuilder
+newStopImageBuilder pName_ =
+  StopImageBuilder' {name = pName_}
+
+-- | The name of the image builder.
+stopImageBuilder_name :: Lens.Lens' StopImageBuilder Prelude.Text
+stopImageBuilder_name = Lens.lens (\StopImageBuilder' {name} -> name) (\s@StopImageBuilder' {} a -> s {name = a} :: StopImageBuilder)
+
+instance Core.AWSRequest StopImageBuilder where
+  type
+    AWSResponse StopImageBuilder =
+      StopImageBuilderResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StopImageBuilderResponse'
+            Prelude.<$> (x Data..?> "ImageBuilder")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopImageBuilder where
+  hashWithSalt _salt StopImageBuilder' {..} =
+    _salt `Prelude.hashWithSalt` name
+
+instance Prelude.NFData StopImageBuilder where
+  rnf StopImageBuilder' {..} = Prelude.rnf name
+
+instance Data.ToHeaders StopImageBuilder where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.StopImageBuilder" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopImageBuilder where
+  toJSON StopImageBuilder' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Name" Data..= name)]
+      )
+
+instance Data.ToPath StopImageBuilder where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopImageBuilder where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopImageBuilderResponse' smart constructor.
+data StopImageBuilderResponse = StopImageBuilderResponse'
+  { -- | Information about the image builder.
+    imageBuilder :: Prelude.Maybe ImageBuilder,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopImageBuilderResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'imageBuilder', 'stopImageBuilderResponse_imageBuilder' - Information about the image builder.
+--
+-- 'httpStatus', 'stopImageBuilderResponse_httpStatus' - The response's http status code.
+newStopImageBuilderResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopImageBuilderResponse
+newStopImageBuilderResponse pHttpStatus_ =
+  StopImageBuilderResponse'
+    { imageBuilder =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the image builder.
+stopImageBuilderResponse_imageBuilder :: Lens.Lens' StopImageBuilderResponse (Prelude.Maybe ImageBuilder)
+stopImageBuilderResponse_imageBuilder = Lens.lens (\StopImageBuilderResponse' {imageBuilder} -> imageBuilder) (\s@StopImageBuilderResponse' {} a -> s {imageBuilder = a} :: StopImageBuilderResponse)
+
+-- | The response's http status code.
+stopImageBuilderResponse_httpStatus :: Lens.Lens' StopImageBuilderResponse Prelude.Int
+stopImageBuilderResponse_httpStatus = Lens.lens (\StopImageBuilderResponse' {httpStatus} -> httpStatus) (\s@StopImageBuilderResponse' {} a -> s {httpStatus = a} :: StopImageBuilderResponse)
+
+instance Prelude.NFData StopImageBuilderResponse where
+  rnf StopImageBuilderResponse' {..} =
+    Prelude.rnf imageBuilder
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/TagResource.hs b/gen/Amazonka/AppStream/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/TagResource.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.AppStream.TagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or overwrites one or more tags for the specified AppStream 2.0
+-- resource. You can tag AppStream 2.0 image builders, images, fleets, and
+-- stacks.
+--
+-- Each tag consists of a key and an optional value. If a resource already
+-- has a tag with the same key, this operation updates its value.
+--
+-- To list the current tags for your resources, use ListTagsForResource. To
+-- disassociate tags from your resources, use UntagResource.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+module Amazonka.AppStream.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceArn,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newTagResource' smart constructor.
+data TagResource = TagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | The tags to associate. A tag is a key-value pair, and the value is
+    -- optional. For example, Environment=Test. If you do not specify a value,
+    -- Environment=.
+    --
+    -- If you do not specify a value, the value is set to an empty string.
+    --
+    -- Generally allowed characters are: letters, numbers, and spaces
+    -- representable in UTF-8, and the following special characters:
+    --
+    -- _ . : \/ = + \\ - \@
+    tags :: Prelude.HashMap Prelude.Text Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'tagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tags', 'tagResource_tags' - The tags to associate. A tag is a key-value pair, and the value is
+-- optional. For example, Environment=Test. If you do not specify a value,
+-- Environment=.
+--
+-- If you do not specify a value, the value is set to an empty string.
+--
+-- Generally allowed characters are: letters, numbers, and spaces
+-- representable in UTF-8, and the following special characters:
+--
+-- _ . : \/ = + \\ - \@
+newTagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceArn_ =
+  TagResource'
+    { resourceArn = pResourceArn_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+tagResource_resourceArn :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceArn = Lens.lens (\TagResource' {resourceArn} -> resourceArn) (\s@TagResource' {} a -> s {resourceArn = a} :: TagResource)
+
+-- | The tags to associate. A tag is a key-value pair, and the value is
+-- optional. For example, Environment=Test. If you do not specify a value,
+-- Environment=.
+--
+-- If you do not specify a value, the value is set to an empty string.
+--
+-- Generally allowed characters are: letters, numbers, and spaces
+-- representable in UTF-8, and the following special characters:
+--
+-- _ . : \/ = + \\ - \@
+tagResource_tags :: Lens.Lens' TagResource (Prelude.HashMap Prelude.Text Prelude.Text)
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TagResourceResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TagResource where
+  hashWithSalt _salt TagResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` resourceArn
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData TagResource where
+  rnf TagResource' {..} =
+    Prelude.rnf resourceArn
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders TagResource where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.TagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TagResource where
+  toJSON TagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("Tags" Data..= tags)
+          ]
+      )
+
+instance Data.ToPath TagResource where
+  toPath = Prelude.const "/"
+
+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/AppStream/Types.hs b/gen/Amazonka/AppStream/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types.hs
@@ -0,0 +1,712 @@
+{-# 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.AppStream.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.AppStream.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _ConcurrentModificationException,
+    _EntitlementAlreadyExistsException,
+    _EntitlementNotFoundException,
+    _IncompatibleImageException,
+    _InvalidAccountStatusException,
+    _InvalidParameterCombinationException,
+    _InvalidRoleException,
+    _LimitExceededException,
+    _OperationNotPermittedException,
+    _RequestLimitExceededException,
+    _ResourceAlreadyExistsException,
+    _ResourceInUseException,
+    _ResourceNotAvailableException,
+    _ResourceNotFoundException,
+
+    -- * AccessEndpointType
+    AccessEndpointType (..),
+
+    -- * Action
+    Action (..),
+
+    -- * AppVisibility
+    AppVisibility (..),
+
+    -- * ApplicationAttribute
+    ApplicationAttribute (..),
+
+    -- * AuthenticationType
+    AuthenticationType (..),
+
+    -- * CertificateBasedAuthStatus
+    CertificateBasedAuthStatus (..),
+
+    -- * FleetAttribute
+    FleetAttribute (..),
+
+    -- * FleetErrorCode
+    FleetErrorCode (..),
+
+    -- * FleetState
+    FleetState (..),
+
+    -- * FleetType
+    FleetType (..),
+
+    -- * ImageBuilderState
+    ImageBuilderState (..),
+
+    -- * ImageBuilderStateChangeReasonCode
+    ImageBuilderStateChangeReasonCode (..),
+
+    -- * ImageState
+    ImageState (..),
+
+    -- * ImageStateChangeReasonCode
+    ImageStateChangeReasonCode (..),
+
+    -- * MessageAction
+    MessageAction (..),
+
+    -- * Permission
+    Permission (..),
+
+    -- * PlatformType
+    PlatformType (..),
+
+    -- * PreferredProtocol
+    PreferredProtocol (..),
+
+    -- * SessionConnectionState
+    SessionConnectionState (..),
+
+    -- * SessionState
+    SessionState (..),
+
+    -- * StackAttribute
+    StackAttribute (..),
+
+    -- * StackErrorCode
+    StackErrorCode (..),
+
+    -- * StorageConnectorType
+    StorageConnectorType (..),
+
+    -- * StreamView
+    StreamView (..),
+
+    -- * UsageReportExecutionErrorCode
+    UsageReportExecutionErrorCode (..),
+
+    -- * UsageReportSchedule
+    UsageReportSchedule (..),
+
+    -- * UserStackAssociationErrorCode
+    UserStackAssociationErrorCode (..),
+
+    -- * VisibilityType
+    VisibilityType (..),
+
+    -- * AccessEndpoint
+    AccessEndpoint (..),
+    newAccessEndpoint,
+    accessEndpoint_vpceId,
+    accessEndpoint_endpointType,
+
+    -- * AppBlock
+    AppBlock (..),
+    newAppBlock,
+    appBlock_createdTime,
+    appBlock_description,
+    appBlock_displayName,
+    appBlock_sourceS3Location,
+    appBlock_name,
+    appBlock_arn,
+    appBlock_setupScriptDetails,
+
+    -- * Application
+    Application (..),
+    newApplication,
+    application_appBlockArn,
+    application_arn,
+    application_createdTime,
+    application_description,
+    application_displayName,
+    application_enabled,
+    application_iconS3Location,
+    application_iconURL,
+    application_instanceFamilies,
+    application_launchParameters,
+    application_launchPath,
+    application_metadata,
+    application_name,
+    application_platforms,
+    application_workingDirectory,
+
+    -- * ApplicationFleetAssociation
+    ApplicationFleetAssociation (..),
+    newApplicationFleetAssociation,
+    applicationFleetAssociation_fleetName,
+    applicationFleetAssociation_applicationArn,
+
+    -- * ApplicationSettings
+    ApplicationSettings (..),
+    newApplicationSettings,
+    applicationSettings_settingsGroup,
+    applicationSettings_enabled,
+
+    -- * ApplicationSettingsResponse
+    ApplicationSettingsResponse (..),
+    newApplicationSettingsResponse,
+    applicationSettingsResponse_enabled,
+    applicationSettingsResponse_s3BucketName,
+    applicationSettingsResponse_settingsGroup,
+
+    -- * CertificateBasedAuthProperties
+    CertificateBasedAuthProperties (..),
+    newCertificateBasedAuthProperties,
+    certificateBasedAuthProperties_certificateAuthorityArn,
+    certificateBasedAuthProperties_status,
+
+    -- * ComputeCapacity
+    ComputeCapacity (..),
+    newComputeCapacity,
+    computeCapacity_desiredInstances,
+
+    -- * ComputeCapacityStatus
+    ComputeCapacityStatus (..),
+    newComputeCapacityStatus,
+    computeCapacityStatus_available,
+    computeCapacityStatus_inUse,
+    computeCapacityStatus_running,
+    computeCapacityStatus_desired,
+
+    -- * DirectoryConfig
+    DirectoryConfig (..),
+    newDirectoryConfig,
+    directoryConfig_certificateBasedAuthProperties,
+    directoryConfig_createdTime,
+    directoryConfig_organizationalUnitDistinguishedNames,
+    directoryConfig_serviceAccountCredentials,
+    directoryConfig_directoryName,
+
+    -- * DomainJoinInfo
+    DomainJoinInfo (..),
+    newDomainJoinInfo,
+    domainJoinInfo_directoryName,
+    domainJoinInfo_organizationalUnitDistinguishedName,
+
+    -- * EntitledApplication
+    EntitledApplication (..),
+    newEntitledApplication,
+    entitledApplication_applicationIdentifier,
+
+    -- * Entitlement
+    Entitlement (..),
+    newEntitlement,
+    entitlement_createdTime,
+    entitlement_description,
+    entitlement_lastModifiedTime,
+    entitlement_name,
+    entitlement_stackName,
+    entitlement_appVisibility,
+    entitlement_attributes,
+
+    -- * EntitlementAttribute
+    EntitlementAttribute (..),
+    newEntitlementAttribute,
+    entitlementAttribute_name,
+    entitlementAttribute_value,
+
+    -- * Fleet
+    Fleet (..),
+    newFleet,
+    fleet_createdTime,
+    fleet_description,
+    fleet_disconnectTimeoutInSeconds,
+    fleet_displayName,
+    fleet_domainJoinInfo,
+    fleet_enableDefaultInternetAccess,
+    fleet_fleetErrors,
+    fleet_fleetType,
+    fleet_iamRoleArn,
+    fleet_idleDisconnectTimeoutInSeconds,
+    fleet_imageArn,
+    fleet_imageName,
+    fleet_maxConcurrentSessions,
+    fleet_maxUserDurationInSeconds,
+    fleet_platform,
+    fleet_sessionScriptS3Location,
+    fleet_streamView,
+    fleet_usbDeviceFilterStrings,
+    fleet_vpcConfig,
+    fleet_arn,
+    fleet_name,
+    fleet_instanceType,
+    fleet_computeCapacityStatus,
+    fleet_state,
+
+    -- * FleetError
+    FleetError (..),
+    newFleetError,
+    fleetError_errorCode,
+    fleetError_errorMessage,
+
+    -- * Image
+    Image (..),
+    newImage,
+    image_applications,
+    image_appstreamAgentVersion,
+    image_arn,
+    image_baseImageArn,
+    image_createdTime,
+    image_description,
+    image_displayName,
+    image_imageBuilderName,
+    image_imageBuilderSupported,
+    image_imageErrors,
+    image_imagePermissions,
+    image_platform,
+    image_publicBaseImageReleasedDate,
+    image_state,
+    image_stateChangeReason,
+    image_visibility,
+    image_name,
+
+    -- * ImageBuilder
+    ImageBuilder (..),
+    newImageBuilder,
+    imageBuilder_accessEndpoints,
+    imageBuilder_appstreamAgentVersion,
+    imageBuilder_arn,
+    imageBuilder_createdTime,
+    imageBuilder_description,
+    imageBuilder_displayName,
+    imageBuilder_domainJoinInfo,
+    imageBuilder_enableDefaultInternetAccess,
+    imageBuilder_iamRoleArn,
+    imageBuilder_imageArn,
+    imageBuilder_imageBuilderErrors,
+    imageBuilder_instanceType,
+    imageBuilder_networkAccessConfiguration,
+    imageBuilder_platform,
+    imageBuilder_state,
+    imageBuilder_stateChangeReason,
+    imageBuilder_vpcConfig,
+    imageBuilder_name,
+
+    -- * ImageBuilderStateChangeReason
+    ImageBuilderStateChangeReason (..),
+    newImageBuilderStateChangeReason,
+    imageBuilderStateChangeReason_code,
+    imageBuilderStateChangeReason_message,
+
+    -- * ImagePermissions
+    ImagePermissions (..),
+    newImagePermissions,
+    imagePermissions_allowFleet,
+    imagePermissions_allowImageBuilder,
+
+    -- * ImageStateChangeReason
+    ImageStateChangeReason (..),
+    newImageStateChangeReason,
+    imageStateChangeReason_code,
+    imageStateChangeReason_message,
+
+    -- * LastReportGenerationExecutionError
+    LastReportGenerationExecutionError (..),
+    newLastReportGenerationExecutionError,
+    lastReportGenerationExecutionError_errorCode,
+    lastReportGenerationExecutionError_errorMessage,
+
+    -- * NetworkAccessConfiguration
+    NetworkAccessConfiguration (..),
+    newNetworkAccessConfiguration,
+    networkAccessConfiguration_eniId,
+    networkAccessConfiguration_eniPrivateIpAddress,
+
+    -- * ResourceError
+    ResourceError (..),
+    newResourceError,
+    resourceError_errorCode,
+    resourceError_errorMessage,
+    resourceError_errorTimestamp,
+
+    -- * S3Location
+    S3Location (..),
+    newS3Location,
+    s3Location_s3Bucket,
+    s3Location_s3Key,
+
+    -- * ScriptDetails
+    ScriptDetails (..),
+    newScriptDetails,
+    scriptDetails_executableParameters,
+    scriptDetails_scriptS3Location,
+    scriptDetails_executablePath,
+    scriptDetails_timeoutInSeconds,
+
+    -- * ServiceAccountCredentials
+    ServiceAccountCredentials (..),
+    newServiceAccountCredentials,
+    serviceAccountCredentials_accountName,
+    serviceAccountCredentials_accountPassword,
+
+    -- * Session
+    Session (..),
+    newSession,
+    session_authenticationType,
+    session_connectionState,
+    session_maxExpirationTime,
+    session_networkAccessConfiguration,
+    session_startTime,
+    session_id,
+    session_userId,
+    session_stackName,
+    session_fleetName,
+    session_state,
+
+    -- * SharedImagePermissions
+    SharedImagePermissions (..),
+    newSharedImagePermissions,
+    sharedImagePermissions_sharedAccountId,
+    sharedImagePermissions_imagePermissions,
+
+    -- * Stack
+    Stack (..),
+    newStack,
+    stack_accessEndpoints,
+    stack_applicationSettings,
+    stack_arn,
+    stack_createdTime,
+    stack_description,
+    stack_displayName,
+    stack_embedHostDomains,
+    stack_feedbackURL,
+    stack_redirectURL,
+    stack_stackErrors,
+    stack_storageConnectors,
+    stack_streamingExperienceSettings,
+    stack_userSettings,
+    stack_name,
+
+    -- * StackError
+    StackError (..),
+    newStackError,
+    stackError_errorCode,
+    stackError_errorMessage,
+
+    -- * StorageConnector
+    StorageConnector (..),
+    newStorageConnector,
+    storageConnector_domains,
+    storageConnector_resourceIdentifier,
+    storageConnector_connectorType,
+
+    -- * StreamingExperienceSettings
+    StreamingExperienceSettings (..),
+    newStreamingExperienceSettings,
+    streamingExperienceSettings_preferredProtocol,
+
+    -- * UsageReportSubscription
+    UsageReportSubscription (..),
+    newUsageReportSubscription,
+    usageReportSubscription_lastGeneratedReportDate,
+    usageReportSubscription_s3BucketName,
+    usageReportSubscription_schedule,
+    usageReportSubscription_subscriptionErrors,
+
+    -- * User
+    User (..),
+    newUser,
+    user_arn,
+    user_createdTime,
+    user_enabled,
+    user_firstName,
+    user_lastName,
+    user_status,
+    user_userName,
+    user_authenticationType,
+
+    -- * UserSetting
+    UserSetting (..),
+    newUserSetting,
+    userSetting_action,
+    userSetting_permission,
+
+    -- * UserStackAssociation
+    UserStackAssociation (..),
+    newUserStackAssociation,
+    userStackAssociation_sendEmailNotification,
+    userStackAssociation_stackName,
+    userStackAssociation_userName,
+    userStackAssociation_authenticationType,
+
+    -- * UserStackAssociationError
+    UserStackAssociationError (..),
+    newUserStackAssociationError,
+    userStackAssociationError_errorCode,
+    userStackAssociationError_errorMessage,
+    userStackAssociationError_userStackAssociation,
+
+    -- * VpcConfig
+    VpcConfig (..),
+    newVpcConfig,
+    vpcConfig_securityGroupIds,
+    vpcConfig_subnetIds,
+  )
+where
+
+import Amazonka.AppStream.Types.AccessEndpoint
+import Amazonka.AppStream.Types.AccessEndpointType
+import Amazonka.AppStream.Types.Action
+import Amazonka.AppStream.Types.AppBlock
+import Amazonka.AppStream.Types.AppVisibility
+import Amazonka.AppStream.Types.Application
+import Amazonka.AppStream.Types.ApplicationAttribute
+import Amazonka.AppStream.Types.ApplicationFleetAssociation
+import Amazonka.AppStream.Types.ApplicationSettings
+import Amazonka.AppStream.Types.ApplicationSettingsResponse
+import Amazonka.AppStream.Types.AuthenticationType
+import Amazonka.AppStream.Types.CertificateBasedAuthProperties
+import Amazonka.AppStream.Types.CertificateBasedAuthStatus
+import Amazonka.AppStream.Types.ComputeCapacity
+import Amazonka.AppStream.Types.ComputeCapacityStatus
+import Amazonka.AppStream.Types.DirectoryConfig
+import Amazonka.AppStream.Types.DomainJoinInfo
+import Amazonka.AppStream.Types.EntitledApplication
+import Amazonka.AppStream.Types.Entitlement
+import Amazonka.AppStream.Types.EntitlementAttribute
+import Amazonka.AppStream.Types.Fleet
+import Amazonka.AppStream.Types.FleetAttribute
+import Amazonka.AppStream.Types.FleetError
+import Amazonka.AppStream.Types.FleetErrorCode
+import Amazonka.AppStream.Types.FleetState
+import Amazonka.AppStream.Types.FleetType
+import Amazonka.AppStream.Types.Image
+import Amazonka.AppStream.Types.ImageBuilder
+import Amazonka.AppStream.Types.ImageBuilderState
+import Amazonka.AppStream.Types.ImageBuilderStateChangeReason
+import Amazonka.AppStream.Types.ImageBuilderStateChangeReasonCode
+import Amazonka.AppStream.Types.ImagePermissions
+import Amazonka.AppStream.Types.ImageState
+import Amazonka.AppStream.Types.ImageStateChangeReason
+import Amazonka.AppStream.Types.ImageStateChangeReasonCode
+import Amazonka.AppStream.Types.LastReportGenerationExecutionError
+import Amazonka.AppStream.Types.MessageAction
+import Amazonka.AppStream.Types.NetworkAccessConfiguration
+import Amazonka.AppStream.Types.Permission
+import Amazonka.AppStream.Types.PlatformType
+import Amazonka.AppStream.Types.PreferredProtocol
+import Amazonka.AppStream.Types.ResourceError
+import Amazonka.AppStream.Types.S3Location
+import Amazonka.AppStream.Types.ScriptDetails
+import Amazonka.AppStream.Types.ServiceAccountCredentials
+import Amazonka.AppStream.Types.Session
+import Amazonka.AppStream.Types.SessionConnectionState
+import Amazonka.AppStream.Types.SessionState
+import Amazonka.AppStream.Types.SharedImagePermissions
+import Amazonka.AppStream.Types.Stack
+import Amazonka.AppStream.Types.StackAttribute
+import Amazonka.AppStream.Types.StackError
+import Amazonka.AppStream.Types.StackErrorCode
+import Amazonka.AppStream.Types.StorageConnector
+import Amazonka.AppStream.Types.StorageConnectorType
+import Amazonka.AppStream.Types.StreamView
+import Amazonka.AppStream.Types.StreamingExperienceSettings
+import Amazonka.AppStream.Types.UsageReportExecutionErrorCode
+import Amazonka.AppStream.Types.UsageReportSchedule
+import Amazonka.AppStream.Types.UsageReportSubscription
+import Amazonka.AppStream.Types.User
+import Amazonka.AppStream.Types.UserSetting
+import Amazonka.AppStream.Types.UserStackAssociation
+import Amazonka.AppStream.Types.UserStackAssociationError
+import Amazonka.AppStream.Types.UserStackAssociationErrorCode
+import Amazonka.AppStream.Types.VisibilityType
+import Amazonka.AppStream.Types.VpcConfig
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2016-12-01@ of the Amazon AppStream SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "AppStream",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "appstream2",
+      Core.signingName = "appstream",
+      Core.version = "2016-12-01",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "AppStream",
+      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
+
+-- | An API error occurred. Wait a few minutes and try again.
+_ConcurrentModificationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConcurrentModificationException =
+  Core._MatchServiceError
+    defaultService
+    "ConcurrentModificationException"
+
+-- | The entitlement already exists.
+_EntitlementAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_EntitlementAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "EntitlementAlreadyExistsException"
+
+-- | The entitlement can\'t be found.
+_EntitlementNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_EntitlementNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "EntitlementNotFoundException"
+
+-- | The image can\'t be updated because it\'s not compatible for updates.
+_IncompatibleImageException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_IncompatibleImageException =
+  Core._MatchServiceError
+    defaultService
+    "IncompatibleImageException"
+
+-- | The resource cannot be created because your AWS account is suspended.
+-- For assistance, contact AWS Support.
+_InvalidAccountStatusException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidAccountStatusException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidAccountStatusException"
+
+-- | Indicates an incorrect combination of parameters, or a missing
+-- parameter.
+_InvalidParameterCombinationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterCombinationException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterCombinationException"
+
+-- | The specified role is invalid.
+_InvalidRoleException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidRoleException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidRoleException"
+
+-- | The requested limit exceeds the permitted limit for an account.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+
+-- | The attempted operation is not permitted.
+_OperationNotPermittedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_OperationNotPermittedException =
+  Core._MatchServiceError
+    defaultService
+    "OperationNotPermittedException"
+
+-- | AppStream 2.0 can’t process the request right now because the Describe
+-- calls from your AWS account are being throttled by Amazon EC2. Try again
+-- later.
+_RequestLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_RequestLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "RequestLimitExceededException"
+
+-- | The specified resource already exists.
+_ResourceAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceAlreadyExistsException"
+
+-- | The specified resource is in use.
+_ResourceInUseException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceInUseException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceInUseException"
+
+-- | The specified resource exists and is not in use, but isn\'t available.
+_ResourceNotAvailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotAvailableException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotAvailableException"
+
+-- | The specified resource was not found.
+_ResourceNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ResourceNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ResourceNotFoundException"
diff --git a/gen/Amazonka/AppStream/Types/AccessEndpoint.hs b/gen/Amazonka/AppStream/Types/AccessEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/AccessEndpoint.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.AppStream.Types.AccessEndpoint
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.AccessEndpoint where
+
+import Amazonka.AppStream.Types.AccessEndpointType
+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
+
+-- | Describes an interface VPC endpoint (interface endpoint) that lets you
+-- create a private connection between the virtual private cloud (VPC) that
+-- you specify and AppStream 2.0. When you specify an interface endpoint
+-- for a stack, users of the stack can connect to AppStream 2.0 only
+-- through that endpoint. When you specify an interface endpoint for an
+-- image builder, administrators can connect to the image builder only
+-- through that endpoint.
+--
+-- /See:/ 'newAccessEndpoint' smart constructor.
+data AccessEndpoint = AccessEndpoint'
+  { -- | The identifier (ID) of the VPC in which the interface endpoint is used.
+    vpceId :: Prelude.Maybe Prelude.Text,
+    -- | The type of interface endpoint.
+    endpointType :: AccessEndpointType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AccessEndpoint' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vpceId', 'accessEndpoint_vpceId' - The identifier (ID) of the VPC in which the interface endpoint is used.
+--
+-- 'endpointType', 'accessEndpoint_endpointType' - The type of interface endpoint.
+newAccessEndpoint ::
+  -- | 'endpointType'
+  AccessEndpointType ->
+  AccessEndpoint
+newAccessEndpoint pEndpointType_ =
+  AccessEndpoint'
+    { vpceId = Prelude.Nothing,
+      endpointType = pEndpointType_
+    }
+
+-- | The identifier (ID) of the VPC in which the interface endpoint is used.
+accessEndpoint_vpceId :: Lens.Lens' AccessEndpoint (Prelude.Maybe Prelude.Text)
+accessEndpoint_vpceId = Lens.lens (\AccessEndpoint' {vpceId} -> vpceId) (\s@AccessEndpoint' {} a -> s {vpceId = a} :: AccessEndpoint)
+
+-- | The type of interface endpoint.
+accessEndpoint_endpointType :: Lens.Lens' AccessEndpoint AccessEndpointType
+accessEndpoint_endpointType = Lens.lens (\AccessEndpoint' {endpointType} -> endpointType) (\s@AccessEndpoint' {} a -> s {endpointType = a} :: AccessEndpoint)
+
+instance Data.FromJSON AccessEndpoint where
+  parseJSON =
+    Data.withObject
+      "AccessEndpoint"
+      ( \x ->
+          AccessEndpoint'
+            Prelude.<$> (x Data..:? "VpceId")
+            Prelude.<*> (x Data..: "EndpointType")
+      )
+
+instance Prelude.Hashable AccessEndpoint where
+  hashWithSalt _salt AccessEndpoint' {..} =
+    _salt
+      `Prelude.hashWithSalt` vpceId
+      `Prelude.hashWithSalt` endpointType
+
+instance Prelude.NFData AccessEndpoint where
+  rnf AccessEndpoint' {..} =
+    Prelude.rnf vpceId
+      `Prelude.seq` Prelude.rnf endpointType
+
+instance Data.ToJSON AccessEndpoint where
+  toJSON AccessEndpoint' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("VpceId" Data..=) Prelude.<$> vpceId,
+            Prelude.Just ("EndpointType" Data..= endpointType)
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/AccessEndpointType.hs b/gen/Amazonka/AppStream/Types/AccessEndpointType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/AccessEndpointType.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.AppStream.Types.AccessEndpointType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.AccessEndpointType
+  ( AccessEndpointType
+      ( ..,
+        AccessEndpointType_STREAMING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AccessEndpointType = AccessEndpointType'
+  { fromAccessEndpointType ::
+      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 AccessEndpointType_STREAMING :: AccessEndpointType
+pattern AccessEndpointType_STREAMING = AccessEndpointType' "STREAMING"
+
+{-# COMPLETE
+  AccessEndpointType_STREAMING,
+  AccessEndpointType'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/Action.hs b/gen/Amazonka/AppStream/Types/Action.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/Action.hs
@@ -0,0 +1,93 @@
+{-# 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.AppStream.Types.Action
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.Action
+  ( Action
+      ( ..,
+        Action_CLIPBOARD_COPY_FROM_LOCAL_DEVICE,
+        Action_CLIPBOARD_COPY_TO_LOCAL_DEVICE,
+        Action_DOMAIN_PASSWORD_SIGNIN,
+        Action_DOMAIN_SMART_CARD_SIGNIN,
+        Action_FILE_DOWNLOAD,
+        Action_FILE_UPLOAD,
+        Action_PRINTING_TO_LOCAL_DEVICE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Action = Action' {fromAction :: 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 Action_CLIPBOARD_COPY_FROM_LOCAL_DEVICE :: Action
+pattern Action_CLIPBOARD_COPY_FROM_LOCAL_DEVICE = Action' "CLIPBOARD_COPY_FROM_LOCAL_DEVICE"
+
+pattern Action_CLIPBOARD_COPY_TO_LOCAL_DEVICE :: Action
+pattern Action_CLIPBOARD_COPY_TO_LOCAL_DEVICE = Action' "CLIPBOARD_COPY_TO_LOCAL_DEVICE"
+
+pattern Action_DOMAIN_PASSWORD_SIGNIN :: Action
+pattern Action_DOMAIN_PASSWORD_SIGNIN = Action' "DOMAIN_PASSWORD_SIGNIN"
+
+pattern Action_DOMAIN_SMART_CARD_SIGNIN :: Action
+pattern Action_DOMAIN_SMART_CARD_SIGNIN = Action' "DOMAIN_SMART_CARD_SIGNIN"
+
+pattern Action_FILE_DOWNLOAD :: Action
+pattern Action_FILE_DOWNLOAD = Action' "FILE_DOWNLOAD"
+
+pattern Action_FILE_UPLOAD :: Action
+pattern Action_FILE_UPLOAD = Action' "FILE_UPLOAD"
+
+pattern Action_PRINTING_TO_LOCAL_DEVICE :: Action
+pattern Action_PRINTING_TO_LOCAL_DEVICE = Action' "PRINTING_TO_LOCAL_DEVICE"
+
+{-# COMPLETE
+  Action_CLIPBOARD_COPY_FROM_LOCAL_DEVICE,
+  Action_CLIPBOARD_COPY_TO_LOCAL_DEVICE,
+  Action_DOMAIN_PASSWORD_SIGNIN,
+  Action_DOMAIN_SMART_CARD_SIGNIN,
+  Action_FILE_DOWNLOAD,
+  Action_FILE_UPLOAD,
+  Action_PRINTING_TO_LOCAL_DEVICE,
+  Action'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/AppBlock.hs b/gen/Amazonka/AppStream/Types/AppBlock.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/AppBlock.hs
@@ -0,0 +1,161 @@
+{-# 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.AppStream.Types.AppBlock
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.AppBlock where
+
+import Amazonka.AppStream.Types.S3Location
+import Amazonka.AppStream.Types.ScriptDetails
+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
+
+-- | Describes an app block.
+--
+-- App blocks are an Amazon AppStream 2.0 resource that stores the details
+-- about the virtual hard disk in an S3 bucket. It also stores the setup
+-- script with details about how to mount the virtual hard disk. The
+-- virtual hard disk includes the application binaries and other files
+-- necessary to launch your applications. Multiple applications can be
+-- assigned to a single app block.
+--
+-- This is only supported for Elastic fleets.
+--
+-- /See:/ 'newAppBlock' smart constructor.
+data AppBlock = AppBlock'
+  { -- | The created time of the app block.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the app block.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The display name of the app block.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The source S3 location of the app block.
+    sourceS3Location :: Prelude.Maybe S3Location,
+    -- | The name of the app block.
+    name :: Prelude.Text,
+    -- | The ARN of the app block.
+    arn :: Prelude.Text,
+    -- | The setup script details of the app block.
+    setupScriptDetails :: ScriptDetails
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppBlock' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdTime', 'appBlock_createdTime' - The created time of the app block.
+--
+-- 'description', 'appBlock_description' - The description of the app block.
+--
+-- 'displayName', 'appBlock_displayName' - The display name of the app block.
+--
+-- 'sourceS3Location', 'appBlock_sourceS3Location' - The source S3 location of the app block.
+--
+-- 'name', 'appBlock_name' - The name of the app block.
+--
+-- 'arn', 'appBlock_arn' - The ARN of the app block.
+--
+-- 'setupScriptDetails', 'appBlock_setupScriptDetails' - The setup script details of the app block.
+newAppBlock ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'setupScriptDetails'
+  ScriptDetails ->
+  AppBlock
+newAppBlock pName_ pArn_ pSetupScriptDetails_ =
+  AppBlock'
+    { createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      sourceS3Location = Prelude.Nothing,
+      name = pName_,
+      arn = pArn_,
+      setupScriptDetails = pSetupScriptDetails_
+    }
+
+-- | The created time of the app block.
+appBlock_createdTime :: Lens.Lens' AppBlock (Prelude.Maybe Prelude.UTCTime)
+appBlock_createdTime = Lens.lens (\AppBlock' {createdTime} -> createdTime) (\s@AppBlock' {} a -> s {createdTime = a} :: AppBlock) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the app block.
+appBlock_description :: Lens.Lens' AppBlock (Prelude.Maybe Prelude.Text)
+appBlock_description = Lens.lens (\AppBlock' {description} -> description) (\s@AppBlock' {} a -> s {description = a} :: AppBlock)
+
+-- | The display name of the app block.
+appBlock_displayName :: Lens.Lens' AppBlock (Prelude.Maybe Prelude.Text)
+appBlock_displayName = Lens.lens (\AppBlock' {displayName} -> displayName) (\s@AppBlock' {} a -> s {displayName = a} :: AppBlock)
+
+-- | The source S3 location of the app block.
+appBlock_sourceS3Location :: Lens.Lens' AppBlock (Prelude.Maybe S3Location)
+appBlock_sourceS3Location = Lens.lens (\AppBlock' {sourceS3Location} -> sourceS3Location) (\s@AppBlock' {} a -> s {sourceS3Location = a} :: AppBlock)
+
+-- | The name of the app block.
+appBlock_name :: Lens.Lens' AppBlock Prelude.Text
+appBlock_name = Lens.lens (\AppBlock' {name} -> name) (\s@AppBlock' {} a -> s {name = a} :: AppBlock)
+
+-- | The ARN of the app block.
+appBlock_arn :: Lens.Lens' AppBlock Prelude.Text
+appBlock_arn = Lens.lens (\AppBlock' {arn} -> arn) (\s@AppBlock' {} a -> s {arn = a} :: AppBlock)
+
+-- | The setup script details of the app block.
+appBlock_setupScriptDetails :: Lens.Lens' AppBlock ScriptDetails
+appBlock_setupScriptDetails = Lens.lens (\AppBlock' {setupScriptDetails} -> setupScriptDetails) (\s@AppBlock' {} a -> s {setupScriptDetails = a} :: AppBlock)
+
+instance Data.FromJSON AppBlock where
+  parseJSON =
+    Data.withObject
+      "AppBlock"
+      ( \x ->
+          AppBlock'
+            Prelude.<$> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "DisplayName")
+            Prelude.<*> (x Data..:? "SourceS3Location")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "SetupScriptDetails")
+      )
+
+instance Prelude.Hashable AppBlock where
+  hashWithSalt _salt AppBlock' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` sourceS3Location
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` setupScriptDetails
+
+instance Prelude.NFData AppBlock where
+  rnf AppBlock' {..} =
+    Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf sourceS3Location
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf setupScriptDetails
diff --git a/gen/Amazonka/AppStream/Types/AppVisibility.hs b/gen/Amazonka/AppStream/Types/AppVisibility.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/AppVisibility.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.AppStream.Types.AppVisibility
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.AppVisibility
+  ( AppVisibility
+      ( ..,
+        AppVisibility_ALL,
+        AppVisibility_ASSOCIATED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppVisibility = AppVisibility'
+  { fromAppVisibility ::
+      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 AppVisibility_ALL :: AppVisibility
+pattern AppVisibility_ALL = AppVisibility' "ALL"
+
+pattern AppVisibility_ASSOCIATED :: AppVisibility
+pattern AppVisibility_ASSOCIATED = AppVisibility' "ASSOCIATED"
+
+{-# COMPLETE
+  AppVisibility_ALL,
+  AppVisibility_ASSOCIATED,
+  AppVisibility'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/Application.hs b/gen/Amazonka/AppStream/Types/Application.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/Application.hs
@@ -0,0 +1,248 @@
+{-# 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.AppStream.Types.Application
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.Application where
+
+import Amazonka.AppStream.Types.PlatformType
+import Amazonka.AppStream.Types.S3Location
+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
+
+-- | Describes an application in the application catalog.
+--
+-- /See:/ 'newApplication' smart constructor.
+data Application = Application'
+  { -- | The app block ARN of the application.
+    appBlockArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the application.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time at which the application was created within the app block.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The application name to display.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | If there is a problem, the application can be disabled after image
+    -- creation.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The S3 location of the application icon.
+    iconS3Location :: Prelude.Maybe S3Location,
+    -- | The URL for the application icon. This URL might be time-limited.
+    iconURL :: Prelude.Maybe Prelude.Text,
+    -- | The instance families for the application.
+    instanceFamilies :: Prelude.Maybe [Prelude.Text],
+    -- | The arguments that are passed to the application at launch.
+    launchParameters :: Prelude.Maybe Prelude.Text,
+    -- | The path to the application executable in the instance.
+    launchPath :: Prelude.Maybe Prelude.Text,
+    -- | Additional attributes that describe the application.
+    metadata :: Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text),
+    -- | The name of the application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The platforms on which the application can run.
+    platforms :: Prelude.Maybe [PlatformType],
+    -- | The working directory for the application.
+    workingDirectory :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Application' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appBlockArn', 'application_appBlockArn' - The app block ARN of the application.
+--
+-- 'arn', 'application_arn' - The ARN of the application.
+--
+-- 'createdTime', 'application_createdTime' - The time at which the application was created within the app block.
+--
+-- 'description', 'application_description' - The description of the application.
+--
+-- 'displayName', 'application_displayName' - The application name to display.
+--
+-- 'enabled', 'application_enabled' - If there is a problem, the application can be disabled after image
+-- creation.
+--
+-- 'iconS3Location', 'application_iconS3Location' - The S3 location of the application icon.
+--
+-- 'iconURL', 'application_iconURL' - The URL for the application icon. This URL might be time-limited.
+--
+-- 'instanceFamilies', 'application_instanceFamilies' - The instance families for the application.
+--
+-- 'launchParameters', 'application_launchParameters' - The arguments that are passed to the application at launch.
+--
+-- 'launchPath', 'application_launchPath' - The path to the application executable in the instance.
+--
+-- 'metadata', 'application_metadata' - Additional attributes that describe the application.
+--
+-- 'name', 'application_name' - The name of the application.
+--
+-- 'platforms', 'application_platforms' - The platforms on which the application can run.
+--
+-- 'workingDirectory', 'application_workingDirectory' - The working directory for the application.
+newApplication ::
+  Application
+newApplication =
+  Application'
+    { appBlockArn = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      enabled = Prelude.Nothing,
+      iconS3Location = Prelude.Nothing,
+      iconURL = Prelude.Nothing,
+      instanceFamilies = Prelude.Nothing,
+      launchParameters = Prelude.Nothing,
+      launchPath = Prelude.Nothing,
+      metadata = Prelude.Nothing,
+      name = Prelude.Nothing,
+      platforms = Prelude.Nothing,
+      workingDirectory = Prelude.Nothing
+    }
+
+-- | The app block ARN of the application.
+application_appBlockArn :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_appBlockArn = Lens.lens (\Application' {appBlockArn} -> appBlockArn) (\s@Application' {} a -> s {appBlockArn = a} :: Application)
+
+-- | The ARN of the application.
+application_arn :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_arn = Lens.lens (\Application' {arn} -> arn) (\s@Application' {} a -> s {arn = a} :: Application)
+
+-- | The time at which the application was created within the app block.
+application_createdTime :: Lens.Lens' Application (Prelude.Maybe Prelude.UTCTime)
+application_createdTime = Lens.lens (\Application' {createdTime} -> createdTime) (\s@Application' {} a -> s {createdTime = a} :: Application) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the application.
+application_description :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_description = Lens.lens (\Application' {description} -> description) (\s@Application' {} a -> s {description = a} :: Application)
+
+-- | The application name to display.
+application_displayName :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_displayName = Lens.lens (\Application' {displayName} -> displayName) (\s@Application' {} a -> s {displayName = a} :: Application)
+
+-- | If there is a problem, the application can be disabled after image
+-- creation.
+application_enabled :: Lens.Lens' Application (Prelude.Maybe Prelude.Bool)
+application_enabled = Lens.lens (\Application' {enabled} -> enabled) (\s@Application' {} a -> s {enabled = a} :: Application)
+
+-- | The S3 location of the application icon.
+application_iconS3Location :: Lens.Lens' Application (Prelude.Maybe S3Location)
+application_iconS3Location = Lens.lens (\Application' {iconS3Location} -> iconS3Location) (\s@Application' {} a -> s {iconS3Location = a} :: Application)
+
+-- | The URL for the application icon. This URL might be time-limited.
+application_iconURL :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_iconURL = Lens.lens (\Application' {iconURL} -> iconURL) (\s@Application' {} a -> s {iconURL = a} :: Application)
+
+-- | The instance families for the application.
+application_instanceFamilies :: Lens.Lens' Application (Prelude.Maybe [Prelude.Text])
+application_instanceFamilies = Lens.lens (\Application' {instanceFamilies} -> instanceFamilies) (\s@Application' {} a -> s {instanceFamilies = a} :: Application) Prelude.. Lens.mapping Lens.coerced
+
+-- | The arguments that are passed to the application at launch.
+application_launchParameters :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_launchParameters = Lens.lens (\Application' {launchParameters} -> launchParameters) (\s@Application' {} a -> s {launchParameters = a} :: Application)
+
+-- | The path to the application executable in the instance.
+application_launchPath :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_launchPath = Lens.lens (\Application' {launchPath} -> launchPath) (\s@Application' {} a -> s {launchPath = a} :: Application)
+
+-- | Additional attributes that describe the application.
+application_metadata :: Lens.Lens' Application (Prelude.Maybe (Prelude.HashMap Prelude.Text Prelude.Text))
+application_metadata = Lens.lens (\Application' {metadata} -> metadata) (\s@Application' {} a -> s {metadata = a} :: Application) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the application.
+application_name :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_name = Lens.lens (\Application' {name} -> name) (\s@Application' {} a -> s {name = a} :: Application)
+
+-- | The platforms on which the application can run.
+application_platforms :: Lens.Lens' Application (Prelude.Maybe [PlatformType])
+application_platforms = Lens.lens (\Application' {platforms} -> platforms) (\s@Application' {} a -> s {platforms = a} :: Application) Prelude.. Lens.mapping Lens.coerced
+
+-- | The working directory for the application.
+application_workingDirectory :: Lens.Lens' Application (Prelude.Maybe Prelude.Text)
+application_workingDirectory = Lens.lens (\Application' {workingDirectory} -> workingDirectory) (\s@Application' {} a -> s {workingDirectory = a} :: Application)
+
+instance Data.FromJSON Application where
+  parseJSON =
+    Data.withObject
+      "Application"
+      ( \x ->
+          Application'
+            Prelude.<$> (x Data..:? "AppBlockArn")
+            Prelude.<*> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "DisplayName")
+            Prelude.<*> (x Data..:? "Enabled")
+            Prelude.<*> (x Data..:? "IconS3Location")
+            Prelude.<*> (x Data..:? "IconURL")
+            Prelude.<*> ( x
+                            Data..:? "InstanceFamilies"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "LaunchParameters")
+            Prelude.<*> (x Data..:? "LaunchPath")
+            Prelude.<*> (x Data..:? "Metadata" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "Platforms" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "WorkingDirectory")
+      )
+
+instance Prelude.Hashable Application where
+  hashWithSalt _salt Application' {..} =
+    _salt
+      `Prelude.hashWithSalt` appBlockArn
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` iconS3Location
+      `Prelude.hashWithSalt` iconURL
+      `Prelude.hashWithSalt` instanceFamilies
+      `Prelude.hashWithSalt` launchParameters
+      `Prelude.hashWithSalt` launchPath
+      `Prelude.hashWithSalt` metadata
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` platforms
+      `Prelude.hashWithSalt` workingDirectory
+
+instance Prelude.NFData Application where
+  rnf Application' {..} =
+    Prelude.rnf appBlockArn
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf iconS3Location
+      `Prelude.seq` Prelude.rnf iconURL
+      `Prelude.seq` Prelude.rnf instanceFamilies
+      `Prelude.seq` Prelude.rnf launchParameters
+      `Prelude.seq` Prelude.rnf launchPath
+      `Prelude.seq` Prelude.rnf metadata
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf platforms
+      `Prelude.seq` Prelude.rnf workingDirectory
diff --git a/gen/Amazonka/AppStream/Types/ApplicationAttribute.hs b/gen/Amazonka/AppStream/Types/ApplicationAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ApplicationAttribute.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.AppStream.Types.ApplicationAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ApplicationAttribute
+  ( ApplicationAttribute
+      ( ..,
+        ApplicationAttribute_LAUNCH_PARAMETERS,
+        ApplicationAttribute_WORKING_DIRECTORY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ApplicationAttribute = ApplicationAttribute'
+  { fromApplicationAttribute ::
+      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 ApplicationAttribute_LAUNCH_PARAMETERS :: ApplicationAttribute
+pattern ApplicationAttribute_LAUNCH_PARAMETERS = ApplicationAttribute' "LAUNCH_PARAMETERS"
+
+pattern ApplicationAttribute_WORKING_DIRECTORY :: ApplicationAttribute
+pattern ApplicationAttribute_WORKING_DIRECTORY = ApplicationAttribute' "WORKING_DIRECTORY"
+
+{-# COMPLETE
+  ApplicationAttribute_LAUNCH_PARAMETERS,
+  ApplicationAttribute_WORKING_DIRECTORY,
+  ApplicationAttribute'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/ApplicationFleetAssociation.hs b/gen/Amazonka/AppStream/Types/ApplicationFleetAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ApplicationFleetAssociation.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.ApplicationFleetAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ApplicationFleetAssociation 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
+
+-- | Describes the application fleet association.
+--
+-- /See:/ 'newApplicationFleetAssociation' smart constructor.
+data ApplicationFleetAssociation = ApplicationFleetAssociation'
+  { -- | The name of the fleet associated with the application.
+    fleetName :: Prelude.Text,
+    -- | The ARN of the application associated with the fleet.
+    applicationArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApplicationFleetAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleetName', 'applicationFleetAssociation_fleetName' - The name of the fleet associated with the application.
+--
+-- 'applicationArn', 'applicationFleetAssociation_applicationArn' - The ARN of the application associated with the fleet.
+newApplicationFleetAssociation ::
+  -- | 'fleetName'
+  Prelude.Text ->
+  -- | 'applicationArn'
+  Prelude.Text ->
+  ApplicationFleetAssociation
+newApplicationFleetAssociation
+  pFleetName_
+  pApplicationArn_ =
+    ApplicationFleetAssociation'
+      { fleetName =
+          pFleetName_,
+        applicationArn = pApplicationArn_
+      }
+
+-- | The name of the fleet associated with the application.
+applicationFleetAssociation_fleetName :: Lens.Lens' ApplicationFleetAssociation Prelude.Text
+applicationFleetAssociation_fleetName = Lens.lens (\ApplicationFleetAssociation' {fleetName} -> fleetName) (\s@ApplicationFleetAssociation' {} a -> s {fleetName = a} :: ApplicationFleetAssociation)
+
+-- | The ARN of the application associated with the fleet.
+applicationFleetAssociation_applicationArn :: Lens.Lens' ApplicationFleetAssociation Prelude.Text
+applicationFleetAssociation_applicationArn = Lens.lens (\ApplicationFleetAssociation' {applicationArn} -> applicationArn) (\s@ApplicationFleetAssociation' {} a -> s {applicationArn = a} :: ApplicationFleetAssociation)
+
+instance Data.FromJSON ApplicationFleetAssociation where
+  parseJSON =
+    Data.withObject
+      "ApplicationFleetAssociation"
+      ( \x ->
+          ApplicationFleetAssociation'
+            Prelude.<$> (x Data..: "FleetName")
+            Prelude.<*> (x Data..: "ApplicationArn")
+      )
+
+instance Prelude.Hashable ApplicationFleetAssociation where
+  hashWithSalt _salt ApplicationFleetAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` fleetName
+      `Prelude.hashWithSalt` applicationArn
+
+instance Prelude.NFData ApplicationFleetAssociation where
+  rnf ApplicationFleetAssociation' {..} =
+    Prelude.rnf fleetName
+      `Prelude.seq` Prelude.rnf applicationArn
diff --git a/gen/Amazonka/AppStream/Types/ApplicationSettings.hs b/gen/Amazonka/AppStream/Types/ApplicationSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ApplicationSettings.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.ApplicationSettings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ApplicationSettings 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 persistent application settings for users of a stack.
+--
+-- /See:/ 'newApplicationSettings' smart constructor.
+data ApplicationSettings = ApplicationSettings'
+  { -- | The path prefix for the S3 bucket where users’ persistent application
+    -- settings are stored. You can allow the same persistent application
+    -- settings to be used across multiple stacks by specifying the same
+    -- settings group for each stack.
+    settingsGroup :: Prelude.Maybe Prelude.Text,
+    -- | Enables or disables persistent application settings for users during
+    -- their streaming sessions.
+    enabled :: Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApplicationSettings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'settingsGroup', 'applicationSettings_settingsGroup' - The path prefix for the S3 bucket where users’ persistent application
+-- settings are stored. You can allow the same persistent application
+-- settings to be used across multiple stacks by specifying the same
+-- settings group for each stack.
+--
+-- 'enabled', 'applicationSettings_enabled' - Enables or disables persistent application settings for users during
+-- their streaming sessions.
+newApplicationSettings ::
+  -- | 'enabled'
+  Prelude.Bool ->
+  ApplicationSettings
+newApplicationSettings pEnabled_ =
+  ApplicationSettings'
+    { settingsGroup =
+        Prelude.Nothing,
+      enabled = pEnabled_
+    }
+
+-- | The path prefix for the S3 bucket where users’ persistent application
+-- settings are stored. You can allow the same persistent application
+-- settings to be used across multiple stacks by specifying the same
+-- settings group for each stack.
+applicationSettings_settingsGroup :: Lens.Lens' ApplicationSettings (Prelude.Maybe Prelude.Text)
+applicationSettings_settingsGroup = Lens.lens (\ApplicationSettings' {settingsGroup} -> settingsGroup) (\s@ApplicationSettings' {} a -> s {settingsGroup = a} :: ApplicationSettings)
+
+-- | Enables or disables persistent application settings for users during
+-- their streaming sessions.
+applicationSettings_enabled :: Lens.Lens' ApplicationSettings Prelude.Bool
+applicationSettings_enabled = Lens.lens (\ApplicationSettings' {enabled} -> enabled) (\s@ApplicationSettings' {} a -> s {enabled = a} :: ApplicationSettings)
+
+instance Prelude.Hashable ApplicationSettings where
+  hashWithSalt _salt ApplicationSettings' {..} =
+    _salt
+      `Prelude.hashWithSalt` settingsGroup
+      `Prelude.hashWithSalt` enabled
+
+instance Prelude.NFData ApplicationSettings where
+  rnf ApplicationSettings' {..} =
+    Prelude.rnf settingsGroup
+      `Prelude.seq` Prelude.rnf enabled
+
+instance Data.ToJSON ApplicationSettings where
+  toJSON ApplicationSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SettingsGroup" Data..=) Prelude.<$> settingsGroup,
+            Prelude.Just ("Enabled" Data..= enabled)
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/ApplicationSettingsResponse.hs b/gen/Amazonka/AppStream/Types/ApplicationSettingsResponse.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ApplicationSettingsResponse.hs
@@ -0,0 +1,112 @@
+{-# 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.AppStream.Types.ApplicationSettingsResponse
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ApplicationSettingsResponse 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
+
+-- | Describes the persistent application settings for users of a stack.
+--
+-- /See:/ 'newApplicationSettingsResponse' smart constructor.
+data ApplicationSettingsResponse = ApplicationSettingsResponse'
+  { -- | Specifies whether persistent application settings are enabled for users
+    -- during their streaming sessions.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The S3 bucket where users’ persistent application settings are stored.
+    -- When persistent application settings are enabled for the first time for
+    -- an account in an AWS Region, an S3 bucket is created. The bucket is
+    -- unique to the AWS account and the Region.
+    s3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The path prefix for the S3 bucket where users’ persistent application
+    -- settings are stored.
+    settingsGroup :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ApplicationSettingsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'enabled', 'applicationSettingsResponse_enabled' - Specifies whether persistent application settings are enabled for users
+-- during their streaming sessions.
+--
+-- 's3BucketName', 'applicationSettingsResponse_s3BucketName' - The S3 bucket where users’ persistent application settings are stored.
+-- When persistent application settings are enabled for the first time for
+-- an account in an AWS Region, an S3 bucket is created. The bucket is
+-- unique to the AWS account and the Region.
+--
+-- 'settingsGroup', 'applicationSettingsResponse_settingsGroup' - The path prefix for the S3 bucket where users’ persistent application
+-- settings are stored.
+newApplicationSettingsResponse ::
+  ApplicationSettingsResponse
+newApplicationSettingsResponse =
+  ApplicationSettingsResponse'
+    { enabled =
+        Prelude.Nothing,
+      s3BucketName = Prelude.Nothing,
+      settingsGroup = Prelude.Nothing
+    }
+
+-- | Specifies whether persistent application settings are enabled for users
+-- during their streaming sessions.
+applicationSettingsResponse_enabled :: Lens.Lens' ApplicationSettingsResponse (Prelude.Maybe Prelude.Bool)
+applicationSettingsResponse_enabled = Lens.lens (\ApplicationSettingsResponse' {enabled} -> enabled) (\s@ApplicationSettingsResponse' {} a -> s {enabled = a} :: ApplicationSettingsResponse)
+
+-- | The S3 bucket where users’ persistent application settings are stored.
+-- When persistent application settings are enabled for the first time for
+-- an account in an AWS Region, an S3 bucket is created. The bucket is
+-- unique to the AWS account and the Region.
+applicationSettingsResponse_s3BucketName :: Lens.Lens' ApplicationSettingsResponse (Prelude.Maybe Prelude.Text)
+applicationSettingsResponse_s3BucketName = Lens.lens (\ApplicationSettingsResponse' {s3BucketName} -> s3BucketName) (\s@ApplicationSettingsResponse' {} a -> s {s3BucketName = a} :: ApplicationSettingsResponse)
+
+-- | The path prefix for the S3 bucket where users’ persistent application
+-- settings are stored.
+applicationSettingsResponse_settingsGroup :: Lens.Lens' ApplicationSettingsResponse (Prelude.Maybe Prelude.Text)
+applicationSettingsResponse_settingsGroup = Lens.lens (\ApplicationSettingsResponse' {settingsGroup} -> settingsGroup) (\s@ApplicationSettingsResponse' {} a -> s {settingsGroup = a} :: ApplicationSettingsResponse)
+
+instance Data.FromJSON ApplicationSettingsResponse where
+  parseJSON =
+    Data.withObject
+      "ApplicationSettingsResponse"
+      ( \x ->
+          ApplicationSettingsResponse'
+            Prelude.<$> (x Data..:? "Enabled")
+            Prelude.<*> (x Data..:? "S3BucketName")
+            Prelude.<*> (x Data..:? "SettingsGroup")
+      )
+
+instance Prelude.Hashable ApplicationSettingsResponse where
+  hashWithSalt _salt ApplicationSettingsResponse' {..} =
+    _salt
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` s3BucketName
+      `Prelude.hashWithSalt` settingsGroup
+
+instance Prelude.NFData ApplicationSettingsResponse where
+  rnf ApplicationSettingsResponse' {..} =
+    Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf s3BucketName
+      `Prelude.seq` Prelude.rnf settingsGroup
diff --git a/gen/Amazonka/AppStream/Types/AuthenticationType.hs b/gen/Amazonka/AppStream/Types/AuthenticationType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/AuthenticationType.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.AppStream.Types.AuthenticationType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.AuthenticationType
+  ( AuthenticationType
+      ( ..,
+        AuthenticationType_API,
+        AuthenticationType_AWS_AD,
+        AuthenticationType_SAML,
+        AuthenticationType_USERPOOL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AuthenticationType = AuthenticationType'
+  { fromAuthenticationType ::
+      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 AuthenticationType_API :: AuthenticationType
+pattern AuthenticationType_API = AuthenticationType' "API"
+
+pattern AuthenticationType_AWS_AD :: AuthenticationType
+pattern AuthenticationType_AWS_AD = AuthenticationType' "AWS_AD"
+
+pattern AuthenticationType_SAML :: AuthenticationType
+pattern AuthenticationType_SAML = AuthenticationType' "SAML"
+
+pattern AuthenticationType_USERPOOL :: AuthenticationType
+pattern AuthenticationType_USERPOOL = AuthenticationType' "USERPOOL"
+
+{-# COMPLETE
+  AuthenticationType_API,
+  AuthenticationType_AWS_AD,
+  AuthenticationType_SAML,
+  AuthenticationType_USERPOOL,
+  AuthenticationType'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/CertificateBasedAuthProperties.hs b/gen/Amazonka/AppStream/Types/CertificateBasedAuthProperties.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/CertificateBasedAuthProperties.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.CertificateBasedAuthProperties
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.CertificateBasedAuthProperties where
+
+import Amazonka.AppStream.Types.CertificateBasedAuthStatus
+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 certificate-based authentication properties used to authenticate
+-- SAML 2.0 Identity Provider (IdP) user identities to Active Directory
+-- domain-joined streaming instances. Fallback is turned on by default when
+-- certificate-based authentication is __Enabled__ . Fallback allows users
+-- to log in using their AD domain password if certificate-based
+-- authentication is unsuccessful, or to unlock a desktop lock screen.
+-- __Enabled_no_directory_login_fallback__ enables certificate-based
+-- authentication, but does not allow users to log in using their AD domain
+-- password. Users will be disconnected to re-authenticate using
+-- certificates.
+--
+-- /See:/ 'newCertificateBasedAuthProperties' smart constructor.
+data CertificateBasedAuthProperties = CertificateBasedAuthProperties'
+  { -- | The ARN of the AWS Certificate Manager Private CA resource.
+    certificateAuthorityArn :: Prelude.Maybe Prelude.Text,
+    -- | The status of the certificate-based authentication properties.
+    status :: Prelude.Maybe CertificateBasedAuthStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CertificateBasedAuthProperties' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateAuthorityArn', 'certificateBasedAuthProperties_certificateAuthorityArn' - The ARN of the AWS Certificate Manager Private CA resource.
+--
+-- 'status', 'certificateBasedAuthProperties_status' - The status of the certificate-based authentication properties.
+newCertificateBasedAuthProperties ::
+  CertificateBasedAuthProperties
+newCertificateBasedAuthProperties =
+  CertificateBasedAuthProperties'
+    { certificateAuthorityArn =
+        Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | The ARN of the AWS Certificate Manager Private CA resource.
+certificateBasedAuthProperties_certificateAuthorityArn :: Lens.Lens' CertificateBasedAuthProperties (Prelude.Maybe Prelude.Text)
+certificateBasedAuthProperties_certificateAuthorityArn = Lens.lens (\CertificateBasedAuthProperties' {certificateAuthorityArn} -> certificateAuthorityArn) (\s@CertificateBasedAuthProperties' {} a -> s {certificateAuthorityArn = a} :: CertificateBasedAuthProperties)
+
+-- | The status of the certificate-based authentication properties.
+certificateBasedAuthProperties_status :: Lens.Lens' CertificateBasedAuthProperties (Prelude.Maybe CertificateBasedAuthStatus)
+certificateBasedAuthProperties_status = Lens.lens (\CertificateBasedAuthProperties' {status} -> status) (\s@CertificateBasedAuthProperties' {} a -> s {status = a} :: CertificateBasedAuthProperties)
+
+instance Data.FromJSON CertificateBasedAuthProperties where
+  parseJSON =
+    Data.withObject
+      "CertificateBasedAuthProperties"
+      ( \x ->
+          CertificateBasedAuthProperties'
+            Prelude.<$> (x Data..:? "CertificateAuthorityArn")
+            Prelude.<*> (x Data..:? "Status")
+      )
+
+instance
+  Prelude.Hashable
+    CertificateBasedAuthProperties
+  where
+  hashWithSalt
+    _salt
+    CertificateBasedAuthProperties' {..} =
+      _salt
+        `Prelude.hashWithSalt` certificateAuthorityArn
+        `Prelude.hashWithSalt` status
+
+instance
+  Prelude.NFData
+    CertificateBasedAuthProperties
+  where
+  rnf CertificateBasedAuthProperties' {..} =
+    Prelude.rnf certificateAuthorityArn
+      `Prelude.seq` Prelude.rnf status
+
+instance Data.ToJSON CertificateBasedAuthProperties where
+  toJSON CertificateBasedAuthProperties' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CertificateAuthorityArn" Data..=)
+              Prelude.<$> certificateAuthorityArn,
+            ("Status" Data..=) Prelude.<$> status
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/CertificateBasedAuthStatus.hs b/gen/Amazonka/AppStream/Types/CertificateBasedAuthStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/CertificateBasedAuthStatus.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.CertificateBasedAuthStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.CertificateBasedAuthStatus
+  ( CertificateBasedAuthStatus
+      ( ..,
+        CertificateBasedAuthStatus_DISABLED,
+        CertificateBasedAuthStatus_ENABLED,
+        CertificateBasedAuthStatus_ENABLED_NO_DIRECTORY_LOGIN_FALLBACK
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype CertificateBasedAuthStatus = CertificateBasedAuthStatus'
+  { fromCertificateBasedAuthStatus ::
+      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 CertificateBasedAuthStatus_DISABLED :: CertificateBasedAuthStatus
+pattern CertificateBasedAuthStatus_DISABLED = CertificateBasedAuthStatus' "DISABLED"
+
+pattern CertificateBasedAuthStatus_ENABLED :: CertificateBasedAuthStatus
+pattern CertificateBasedAuthStatus_ENABLED = CertificateBasedAuthStatus' "ENABLED"
+
+pattern CertificateBasedAuthStatus_ENABLED_NO_DIRECTORY_LOGIN_FALLBACK :: CertificateBasedAuthStatus
+pattern CertificateBasedAuthStatus_ENABLED_NO_DIRECTORY_LOGIN_FALLBACK = CertificateBasedAuthStatus' "ENABLED_NO_DIRECTORY_LOGIN_FALLBACK"
+
+{-# COMPLETE
+  CertificateBasedAuthStatus_DISABLED,
+  CertificateBasedAuthStatus_ENABLED,
+  CertificateBasedAuthStatus_ENABLED_NO_DIRECTORY_LOGIN_FALLBACK,
+  CertificateBasedAuthStatus'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/ComputeCapacity.hs b/gen/Amazonka/AppStream/Types/ComputeCapacity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ComputeCapacity.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.ComputeCapacity
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ComputeCapacity 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
+
+-- | Describes the capacity for a fleet.
+--
+-- /See:/ 'newComputeCapacity' smart constructor.
+data ComputeCapacity = ComputeCapacity'
+  { -- | The desired number of streaming instances.
+    desiredInstances :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComputeCapacity' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'desiredInstances', 'computeCapacity_desiredInstances' - The desired number of streaming instances.
+newComputeCapacity ::
+  -- | 'desiredInstances'
+  Prelude.Int ->
+  ComputeCapacity
+newComputeCapacity pDesiredInstances_ =
+  ComputeCapacity'
+    { desiredInstances =
+        pDesiredInstances_
+    }
+
+-- | The desired number of streaming instances.
+computeCapacity_desiredInstances :: Lens.Lens' ComputeCapacity Prelude.Int
+computeCapacity_desiredInstances = Lens.lens (\ComputeCapacity' {desiredInstances} -> desiredInstances) (\s@ComputeCapacity' {} a -> s {desiredInstances = a} :: ComputeCapacity)
+
+instance Prelude.Hashable ComputeCapacity where
+  hashWithSalt _salt ComputeCapacity' {..} =
+    _salt `Prelude.hashWithSalt` desiredInstances
+
+instance Prelude.NFData ComputeCapacity where
+  rnf ComputeCapacity' {..} =
+    Prelude.rnf desiredInstances
+
+instance Data.ToJSON ComputeCapacity where
+  toJSON ComputeCapacity' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("DesiredInstances" Data..= desiredInstances)
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/ComputeCapacityStatus.hs b/gen/Amazonka/AppStream/Types/ComputeCapacityStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ComputeCapacityStatus.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.ComputeCapacityStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ComputeCapacityStatus 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
+
+-- | Describes the capacity status for a fleet.
+--
+-- /See:/ 'newComputeCapacityStatus' smart constructor.
+data ComputeCapacityStatus = ComputeCapacityStatus'
+  { -- | The number of currently available instances that can be used to stream
+    -- sessions.
+    available :: Prelude.Maybe Prelude.Int,
+    -- | The number of instances in use for streaming.
+    inUse :: Prelude.Maybe Prelude.Int,
+    -- | The total number of simultaneous streaming instances that are running.
+    running :: Prelude.Maybe Prelude.Int,
+    -- | The desired number of streaming instances.
+    desired :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ComputeCapacityStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'available', 'computeCapacityStatus_available' - The number of currently available instances that can be used to stream
+-- sessions.
+--
+-- 'inUse', 'computeCapacityStatus_inUse' - The number of instances in use for streaming.
+--
+-- 'running', 'computeCapacityStatus_running' - The total number of simultaneous streaming instances that are running.
+--
+-- 'desired', 'computeCapacityStatus_desired' - The desired number of streaming instances.
+newComputeCapacityStatus ::
+  -- | 'desired'
+  Prelude.Int ->
+  ComputeCapacityStatus
+newComputeCapacityStatus pDesired_ =
+  ComputeCapacityStatus'
+    { available = Prelude.Nothing,
+      inUse = Prelude.Nothing,
+      running = Prelude.Nothing,
+      desired = pDesired_
+    }
+
+-- | The number of currently available instances that can be used to stream
+-- sessions.
+computeCapacityStatus_available :: Lens.Lens' ComputeCapacityStatus (Prelude.Maybe Prelude.Int)
+computeCapacityStatus_available = Lens.lens (\ComputeCapacityStatus' {available} -> available) (\s@ComputeCapacityStatus' {} a -> s {available = a} :: ComputeCapacityStatus)
+
+-- | The number of instances in use for streaming.
+computeCapacityStatus_inUse :: Lens.Lens' ComputeCapacityStatus (Prelude.Maybe Prelude.Int)
+computeCapacityStatus_inUse = Lens.lens (\ComputeCapacityStatus' {inUse} -> inUse) (\s@ComputeCapacityStatus' {} a -> s {inUse = a} :: ComputeCapacityStatus)
+
+-- | The total number of simultaneous streaming instances that are running.
+computeCapacityStatus_running :: Lens.Lens' ComputeCapacityStatus (Prelude.Maybe Prelude.Int)
+computeCapacityStatus_running = Lens.lens (\ComputeCapacityStatus' {running} -> running) (\s@ComputeCapacityStatus' {} a -> s {running = a} :: ComputeCapacityStatus)
+
+-- | The desired number of streaming instances.
+computeCapacityStatus_desired :: Lens.Lens' ComputeCapacityStatus Prelude.Int
+computeCapacityStatus_desired = Lens.lens (\ComputeCapacityStatus' {desired} -> desired) (\s@ComputeCapacityStatus' {} a -> s {desired = a} :: ComputeCapacityStatus)
+
+instance Data.FromJSON ComputeCapacityStatus where
+  parseJSON =
+    Data.withObject
+      "ComputeCapacityStatus"
+      ( \x ->
+          ComputeCapacityStatus'
+            Prelude.<$> (x Data..:? "Available")
+            Prelude.<*> (x Data..:? "InUse")
+            Prelude.<*> (x Data..:? "Running")
+            Prelude.<*> (x Data..: "Desired")
+      )
+
+instance Prelude.Hashable ComputeCapacityStatus where
+  hashWithSalt _salt ComputeCapacityStatus' {..} =
+    _salt
+      `Prelude.hashWithSalt` available
+      `Prelude.hashWithSalt` inUse
+      `Prelude.hashWithSalt` running
+      `Prelude.hashWithSalt` desired
+
+instance Prelude.NFData ComputeCapacityStatus where
+  rnf ComputeCapacityStatus' {..} =
+    Prelude.rnf available
+      `Prelude.seq` Prelude.rnf inUse
+      `Prelude.seq` Prelude.rnf running
+      `Prelude.seq` Prelude.rnf desired
diff --git a/gen/Amazonka/AppStream/Types/DirectoryConfig.hs b/gen/Amazonka/AppStream/Types/DirectoryConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/DirectoryConfig.hs
@@ -0,0 +1,166 @@
+{-# 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.AppStream.Types.DirectoryConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.DirectoryConfig where
+
+import Amazonka.AppStream.Types.CertificateBasedAuthProperties
+import Amazonka.AppStream.Types.ServiceAccountCredentials
+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
+
+-- | Describes the configuration information required to join fleets and
+-- image builders to Microsoft Active Directory domains.
+--
+-- /See:/ 'newDirectoryConfig' smart constructor.
+data DirectoryConfig = DirectoryConfig'
+  { -- | The certificate-based authentication properties used to authenticate
+    -- SAML 2.0 Identity Provider (IdP) user identities to Active Directory
+    -- domain-joined streaming instances. Fallback is turned on by default when
+    -- certificate-based authentication is __Enabled__ . Fallback allows users
+    -- to log in using their AD domain password if certificate-based
+    -- authentication is unsuccessful, or to unlock a desktop lock screen.
+    -- __Enabled_no_directory_login_fallback__ enables certificate-based
+    -- authentication, but does not allow users to log in using their AD domain
+    -- password. Users will be disconnected to re-authenticate using
+    -- certificates.
+    certificateBasedAuthProperties :: Prelude.Maybe CertificateBasedAuthProperties,
+    -- | The time the directory configuration was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The distinguished names of the organizational units for computer
+    -- accounts.
+    organizationalUnitDistinguishedNames :: Prelude.Maybe [Prelude.Text],
+    -- | The credentials for the service account used by the fleet or image
+    -- builder to connect to the directory.
+    serviceAccountCredentials :: Prelude.Maybe ServiceAccountCredentials,
+    -- | The fully qualified name of the directory (for example,
+    -- corp.example.com).
+    directoryName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DirectoryConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateBasedAuthProperties', 'directoryConfig_certificateBasedAuthProperties' - The certificate-based authentication properties used to authenticate
+-- SAML 2.0 Identity Provider (IdP) user identities to Active Directory
+-- domain-joined streaming instances. Fallback is turned on by default when
+-- certificate-based authentication is __Enabled__ . Fallback allows users
+-- to log in using their AD domain password if certificate-based
+-- authentication is unsuccessful, or to unlock a desktop lock screen.
+-- __Enabled_no_directory_login_fallback__ enables certificate-based
+-- authentication, but does not allow users to log in using their AD domain
+-- password. Users will be disconnected to re-authenticate using
+-- certificates.
+--
+-- 'createdTime', 'directoryConfig_createdTime' - The time the directory configuration was created.
+--
+-- 'organizationalUnitDistinguishedNames', 'directoryConfig_organizationalUnitDistinguishedNames' - The distinguished names of the organizational units for computer
+-- accounts.
+--
+-- 'serviceAccountCredentials', 'directoryConfig_serviceAccountCredentials' - The credentials for the service account used by the fleet or image
+-- builder to connect to the directory.
+--
+-- 'directoryName', 'directoryConfig_directoryName' - The fully qualified name of the directory (for example,
+-- corp.example.com).
+newDirectoryConfig ::
+  -- | 'directoryName'
+  Prelude.Text ->
+  DirectoryConfig
+newDirectoryConfig pDirectoryName_ =
+  DirectoryConfig'
+    { certificateBasedAuthProperties =
+        Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      organizationalUnitDistinguishedNames =
+        Prelude.Nothing,
+      serviceAccountCredentials = Prelude.Nothing,
+      directoryName = pDirectoryName_
+    }
+
+-- | The certificate-based authentication properties used to authenticate
+-- SAML 2.0 Identity Provider (IdP) user identities to Active Directory
+-- domain-joined streaming instances. Fallback is turned on by default when
+-- certificate-based authentication is __Enabled__ . Fallback allows users
+-- to log in using their AD domain password if certificate-based
+-- authentication is unsuccessful, or to unlock a desktop lock screen.
+-- __Enabled_no_directory_login_fallback__ enables certificate-based
+-- authentication, but does not allow users to log in using their AD domain
+-- password. Users will be disconnected to re-authenticate using
+-- certificates.
+directoryConfig_certificateBasedAuthProperties :: Lens.Lens' DirectoryConfig (Prelude.Maybe CertificateBasedAuthProperties)
+directoryConfig_certificateBasedAuthProperties = Lens.lens (\DirectoryConfig' {certificateBasedAuthProperties} -> certificateBasedAuthProperties) (\s@DirectoryConfig' {} a -> s {certificateBasedAuthProperties = a} :: DirectoryConfig)
+
+-- | The time the directory configuration was created.
+directoryConfig_createdTime :: Lens.Lens' DirectoryConfig (Prelude.Maybe Prelude.UTCTime)
+directoryConfig_createdTime = Lens.lens (\DirectoryConfig' {createdTime} -> createdTime) (\s@DirectoryConfig' {} a -> s {createdTime = a} :: DirectoryConfig) Prelude.. Lens.mapping Data._Time
+
+-- | The distinguished names of the organizational units for computer
+-- accounts.
+directoryConfig_organizationalUnitDistinguishedNames :: Lens.Lens' DirectoryConfig (Prelude.Maybe [Prelude.Text])
+directoryConfig_organizationalUnitDistinguishedNames = Lens.lens (\DirectoryConfig' {organizationalUnitDistinguishedNames} -> organizationalUnitDistinguishedNames) (\s@DirectoryConfig' {} a -> s {organizationalUnitDistinguishedNames = a} :: DirectoryConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The credentials for the service account used by the fleet or image
+-- builder to connect to the directory.
+directoryConfig_serviceAccountCredentials :: Lens.Lens' DirectoryConfig (Prelude.Maybe ServiceAccountCredentials)
+directoryConfig_serviceAccountCredentials = Lens.lens (\DirectoryConfig' {serviceAccountCredentials} -> serviceAccountCredentials) (\s@DirectoryConfig' {} a -> s {serviceAccountCredentials = a} :: DirectoryConfig)
+
+-- | The fully qualified name of the directory (for example,
+-- corp.example.com).
+directoryConfig_directoryName :: Lens.Lens' DirectoryConfig Prelude.Text
+directoryConfig_directoryName = Lens.lens (\DirectoryConfig' {directoryName} -> directoryName) (\s@DirectoryConfig' {} a -> s {directoryName = a} :: DirectoryConfig)
+
+instance Data.FromJSON DirectoryConfig where
+  parseJSON =
+    Data.withObject
+      "DirectoryConfig"
+      ( \x ->
+          DirectoryConfig'
+            Prelude.<$> (x Data..:? "CertificateBasedAuthProperties")
+            Prelude.<*> (x Data..:? "CreatedTime")
+            Prelude.<*> ( x
+                            Data..:? "OrganizationalUnitDistinguishedNames"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "ServiceAccountCredentials")
+            Prelude.<*> (x Data..: "DirectoryName")
+      )
+
+instance Prelude.Hashable DirectoryConfig where
+  hashWithSalt _salt DirectoryConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateBasedAuthProperties
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` organizationalUnitDistinguishedNames
+      `Prelude.hashWithSalt` serviceAccountCredentials
+      `Prelude.hashWithSalt` directoryName
+
+instance Prelude.NFData DirectoryConfig where
+  rnf DirectoryConfig' {..} =
+    Prelude.rnf certificateBasedAuthProperties
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf organizationalUnitDistinguishedNames
+      `Prelude.seq` Prelude.rnf serviceAccountCredentials
+      `Prelude.seq` Prelude.rnf directoryName
diff --git a/gen/Amazonka/AppStream/Types/DomainJoinInfo.hs b/gen/Amazonka/AppStream/Types/DomainJoinInfo.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/DomainJoinInfo.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.AppStream.Types.DomainJoinInfo
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.DomainJoinInfo 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
+
+-- | Describes the configuration information required to join fleets and
+-- image builders to Microsoft Active Directory domains.
+--
+-- /See:/ 'newDomainJoinInfo' smart constructor.
+data DomainJoinInfo = DomainJoinInfo'
+  { -- | The fully qualified name of the directory (for example,
+    -- corp.example.com).
+    directoryName :: Prelude.Maybe Prelude.Text,
+    -- | The distinguished name of the organizational unit for computer accounts.
+    organizationalUnitDistinguishedName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainJoinInfo' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryName', 'domainJoinInfo_directoryName' - The fully qualified name of the directory (for example,
+-- corp.example.com).
+--
+-- 'organizationalUnitDistinguishedName', 'domainJoinInfo_organizationalUnitDistinguishedName' - The distinguished name of the organizational unit for computer accounts.
+newDomainJoinInfo ::
+  DomainJoinInfo
+newDomainJoinInfo =
+  DomainJoinInfo'
+    { directoryName = Prelude.Nothing,
+      organizationalUnitDistinguishedName =
+        Prelude.Nothing
+    }
+
+-- | The fully qualified name of the directory (for example,
+-- corp.example.com).
+domainJoinInfo_directoryName :: Lens.Lens' DomainJoinInfo (Prelude.Maybe Prelude.Text)
+domainJoinInfo_directoryName = Lens.lens (\DomainJoinInfo' {directoryName} -> directoryName) (\s@DomainJoinInfo' {} a -> s {directoryName = a} :: DomainJoinInfo)
+
+-- | The distinguished name of the organizational unit for computer accounts.
+domainJoinInfo_organizationalUnitDistinguishedName :: Lens.Lens' DomainJoinInfo (Prelude.Maybe Prelude.Text)
+domainJoinInfo_organizationalUnitDistinguishedName = Lens.lens (\DomainJoinInfo' {organizationalUnitDistinguishedName} -> organizationalUnitDistinguishedName) (\s@DomainJoinInfo' {} a -> s {organizationalUnitDistinguishedName = a} :: DomainJoinInfo)
+
+instance Data.FromJSON DomainJoinInfo where
+  parseJSON =
+    Data.withObject
+      "DomainJoinInfo"
+      ( \x ->
+          DomainJoinInfo'
+            Prelude.<$> (x Data..:? "DirectoryName")
+            Prelude.<*> (x Data..:? "OrganizationalUnitDistinguishedName")
+      )
+
+instance Prelude.Hashable DomainJoinInfo where
+  hashWithSalt _salt DomainJoinInfo' {..} =
+    _salt
+      `Prelude.hashWithSalt` directoryName
+      `Prelude.hashWithSalt` organizationalUnitDistinguishedName
+
+instance Prelude.NFData DomainJoinInfo where
+  rnf DomainJoinInfo' {..} =
+    Prelude.rnf directoryName
+      `Prelude.seq` Prelude.rnf organizationalUnitDistinguishedName
+
+instance Data.ToJSON DomainJoinInfo where
+  toJSON DomainJoinInfo' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("DirectoryName" Data..=) Prelude.<$> directoryName,
+            ("OrganizationalUnitDistinguishedName" Data..=)
+              Prelude.<$> organizationalUnitDistinguishedName
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/EntitledApplication.hs b/gen/Amazonka/AppStream/Types/EntitledApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/EntitledApplication.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.EntitledApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.EntitledApplication where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The application associated to an entitlement. Access is controlled based
+-- on user attributes.
+--
+-- /See:/ 'newEntitledApplication' smart constructor.
+data EntitledApplication = EntitledApplication'
+  { -- | The identifier of the application.
+    applicationIdentifier :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EntitledApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applicationIdentifier', 'entitledApplication_applicationIdentifier' - The identifier of the application.
+newEntitledApplication ::
+  -- | 'applicationIdentifier'
+  Prelude.Text ->
+  EntitledApplication
+newEntitledApplication pApplicationIdentifier_ =
+  EntitledApplication'
+    { applicationIdentifier =
+        pApplicationIdentifier_
+    }
+
+-- | The identifier of the application.
+entitledApplication_applicationIdentifier :: Lens.Lens' EntitledApplication Prelude.Text
+entitledApplication_applicationIdentifier = Lens.lens (\EntitledApplication' {applicationIdentifier} -> applicationIdentifier) (\s@EntitledApplication' {} a -> s {applicationIdentifier = a} :: EntitledApplication)
+
+instance Data.FromJSON EntitledApplication where
+  parseJSON =
+    Data.withObject
+      "EntitledApplication"
+      ( \x ->
+          EntitledApplication'
+            Prelude.<$> (x Data..: "ApplicationIdentifier")
+      )
+
+instance Prelude.Hashable EntitledApplication where
+  hashWithSalt _salt EntitledApplication' {..} =
+    _salt `Prelude.hashWithSalt` applicationIdentifier
+
+instance Prelude.NFData EntitledApplication where
+  rnf EntitledApplication' {..} =
+    Prelude.rnf applicationIdentifier
diff --git a/gen/Amazonka/AppStream/Types/Entitlement.hs b/gen/Amazonka/AppStream/Types/Entitlement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/Entitlement.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.Entitlement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.Entitlement where
+
+import Amazonka.AppStream.Types.AppVisibility
+import Amazonka.AppStream.Types.EntitlementAttribute
+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
+
+-- | Specifies an entitlement. Entitlements control access to specific
+-- applications within a stack, based on user attributes. Entitlements
+-- apply to SAML 2.0 federated user identities. Amazon AppStream 2.0 user
+-- pool and streaming URL users are entitled to all applications in a
+-- stack. Entitlements don\'t apply to the desktop stream view application,
+-- or to applications managed by a dynamic app provider using the Dynamic
+-- Application Framework.
+--
+-- /See:/ 'newEntitlement' smart constructor.
+data Entitlement = Entitlement'
+  { -- | The time when the entitlement was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the entitlement.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The time when the entitlement was last modified.
+    lastModifiedTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the entitlement.
+    name :: Prelude.Text,
+    -- | The name of the stack with which the entitlement is associated.
+    stackName :: Prelude.Text,
+    -- | Specifies whether all or selected apps are entitled.
+    appVisibility :: AppVisibility,
+    -- | The attributes of the entitlement.
+    attributes :: Prelude.NonEmpty EntitlementAttribute
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Entitlement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdTime', 'entitlement_createdTime' - The time when the entitlement was created.
+--
+-- 'description', 'entitlement_description' - The description of the entitlement.
+--
+-- 'lastModifiedTime', 'entitlement_lastModifiedTime' - The time when the entitlement was last modified.
+--
+-- 'name', 'entitlement_name' - The name of the entitlement.
+--
+-- 'stackName', 'entitlement_stackName' - The name of the stack with which the entitlement is associated.
+--
+-- 'appVisibility', 'entitlement_appVisibility' - Specifies whether all or selected apps are entitled.
+--
+-- 'attributes', 'entitlement_attributes' - The attributes of the entitlement.
+newEntitlement ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'stackName'
+  Prelude.Text ->
+  -- | 'appVisibility'
+  AppVisibility ->
+  -- | 'attributes'
+  Prelude.NonEmpty EntitlementAttribute ->
+  Entitlement
+newEntitlement
+  pName_
+  pStackName_
+  pAppVisibility_
+  pAttributes_ =
+    Entitlement'
+      { createdTime = Prelude.Nothing,
+        description = Prelude.Nothing,
+        lastModifiedTime = Prelude.Nothing,
+        name = pName_,
+        stackName = pStackName_,
+        appVisibility = pAppVisibility_,
+        attributes = Lens.coerced Lens.# pAttributes_
+      }
+
+-- | The time when the entitlement was created.
+entitlement_createdTime :: Lens.Lens' Entitlement (Prelude.Maybe Prelude.UTCTime)
+entitlement_createdTime = Lens.lens (\Entitlement' {createdTime} -> createdTime) (\s@Entitlement' {} a -> s {createdTime = a} :: Entitlement) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the entitlement.
+entitlement_description :: Lens.Lens' Entitlement (Prelude.Maybe Prelude.Text)
+entitlement_description = Lens.lens (\Entitlement' {description} -> description) (\s@Entitlement' {} a -> s {description = a} :: Entitlement)
+
+-- | The time when the entitlement was last modified.
+entitlement_lastModifiedTime :: Lens.Lens' Entitlement (Prelude.Maybe Prelude.UTCTime)
+entitlement_lastModifiedTime = Lens.lens (\Entitlement' {lastModifiedTime} -> lastModifiedTime) (\s@Entitlement' {} a -> s {lastModifiedTime = a} :: Entitlement) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the entitlement.
+entitlement_name :: Lens.Lens' Entitlement Prelude.Text
+entitlement_name = Lens.lens (\Entitlement' {name} -> name) (\s@Entitlement' {} a -> s {name = a} :: Entitlement)
+
+-- | The name of the stack with which the entitlement is associated.
+entitlement_stackName :: Lens.Lens' Entitlement Prelude.Text
+entitlement_stackName = Lens.lens (\Entitlement' {stackName} -> stackName) (\s@Entitlement' {} a -> s {stackName = a} :: Entitlement)
+
+-- | Specifies whether all or selected apps are entitled.
+entitlement_appVisibility :: Lens.Lens' Entitlement AppVisibility
+entitlement_appVisibility = Lens.lens (\Entitlement' {appVisibility} -> appVisibility) (\s@Entitlement' {} a -> s {appVisibility = a} :: Entitlement)
+
+-- | The attributes of the entitlement.
+entitlement_attributes :: Lens.Lens' Entitlement (Prelude.NonEmpty EntitlementAttribute)
+entitlement_attributes = Lens.lens (\Entitlement' {attributes} -> attributes) (\s@Entitlement' {} a -> s {attributes = a} :: Entitlement) Prelude.. Lens.coerced
+
+instance Data.FromJSON Entitlement where
+  parseJSON =
+    Data.withObject
+      "Entitlement"
+      ( \x ->
+          Entitlement'
+            Prelude.<$> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "LastModifiedTime")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "StackName")
+            Prelude.<*> (x Data..: "AppVisibility")
+            Prelude.<*> (x Data..: "Attributes")
+      )
+
+instance Prelude.Hashable Entitlement where
+  hashWithSalt _salt Entitlement' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` lastModifiedTime
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` stackName
+      `Prelude.hashWithSalt` appVisibility
+      `Prelude.hashWithSalt` attributes
+
+instance Prelude.NFData Entitlement where
+  rnf Entitlement' {..} =
+    Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf lastModifiedTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf appVisibility
+      `Prelude.seq` Prelude.rnf attributes
diff --git a/gen/Amazonka/AppStream/Types/EntitlementAttribute.hs b/gen/Amazonka/AppStream/Types/EntitlementAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/EntitlementAttribute.hs
@@ -0,0 +1,155 @@
+{-# 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.AppStream.Types.EntitlementAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.EntitlementAttribute 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 attribute associated with an entitlement. Application entitlements
+-- work by matching a supported SAML 2.0 attribute name to a value when a
+-- user identity federates to an Amazon AppStream 2.0 SAML application.
+--
+-- /See:/ 'newEntitlementAttribute' smart constructor.
+data EntitlementAttribute = EntitlementAttribute'
+  { -- | A supported AWS IAM SAML @PrincipalTag@ attribute that is matched to the
+    -- associated value when a user identity federates into an Amazon AppStream
+    -- 2.0 SAML application.
+    --
+    -- The following are valid values:
+    --
+    -- -   roles
+    --
+    -- -   department
+    --
+    -- -   organization
+    --
+    -- -   groups
+    --
+    -- -   title
+    --
+    -- -   costCenter
+    --
+    -- -   userType
+    name :: Prelude.Text,
+    -- | A value that is matched to a supported SAML attribute name when a user
+    -- identity federates into an Amazon AppStream 2.0 SAML application.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EntitlementAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'entitlementAttribute_name' - A supported AWS IAM SAML @PrincipalTag@ attribute that is matched to the
+-- associated value when a user identity federates into an Amazon AppStream
+-- 2.0 SAML application.
+--
+-- The following are valid values:
+--
+-- -   roles
+--
+-- -   department
+--
+-- -   organization
+--
+-- -   groups
+--
+-- -   title
+--
+-- -   costCenter
+--
+-- -   userType
+--
+-- 'value', 'entitlementAttribute_value' - A value that is matched to a supported SAML attribute name when a user
+-- identity federates into an Amazon AppStream 2.0 SAML application.
+newEntitlementAttribute ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  EntitlementAttribute
+newEntitlementAttribute pName_ pValue_ =
+  EntitlementAttribute'
+    { name = pName_,
+      value = pValue_
+    }
+
+-- | A supported AWS IAM SAML @PrincipalTag@ attribute that is matched to the
+-- associated value when a user identity federates into an Amazon AppStream
+-- 2.0 SAML application.
+--
+-- The following are valid values:
+--
+-- -   roles
+--
+-- -   department
+--
+-- -   organization
+--
+-- -   groups
+--
+-- -   title
+--
+-- -   costCenter
+--
+-- -   userType
+entitlementAttribute_name :: Lens.Lens' EntitlementAttribute Prelude.Text
+entitlementAttribute_name = Lens.lens (\EntitlementAttribute' {name} -> name) (\s@EntitlementAttribute' {} a -> s {name = a} :: EntitlementAttribute)
+
+-- | A value that is matched to a supported SAML attribute name when a user
+-- identity federates into an Amazon AppStream 2.0 SAML application.
+entitlementAttribute_value :: Lens.Lens' EntitlementAttribute Prelude.Text
+entitlementAttribute_value = Lens.lens (\EntitlementAttribute' {value} -> value) (\s@EntitlementAttribute' {} a -> s {value = a} :: EntitlementAttribute)
+
+instance Data.FromJSON EntitlementAttribute where
+  parseJSON =
+    Data.withObject
+      "EntitlementAttribute"
+      ( \x ->
+          EntitlementAttribute'
+            Prelude.<$> (x Data..: "Name")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable EntitlementAttribute where
+  hashWithSalt _salt EntitlementAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData EntitlementAttribute where
+  rnf EntitlementAttribute' {..} =
+    Prelude.rnf name `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON EntitlementAttribute where
+  toJSON EntitlementAttribute' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/Fleet.hs b/gen/Amazonka/AppStream/Types/Fleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/Fleet.hs
@@ -0,0 +1,763 @@
+{-# 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.AppStream.Types.Fleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.Fleet where
+
+import Amazonka.AppStream.Types.ComputeCapacityStatus
+import Amazonka.AppStream.Types.DomainJoinInfo
+import Amazonka.AppStream.Types.FleetError
+import Amazonka.AppStream.Types.FleetState
+import Amazonka.AppStream.Types.FleetType
+import Amazonka.AppStream.Types.PlatformType
+import Amazonka.AppStream.Types.S3Location
+import Amazonka.AppStream.Types.StreamView
+import Amazonka.AppStream.Types.VpcConfig
+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
+
+-- | Describes a fleet.
+--
+-- /See:/ 'newFleet' smart constructor.
+data Fleet = Fleet'
+  { -- | The time the fleet was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The description to display.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time that a streaming session remains active after users
+    -- disconnect. If they try to reconnect to the streaming session after a
+    -- disconnection or network interruption within this time interval, they
+    -- are connected to their previous session. Otherwise, they are connected
+    -- to a new session with a new streaming instance.
+    --
+    -- Specify a value between 60 and 360000.
+    disconnectTimeoutInSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The fleet name to display.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the directory and organizational unit (OU) to use to join
+    -- the fleet to a Microsoft Active Directory domain.
+    domainJoinInfo :: Prelude.Maybe DomainJoinInfo,
+    -- | Indicates whether default internet access is enabled for the fleet.
+    enableDefaultInternetAccess :: Prelude.Maybe Prelude.Bool,
+    -- | The fleet errors.
+    fleetErrors :: Prelude.Maybe [FleetError],
+    -- | The fleet type.
+    --
+    -- [ALWAYS_ON]
+    --     Provides users with instant-on access to their apps. You are charged
+    --     for all running instances in your fleet, even if no users are
+    --     streaming apps.
+    --
+    -- [ON_DEMAND]
+    --     Provide users with access to applications after they connect, which
+    --     takes one to two minutes. You are charged for instance streaming
+    --     when users are connected and a small hourly fee for instances that
+    --     are not streaming apps.
+    fleetType :: Prelude.Maybe FleetType,
+    -- | The ARN of the IAM role that is applied to the fleet. To assume a role,
+    -- the fleet instance calls the AWS Security Token Service (STS)
+    -- @AssumeRole@ API operation and passes the ARN of the role to use. The
+    -- operation creates a new session with temporary credentials. AppStream
+    -- 2.0 retrieves the temporary credentials and creates the
+    -- __appstream_machine_role__ credential profile on the instance.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+    -- in the /Amazon AppStream 2.0 Administration Guide/.
+    iamRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time that users can be idle (inactive) before they are
+    -- disconnected from their streaming session and the
+    -- @DisconnectTimeoutInSeconds@ time interval begins. Users are notified
+    -- before they are disconnected due to inactivity. If users try to
+    -- reconnect to the streaming session before the time interval specified in
+    -- @DisconnectTimeoutInSeconds@ elapses, they are connected to their
+    -- previous session. Users are considered idle when they stop providing
+    -- keyboard or mouse input during their streaming session. File uploads and
+    -- downloads, audio in, audio out, and pixels changing do not qualify as
+    -- user activity. If users continue to be idle after the time interval in
+    -- @IdleDisconnectTimeoutInSeconds@ elapses, they are disconnected.
+    --
+    -- To prevent users from being disconnected due to inactivity, specify a
+    -- value of 0. Otherwise, specify a value between 60 and 3600. The default
+    -- value is 0.
+    --
+    -- If you enable this feature, we recommend that you specify a value that
+    -- corresponds exactly to a whole number of minutes (for example, 60, 120,
+    -- and 180). If you don\'t do this, the value is rounded to the nearest
+    -- minute. For example, if you specify a value of 70, users are
+    -- disconnected after 1 minute of inactivity. If you specify a value that
+    -- is at the midpoint between two different minutes, the value is rounded
+    -- up. For example, if you specify a value of 90, users are disconnected
+    -- after 2 minutes of inactivity.
+    idleDisconnectTimeoutInSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The ARN for the public, private, or shared image.
+    imageArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image used to create the fleet.
+    imageName :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of concurrent sessions for the fleet.
+    maxConcurrentSessions :: Prelude.Maybe Prelude.Int,
+    -- | The maximum amount of time that a streaming session can remain active,
+    -- in seconds. If users are still connected to a streaming instance five
+    -- minutes before this limit is reached, they are prompted to save any open
+    -- documents before being disconnected. After this time elapses, the
+    -- instance is terminated and replaced by a new instance.
+    --
+    -- Specify a value between 600 and 360000.
+    maxUserDurationInSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The platform of the fleet.
+    platform :: Prelude.Maybe PlatformType,
+    -- | The S3 location of the session scripts configuration zip file. This only
+    -- applies to Elastic fleets.
+    sessionScriptS3Location :: Prelude.Maybe S3Location,
+    -- | The AppStream 2.0 view that is displayed to your users when they stream
+    -- from the fleet. When @APP@ is specified, only the windows of
+    -- applications opened by users display. When @DESKTOP@ is specified, the
+    -- standard desktop that is provided by the operating system displays.
+    --
+    -- The default value is @APP@.
+    streamView :: Prelude.Maybe StreamView,
+    -- | The USB device filter strings associated with the fleet.
+    usbDeviceFilterStrings :: Prelude.Maybe [Prelude.Text],
+    -- | The VPC configuration for the fleet.
+    vpcConfig :: Prelude.Maybe VpcConfig,
+    -- | The Amazon Resource Name (ARN) for the fleet.
+    arn :: Prelude.Text,
+    -- | The name of the fleet.
+    name :: Prelude.Text,
+    -- | The instance type to use when launching fleet instances. The following
+    -- instance types are available:
+    --
+    -- -   stream.standard.small
+    --
+    -- -   stream.standard.medium
+    --
+    -- -   stream.standard.large
+    --
+    -- -   stream.compute.large
+    --
+    -- -   stream.compute.xlarge
+    --
+    -- -   stream.compute.2xlarge
+    --
+    -- -   stream.compute.4xlarge
+    --
+    -- -   stream.compute.8xlarge
+    --
+    -- -   stream.memory.large
+    --
+    -- -   stream.memory.xlarge
+    --
+    -- -   stream.memory.2xlarge
+    --
+    -- -   stream.memory.4xlarge
+    --
+    -- -   stream.memory.8xlarge
+    --
+    -- -   stream.memory.z1d.large
+    --
+    -- -   stream.memory.z1d.xlarge
+    --
+    -- -   stream.memory.z1d.2xlarge
+    --
+    -- -   stream.memory.z1d.3xlarge
+    --
+    -- -   stream.memory.z1d.6xlarge
+    --
+    -- -   stream.memory.z1d.12xlarge
+    --
+    -- -   stream.graphics-design.large
+    --
+    -- -   stream.graphics-design.xlarge
+    --
+    -- -   stream.graphics-design.2xlarge
+    --
+    -- -   stream.graphics-design.4xlarge
+    --
+    -- -   stream.graphics-desktop.2xlarge
+    --
+    -- -   stream.graphics.g4dn.xlarge
+    --
+    -- -   stream.graphics.g4dn.2xlarge
+    --
+    -- -   stream.graphics.g4dn.4xlarge
+    --
+    -- -   stream.graphics.g4dn.8xlarge
+    --
+    -- -   stream.graphics.g4dn.12xlarge
+    --
+    -- -   stream.graphics.g4dn.16xlarge
+    --
+    -- -   stream.graphics-pro.4xlarge
+    --
+    -- -   stream.graphics-pro.8xlarge
+    --
+    -- -   stream.graphics-pro.16xlarge
+    instanceType :: Prelude.Text,
+    -- | The capacity status for the fleet.
+    computeCapacityStatus :: ComputeCapacityStatus,
+    -- | The current state for the fleet.
+    state :: FleetState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Fleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'createdTime', 'fleet_createdTime' - The time the fleet was created.
+--
+-- 'description', 'fleet_description' - The description to display.
+--
+-- 'disconnectTimeoutInSeconds', 'fleet_disconnectTimeoutInSeconds' - The amount of time that a streaming session remains active after users
+-- disconnect. If they try to reconnect to the streaming session after a
+-- disconnection or network interruption within this time interval, they
+-- are connected to their previous session. Otherwise, they are connected
+-- to a new session with a new streaming instance.
+--
+-- Specify a value between 60 and 360000.
+--
+-- 'displayName', 'fleet_displayName' - The fleet name to display.
+--
+-- 'domainJoinInfo', 'fleet_domainJoinInfo' - The name of the directory and organizational unit (OU) to use to join
+-- the fleet to a Microsoft Active Directory domain.
+--
+-- 'enableDefaultInternetAccess', 'fleet_enableDefaultInternetAccess' - Indicates whether default internet access is enabled for the fleet.
+--
+-- 'fleetErrors', 'fleet_fleetErrors' - The fleet errors.
+--
+-- 'fleetType', 'fleet_fleetType' - The fleet type.
+--
+-- [ALWAYS_ON]
+--     Provides users with instant-on access to their apps. You are charged
+--     for all running instances in your fleet, even if no users are
+--     streaming apps.
+--
+-- [ON_DEMAND]
+--     Provide users with access to applications after they connect, which
+--     takes one to two minutes. You are charged for instance streaming
+--     when users are connected and a small hourly fee for instances that
+--     are not streaming apps.
+--
+-- 'iamRoleArn', 'fleet_iamRoleArn' - The ARN of the IAM role that is applied to the fleet. To assume a role,
+-- the fleet instance calls the AWS Security Token Service (STS)
+-- @AssumeRole@ API operation and passes the ARN of the role to use. The
+-- operation creates a new session with temporary credentials. AppStream
+-- 2.0 retrieves the temporary credentials and creates the
+-- __appstream_machine_role__ credential profile on the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- 'idleDisconnectTimeoutInSeconds', 'fleet_idleDisconnectTimeoutInSeconds' - The amount of time that users can be idle (inactive) before they are
+-- disconnected from their streaming session and the
+-- @DisconnectTimeoutInSeconds@ time interval begins. Users are notified
+-- before they are disconnected due to inactivity. If users try to
+-- reconnect to the streaming session before the time interval specified in
+-- @DisconnectTimeoutInSeconds@ elapses, they are connected to their
+-- previous session. Users are considered idle when they stop providing
+-- keyboard or mouse input during their streaming session. File uploads and
+-- downloads, audio in, audio out, and pixels changing do not qualify as
+-- user activity. If users continue to be idle after the time interval in
+-- @IdleDisconnectTimeoutInSeconds@ elapses, they are disconnected.
+--
+-- To prevent users from being disconnected due to inactivity, specify a
+-- value of 0. Otherwise, specify a value between 60 and 3600. The default
+-- value is 0.
+--
+-- If you enable this feature, we recommend that you specify a value that
+-- corresponds exactly to a whole number of minutes (for example, 60, 120,
+-- and 180). If you don\'t do this, the value is rounded to the nearest
+-- minute. For example, if you specify a value of 70, users are
+-- disconnected after 1 minute of inactivity. If you specify a value that
+-- is at the midpoint between two different minutes, the value is rounded
+-- up. For example, if you specify a value of 90, users are disconnected
+-- after 2 minutes of inactivity.
+--
+-- 'imageArn', 'fleet_imageArn' - The ARN for the public, private, or shared image.
+--
+-- 'imageName', 'fleet_imageName' - The name of the image used to create the fleet.
+--
+-- 'maxConcurrentSessions', 'fleet_maxConcurrentSessions' - The maximum number of concurrent sessions for the fleet.
+--
+-- 'maxUserDurationInSeconds', 'fleet_maxUserDurationInSeconds' - The maximum amount of time that a streaming session can remain active,
+-- in seconds. If users are still connected to a streaming instance five
+-- minutes before this limit is reached, they are prompted to save any open
+-- documents before being disconnected. After this time elapses, the
+-- instance is terminated and replaced by a new instance.
+--
+-- Specify a value between 600 and 360000.
+--
+-- 'platform', 'fleet_platform' - The platform of the fleet.
+--
+-- 'sessionScriptS3Location', 'fleet_sessionScriptS3Location' - The S3 location of the session scripts configuration zip file. This only
+-- applies to Elastic fleets.
+--
+-- 'streamView', 'fleet_streamView' - The AppStream 2.0 view that is displayed to your users when they stream
+-- from the fleet. When @APP@ is specified, only the windows of
+-- applications opened by users display. When @DESKTOP@ is specified, the
+-- standard desktop that is provided by the operating system displays.
+--
+-- The default value is @APP@.
+--
+-- 'usbDeviceFilterStrings', 'fleet_usbDeviceFilterStrings' - The USB device filter strings associated with the fleet.
+--
+-- 'vpcConfig', 'fleet_vpcConfig' - The VPC configuration for the fleet.
+--
+-- 'arn', 'fleet_arn' - The Amazon Resource Name (ARN) for the fleet.
+--
+-- 'name', 'fleet_name' - The name of the fleet.
+--
+-- 'instanceType', 'fleet_instanceType' - The instance type to use when launching fleet instances. The following
+-- instance types are available:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.compute.large
+--
+-- -   stream.compute.xlarge
+--
+-- -   stream.compute.2xlarge
+--
+-- -   stream.compute.4xlarge
+--
+-- -   stream.compute.8xlarge
+--
+-- -   stream.memory.large
+--
+-- -   stream.memory.xlarge
+--
+-- -   stream.memory.2xlarge
+--
+-- -   stream.memory.4xlarge
+--
+-- -   stream.memory.8xlarge
+--
+-- -   stream.memory.z1d.large
+--
+-- -   stream.memory.z1d.xlarge
+--
+-- -   stream.memory.z1d.2xlarge
+--
+-- -   stream.memory.z1d.3xlarge
+--
+-- -   stream.memory.z1d.6xlarge
+--
+-- -   stream.memory.z1d.12xlarge
+--
+-- -   stream.graphics-design.large
+--
+-- -   stream.graphics-design.xlarge
+--
+-- -   stream.graphics-design.2xlarge
+--
+-- -   stream.graphics-design.4xlarge
+--
+-- -   stream.graphics-desktop.2xlarge
+--
+-- -   stream.graphics.g4dn.xlarge
+--
+-- -   stream.graphics.g4dn.2xlarge
+--
+-- -   stream.graphics.g4dn.4xlarge
+--
+-- -   stream.graphics.g4dn.8xlarge
+--
+-- -   stream.graphics.g4dn.12xlarge
+--
+-- -   stream.graphics.g4dn.16xlarge
+--
+-- -   stream.graphics-pro.4xlarge
+--
+-- -   stream.graphics-pro.8xlarge
+--
+-- -   stream.graphics-pro.16xlarge
+--
+-- 'computeCapacityStatus', 'fleet_computeCapacityStatus' - The capacity status for the fleet.
+--
+-- 'state', 'fleet_state' - The current state for the fleet.
+newFleet ::
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'instanceType'
+  Prelude.Text ->
+  -- | 'computeCapacityStatus'
+  ComputeCapacityStatus ->
+  -- | 'state'
+  FleetState ->
+  Fleet
+newFleet
+  pArn_
+  pName_
+  pInstanceType_
+  pComputeCapacityStatus_
+  pState_ =
+    Fleet'
+      { createdTime = Prelude.Nothing,
+        description = Prelude.Nothing,
+        disconnectTimeoutInSeconds = Prelude.Nothing,
+        displayName = Prelude.Nothing,
+        domainJoinInfo = Prelude.Nothing,
+        enableDefaultInternetAccess = Prelude.Nothing,
+        fleetErrors = Prelude.Nothing,
+        fleetType = Prelude.Nothing,
+        iamRoleArn = Prelude.Nothing,
+        idleDisconnectTimeoutInSeconds = Prelude.Nothing,
+        imageArn = Prelude.Nothing,
+        imageName = Prelude.Nothing,
+        maxConcurrentSessions = Prelude.Nothing,
+        maxUserDurationInSeconds = Prelude.Nothing,
+        platform = Prelude.Nothing,
+        sessionScriptS3Location = Prelude.Nothing,
+        streamView = Prelude.Nothing,
+        usbDeviceFilterStrings = Prelude.Nothing,
+        vpcConfig = Prelude.Nothing,
+        arn = pArn_,
+        name = pName_,
+        instanceType = pInstanceType_,
+        computeCapacityStatus = pComputeCapacityStatus_,
+        state = pState_
+      }
+
+-- | The time the fleet was created.
+fleet_createdTime :: Lens.Lens' Fleet (Prelude.Maybe Prelude.UTCTime)
+fleet_createdTime = Lens.lens (\Fleet' {createdTime} -> createdTime) (\s@Fleet' {} a -> s {createdTime = a} :: Fleet) Prelude.. Lens.mapping Data._Time
+
+-- | The description to display.
+fleet_description :: Lens.Lens' Fleet (Prelude.Maybe Prelude.Text)
+fleet_description = Lens.lens (\Fleet' {description} -> description) (\s@Fleet' {} a -> s {description = a} :: Fleet)
+
+-- | The amount of time that a streaming session remains active after users
+-- disconnect. If they try to reconnect to the streaming session after a
+-- disconnection or network interruption within this time interval, they
+-- are connected to their previous session. Otherwise, they are connected
+-- to a new session with a new streaming instance.
+--
+-- Specify a value between 60 and 360000.
+fleet_disconnectTimeoutInSeconds :: Lens.Lens' Fleet (Prelude.Maybe Prelude.Int)
+fleet_disconnectTimeoutInSeconds = Lens.lens (\Fleet' {disconnectTimeoutInSeconds} -> disconnectTimeoutInSeconds) (\s@Fleet' {} a -> s {disconnectTimeoutInSeconds = a} :: Fleet)
+
+-- | The fleet name to display.
+fleet_displayName :: Lens.Lens' Fleet (Prelude.Maybe Prelude.Text)
+fleet_displayName = Lens.lens (\Fleet' {displayName} -> displayName) (\s@Fleet' {} a -> s {displayName = a} :: Fleet)
+
+-- | The name of the directory and organizational unit (OU) to use to join
+-- the fleet to a Microsoft Active Directory domain.
+fleet_domainJoinInfo :: Lens.Lens' Fleet (Prelude.Maybe DomainJoinInfo)
+fleet_domainJoinInfo = Lens.lens (\Fleet' {domainJoinInfo} -> domainJoinInfo) (\s@Fleet' {} a -> s {domainJoinInfo = a} :: Fleet)
+
+-- | Indicates whether default internet access is enabled for the fleet.
+fleet_enableDefaultInternetAccess :: Lens.Lens' Fleet (Prelude.Maybe Prelude.Bool)
+fleet_enableDefaultInternetAccess = Lens.lens (\Fleet' {enableDefaultInternetAccess} -> enableDefaultInternetAccess) (\s@Fleet' {} a -> s {enableDefaultInternetAccess = a} :: Fleet)
+
+-- | The fleet errors.
+fleet_fleetErrors :: Lens.Lens' Fleet (Prelude.Maybe [FleetError])
+fleet_fleetErrors = Lens.lens (\Fleet' {fleetErrors} -> fleetErrors) (\s@Fleet' {} a -> s {fleetErrors = a} :: Fleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The fleet type.
+--
+-- [ALWAYS_ON]
+--     Provides users with instant-on access to their apps. You are charged
+--     for all running instances in your fleet, even if no users are
+--     streaming apps.
+--
+-- [ON_DEMAND]
+--     Provide users with access to applications after they connect, which
+--     takes one to two minutes. You are charged for instance streaming
+--     when users are connected and a small hourly fee for instances that
+--     are not streaming apps.
+fleet_fleetType :: Lens.Lens' Fleet (Prelude.Maybe FleetType)
+fleet_fleetType = Lens.lens (\Fleet' {fleetType} -> fleetType) (\s@Fleet' {} a -> s {fleetType = a} :: Fleet)
+
+-- | The ARN of the IAM role that is applied to the fleet. To assume a role,
+-- the fleet instance calls the AWS Security Token Service (STS)
+-- @AssumeRole@ API operation and passes the ARN of the role to use. The
+-- operation creates a new session with temporary credentials. AppStream
+-- 2.0 retrieves the temporary credentials and creates the
+-- __appstream_machine_role__ credential profile on the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+fleet_iamRoleArn :: Lens.Lens' Fleet (Prelude.Maybe Prelude.Text)
+fleet_iamRoleArn = Lens.lens (\Fleet' {iamRoleArn} -> iamRoleArn) (\s@Fleet' {} a -> s {iamRoleArn = a} :: Fleet)
+
+-- | The amount of time that users can be idle (inactive) before they are
+-- disconnected from their streaming session and the
+-- @DisconnectTimeoutInSeconds@ time interval begins. Users are notified
+-- before they are disconnected due to inactivity. If users try to
+-- reconnect to the streaming session before the time interval specified in
+-- @DisconnectTimeoutInSeconds@ elapses, they are connected to their
+-- previous session. Users are considered idle when they stop providing
+-- keyboard or mouse input during their streaming session. File uploads and
+-- downloads, audio in, audio out, and pixels changing do not qualify as
+-- user activity. If users continue to be idle after the time interval in
+-- @IdleDisconnectTimeoutInSeconds@ elapses, they are disconnected.
+--
+-- To prevent users from being disconnected due to inactivity, specify a
+-- value of 0. Otherwise, specify a value between 60 and 3600. The default
+-- value is 0.
+--
+-- If you enable this feature, we recommend that you specify a value that
+-- corresponds exactly to a whole number of minutes (for example, 60, 120,
+-- and 180). If you don\'t do this, the value is rounded to the nearest
+-- minute. For example, if you specify a value of 70, users are
+-- disconnected after 1 minute of inactivity. If you specify a value that
+-- is at the midpoint between two different minutes, the value is rounded
+-- up. For example, if you specify a value of 90, users are disconnected
+-- after 2 minutes of inactivity.
+fleet_idleDisconnectTimeoutInSeconds :: Lens.Lens' Fleet (Prelude.Maybe Prelude.Int)
+fleet_idleDisconnectTimeoutInSeconds = Lens.lens (\Fleet' {idleDisconnectTimeoutInSeconds} -> idleDisconnectTimeoutInSeconds) (\s@Fleet' {} a -> s {idleDisconnectTimeoutInSeconds = a} :: Fleet)
+
+-- | The ARN for the public, private, or shared image.
+fleet_imageArn :: Lens.Lens' Fleet (Prelude.Maybe Prelude.Text)
+fleet_imageArn = Lens.lens (\Fleet' {imageArn} -> imageArn) (\s@Fleet' {} a -> s {imageArn = a} :: Fleet)
+
+-- | The name of the image used to create the fleet.
+fleet_imageName :: Lens.Lens' Fleet (Prelude.Maybe Prelude.Text)
+fleet_imageName = Lens.lens (\Fleet' {imageName} -> imageName) (\s@Fleet' {} a -> s {imageName = a} :: Fleet)
+
+-- | The maximum number of concurrent sessions for the fleet.
+fleet_maxConcurrentSessions :: Lens.Lens' Fleet (Prelude.Maybe Prelude.Int)
+fleet_maxConcurrentSessions = Lens.lens (\Fleet' {maxConcurrentSessions} -> maxConcurrentSessions) (\s@Fleet' {} a -> s {maxConcurrentSessions = a} :: Fleet)
+
+-- | The maximum amount of time that a streaming session can remain active,
+-- in seconds. If users are still connected to a streaming instance five
+-- minutes before this limit is reached, they are prompted to save any open
+-- documents before being disconnected. After this time elapses, the
+-- instance is terminated and replaced by a new instance.
+--
+-- Specify a value between 600 and 360000.
+fleet_maxUserDurationInSeconds :: Lens.Lens' Fleet (Prelude.Maybe Prelude.Int)
+fleet_maxUserDurationInSeconds = Lens.lens (\Fleet' {maxUserDurationInSeconds} -> maxUserDurationInSeconds) (\s@Fleet' {} a -> s {maxUserDurationInSeconds = a} :: Fleet)
+
+-- | The platform of the fleet.
+fleet_platform :: Lens.Lens' Fleet (Prelude.Maybe PlatformType)
+fleet_platform = Lens.lens (\Fleet' {platform} -> platform) (\s@Fleet' {} a -> s {platform = a} :: Fleet)
+
+-- | The S3 location of the session scripts configuration zip file. This only
+-- applies to Elastic fleets.
+fleet_sessionScriptS3Location :: Lens.Lens' Fleet (Prelude.Maybe S3Location)
+fleet_sessionScriptS3Location = Lens.lens (\Fleet' {sessionScriptS3Location} -> sessionScriptS3Location) (\s@Fleet' {} a -> s {sessionScriptS3Location = a} :: Fleet)
+
+-- | The AppStream 2.0 view that is displayed to your users when they stream
+-- from the fleet. When @APP@ is specified, only the windows of
+-- applications opened by users display. When @DESKTOP@ is specified, the
+-- standard desktop that is provided by the operating system displays.
+--
+-- The default value is @APP@.
+fleet_streamView :: Lens.Lens' Fleet (Prelude.Maybe StreamView)
+fleet_streamView = Lens.lens (\Fleet' {streamView} -> streamView) (\s@Fleet' {} a -> s {streamView = a} :: Fleet)
+
+-- | The USB device filter strings associated with the fleet.
+fleet_usbDeviceFilterStrings :: Lens.Lens' Fleet (Prelude.Maybe [Prelude.Text])
+fleet_usbDeviceFilterStrings = Lens.lens (\Fleet' {usbDeviceFilterStrings} -> usbDeviceFilterStrings) (\s@Fleet' {} a -> s {usbDeviceFilterStrings = a} :: Fleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The VPC configuration for the fleet.
+fleet_vpcConfig :: Lens.Lens' Fleet (Prelude.Maybe VpcConfig)
+fleet_vpcConfig = Lens.lens (\Fleet' {vpcConfig} -> vpcConfig) (\s@Fleet' {} a -> s {vpcConfig = a} :: Fleet)
+
+-- | The Amazon Resource Name (ARN) for the fleet.
+fleet_arn :: Lens.Lens' Fleet Prelude.Text
+fleet_arn = Lens.lens (\Fleet' {arn} -> arn) (\s@Fleet' {} a -> s {arn = a} :: Fleet)
+
+-- | The name of the fleet.
+fleet_name :: Lens.Lens' Fleet Prelude.Text
+fleet_name = Lens.lens (\Fleet' {name} -> name) (\s@Fleet' {} a -> s {name = a} :: Fleet)
+
+-- | The instance type to use when launching fleet instances. The following
+-- instance types are available:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.compute.large
+--
+-- -   stream.compute.xlarge
+--
+-- -   stream.compute.2xlarge
+--
+-- -   stream.compute.4xlarge
+--
+-- -   stream.compute.8xlarge
+--
+-- -   stream.memory.large
+--
+-- -   stream.memory.xlarge
+--
+-- -   stream.memory.2xlarge
+--
+-- -   stream.memory.4xlarge
+--
+-- -   stream.memory.8xlarge
+--
+-- -   stream.memory.z1d.large
+--
+-- -   stream.memory.z1d.xlarge
+--
+-- -   stream.memory.z1d.2xlarge
+--
+-- -   stream.memory.z1d.3xlarge
+--
+-- -   stream.memory.z1d.6xlarge
+--
+-- -   stream.memory.z1d.12xlarge
+--
+-- -   stream.graphics-design.large
+--
+-- -   stream.graphics-design.xlarge
+--
+-- -   stream.graphics-design.2xlarge
+--
+-- -   stream.graphics-design.4xlarge
+--
+-- -   stream.graphics-desktop.2xlarge
+--
+-- -   stream.graphics.g4dn.xlarge
+--
+-- -   stream.graphics.g4dn.2xlarge
+--
+-- -   stream.graphics.g4dn.4xlarge
+--
+-- -   stream.graphics.g4dn.8xlarge
+--
+-- -   stream.graphics.g4dn.12xlarge
+--
+-- -   stream.graphics.g4dn.16xlarge
+--
+-- -   stream.graphics-pro.4xlarge
+--
+-- -   stream.graphics-pro.8xlarge
+--
+-- -   stream.graphics-pro.16xlarge
+fleet_instanceType :: Lens.Lens' Fleet Prelude.Text
+fleet_instanceType = Lens.lens (\Fleet' {instanceType} -> instanceType) (\s@Fleet' {} a -> s {instanceType = a} :: Fleet)
+
+-- | The capacity status for the fleet.
+fleet_computeCapacityStatus :: Lens.Lens' Fleet ComputeCapacityStatus
+fleet_computeCapacityStatus = Lens.lens (\Fleet' {computeCapacityStatus} -> computeCapacityStatus) (\s@Fleet' {} a -> s {computeCapacityStatus = a} :: Fleet)
+
+-- | The current state for the fleet.
+fleet_state :: Lens.Lens' Fleet FleetState
+fleet_state = Lens.lens (\Fleet' {state} -> state) (\s@Fleet' {} a -> s {state = a} :: Fleet)
+
+instance Data.FromJSON Fleet where
+  parseJSON =
+    Data.withObject
+      "Fleet"
+      ( \x ->
+          Fleet'
+            Prelude.<$> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "DisconnectTimeoutInSeconds")
+            Prelude.<*> (x Data..:? "DisplayName")
+            Prelude.<*> (x Data..:? "DomainJoinInfo")
+            Prelude.<*> (x Data..:? "EnableDefaultInternetAccess")
+            Prelude.<*> (x Data..:? "FleetErrors" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "FleetType")
+            Prelude.<*> (x Data..:? "IamRoleArn")
+            Prelude.<*> (x Data..:? "IdleDisconnectTimeoutInSeconds")
+            Prelude.<*> (x Data..:? "ImageArn")
+            Prelude.<*> (x Data..:? "ImageName")
+            Prelude.<*> (x Data..:? "MaxConcurrentSessions")
+            Prelude.<*> (x Data..:? "MaxUserDurationInSeconds")
+            Prelude.<*> (x Data..:? "Platform")
+            Prelude.<*> (x Data..:? "SessionScriptS3Location")
+            Prelude.<*> (x Data..:? "StreamView")
+            Prelude.<*> ( x
+                            Data..:? "UsbDeviceFilterStrings"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "VpcConfig")
+            Prelude.<*> (x Data..: "Arn")
+            Prelude.<*> (x Data..: "Name")
+            Prelude.<*> (x Data..: "InstanceType")
+            Prelude.<*> (x Data..: "ComputeCapacityStatus")
+            Prelude.<*> (x Data..: "State")
+      )
+
+instance Prelude.Hashable Fleet where
+  hashWithSalt _salt Fleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` disconnectTimeoutInSeconds
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` domainJoinInfo
+      `Prelude.hashWithSalt` enableDefaultInternetAccess
+      `Prelude.hashWithSalt` fleetErrors
+      `Prelude.hashWithSalt` fleetType
+      `Prelude.hashWithSalt` iamRoleArn
+      `Prelude.hashWithSalt` idleDisconnectTimeoutInSeconds
+      `Prelude.hashWithSalt` imageArn
+      `Prelude.hashWithSalt` imageName
+      `Prelude.hashWithSalt` maxConcurrentSessions
+      `Prelude.hashWithSalt` maxUserDurationInSeconds
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` sessionScriptS3Location
+      `Prelude.hashWithSalt` streamView
+      `Prelude.hashWithSalt` usbDeviceFilterStrings
+      `Prelude.hashWithSalt` vpcConfig
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` computeCapacityStatus
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData Fleet where
+  rnf Fleet' {..} =
+    Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disconnectTimeoutInSeconds
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf domainJoinInfo
+      `Prelude.seq` Prelude.rnf enableDefaultInternetAccess
+      `Prelude.seq` Prelude.rnf fleetErrors
+      `Prelude.seq` Prelude.rnf fleetType
+      `Prelude.seq` Prelude.rnf iamRoleArn
+      `Prelude.seq` Prelude.rnf idleDisconnectTimeoutInSeconds
+      `Prelude.seq` Prelude.rnf imageArn
+      `Prelude.seq` Prelude.rnf imageName
+      `Prelude.seq` Prelude.rnf maxConcurrentSessions
+      `Prelude.seq` Prelude.rnf maxUserDurationInSeconds
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf sessionScriptS3Location
+      `Prelude.seq` Prelude.rnf streamView
+      `Prelude.seq` Prelude.rnf usbDeviceFilterStrings
+      `Prelude.seq` Prelude.rnf vpcConfig
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf
+        computeCapacityStatus
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/AppStream/Types/FleetAttribute.hs b/gen/Amazonka/AppStream/Types/FleetAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/FleetAttribute.hs
@@ -0,0 +1,92 @@
+{-# 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.AppStream.Types.FleetAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.FleetAttribute
+  ( FleetAttribute
+      ( ..,
+        FleetAttribute_DOMAIN_JOIN_INFO,
+        FleetAttribute_IAM_ROLE_ARN,
+        FleetAttribute_SESSION_SCRIPT_S3_LOCATION,
+        FleetAttribute_USB_DEVICE_FILTER_STRINGS,
+        FleetAttribute_VPC_CONFIGURATION,
+        FleetAttribute_VPC_CONFIGURATION_SECURITY_GROUP_IDS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The fleet attribute.
+newtype FleetAttribute = FleetAttribute'
+  { fromFleetAttribute ::
+      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 FleetAttribute_DOMAIN_JOIN_INFO :: FleetAttribute
+pattern FleetAttribute_DOMAIN_JOIN_INFO = FleetAttribute' "DOMAIN_JOIN_INFO"
+
+pattern FleetAttribute_IAM_ROLE_ARN :: FleetAttribute
+pattern FleetAttribute_IAM_ROLE_ARN = FleetAttribute' "IAM_ROLE_ARN"
+
+pattern FleetAttribute_SESSION_SCRIPT_S3_LOCATION :: FleetAttribute
+pattern FleetAttribute_SESSION_SCRIPT_S3_LOCATION = FleetAttribute' "SESSION_SCRIPT_S3_LOCATION"
+
+pattern FleetAttribute_USB_DEVICE_FILTER_STRINGS :: FleetAttribute
+pattern FleetAttribute_USB_DEVICE_FILTER_STRINGS = FleetAttribute' "USB_DEVICE_FILTER_STRINGS"
+
+pattern FleetAttribute_VPC_CONFIGURATION :: FleetAttribute
+pattern FleetAttribute_VPC_CONFIGURATION = FleetAttribute' "VPC_CONFIGURATION"
+
+pattern FleetAttribute_VPC_CONFIGURATION_SECURITY_GROUP_IDS :: FleetAttribute
+pattern FleetAttribute_VPC_CONFIGURATION_SECURITY_GROUP_IDS = FleetAttribute' "VPC_CONFIGURATION_SECURITY_GROUP_IDS"
+
+{-# COMPLETE
+  FleetAttribute_DOMAIN_JOIN_INFO,
+  FleetAttribute_IAM_ROLE_ARN,
+  FleetAttribute_SESSION_SCRIPT_S3_LOCATION,
+  FleetAttribute_USB_DEVICE_FILTER_STRINGS,
+  FleetAttribute_VPC_CONFIGURATION,
+  FleetAttribute_VPC_CONFIGURATION_SECURITY_GROUP_IDS,
+  FleetAttribute'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/FleetError.hs b/gen/Amazonka/AppStream/Types/FleetError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/FleetError.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.FleetError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.FleetError where
+
+import Amazonka.AppStream.Types.FleetErrorCode
+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
+
+-- | Describes a fleet error.
+--
+-- /See:/ 'newFleetError' smart constructor.
+data FleetError = FleetError'
+  { -- | The error code.
+    errorCode :: Prelude.Maybe FleetErrorCode,
+    -- | The error message.
+    errorMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'FleetError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'fleetError_errorCode' - The error code.
+--
+-- 'errorMessage', 'fleetError_errorMessage' - The error message.
+newFleetError ::
+  FleetError
+newFleetError =
+  FleetError'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing
+    }
+
+-- | The error code.
+fleetError_errorCode :: Lens.Lens' FleetError (Prelude.Maybe FleetErrorCode)
+fleetError_errorCode = Lens.lens (\FleetError' {errorCode} -> errorCode) (\s@FleetError' {} a -> s {errorCode = a} :: FleetError)
+
+-- | The error message.
+fleetError_errorMessage :: Lens.Lens' FleetError (Prelude.Maybe Prelude.Text)
+fleetError_errorMessage = Lens.lens (\FleetError' {errorMessage} -> errorMessage) (\s@FleetError' {} a -> s {errorMessage = a} :: FleetError)
+
+instance Data.FromJSON FleetError where
+  parseJSON =
+    Data.withObject
+      "FleetError"
+      ( \x ->
+          FleetError'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+      )
+
+instance Prelude.Hashable FleetError where
+  hashWithSalt _salt FleetError' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+
+instance Prelude.NFData FleetError where
+  rnf FleetError' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
diff --git a/gen/Amazonka/AppStream/Types/FleetErrorCode.hs b/gen/Amazonka/AppStream/Types/FleetErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/FleetErrorCode.hs
@@ -0,0 +1,211 @@
+{-# 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.AppStream.Types.FleetErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.FleetErrorCode
+  ( FleetErrorCode
+      ( ..,
+        FleetErrorCode_DOMAIN_JOIN_ERROR_ACCESS_DENIED,
+        FleetErrorCode_DOMAIN_JOIN_ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED,
+        FleetErrorCode_DOMAIN_JOIN_ERROR_FILE_NOT_FOUND,
+        FleetErrorCode_DOMAIN_JOIN_ERROR_INVALID_PARAMETER,
+        FleetErrorCode_DOMAIN_JOIN_ERROR_LOGON_FAILURE,
+        FleetErrorCode_DOMAIN_JOIN_ERROR_MORE_DATA,
+        FleetErrorCode_DOMAIN_JOIN_ERROR_NOT_SUPPORTED,
+        FleetErrorCode_DOMAIN_JOIN_ERROR_NO_SUCH_DOMAIN,
+        FleetErrorCode_DOMAIN_JOIN_INTERNAL_SERVICE_ERROR,
+        FleetErrorCode_DOMAIN_JOIN_NERR_INVALID_WORKGROUP_NAME,
+        FleetErrorCode_DOMAIN_JOIN_NERR_PASSWORD_EXPIRED,
+        FleetErrorCode_DOMAIN_JOIN_NERR_WORKSTATION_NOT_STARTED,
+        FleetErrorCode_FLEET_INSTANCE_PROVISIONING_FAILURE,
+        FleetErrorCode_FLEET_STOPPED,
+        FleetErrorCode_IAM_SERVICE_ROLE_IS_MISSING,
+        FleetErrorCode_IAM_SERVICE_ROLE_MISSING_DESCRIBE_SECURITY_GROUPS_ACTION,
+        FleetErrorCode_IAM_SERVICE_ROLE_MISSING_DESCRIBE_SUBNET_ACTION,
+        FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_CREATE_ACTION,
+        FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_DELETE_ACTION,
+        FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_DESCRIBE_ACTION,
+        FleetErrorCode_IGW_NOT_ATTACHED,
+        FleetErrorCode_IMAGE_NOT_FOUND,
+        FleetErrorCode_INTERNAL_SERVICE_ERROR,
+        FleetErrorCode_INVALID_SUBNET_CONFIGURATION,
+        FleetErrorCode_MACHINE_ROLE_IS_MISSING,
+        FleetErrorCode_NETWORK_INTERFACE_LIMIT_EXCEEDED,
+        FleetErrorCode_SECURITY_GROUPS_NOT_FOUND,
+        FleetErrorCode_STS_DISABLED_IN_REGION,
+        FleetErrorCode_SUBNET_HAS_INSUFFICIENT_IP_ADDRESSES,
+        FleetErrorCode_SUBNET_NOT_FOUND
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetErrorCode = FleetErrorCode'
+  { fromFleetErrorCode ::
+      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 FleetErrorCode_DOMAIN_JOIN_ERROR_ACCESS_DENIED :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_ACCESS_DENIED = FleetErrorCode' "DOMAIN_JOIN_ERROR_ACCESS_DENIED"
+
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED = FleetErrorCode' "DOMAIN_JOIN_ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED"
+
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_FILE_NOT_FOUND :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_FILE_NOT_FOUND = FleetErrorCode' "DOMAIN_JOIN_ERROR_FILE_NOT_FOUND"
+
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_INVALID_PARAMETER :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_INVALID_PARAMETER = FleetErrorCode' "DOMAIN_JOIN_ERROR_INVALID_PARAMETER"
+
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_LOGON_FAILURE :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_LOGON_FAILURE = FleetErrorCode' "DOMAIN_JOIN_ERROR_LOGON_FAILURE"
+
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_MORE_DATA :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_MORE_DATA = FleetErrorCode' "DOMAIN_JOIN_ERROR_MORE_DATA"
+
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_NOT_SUPPORTED :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_NOT_SUPPORTED = FleetErrorCode' "DOMAIN_JOIN_ERROR_NOT_SUPPORTED"
+
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_NO_SUCH_DOMAIN :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_ERROR_NO_SUCH_DOMAIN = FleetErrorCode' "DOMAIN_JOIN_ERROR_NO_SUCH_DOMAIN"
+
+pattern FleetErrorCode_DOMAIN_JOIN_INTERNAL_SERVICE_ERROR :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_INTERNAL_SERVICE_ERROR = FleetErrorCode' "DOMAIN_JOIN_INTERNAL_SERVICE_ERROR"
+
+pattern FleetErrorCode_DOMAIN_JOIN_NERR_INVALID_WORKGROUP_NAME :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_NERR_INVALID_WORKGROUP_NAME = FleetErrorCode' "DOMAIN_JOIN_NERR_INVALID_WORKGROUP_NAME"
+
+pattern FleetErrorCode_DOMAIN_JOIN_NERR_PASSWORD_EXPIRED :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_NERR_PASSWORD_EXPIRED = FleetErrorCode' "DOMAIN_JOIN_NERR_PASSWORD_EXPIRED"
+
+pattern FleetErrorCode_DOMAIN_JOIN_NERR_WORKSTATION_NOT_STARTED :: FleetErrorCode
+pattern FleetErrorCode_DOMAIN_JOIN_NERR_WORKSTATION_NOT_STARTED = FleetErrorCode' "DOMAIN_JOIN_NERR_WORKSTATION_NOT_STARTED"
+
+pattern FleetErrorCode_FLEET_INSTANCE_PROVISIONING_FAILURE :: FleetErrorCode
+pattern FleetErrorCode_FLEET_INSTANCE_PROVISIONING_FAILURE = FleetErrorCode' "FLEET_INSTANCE_PROVISIONING_FAILURE"
+
+pattern FleetErrorCode_FLEET_STOPPED :: FleetErrorCode
+pattern FleetErrorCode_FLEET_STOPPED = FleetErrorCode' "FLEET_STOPPED"
+
+pattern FleetErrorCode_IAM_SERVICE_ROLE_IS_MISSING :: FleetErrorCode
+pattern FleetErrorCode_IAM_SERVICE_ROLE_IS_MISSING = FleetErrorCode' "IAM_SERVICE_ROLE_IS_MISSING"
+
+pattern FleetErrorCode_IAM_SERVICE_ROLE_MISSING_DESCRIBE_SECURITY_GROUPS_ACTION :: FleetErrorCode
+pattern FleetErrorCode_IAM_SERVICE_ROLE_MISSING_DESCRIBE_SECURITY_GROUPS_ACTION = FleetErrorCode' "IAM_SERVICE_ROLE_MISSING_DESCRIBE_SECURITY_GROUPS_ACTION"
+
+pattern FleetErrorCode_IAM_SERVICE_ROLE_MISSING_DESCRIBE_SUBNET_ACTION :: FleetErrorCode
+pattern FleetErrorCode_IAM_SERVICE_ROLE_MISSING_DESCRIBE_SUBNET_ACTION = FleetErrorCode' "IAM_SERVICE_ROLE_MISSING_DESCRIBE_SUBNET_ACTION"
+
+pattern FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_CREATE_ACTION :: FleetErrorCode
+pattern FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_CREATE_ACTION = FleetErrorCode' "IAM_SERVICE_ROLE_MISSING_ENI_CREATE_ACTION"
+
+pattern FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_DELETE_ACTION :: FleetErrorCode
+pattern FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_DELETE_ACTION = FleetErrorCode' "IAM_SERVICE_ROLE_MISSING_ENI_DELETE_ACTION"
+
+pattern FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_DESCRIBE_ACTION :: FleetErrorCode
+pattern FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_DESCRIBE_ACTION = FleetErrorCode' "IAM_SERVICE_ROLE_MISSING_ENI_DESCRIBE_ACTION"
+
+pattern FleetErrorCode_IGW_NOT_ATTACHED :: FleetErrorCode
+pattern FleetErrorCode_IGW_NOT_ATTACHED = FleetErrorCode' "IGW_NOT_ATTACHED"
+
+pattern FleetErrorCode_IMAGE_NOT_FOUND :: FleetErrorCode
+pattern FleetErrorCode_IMAGE_NOT_FOUND = FleetErrorCode' "IMAGE_NOT_FOUND"
+
+pattern FleetErrorCode_INTERNAL_SERVICE_ERROR :: FleetErrorCode
+pattern FleetErrorCode_INTERNAL_SERVICE_ERROR = FleetErrorCode' "INTERNAL_SERVICE_ERROR"
+
+pattern FleetErrorCode_INVALID_SUBNET_CONFIGURATION :: FleetErrorCode
+pattern FleetErrorCode_INVALID_SUBNET_CONFIGURATION = FleetErrorCode' "INVALID_SUBNET_CONFIGURATION"
+
+pattern FleetErrorCode_MACHINE_ROLE_IS_MISSING :: FleetErrorCode
+pattern FleetErrorCode_MACHINE_ROLE_IS_MISSING = FleetErrorCode' "MACHINE_ROLE_IS_MISSING"
+
+pattern FleetErrorCode_NETWORK_INTERFACE_LIMIT_EXCEEDED :: FleetErrorCode
+pattern FleetErrorCode_NETWORK_INTERFACE_LIMIT_EXCEEDED = FleetErrorCode' "NETWORK_INTERFACE_LIMIT_EXCEEDED"
+
+pattern FleetErrorCode_SECURITY_GROUPS_NOT_FOUND :: FleetErrorCode
+pattern FleetErrorCode_SECURITY_GROUPS_NOT_FOUND = FleetErrorCode' "SECURITY_GROUPS_NOT_FOUND"
+
+pattern FleetErrorCode_STS_DISABLED_IN_REGION :: FleetErrorCode
+pattern FleetErrorCode_STS_DISABLED_IN_REGION = FleetErrorCode' "STS_DISABLED_IN_REGION"
+
+pattern FleetErrorCode_SUBNET_HAS_INSUFFICIENT_IP_ADDRESSES :: FleetErrorCode
+pattern FleetErrorCode_SUBNET_HAS_INSUFFICIENT_IP_ADDRESSES = FleetErrorCode' "SUBNET_HAS_INSUFFICIENT_IP_ADDRESSES"
+
+pattern FleetErrorCode_SUBNET_NOT_FOUND :: FleetErrorCode
+pattern FleetErrorCode_SUBNET_NOT_FOUND = FleetErrorCode' "SUBNET_NOT_FOUND"
+
+{-# COMPLETE
+  FleetErrorCode_DOMAIN_JOIN_ERROR_ACCESS_DENIED,
+  FleetErrorCode_DOMAIN_JOIN_ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED,
+  FleetErrorCode_DOMAIN_JOIN_ERROR_FILE_NOT_FOUND,
+  FleetErrorCode_DOMAIN_JOIN_ERROR_INVALID_PARAMETER,
+  FleetErrorCode_DOMAIN_JOIN_ERROR_LOGON_FAILURE,
+  FleetErrorCode_DOMAIN_JOIN_ERROR_MORE_DATA,
+  FleetErrorCode_DOMAIN_JOIN_ERROR_NOT_SUPPORTED,
+  FleetErrorCode_DOMAIN_JOIN_ERROR_NO_SUCH_DOMAIN,
+  FleetErrorCode_DOMAIN_JOIN_INTERNAL_SERVICE_ERROR,
+  FleetErrorCode_DOMAIN_JOIN_NERR_INVALID_WORKGROUP_NAME,
+  FleetErrorCode_DOMAIN_JOIN_NERR_PASSWORD_EXPIRED,
+  FleetErrorCode_DOMAIN_JOIN_NERR_WORKSTATION_NOT_STARTED,
+  FleetErrorCode_FLEET_INSTANCE_PROVISIONING_FAILURE,
+  FleetErrorCode_FLEET_STOPPED,
+  FleetErrorCode_IAM_SERVICE_ROLE_IS_MISSING,
+  FleetErrorCode_IAM_SERVICE_ROLE_MISSING_DESCRIBE_SECURITY_GROUPS_ACTION,
+  FleetErrorCode_IAM_SERVICE_ROLE_MISSING_DESCRIBE_SUBNET_ACTION,
+  FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_CREATE_ACTION,
+  FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_DELETE_ACTION,
+  FleetErrorCode_IAM_SERVICE_ROLE_MISSING_ENI_DESCRIBE_ACTION,
+  FleetErrorCode_IGW_NOT_ATTACHED,
+  FleetErrorCode_IMAGE_NOT_FOUND,
+  FleetErrorCode_INTERNAL_SERVICE_ERROR,
+  FleetErrorCode_INVALID_SUBNET_CONFIGURATION,
+  FleetErrorCode_MACHINE_ROLE_IS_MISSING,
+  FleetErrorCode_NETWORK_INTERFACE_LIMIT_EXCEEDED,
+  FleetErrorCode_SECURITY_GROUPS_NOT_FOUND,
+  FleetErrorCode_STS_DISABLED_IN_REGION,
+  FleetErrorCode_SUBNET_HAS_INSUFFICIENT_IP_ADDRESSES,
+  FleetErrorCode_SUBNET_NOT_FOUND,
+  FleetErrorCode'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/FleetState.hs b/gen/Amazonka/AppStream/Types/FleetState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/FleetState.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.AppStream.Types.FleetState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.FleetState
+  ( FleetState
+      ( ..,
+        FleetState_RUNNING,
+        FleetState_STARTING,
+        FleetState_STOPPED,
+        FleetState_STOPPING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetState = FleetState'
+  { fromFleetState ::
+      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 FleetState_RUNNING :: FleetState
+pattern FleetState_RUNNING = FleetState' "RUNNING"
+
+pattern FleetState_STARTING :: FleetState
+pattern FleetState_STARTING = FleetState' "STARTING"
+
+pattern FleetState_STOPPED :: FleetState
+pattern FleetState_STOPPED = FleetState' "STOPPED"
+
+pattern FleetState_STOPPING :: FleetState
+pattern FleetState_STOPPING = FleetState' "STOPPING"
+
+{-# COMPLETE
+  FleetState_RUNNING,
+  FleetState_STARTING,
+  FleetState_STOPPED,
+  FleetState_STOPPING,
+  FleetState'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/FleetType.hs b/gen/Amazonka/AppStream/Types/FleetType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/FleetType.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.FleetType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.FleetType
+  ( FleetType
+      ( ..,
+        FleetType_ALWAYS_ON,
+        FleetType_ELASTIC,
+        FleetType_ON_DEMAND
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype FleetType = FleetType'
+  { fromFleetType ::
+      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 FleetType_ALWAYS_ON :: FleetType
+pattern FleetType_ALWAYS_ON = FleetType' "ALWAYS_ON"
+
+pattern FleetType_ELASTIC :: FleetType
+pattern FleetType_ELASTIC = FleetType' "ELASTIC"
+
+pattern FleetType_ON_DEMAND :: FleetType
+pattern FleetType_ON_DEMAND = FleetType' "ON_DEMAND"
+
+{-# COMPLETE
+  FleetType_ALWAYS_ON,
+  FleetType_ELASTIC,
+  FleetType_ON_DEMAND,
+  FleetType'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/Image.hs b/gen/Amazonka/AppStream/Types/Image.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/Image.hs
@@ -0,0 +1,291 @@
+{-# 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.AppStream.Types.Image
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.Image where
+
+import Amazonka.AppStream.Types.Application
+import Amazonka.AppStream.Types.ImagePermissions
+import Amazonka.AppStream.Types.ImageState
+import Amazonka.AppStream.Types.ImageStateChangeReason
+import Amazonka.AppStream.Types.PlatformType
+import Amazonka.AppStream.Types.ResourceError
+import Amazonka.AppStream.Types.VisibilityType
+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
+
+-- | Describes an image.
+--
+-- /See:/ 'newImage' smart constructor.
+data Image = Image'
+  { -- | The applications associated with the image.
+    applications :: Prelude.Maybe [Application],
+    -- | The version of the AppStream 2.0 agent to use for instances that are
+    -- launched from this image.
+    appstreamAgentVersion :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the image.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the image from which this image was created.
+    baseImageArn :: Prelude.Maybe Prelude.Text,
+    -- | The time the image was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The description to display.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The image name to display.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image builder that was used to create the private image.
+    -- If the image is shared, this value is null.
+    imageBuilderName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether an image builder can be launched from this image.
+    imageBuilderSupported :: Prelude.Maybe Prelude.Bool,
+    -- | Describes the errors that are returned when a new image can\'t be
+    -- created.
+    imageErrors :: Prelude.Maybe [ResourceError],
+    -- | The permissions to provide to the destination AWS account for the
+    -- specified image.
+    imagePermissions :: Prelude.Maybe ImagePermissions,
+    -- | The operating system platform of the image.
+    platform :: Prelude.Maybe PlatformType,
+    -- | The release date of the public base image. For private images, this date
+    -- is the release date of the base image from which the image was created.
+    publicBaseImageReleasedDate :: Prelude.Maybe Data.POSIX,
+    -- | The image starts in the @PENDING@ state. If image creation succeeds, the
+    -- state is @AVAILABLE@. If image creation fails, the state is @FAILED@.
+    state :: Prelude.Maybe ImageState,
+    -- | The reason why the last state change occurred.
+    stateChangeReason :: Prelude.Maybe ImageStateChangeReason,
+    -- | Indicates whether the image is public or private.
+    visibility :: Prelude.Maybe VisibilityType,
+    -- | The name of the image.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Image' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'applications', 'image_applications' - The applications associated with the image.
+--
+-- 'appstreamAgentVersion', 'image_appstreamAgentVersion' - The version of the AppStream 2.0 agent to use for instances that are
+-- launched from this image.
+--
+-- 'arn', 'image_arn' - The ARN of the image.
+--
+-- 'baseImageArn', 'image_baseImageArn' - The ARN of the image from which this image was created.
+--
+-- 'createdTime', 'image_createdTime' - The time the image was created.
+--
+-- 'description', 'image_description' - The description to display.
+--
+-- 'displayName', 'image_displayName' - The image name to display.
+--
+-- 'imageBuilderName', 'image_imageBuilderName' - The name of the image builder that was used to create the private image.
+-- If the image is shared, this value is null.
+--
+-- 'imageBuilderSupported', 'image_imageBuilderSupported' - Indicates whether an image builder can be launched from this image.
+--
+-- 'imageErrors', 'image_imageErrors' - Describes the errors that are returned when a new image can\'t be
+-- created.
+--
+-- 'imagePermissions', 'image_imagePermissions' - The permissions to provide to the destination AWS account for the
+-- specified image.
+--
+-- 'platform', 'image_platform' - The operating system platform of the image.
+--
+-- 'publicBaseImageReleasedDate', 'image_publicBaseImageReleasedDate' - The release date of the public base image. For private images, this date
+-- is the release date of the base image from which the image was created.
+--
+-- 'state', 'image_state' - The image starts in the @PENDING@ state. If image creation succeeds, the
+-- state is @AVAILABLE@. If image creation fails, the state is @FAILED@.
+--
+-- 'stateChangeReason', 'image_stateChangeReason' - The reason why the last state change occurred.
+--
+-- 'visibility', 'image_visibility' - Indicates whether the image is public or private.
+--
+-- 'name', 'image_name' - The name of the image.
+newImage ::
+  -- | 'name'
+  Prelude.Text ->
+  Image
+newImage pName_ =
+  Image'
+    { applications = Prelude.Nothing,
+      appstreamAgentVersion = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      baseImageArn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      imageBuilderName = Prelude.Nothing,
+      imageBuilderSupported = Prelude.Nothing,
+      imageErrors = Prelude.Nothing,
+      imagePermissions = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      publicBaseImageReleasedDate = Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateChangeReason = Prelude.Nothing,
+      visibility = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The applications associated with the image.
+image_applications :: Lens.Lens' Image (Prelude.Maybe [Application])
+image_applications = Lens.lens (\Image' {applications} -> applications) (\s@Image' {} a -> s {applications = a} :: Image) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the AppStream 2.0 agent to use for instances that are
+-- launched from this image.
+image_appstreamAgentVersion :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_appstreamAgentVersion = Lens.lens (\Image' {appstreamAgentVersion} -> appstreamAgentVersion) (\s@Image' {} a -> s {appstreamAgentVersion = a} :: Image)
+
+-- | The ARN of the image.
+image_arn :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_arn = Lens.lens (\Image' {arn} -> arn) (\s@Image' {} a -> s {arn = a} :: Image)
+
+-- | The ARN of the image from which this image was created.
+image_baseImageArn :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_baseImageArn = Lens.lens (\Image' {baseImageArn} -> baseImageArn) (\s@Image' {} a -> s {baseImageArn = a} :: Image)
+
+-- | The time the image was created.
+image_createdTime :: Lens.Lens' Image (Prelude.Maybe Prelude.UTCTime)
+image_createdTime = Lens.lens (\Image' {createdTime} -> createdTime) (\s@Image' {} a -> s {createdTime = a} :: Image) Prelude.. Lens.mapping Data._Time
+
+-- | The description to display.
+image_description :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_description = Lens.lens (\Image' {description} -> description) (\s@Image' {} a -> s {description = a} :: Image)
+
+-- | The image name to display.
+image_displayName :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_displayName = Lens.lens (\Image' {displayName} -> displayName) (\s@Image' {} a -> s {displayName = a} :: Image)
+
+-- | The name of the image builder that was used to create the private image.
+-- If the image is shared, this value is null.
+image_imageBuilderName :: Lens.Lens' Image (Prelude.Maybe Prelude.Text)
+image_imageBuilderName = Lens.lens (\Image' {imageBuilderName} -> imageBuilderName) (\s@Image' {} a -> s {imageBuilderName = a} :: Image)
+
+-- | Indicates whether an image builder can be launched from this image.
+image_imageBuilderSupported :: Lens.Lens' Image (Prelude.Maybe Prelude.Bool)
+image_imageBuilderSupported = Lens.lens (\Image' {imageBuilderSupported} -> imageBuilderSupported) (\s@Image' {} a -> s {imageBuilderSupported = a} :: Image)
+
+-- | Describes the errors that are returned when a new image can\'t be
+-- created.
+image_imageErrors :: Lens.Lens' Image (Prelude.Maybe [ResourceError])
+image_imageErrors = Lens.lens (\Image' {imageErrors} -> imageErrors) (\s@Image' {} a -> s {imageErrors = a} :: Image) Prelude.. Lens.mapping Lens.coerced
+
+-- | The permissions to provide to the destination AWS account for the
+-- specified image.
+image_imagePermissions :: Lens.Lens' Image (Prelude.Maybe ImagePermissions)
+image_imagePermissions = Lens.lens (\Image' {imagePermissions} -> imagePermissions) (\s@Image' {} a -> s {imagePermissions = a} :: Image)
+
+-- | The operating system platform of the image.
+image_platform :: Lens.Lens' Image (Prelude.Maybe PlatformType)
+image_platform = Lens.lens (\Image' {platform} -> platform) (\s@Image' {} a -> s {platform = a} :: Image)
+
+-- | The release date of the public base image. For private images, this date
+-- is the release date of the base image from which the image was created.
+image_publicBaseImageReleasedDate :: Lens.Lens' Image (Prelude.Maybe Prelude.UTCTime)
+image_publicBaseImageReleasedDate = Lens.lens (\Image' {publicBaseImageReleasedDate} -> publicBaseImageReleasedDate) (\s@Image' {} a -> s {publicBaseImageReleasedDate = a} :: Image) Prelude.. Lens.mapping Data._Time
+
+-- | The image starts in the @PENDING@ state. If image creation succeeds, the
+-- state is @AVAILABLE@. If image creation fails, the state is @FAILED@.
+image_state :: Lens.Lens' Image (Prelude.Maybe ImageState)
+image_state = Lens.lens (\Image' {state} -> state) (\s@Image' {} a -> s {state = a} :: Image)
+
+-- | The reason why the last state change occurred.
+image_stateChangeReason :: Lens.Lens' Image (Prelude.Maybe ImageStateChangeReason)
+image_stateChangeReason = Lens.lens (\Image' {stateChangeReason} -> stateChangeReason) (\s@Image' {} a -> s {stateChangeReason = a} :: Image)
+
+-- | Indicates whether the image is public or private.
+image_visibility :: Lens.Lens' Image (Prelude.Maybe VisibilityType)
+image_visibility = Lens.lens (\Image' {visibility} -> visibility) (\s@Image' {} a -> s {visibility = a} :: Image)
+
+-- | The name of the image.
+image_name :: Lens.Lens' Image Prelude.Text
+image_name = Lens.lens (\Image' {name} -> name) (\s@Image' {} a -> s {name = a} :: Image)
+
+instance Data.FromJSON Image where
+  parseJSON =
+    Data.withObject
+      "Image"
+      ( \x ->
+          Image'
+            Prelude.<$> (x Data..:? "Applications" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "AppstreamAgentVersion")
+            Prelude.<*> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "BaseImageArn")
+            Prelude.<*> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "DisplayName")
+            Prelude.<*> (x Data..:? "ImageBuilderName")
+            Prelude.<*> (x Data..:? "ImageBuilderSupported")
+            Prelude.<*> (x Data..:? "ImageErrors" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "ImagePermissions")
+            Prelude.<*> (x Data..:? "Platform")
+            Prelude.<*> (x Data..:? "PublicBaseImageReleasedDate")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "StateChangeReason")
+            Prelude.<*> (x Data..:? "Visibility")
+            Prelude.<*> (x Data..: "Name")
+      )
+
+instance Prelude.Hashable Image where
+  hashWithSalt _salt Image' {..} =
+    _salt
+      `Prelude.hashWithSalt` applications
+      `Prelude.hashWithSalt` appstreamAgentVersion
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` baseImageArn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` imageBuilderName
+      `Prelude.hashWithSalt` imageBuilderSupported
+      `Prelude.hashWithSalt` imageErrors
+      `Prelude.hashWithSalt` imagePermissions
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` publicBaseImageReleasedDate
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` stateChangeReason
+      `Prelude.hashWithSalt` visibility
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Image where
+  rnf Image' {..} =
+    Prelude.rnf applications
+      `Prelude.seq` Prelude.rnf appstreamAgentVersion
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf baseImageArn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf imageBuilderName
+      `Prelude.seq` Prelude.rnf imageBuilderSupported
+      `Prelude.seq` Prelude.rnf imageErrors
+      `Prelude.seq` Prelude.rnf imagePermissions
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf publicBaseImageReleasedDate
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateChangeReason
+      `Prelude.seq` Prelude.rnf visibility
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AppStream/Types/ImageBuilder.hs b/gen/Amazonka/AppStream/Types/ImageBuilder.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ImageBuilder.hs
@@ -0,0 +1,528 @@
+{-# 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.AppStream.Types.ImageBuilder
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ImageBuilder where
+
+import Amazonka.AppStream.Types.AccessEndpoint
+import Amazonka.AppStream.Types.DomainJoinInfo
+import Amazonka.AppStream.Types.ImageBuilderState
+import Amazonka.AppStream.Types.ImageBuilderStateChangeReason
+import Amazonka.AppStream.Types.NetworkAccessConfiguration
+import Amazonka.AppStream.Types.PlatformType
+import Amazonka.AppStream.Types.ResourceError
+import Amazonka.AppStream.Types.VpcConfig
+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
+
+-- | Describes a virtual machine that is used to create an image.
+--
+-- /See:/ 'newImageBuilder' smart constructor.
+data ImageBuilder = ImageBuilder'
+  { -- | The list of virtual private cloud (VPC) interface endpoint objects.
+    -- Administrators can connect to the image builder only through the
+    -- specified endpoints.
+    accessEndpoints :: Prelude.Maybe (Prelude.NonEmpty AccessEndpoint),
+    -- | The version of the AppStream 2.0 agent that is currently being used by
+    -- the image builder.
+    appstreamAgentVersion :: Prelude.Maybe Prelude.Text,
+    -- | The ARN for the image builder.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time stamp when the image builder was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The description to display.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The image builder name to display.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the directory and organizational unit (OU) to use to join
+    -- the image builder to a Microsoft Active Directory domain.
+    domainJoinInfo :: Prelude.Maybe DomainJoinInfo,
+    -- | Enables or disables default internet access for the image builder.
+    enableDefaultInternetAccess :: Prelude.Maybe Prelude.Bool,
+    -- | The ARN of the IAM role that is applied to the image builder. To assume
+    -- a role, the image builder calls the AWS Security Token Service (STS)
+    -- @AssumeRole@ API operation and passes the ARN of the role to use. The
+    -- operation creates a new session with temporary credentials. AppStream
+    -- 2.0 retrieves the temporary credentials and creates the
+    -- __appstream_machine_role__ credential profile on the instance.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+    -- in the /Amazon AppStream 2.0 Administration Guide/.
+    iamRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The ARN of the image from which this builder was created.
+    imageArn :: Prelude.Maybe Prelude.Text,
+    -- | The image builder errors.
+    imageBuilderErrors :: Prelude.Maybe [ResourceError],
+    -- | The instance type for the image builder. The following instance types
+    -- are available:
+    --
+    -- -   stream.standard.small
+    --
+    -- -   stream.standard.medium
+    --
+    -- -   stream.standard.large
+    --
+    -- -   stream.compute.large
+    --
+    -- -   stream.compute.xlarge
+    --
+    -- -   stream.compute.2xlarge
+    --
+    -- -   stream.compute.4xlarge
+    --
+    -- -   stream.compute.8xlarge
+    --
+    -- -   stream.memory.large
+    --
+    -- -   stream.memory.xlarge
+    --
+    -- -   stream.memory.2xlarge
+    --
+    -- -   stream.memory.4xlarge
+    --
+    -- -   stream.memory.8xlarge
+    --
+    -- -   stream.memory.z1d.large
+    --
+    -- -   stream.memory.z1d.xlarge
+    --
+    -- -   stream.memory.z1d.2xlarge
+    --
+    -- -   stream.memory.z1d.3xlarge
+    --
+    -- -   stream.memory.z1d.6xlarge
+    --
+    -- -   stream.memory.z1d.12xlarge
+    --
+    -- -   stream.graphics-design.large
+    --
+    -- -   stream.graphics-design.xlarge
+    --
+    -- -   stream.graphics-design.2xlarge
+    --
+    -- -   stream.graphics-design.4xlarge
+    --
+    -- -   stream.graphics-desktop.2xlarge
+    --
+    -- -   stream.graphics.g4dn.xlarge
+    --
+    -- -   stream.graphics.g4dn.2xlarge
+    --
+    -- -   stream.graphics.g4dn.4xlarge
+    --
+    -- -   stream.graphics.g4dn.8xlarge
+    --
+    -- -   stream.graphics.g4dn.12xlarge
+    --
+    -- -   stream.graphics.g4dn.16xlarge
+    --
+    -- -   stream.graphics-pro.4xlarge
+    --
+    -- -   stream.graphics-pro.8xlarge
+    --
+    -- -   stream.graphics-pro.16xlarge
+    instanceType :: Prelude.Maybe Prelude.Text,
+    networkAccessConfiguration :: Prelude.Maybe NetworkAccessConfiguration,
+    -- | The operating system platform of the image builder.
+    platform :: Prelude.Maybe PlatformType,
+    -- | The state of the image builder.
+    state :: Prelude.Maybe ImageBuilderState,
+    -- | The reason why the last state change occurred.
+    stateChangeReason :: Prelude.Maybe ImageBuilderStateChangeReason,
+    -- | The VPC configuration of the image builder.
+    vpcConfig :: Prelude.Maybe VpcConfig,
+    -- | The name of the image builder.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageBuilder' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessEndpoints', 'imageBuilder_accessEndpoints' - The list of virtual private cloud (VPC) interface endpoint objects.
+-- Administrators can connect to the image builder only through the
+-- specified endpoints.
+--
+-- 'appstreamAgentVersion', 'imageBuilder_appstreamAgentVersion' - The version of the AppStream 2.0 agent that is currently being used by
+-- the image builder.
+--
+-- 'arn', 'imageBuilder_arn' - The ARN for the image builder.
+--
+-- 'createdTime', 'imageBuilder_createdTime' - The time stamp when the image builder was created.
+--
+-- 'description', 'imageBuilder_description' - The description to display.
+--
+-- 'displayName', 'imageBuilder_displayName' - The image builder name to display.
+--
+-- 'domainJoinInfo', 'imageBuilder_domainJoinInfo' - The name of the directory and organizational unit (OU) to use to join
+-- the image builder to a Microsoft Active Directory domain.
+--
+-- 'enableDefaultInternetAccess', 'imageBuilder_enableDefaultInternetAccess' - Enables or disables default internet access for the image builder.
+--
+-- 'iamRoleArn', 'imageBuilder_iamRoleArn' - The ARN of the IAM role that is applied to the image builder. To assume
+-- a role, the image builder calls the AWS Security Token Service (STS)
+-- @AssumeRole@ API operation and passes the ARN of the role to use. The
+-- operation creates a new session with temporary credentials. AppStream
+-- 2.0 retrieves the temporary credentials and creates the
+-- __appstream_machine_role__ credential profile on the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- 'imageArn', 'imageBuilder_imageArn' - The ARN of the image from which this builder was created.
+--
+-- 'imageBuilderErrors', 'imageBuilder_imageBuilderErrors' - The image builder errors.
+--
+-- 'instanceType', 'imageBuilder_instanceType' - The instance type for the image builder. The following instance types
+-- are available:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.compute.large
+--
+-- -   stream.compute.xlarge
+--
+-- -   stream.compute.2xlarge
+--
+-- -   stream.compute.4xlarge
+--
+-- -   stream.compute.8xlarge
+--
+-- -   stream.memory.large
+--
+-- -   stream.memory.xlarge
+--
+-- -   stream.memory.2xlarge
+--
+-- -   stream.memory.4xlarge
+--
+-- -   stream.memory.8xlarge
+--
+-- -   stream.memory.z1d.large
+--
+-- -   stream.memory.z1d.xlarge
+--
+-- -   stream.memory.z1d.2xlarge
+--
+-- -   stream.memory.z1d.3xlarge
+--
+-- -   stream.memory.z1d.6xlarge
+--
+-- -   stream.memory.z1d.12xlarge
+--
+-- -   stream.graphics-design.large
+--
+-- -   stream.graphics-design.xlarge
+--
+-- -   stream.graphics-design.2xlarge
+--
+-- -   stream.graphics-design.4xlarge
+--
+-- -   stream.graphics-desktop.2xlarge
+--
+-- -   stream.graphics.g4dn.xlarge
+--
+-- -   stream.graphics.g4dn.2xlarge
+--
+-- -   stream.graphics.g4dn.4xlarge
+--
+-- -   stream.graphics.g4dn.8xlarge
+--
+-- -   stream.graphics.g4dn.12xlarge
+--
+-- -   stream.graphics.g4dn.16xlarge
+--
+-- -   stream.graphics-pro.4xlarge
+--
+-- -   stream.graphics-pro.8xlarge
+--
+-- -   stream.graphics-pro.16xlarge
+--
+-- 'networkAccessConfiguration', 'imageBuilder_networkAccessConfiguration' - Undocumented member.
+--
+-- 'platform', 'imageBuilder_platform' - The operating system platform of the image builder.
+--
+-- 'state', 'imageBuilder_state' - The state of the image builder.
+--
+-- 'stateChangeReason', 'imageBuilder_stateChangeReason' - The reason why the last state change occurred.
+--
+-- 'vpcConfig', 'imageBuilder_vpcConfig' - The VPC configuration of the image builder.
+--
+-- 'name', 'imageBuilder_name' - The name of the image builder.
+newImageBuilder ::
+  -- | 'name'
+  Prelude.Text ->
+  ImageBuilder
+newImageBuilder pName_ =
+  ImageBuilder'
+    { accessEndpoints = Prelude.Nothing,
+      appstreamAgentVersion = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      domainJoinInfo = Prelude.Nothing,
+      enableDefaultInternetAccess = Prelude.Nothing,
+      iamRoleArn = Prelude.Nothing,
+      imageArn = Prelude.Nothing,
+      imageBuilderErrors = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      networkAccessConfiguration = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      state = Prelude.Nothing,
+      stateChangeReason = Prelude.Nothing,
+      vpcConfig = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The list of virtual private cloud (VPC) interface endpoint objects.
+-- Administrators can connect to the image builder only through the
+-- specified endpoints.
+imageBuilder_accessEndpoints :: Lens.Lens' ImageBuilder (Prelude.Maybe (Prelude.NonEmpty AccessEndpoint))
+imageBuilder_accessEndpoints = Lens.lens (\ImageBuilder' {accessEndpoints} -> accessEndpoints) (\s@ImageBuilder' {} a -> s {accessEndpoints = a} :: ImageBuilder) Prelude.. Lens.mapping Lens.coerced
+
+-- | The version of the AppStream 2.0 agent that is currently being used by
+-- the image builder.
+imageBuilder_appstreamAgentVersion :: Lens.Lens' ImageBuilder (Prelude.Maybe Prelude.Text)
+imageBuilder_appstreamAgentVersion = Lens.lens (\ImageBuilder' {appstreamAgentVersion} -> appstreamAgentVersion) (\s@ImageBuilder' {} a -> s {appstreamAgentVersion = a} :: ImageBuilder)
+
+-- | The ARN for the image builder.
+imageBuilder_arn :: Lens.Lens' ImageBuilder (Prelude.Maybe Prelude.Text)
+imageBuilder_arn = Lens.lens (\ImageBuilder' {arn} -> arn) (\s@ImageBuilder' {} a -> s {arn = a} :: ImageBuilder)
+
+-- | The time stamp when the image builder was created.
+imageBuilder_createdTime :: Lens.Lens' ImageBuilder (Prelude.Maybe Prelude.UTCTime)
+imageBuilder_createdTime = Lens.lens (\ImageBuilder' {createdTime} -> createdTime) (\s@ImageBuilder' {} a -> s {createdTime = a} :: ImageBuilder) Prelude.. Lens.mapping Data._Time
+
+-- | The description to display.
+imageBuilder_description :: Lens.Lens' ImageBuilder (Prelude.Maybe Prelude.Text)
+imageBuilder_description = Lens.lens (\ImageBuilder' {description} -> description) (\s@ImageBuilder' {} a -> s {description = a} :: ImageBuilder)
+
+-- | The image builder name to display.
+imageBuilder_displayName :: Lens.Lens' ImageBuilder (Prelude.Maybe Prelude.Text)
+imageBuilder_displayName = Lens.lens (\ImageBuilder' {displayName} -> displayName) (\s@ImageBuilder' {} a -> s {displayName = a} :: ImageBuilder)
+
+-- | The name of the directory and organizational unit (OU) to use to join
+-- the image builder to a Microsoft Active Directory domain.
+imageBuilder_domainJoinInfo :: Lens.Lens' ImageBuilder (Prelude.Maybe DomainJoinInfo)
+imageBuilder_domainJoinInfo = Lens.lens (\ImageBuilder' {domainJoinInfo} -> domainJoinInfo) (\s@ImageBuilder' {} a -> s {domainJoinInfo = a} :: ImageBuilder)
+
+-- | Enables or disables default internet access for the image builder.
+imageBuilder_enableDefaultInternetAccess :: Lens.Lens' ImageBuilder (Prelude.Maybe Prelude.Bool)
+imageBuilder_enableDefaultInternetAccess = Lens.lens (\ImageBuilder' {enableDefaultInternetAccess} -> enableDefaultInternetAccess) (\s@ImageBuilder' {} a -> s {enableDefaultInternetAccess = a} :: ImageBuilder)
+
+-- | The ARN of the IAM role that is applied to the image builder. To assume
+-- a role, the image builder calls the AWS Security Token Service (STS)
+-- @AssumeRole@ API operation and passes the ARN of the role to use. The
+-- operation creates a new session with temporary credentials. AppStream
+-- 2.0 retrieves the temporary credentials and creates the
+-- __appstream_machine_role__ credential profile on the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+imageBuilder_iamRoleArn :: Lens.Lens' ImageBuilder (Prelude.Maybe Prelude.Text)
+imageBuilder_iamRoleArn = Lens.lens (\ImageBuilder' {iamRoleArn} -> iamRoleArn) (\s@ImageBuilder' {} a -> s {iamRoleArn = a} :: ImageBuilder)
+
+-- | The ARN of the image from which this builder was created.
+imageBuilder_imageArn :: Lens.Lens' ImageBuilder (Prelude.Maybe Prelude.Text)
+imageBuilder_imageArn = Lens.lens (\ImageBuilder' {imageArn} -> imageArn) (\s@ImageBuilder' {} a -> s {imageArn = a} :: ImageBuilder)
+
+-- | The image builder errors.
+imageBuilder_imageBuilderErrors :: Lens.Lens' ImageBuilder (Prelude.Maybe [ResourceError])
+imageBuilder_imageBuilderErrors = Lens.lens (\ImageBuilder' {imageBuilderErrors} -> imageBuilderErrors) (\s@ImageBuilder' {} a -> s {imageBuilderErrors = a} :: ImageBuilder) Prelude.. Lens.mapping Lens.coerced
+
+-- | The instance type for the image builder. The following instance types
+-- are available:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.compute.large
+--
+-- -   stream.compute.xlarge
+--
+-- -   stream.compute.2xlarge
+--
+-- -   stream.compute.4xlarge
+--
+-- -   stream.compute.8xlarge
+--
+-- -   stream.memory.large
+--
+-- -   stream.memory.xlarge
+--
+-- -   stream.memory.2xlarge
+--
+-- -   stream.memory.4xlarge
+--
+-- -   stream.memory.8xlarge
+--
+-- -   stream.memory.z1d.large
+--
+-- -   stream.memory.z1d.xlarge
+--
+-- -   stream.memory.z1d.2xlarge
+--
+-- -   stream.memory.z1d.3xlarge
+--
+-- -   stream.memory.z1d.6xlarge
+--
+-- -   stream.memory.z1d.12xlarge
+--
+-- -   stream.graphics-design.large
+--
+-- -   stream.graphics-design.xlarge
+--
+-- -   stream.graphics-design.2xlarge
+--
+-- -   stream.graphics-design.4xlarge
+--
+-- -   stream.graphics-desktop.2xlarge
+--
+-- -   stream.graphics.g4dn.xlarge
+--
+-- -   stream.graphics.g4dn.2xlarge
+--
+-- -   stream.graphics.g4dn.4xlarge
+--
+-- -   stream.graphics.g4dn.8xlarge
+--
+-- -   stream.graphics.g4dn.12xlarge
+--
+-- -   stream.graphics.g4dn.16xlarge
+--
+-- -   stream.graphics-pro.4xlarge
+--
+-- -   stream.graphics-pro.8xlarge
+--
+-- -   stream.graphics-pro.16xlarge
+imageBuilder_instanceType :: Lens.Lens' ImageBuilder (Prelude.Maybe Prelude.Text)
+imageBuilder_instanceType = Lens.lens (\ImageBuilder' {instanceType} -> instanceType) (\s@ImageBuilder' {} a -> s {instanceType = a} :: ImageBuilder)
+
+-- | Undocumented member.
+imageBuilder_networkAccessConfiguration :: Lens.Lens' ImageBuilder (Prelude.Maybe NetworkAccessConfiguration)
+imageBuilder_networkAccessConfiguration = Lens.lens (\ImageBuilder' {networkAccessConfiguration} -> networkAccessConfiguration) (\s@ImageBuilder' {} a -> s {networkAccessConfiguration = a} :: ImageBuilder)
+
+-- | The operating system platform of the image builder.
+imageBuilder_platform :: Lens.Lens' ImageBuilder (Prelude.Maybe PlatformType)
+imageBuilder_platform = Lens.lens (\ImageBuilder' {platform} -> platform) (\s@ImageBuilder' {} a -> s {platform = a} :: ImageBuilder)
+
+-- | The state of the image builder.
+imageBuilder_state :: Lens.Lens' ImageBuilder (Prelude.Maybe ImageBuilderState)
+imageBuilder_state = Lens.lens (\ImageBuilder' {state} -> state) (\s@ImageBuilder' {} a -> s {state = a} :: ImageBuilder)
+
+-- | The reason why the last state change occurred.
+imageBuilder_stateChangeReason :: Lens.Lens' ImageBuilder (Prelude.Maybe ImageBuilderStateChangeReason)
+imageBuilder_stateChangeReason = Lens.lens (\ImageBuilder' {stateChangeReason} -> stateChangeReason) (\s@ImageBuilder' {} a -> s {stateChangeReason = a} :: ImageBuilder)
+
+-- | The VPC configuration of the image builder.
+imageBuilder_vpcConfig :: Lens.Lens' ImageBuilder (Prelude.Maybe VpcConfig)
+imageBuilder_vpcConfig = Lens.lens (\ImageBuilder' {vpcConfig} -> vpcConfig) (\s@ImageBuilder' {} a -> s {vpcConfig = a} :: ImageBuilder)
+
+-- | The name of the image builder.
+imageBuilder_name :: Lens.Lens' ImageBuilder Prelude.Text
+imageBuilder_name = Lens.lens (\ImageBuilder' {name} -> name) (\s@ImageBuilder' {} a -> s {name = a} :: ImageBuilder)
+
+instance Data.FromJSON ImageBuilder where
+  parseJSON =
+    Data.withObject
+      "ImageBuilder"
+      ( \x ->
+          ImageBuilder'
+            Prelude.<$> (x Data..:? "AccessEndpoints")
+            Prelude.<*> (x Data..:? "AppstreamAgentVersion")
+            Prelude.<*> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "DisplayName")
+            Prelude.<*> (x Data..:? "DomainJoinInfo")
+            Prelude.<*> (x Data..:? "EnableDefaultInternetAccess")
+            Prelude.<*> (x Data..:? "IamRoleArn")
+            Prelude.<*> (x Data..:? "ImageArn")
+            Prelude.<*> ( x
+                            Data..:? "ImageBuilderErrors"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "InstanceType")
+            Prelude.<*> (x Data..:? "NetworkAccessConfiguration")
+            Prelude.<*> (x Data..:? "Platform")
+            Prelude.<*> (x Data..:? "State")
+            Prelude.<*> (x Data..:? "StateChangeReason")
+            Prelude.<*> (x Data..:? "VpcConfig")
+            Prelude.<*> (x Data..: "Name")
+      )
+
+instance Prelude.Hashable ImageBuilder where
+  hashWithSalt _salt ImageBuilder' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessEndpoints
+      `Prelude.hashWithSalt` appstreamAgentVersion
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` domainJoinInfo
+      `Prelude.hashWithSalt` enableDefaultInternetAccess
+      `Prelude.hashWithSalt` iamRoleArn
+      `Prelude.hashWithSalt` imageArn
+      `Prelude.hashWithSalt` imageBuilderErrors
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` networkAccessConfiguration
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` stateChangeReason
+      `Prelude.hashWithSalt` vpcConfig
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData ImageBuilder where
+  rnf ImageBuilder' {..} =
+    Prelude.rnf accessEndpoints
+      `Prelude.seq` Prelude.rnf appstreamAgentVersion
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf domainJoinInfo
+      `Prelude.seq` Prelude.rnf enableDefaultInternetAccess
+      `Prelude.seq` Prelude.rnf iamRoleArn
+      `Prelude.seq` Prelude.rnf imageArn
+      `Prelude.seq` Prelude.rnf imageBuilderErrors
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf networkAccessConfiguration
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf stateChangeReason
+      `Prelude.seq` Prelude.rnf vpcConfig
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AppStream/Types/ImageBuilderState.hs b/gen/Amazonka/AppStream/Types/ImageBuilderState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ImageBuilderState.hs
@@ -0,0 +1,116 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.ImageBuilderState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ImageBuilderState
+  ( ImageBuilderState
+      ( ..,
+        ImageBuilderState_DELETING,
+        ImageBuilderState_FAILED,
+        ImageBuilderState_PENDING,
+        ImageBuilderState_PENDING_QUALIFICATION,
+        ImageBuilderState_REBOOTING,
+        ImageBuilderState_RUNNING,
+        ImageBuilderState_SNAPSHOTTING,
+        ImageBuilderState_STOPPED,
+        ImageBuilderState_STOPPING,
+        ImageBuilderState_UPDATING,
+        ImageBuilderState_UPDATING_AGENT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageBuilderState = ImageBuilderState'
+  { fromImageBuilderState ::
+      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 ImageBuilderState_DELETING :: ImageBuilderState
+pattern ImageBuilderState_DELETING = ImageBuilderState' "DELETING"
+
+pattern ImageBuilderState_FAILED :: ImageBuilderState
+pattern ImageBuilderState_FAILED = ImageBuilderState' "FAILED"
+
+pattern ImageBuilderState_PENDING :: ImageBuilderState
+pattern ImageBuilderState_PENDING = ImageBuilderState' "PENDING"
+
+pattern ImageBuilderState_PENDING_QUALIFICATION :: ImageBuilderState
+pattern ImageBuilderState_PENDING_QUALIFICATION = ImageBuilderState' "PENDING_QUALIFICATION"
+
+pattern ImageBuilderState_REBOOTING :: ImageBuilderState
+pattern ImageBuilderState_REBOOTING = ImageBuilderState' "REBOOTING"
+
+pattern ImageBuilderState_RUNNING :: ImageBuilderState
+pattern ImageBuilderState_RUNNING = ImageBuilderState' "RUNNING"
+
+pattern ImageBuilderState_SNAPSHOTTING :: ImageBuilderState
+pattern ImageBuilderState_SNAPSHOTTING = ImageBuilderState' "SNAPSHOTTING"
+
+pattern ImageBuilderState_STOPPED :: ImageBuilderState
+pattern ImageBuilderState_STOPPED = ImageBuilderState' "STOPPED"
+
+pattern ImageBuilderState_STOPPING :: ImageBuilderState
+pattern ImageBuilderState_STOPPING = ImageBuilderState' "STOPPING"
+
+pattern ImageBuilderState_UPDATING :: ImageBuilderState
+pattern ImageBuilderState_UPDATING = ImageBuilderState' "UPDATING"
+
+pattern ImageBuilderState_UPDATING_AGENT :: ImageBuilderState
+pattern ImageBuilderState_UPDATING_AGENT = ImageBuilderState' "UPDATING_AGENT"
+
+{-# COMPLETE
+  ImageBuilderState_DELETING,
+  ImageBuilderState_FAILED,
+  ImageBuilderState_PENDING,
+  ImageBuilderState_PENDING_QUALIFICATION,
+  ImageBuilderState_REBOOTING,
+  ImageBuilderState_RUNNING,
+  ImageBuilderState_SNAPSHOTTING,
+  ImageBuilderState_STOPPED,
+  ImageBuilderState_STOPPING,
+  ImageBuilderState_UPDATING,
+  ImageBuilderState_UPDATING_AGENT,
+  ImageBuilderState'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/ImageBuilderStateChangeReason.hs b/gen/Amazonka/AppStream/Types/ImageBuilderStateChangeReason.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ImageBuilderStateChangeReason.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.AppStream.Types.ImageBuilderStateChangeReason
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ImageBuilderStateChangeReason where
+
+import Amazonka.AppStream.Types.ImageBuilderStateChangeReasonCode
+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
+
+-- | Describes the reason why the last image builder state change occurred.
+--
+-- /See:/ 'newImageBuilderStateChangeReason' smart constructor.
+data ImageBuilderStateChangeReason = ImageBuilderStateChangeReason'
+  { -- | The state change reason code.
+    code :: Prelude.Maybe ImageBuilderStateChangeReasonCode,
+    -- | The state change reason message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageBuilderStateChangeReason' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'imageBuilderStateChangeReason_code' - The state change reason code.
+--
+-- 'message', 'imageBuilderStateChangeReason_message' - The state change reason message.
+newImageBuilderStateChangeReason ::
+  ImageBuilderStateChangeReason
+newImageBuilderStateChangeReason =
+  ImageBuilderStateChangeReason'
+    { code =
+        Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The state change reason code.
+imageBuilderStateChangeReason_code :: Lens.Lens' ImageBuilderStateChangeReason (Prelude.Maybe ImageBuilderStateChangeReasonCode)
+imageBuilderStateChangeReason_code = Lens.lens (\ImageBuilderStateChangeReason' {code} -> code) (\s@ImageBuilderStateChangeReason' {} a -> s {code = a} :: ImageBuilderStateChangeReason)
+
+-- | The state change reason message.
+imageBuilderStateChangeReason_message :: Lens.Lens' ImageBuilderStateChangeReason (Prelude.Maybe Prelude.Text)
+imageBuilderStateChangeReason_message = Lens.lens (\ImageBuilderStateChangeReason' {message} -> message) (\s@ImageBuilderStateChangeReason' {} a -> s {message = a} :: ImageBuilderStateChangeReason)
+
+instance Data.FromJSON ImageBuilderStateChangeReason where
+  parseJSON =
+    Data.withObject
+      "ImageBuilderStateChangeReason"
+      ( \x ->
+          ImageBuilderStateChangeReason'
+            Prelude.<$> (x Data..:? "Code")
+            Prelude.<*> (x Data..:? "Message")
+      )
+
+instance
+  Prelude.Hashable
+    ImageBuilderStateChangeReason
+  where
+  hashWithSalt _salt ImageBuilderStateChangeReason' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData ImageBuilderStateChangeReason where
+  rnf ImageBuilderStateChangeReason' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/AppStream/Types/ImageBuilderStateChangeReasonCode.hs b/gen/Amazonka/AppStream/Types/ImageBuilderStateChangeReasonCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ImageBuilderStateChangeReasonCode.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.AppStream.Types.ImageBuilderStateChangeReasonCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ImageBuilderStateChangeReasonCode
+  ( ImageBuilderStateChangeReasonCode
+      ( ..,
+        ImageBuilderStateChangeReasonCode_IMAGE_UNAVAILABLE,
+        ImageBuilderStateChangeReasonCode_INTERNAL_ERROR
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageBuilderStateChangeReasonCode = ImageBuilderStateChangeReasonCode'
+  { fromImageBuilderStateChangeReasonCode ::
+      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 ImageBuilderStateChangeReasonCode_IMAGE_UNAVAILABLE :: ImageBuilderStateChangeReasonCode
+pattern ImageBuilderStateChangeReasonCode_IMAGE_UNAVAILABLE = ImageBuilderStateChangeReasonCode' "IMAGE_UNAVAILABLE"
+
+pattern ImageBuilderStateChangeReasonCode_INTERNAL_ERROR :: ImageBuilderStateChangeReasonCode
+pattern ImageBuilderStateChangeReasonCode_INTERNAL_ERROR = ImageBuilderStateChangeReasonCode' "INTERNAL_ERROR"
+
+{-# COMPLETE
+  ImageBuilderStateChangeReasonCode_IMAGE_UNAVAILABLE,
+  ImageBuilderStateChangeReasonCode_INTERNAL_ERROR,
+  ImageBuilderStateChangeReasonCode'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/ImagePermissions.hs b/gen/Amazonka/AppStream/Types/ImagePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ImagePermissions.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.AppStream.Types.ImagePermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ImagePermissions 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
+
+-- | Describes the permissions for an image.
+--
+-- /See:/ 'newImagePermissions' smart constructor.
+data ImagePermissions = ImagePermissions'
+  { -- | Indicates whether the image can be used for a fleet.
+    allowFleet :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether the image can be used for an image builder.
+    allowImageBuilder :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImagePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'allowFleet', 'imagePermissions_allowFleet' - Indicates whether the image can be used for a fleet.
+--
+-- 'allowImageBuilder', 'imagePermissions_allowImageBuilder' - Indicates whether the image can be used for an image builder.
+newImagePermissions ::
+  ImagePermissions
+newImagePermissions =
+  ImagePermissions'
+    { allowFleet = Prelude.Nothing,
+      allowImageBuilder = Prelude.Nothing
+    }
+
+-- | Indicates whether the image can be used for a fleet.
+imagePermissions_allowFleet :: Lens.Lens' ImagePermissions (Prelude.Maybe Prelude.Bool)
+imagePermissions_allowFleet = Lens.lens (\ImagePermissions' {allowFleet} -> allowFleet) (\s@ImagePermissions' {} a -> s {allowFleet = a} :: ImagePermissions)
+
+-- | Indicates whether the image can be used for an image builder.
+imagePermissions_allowImageBuilder :: Lens.Lens' ImagePermissions (Prelude.Maybe Prelude.Bool)
+imagePermissions_allowImageBuilder = Lens.lens (\ImagePermissions' {allowImageBuilder} -> allowImageBuilder) (\s@ImagePermissions' {} a -> s {allowImageBuilder = a} :: ImagePermissions)
+
+instance Data.FromJSON ImagePermissions where
+  parseJSON =
+    Data.withObject
+      "ImagePermissions"
+      ( \x ->
+          ImagePermissions'
+            Prelude.<$> (x Data..:? "allowFleet")
+            Prelude.<*> (x Data..:? "allowImageBuilder")
+      )
+
+instance Prelude.Hashable ImagePermissions where
+  hashWithSalt _salt ImagePermissions' {..} =
+    _salt
+      `Prelude.hashWithSalt` allowFleet
+      `Prelude.hashWithSalt` allowImageBuilder
+
+instance Prelude.NFData ImagePermissions where
+  rnf ImagePermissions' {..} =
+    Prelude.rnf allowFleet
+      `Prelude.seq` Prelude.rnf allowImageBuilder
+
+instance Data.ToJSON ImagePermissions where
+  toJSON ImagePermissions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("allowFleet" Data..=) Prelude.<$> allowFleet,
+            ("allowImageBuilder" Data..=)
+              Prelude.<$> allowImageBuilder
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/ImageState.hs b/gen/Amazonka/AppStream/Types/ImageState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ImageState.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.ImageState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ImageState
+  ( ImageState
+      ( ..,
+        ImageState_AVAILABLE,
+        ImageState_COPYING,
+        ImageState_CREATING,
+        ImageState_DELETING,
+        ImageState_FAILED,
+        ImageState_IMPORTING,
+        ImageState_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageState = ImageState'
+  { fromImageState ::
+      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 ImageState_AVAILABLE :: ImageState
+pattern ImageState_AVAILABLE = ImageState' "AVAILABLE"
+
+pattern ImageState_COPYING :: ImageState
+pattern ImageState_COPYING = ImageState' "COPYING"
+
+pattern ImageState_CREATING :: ImageState
+pattern ImageState_CREATING = ImageState' "CREATING"
+
+pattern ImageState_DELETING :: ImageState
+pattern ImageState_DELETING = ImageState' "DELETING"
+
+pattern ImageState_FAILED :: ImageState
+pattern ImageState_FAILED = ImageState' "FAILED"
+
+pattern ImageState_IMPORTING :: ImageState
+pattern ImageState_IMPORTING = ImageState' "IMPORTING"
+
+pattern ImageState_PENDING :: ImageState
+pattern ImageState_PENDING = ImageState' "PENDING"
+
+{-# COMPLETE
+  ImageState_AVAILABLE,
+  ImageState_COPYING,
+  ImageState_CREATING,
+  ImageState_DELETING,
+  ImageState_FAILED,
+  ImageState_IMPORTING,
+  ImageState_PENDING,
+  ImageState'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/ImageStateChangeReason.hs b/gen/Amazonka/AppStream/Types/ImageStateChangeReason.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ImageStateChangeReason.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.ImageStateChangeReason
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ImageStateChangeReason where
+
+import Amazonka.AppStream.Types.ImageStateChangeReasonCode
+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
+
+-- | Describes the reason why the last image state change occurred.
+--
+-- /See:/ 'newImageStateChangeReason' smart constructor.
+data ImageStateChangeReason = ImageStateChangeReason'
+  { -- | The state change reason code.
+    code :: Prelude.Maybe ImageStateChangeReasonCode,
+    -- | The state change reason message.
+    message :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImageStateChangeReason' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'code', 'imageStateChangeReason_code' - The state change reason code.
+--
+-- 'message', 'imageStateChangeReason_message' - The state change reason message.
+newImageStateChangeReason ::
+  ImageStateChangeReason
+newImageStateChangeReason =
+  ImageStateChangeReason'
+    { code = Prelude.Nothing,
+      message = Prelude.Nothing
+    }
+
+-- | The state change reason code.
+imageStateChangeReason_code :: Lens.Lens' ImageStateChangeReason (Prelude.Maybe ImageStateChangeReasonCode)
+imageStateChangeReason_code = Lens.lens (\ImageStateChangeReason' {code} -> code) (\s@ImageStateChangeReason' {} a -> s {code = a} :: ImageStateChangeReason)
+
+-- | The state change reason message.
+imageStateChangeReason_message :: Lens.Lens' ImageStateChangeReason (Prelude.Maybe Prelude.Text)
+imageStateChangeReason_message = Lens.lens (\ImageStateChangeReason' {message} -> message) (\s@ImageStateChangeReason' {} a -> s {message = a} :: ImageStateChangeReason)
+
+instance Data.FromJSON ImageStateChangeReason where
+  parseJSON =
+    Data.withObject
+      "ImageStateChangeReason"
+      ( \x ->
+          ImageStateChangeReason'
+            Prelude.<$> (x Data..:? "Code")
+            Prelude.<*> (x Data..:? "Message")
+      )
+
+instance Prelude.Hashable ImageStateChangeReason where
+  hashWithSalt _salt ImageStateChangeReason' {..} =
+    _salt
+      `Prelude.hashWithSalt` code
+      `Prelude.hashWithSalt` message
+
+instance Prelude.NFData ImageStateChangeReason where
+  rnf ImageStateChangeReason' {..} =
+    Prelude.rnf code `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/AppStream/Types/ImageStateChangeReasonCode.hs b/gen/Amazonka/AppStream/Types/ImageStateChangeReasonCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ImageStateChangeReasonCode.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.ImageStateChangeReasonCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ImageStateChangeReasonCode
+  ( ImageStateChangeReasonCode
+      ( ..,
+        ImageStateChangeReasonCode_IMAGE_BUILDER_NOT_AVAILABLE,
+        ImageStateChangeReasonCode_IMAGE_COPY_FAILURE,
+        ImageStateChangeReasonCode_INTERNAL_ERROR
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ImageStateChangeReasonCode = ImageStateChangeReasonCode'
+  { fromImageStateChangeReasonCode ::
+      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 ImageStateChangeReasonCode_IMAGE_BUILDER_NOT_AVAILABLE :: ImageStateChangeReasonCode
+pattern ImageStateChangeReasonCode_IMAGE_BUILDER_NOT_AVAILABLE = ImageStateChangeReasonCode' "IMAGE_BUILDER_NOT_AVAILABLE"
+
+pattern ImageStateChangeReasonCode_IMAGE_COPY_FAILURE :: ImageStateChangeReasonCode
+pattern ImageStateChangeReasonCode_IMAGE_COPY_FAILURE = ImageStateChangeReasonCode' "IMAGE_COPY_FAILURE"
+
+pattern ImageStateChangeReasonCode_INTERNAL_ERROR :: ImageStateChangeReasonCode
+pattern ImageStateChangeReasonCode_INTERNAL_ERROR = ImageStateChangeReasonCode' "INTERNAL_ERROR"
+
+{-# COMPLETE
+  ImageStateChangeReasonCode_IMAGE_BUILDER_NOT_AVAILABLE,
+  ImageStateChangeReasonCode_IMAGE_COPY_FAILURE,
+  ImageStateChangeReasonCode_INTERNAL_ERROR,
+  ImageStateChangeReasonCode'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/LastReportGenerationExecutionError.hs b/gen/Amazonka/AppStream/Types/LastReportGenerationExecutionError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/LastReportGenerationExecutionError.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.LastReportGenerationExecutionError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.LastReportGenerationExecutionError where
+
+import Amazonka.AppStream.Types.UsageReportExecutionErrorCode
+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
+
+-- | Describes the error that is returned when a usage report can\'t be
+-- generated.
+--
+-- /See:/ 'newLastReportGenerationExecutionError' smart constructor.
+data LastReportGenerationExecutionError = LastReportGenerationExecutionError'
+  { -- | The error code for the error that is returned when a usage report can\'t
+    -- be generated.
+    errorCode :: Prelude.Maybe UsageReportExecutionErrorCode,
+    -- | The error message for the error that is returned when a usage report
+    -- can\'t be generated.
+    errorMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LastReportGenerationExecutionError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'lastReportGenerationExecutionError_errorCode' - The error code for the error that is returned when a usage report can\'t
+-- be generated.
+--
+-- 'errorMessage', 'lastReportGenerationExecutionError_errorMessage' - The error message for the error that is returned when a usage report
+-- can\'t be generated.
+newLastReportGenerationExecutionError ::
+  LastReportGenerationExecutionError
+newLastReportGenerationExecutionError =
+  LastReportGenerationExecutionError'
+    { errorCode =
+        Prelude.Nothing,
+      errorMessage = Prelude.Nothing
+    }
+
+-- | The error code for the error that is returned when a usage report can\'t
+-- be generated.
+lastReportGenerationExecutionError_errorCode :: Lens.Lens' LastReportGenerationExecutionError (Prelude.Maybe UsageReportExecutionErrorCode)
+lastReportGenerationExecutionError_errorCode = Lens.lens (\LastReportGenerationExecutionError' {errorCode} -> errorCode) (\s@LastReportGenerationExecutionError' {} a -> s {errorCode = a} :: LastReportGenerationExecutionError)
+
+-- | The error message for the error that is returned when a usage report
+-- can\'t be generated.
+lastReportGenerationExecutionError_errorMessage :: Lens.Lens' LastReportGenerationExecutionError (Prelude.Maybe Prelude.Text)
+lastReportGenerationExecutionError_errorMessage = Lens.lens (\LastReportGenerationExecutionError' {errorMessage} -> errorMessage) (\s@LastReportGenerationExecutionError' {} a -> s {errorMessage = a} :: LastReportGenerationExecutionError)
+
+instance
+  Data.FromJSON
+    LastReportGenerationExecutionError
+  where
+  parseJSON =
+    Data.withObject
+      "LastReportGenerationExecutionError"
+      ( \x ->
+          LastReportGenerationExecutionError'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+      )
+
+instance
+  Prelude.Hashable
+    LastReportGenerationExecutionError
+  where
+  hashWithSalt
+    _salt
+    LastReportGenerationExecutionError' {..} =
+      _salt
+        `Prelude.hashWithSalt` errorCode
+        `Prelude.hashWithSalt` errorMessage
+
+instance
+  Prelude.NFData
+    LastReportGenerationExecutionError
+  where
+  rnf LastReportGenerationExecutionError' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
diff --git a/gen/Amazonka/AppStream/Types/MessageAction.hs b/gen/Amazonka/AppStream/Types/MessageAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/MessageAction.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.AppStream.Types.MessageAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.MessageAction
+  ( MessageAction
+      ( ..,
+        MessageAction_RESEND,
+        MessageAction_SUPPRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MessageAction = MessageAction'
+  { fromMessageAction ::
+      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 MessageAction_RESEND :: MessageAction
+pattern MessageAction_RESEND = MessageAction' "RESEND"
+
+pattern MessageAction_SUPPRESS :: MessageAction
+pattern MessageAction_SUPPRESS = MessageAction' "SUPPRESS"
+
+{-# COMPLETE
+  MessageAction_RESEND,
+  MessageAction_SUPPRESS,
+  MessageAction'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/NetworkAccessConfiguration.hs b/gen/Amazonka/AppStream/Types/NetworkAccessConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/NetworkAccessConfiguration.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.AppStream.Types.NetworkAccessConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.NetworkAccessConfiguration 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
+
+-- | Describes the network details of the fleet or image builder instance.
+--
+-- /See:/ 'newNetworkAccessConfiguration' smart constructor.
+data NetworkAccessConfiguration = NetworkAccessConfiguration'
+  { -- | The resource identifier of the elastic network interface that is
+    -- attached to instances in your VPC. All network interfaces have the
+    -- eni-xxxxxxxx resource identifier.
+    eniId :: Prelude.Maybe Prelude.Text,
+    -- | The private IP address of the elastic network interface that is attached
+    -- to instances in your VPC.
+    eniPrivateIpAddress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NetworkAccessConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eniId', 'networkAccessConfiguration_eniId' - The resource identifier of the elastic network interface that is
+-- attached to instances in your VPC. All network interfaces have the
+-- eni-xxxxxxxx resource identifier.
+--
+-- 'eniPrivateIpAddress', 'networkAccessConfiguration_eniPrivateIpAddress' - The private IP address of the elastic network interface that is attached
+-- to instances in your VPC.
+newNetworkAccessConfiguration ::
+  NetworkAccessConfiguration
+newNetworkAccessConfiguration =
+  NetworkAccessConfiguration'
+    { eniId =
+        Prelude.Nothing,
+      eniPrivateIpAddress = Prelude.Nothing
+    }
+
+-- | The resource identifier of the elastic network interface that is
+-- attached to instances in your VPC. All network interfaces have the
+-- eni-xxxxxxxx resource identifier.
+networkAccessConfiguration_eniId :: Lens.Lens' NetworkAccessConfiguration (Prelude.Maybe Prelude.Text)
+networkAccessConfiguration_eniId = Lens.lens (\NetworkAccessConfiguration' {eniId} -> eniId) (\s@NetworkAccessConfiguration' {} a -> s {eniId = a} :: NetworkAccessConfiguration)
+
+-- | The private IP address of the elastic network interface that is attached
+-- to instances in your VPC.
+networkAccessConfiguration_eniPrivateIpAddress :: Lens.Lens' NetworkAccessConfiguration (Prelude.Maybe Prelude.Text)
+networkAccessConfiguration_eniPrivateIpAddress = Lens.lens (\NetworkAccessConfiguration' {eniPrivateIpAddress} -> eniPrivateIpAddress) (\s@NetworkAccessConfiguration' {} a -> s {eniPrivateIpAddress = a} :: NetworkAccessConfiguration)
+
+instance Data.FromJSON NetworkAccessConfiguration where
+  parseJSON =
+    Data.withObject
+      "NetworkAccessConfiguration"
+      ( \x ->
+          NetworkAccessConfiguration'
+            Prelude.<$> (x Data..:? "EniId")
+            Prelude.<*> (x Data..:? "EniPrivateIpAddress")
+      )
+
+instance Prelude.Hashable NetworkAccessConfiguration where
+  hashWithSalt _salt NetworkAccessConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` eniId
+      `Prelude.hashWithSalt` eniPrivateIpAddress
+
+instance Prelude.NFData NetworkAccessConfiguration where
+  rnf NetworkAccessConfiguration' {..} =
+    Prelude.rnf eniId
+      `Prelude.seq` Prelude.rnf eniPrivateIpAddress
diff --git a/gen/Amazonka/AppStream/Types/Permission.hs b/gen/Amazonka/AppStream/Types/Permission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/Permission.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.AppStream.Types.Permission
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.Permission
+  ( Permission
+      ( ..,
+        Permission_DISABLED,
+        Permission_ENABLED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Permission = Permission'
+  { fromPermission ::
+      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 Permission_DISABLED :: Permission
+pattern Permission_DISABLED = Permission' "DISABLED"
+
+pattern Permission_ENABLED :: Permission
+pattern Permission_ENABLED = Permission' "ENABLED"
+
+{-# COMPLETE
+  Permission_DISABLED,
+  Permission_ENABLED,
+  Permission'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/PlatformType.hs b/gen/Amazonka/AppStream/Types/PlatformType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/PlatformType.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.AppStream.Types.PlatformType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.PlatformType
+  ( PlatformType
+      ( ..,
+        PlatformType_AMAZON_LINUX2,
+        PlatformType_WINDOWS,
+        PlatformType_WINDOWS_SERVER_2016,
+        PlatformType_WINDOWS_SERVER_2019
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PlatformType = PlatformType'
+  { fromPlatformType ::
+      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 PlatformType_AMAZON_LINUX2 :: PlatformType
+pattern PlatformType_AMAZON_LINUX2 = PlatformType' "AMAZON_LINUX2"
+
+pattern PlatformType_WINDOWS :: PlatformType
+pattern PlatformType_WINDOWS = PlatformType' "WINDOWS"
+
+pattern PlatformType_WINDOWS_SERVER_2016 :: PlatformType
+pattern PlatformType_WINDOWS_SERVER_2016 = PlatformType' "WINDOWS_SERVER_2016"
+
+pattern PlatformType_WINDOWS_SERVER_2019 :: PlatformType
+pattern PlatformType_WINDOWS_SERVER_2019 = PlatformType' "WINDOWS_SERVER_2019"
+
+{-# COMPLETE
+  PlatformType_AMAZON_LINUX2,
+  PlatformType_WINDOWS,
+  PlatformType_WINDOWS_SERVER_2016,
+  PlatformType_WINDOWS_SERVER_2019,
+  PlatformType'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/PreferredProtocol.hs b/gen/Amazonka/AppStream/Types/PreferredProtocol.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/PreferredProtocol.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.AppStream.Types.PreferredProtocol
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.PreferredProtocol
+  ( PreferredProtocol
+      ( ..,
+        PreferredProtocol_TCP,
+        PreferredProtocol_UDP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype PreferredProtocol = PreferredProtocol'
+  { fromPreferredProtocol ::
+      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 PreferredProtocol_TCP :: PreferredProtocol
+pattern PreferredProtocol_TCP = PreferredProtocol' "TCP"
+
+pattern PreferredProtocol_UDP :: PreferredProtocol
+pattern PreferredProtocol_UDP = PreferredProtocol' "UDP"
+
+{-# COMPLETE
+  PreferredProtocol_TCP,
+  PreferredProtocol_UDP,
+  PreferredProtocol'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/ResourceError.hs b/gen/Amazonka/AppStream/Types/ResourceError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ResourceError.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.ResourceError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ResourceError where
+
+import Amazonka.AppStream.Types.FleetErrorCode
+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
+
+-- | Describes a resource error.
+--
+-- /See:/ 'newResourceError' smart constructor.
+data ResourceError = ResourceError'
+  { -- | The error code.
+    errorCode :: Prelude.Maybe FleetErrorCode,
+    -- | The error message.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | The time the error occurred.
+    errorTimestamp :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ResourceError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'resourceError_errorCode' - The error code.
+--
+-- 'errorMessage', 'resourceError_errorMessage' - The error message.
+--
+-- 'errorTimestamp', 'resourceError_errorTimestamp' - The time the error occurred.
+newResourceError ::
+  ResourceError
+newResourceError =
+  ResourceError'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      errorTimestamp = Prelude.Nothing
+    }
+
+-- | The error code.
+resourceError_errorCode :: Lens.Lens' ResourceError (Prelude.Maybe FleetErrorCode)
+resourceError_errorCode = Lens.lens (\ResourceError' {errorCode} -> errorCode) (\s@ResourceError' {} a -> s {errorCode = a} :: ResourceError)
+
+-- | The error message.
+resourceError_errorMessage :: Lens.Lens' ResourceError (Prelude.Maybe Prelude.Text)
+resourceError_errorMessage = Lens.lens (\ResourceError' {errorMessage} -> errorMessage) (\s@ResourceError' {} a -> s {errorMessage = a} :: ResourceError)
+
+-- | The time the error occurred.
+resourceError_errorTimestamp :: Lens.Lens' ResourceError (Prelude.Maybe Prelude.UTCTime)
+resourceError_errorTimestamp = Lens.lens (\ResourceError' {errorTimestamp} -> errorTimestamp) (\s@ResourceError' {} a -> s {errorTimestamp = a} :: ResourceError) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON ResourceError where
+  parseJSON =
+    Data.withObject
+      "ResourceError"
+      ( \x ->
+          ResourceError'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "ErrorTimestamp")
+      )
+
+instance Prelude.Hashable ResourceError where
+  hashWithSalt _salt ResourceError' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` errorTimestamp
+
+instance Prelude.NFData ResourceError where
+  rnf ResourceError' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf errorTimestamp
diff --git a/gen/Amazonka/AppStream/Types/S3Location.hs b/gen/Amazonka/AppStream/Types/S3Location.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/S3Location.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.AppStream.Types.S3Location
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.S3Location 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
+
+-- | Describes the S3 location.
+--
+-- /See:/ 'newS3Location' smart constructor.
+data S3Location = S3Location'
+  { -- | The S3 bucket of the S3 object.
+    s3Bucket :: Prelude.Text,
+    -- | The S3 key of the S3 object.
+    s3Key :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Location' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Bucket', 's3Location_s3Bucket' - The S3 bucket of the S3 object.
+--
+-- 's3Key', 's3Location_s3Key' - The S3 key of the S3 object.
+newS3Location ::
+  -- | 's3Bucket'
+  Prelude.Text ->
+  -- | 's3Key'
+  Prelude.Text ->
+  S3Location
+newS3Location pS3Bucket_ pS3Key_ =
+  S3Location' {s3Bucket = pS3Bucket_, s3Key = pS3Key_}
+
+-- | The S3 bucket of the S3 object.
+s3Location_s3Bucket :: Lens.Lens' S3Location Prelude.Text
+s3Location_s3Bucket = Lens.lens (\S3Location' {s3Bucket} -> s3Bucket) (\s@S3Location' {} a -> s {s3Bucket = a} :: S3Location)
+
+-- | The S3 key of the S3 object.
+s3Location_s3Key :: Lens.Lens' S3Location Prelude.Text
+s3Location_s3Key = Lens.lens (\S3Location' {s3Key} -> s3Key) (\s@S3Location' {} a -> s {s3Key = a} :: S3Location)
+
+instance Data.FromJSON S3Location where
+  parseJSON =
+    Data.withObject
+      "S3Location"
+      ( \x ->
+          S3Location'
+            Prelude.<$> (x Data..: "S3Bucket")
+            Prelude.<*> (x Data..: "S3Key")
+      )
+
+instance Prelude.Hashable S3Location where
+  hashWithSalt _salt S3Location' {..} =
+    _salt
+      `Prelude.hashWithSalt` s3Bucket
+      `Prelude.hashWithSalt` s3Key
+
+instance Prelude.NFData S3Location where
+  rnf S3Location' {..} =
+    Prelude.rnf s3Bucket
+      `Prelude.seq` Prelude.rnf s3Key
+
+instance Data.ToJSON S3Location where
+  toJSON S3Location' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("S3Bucket" Data..= s3Bucket),
+            Prelude.Just ("S3Key" Data..= s3Key)
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/ScriptDetails.hs b/gen/Amazonka/AppStream/Types/ScriptDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ScriptDetails.hs
@@ -0,0 +1,134 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.ScriptDetails
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ScriptDetails where
+
+import Amazonka.AppStream.Types.S3Location
+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
+
+-- | Describes the details of the script.
+--
+-- /See:/ 'newScriptDetails' smart constructor.
+data ScriptDetails = ScriptDetails'
+  { -- | The runtime parameters passed to the run path for the script.
+    executableParameters :: Prelude.Maybe Prelude.Text,
+    -- | The S3 object location for the script.
+    scriptS3Location :: S3Location,
+    -- | The run path for the script.
+    executablePath :: Prelude.Text,
+    -- | The run timeout, in seconds, for the script.
+    timeoutInSeconds :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ScriptDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'executableParameters', 'scriptDetails_executableParameters' - The runtime parameters passed to the run path for the script.
+--
+-- 'scriptS3Location', 'scriptDetails_scriptS3Location' - The S3 object location for the script.
+--
+-- 'executablePath', 'scriptDetails_executablePath' - The run path for the script.
+--
+-- 'timeoutInSeconds', 'scriptDetails_timeoutInSeconds' - The run timeout, in seconds, for the script.
+newScriptDetails ::
+  -- | 'scriptS3Location'
+  S3Location ->
+  -- | 'executablePath'
+  Prelude.Text ->
+  -- | 'timeoutInSeconds'
+  Prelude.Int ->
+  ScriptDetails
+newScriptDetails
+  pScriptS3Location_
+  pExecutablePath_
+  pTimeoutInSeconds_ =
+    ScriptDetails'
+      { executableParameters =
+          Prelude.Nothing,
+        scriptS3Location = pScriptS3Location_,
+        executablePath = pExecutablePath_,
+        timeoutInSeconds = pTimeoutInSeconds_
+      }
+
+-- | The runtime parameters passed to the run path for the script.
+scriptDetails_executableParameters :: Lens.Lens' ScriptDetails (Prelude.Maybe Prelude.Text)
+scriptDetails_executableParameters = Lens.lens (\ScriptDetails' {executableParameters} -> executableParameters) (\s@ScriptDetails' {} a -> s {executableParameters = a} :: ScriptDetails)
+
+-- | The S3 object location for the script.
+scriptDetails_scriptS3Location :: Lens.Lens' ScriptDetails S3Location
+scriptDetails_scriptS3Location = Lens.lens (\ScriptDetails' {scriptS3Location} -> scriptS3Location) (\s@ScriptDetails' {} a -> s {scriptS3Location = a} :: ScriptDetails)
+
+-- | The run path for the script.
+scriptDetails_executablePath :: Lens.Lens' ScriptDetails Prelude.Text
+scriptDetails_executablePath = Lens.lens (\ScriptDetails' {executablePath} -> executablePath) (\s@ScriptDetails' {} a -> s {executablePath = a} :: ScriptDetails)
+
+-- | The run timeout, in seconds, for the script.
+scriptDetails_timeoutInSeconds :: Lens.Lens' ScriptDetails Prelude.Int
+scriptDetails_timeoutInSeconds = Lens.lens (\ScriptDetails' {timeoutInSeconds} -> timeoutInSeconds) (\s@ScriptDetails' {} a -> s {timeoutInSeconds = a} :: ScriptDetails)
+
+instance Data.FromJSON ScriptDetails where
+  parseJSON =
+    Data.withObject
+      "ScriptDetails"
+      ( \x ->
+          ScriptDetails'
+            Prelude.<$> (x Data..:? "ExecutableParameters")
+            Prelude.<*> (x Data..: "ScriptS3Location")
+            Prelude.<*> (x Data..: "ExecutablePath")
+            Prelude.<*> (x Data..: "TimeoutInSeconds")
+      )
+
+instance Prelude.Hashable ScriptDetails where
+  hashWithSalt _salt ScriptDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` executableParameters
+      `Prelude.hashWithSalt` scriptS3Location
+      `Prelude.hashWithSalt` executablePath
+      `Prelude.hashWithSalt` timeoutInSeconds
+
+instance Prelude.NFData ScriptDetails where
+  rnf ScriptDetails' {..} =
+    Prelude.rnf executableParameters
+      `Prelude.seq` Prelude.rnf scriptS3Location
+      `Prelude.seq` Prelude.rnf executablePath
+      `Prelude.seq` Prelude.rnf timeoutInSeconds
+
+instance Data.ToJSON ScriptDetails where
+  toJSON ScriptDetails' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ExecutableParameters" Data..=)
+              Prelude.<$> executableParameters,
+            Prelude.Just
+              ("ScriptS3Location" Data..= scriptS3Location),
+            Prelude.Just
+              ("ExecutablePath" Data..= executablePath),
+            Prelude.Just
+              ("TimeoutInSeconds" Data..= timeoutInSeconds)
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/ServiceAccountCredentials.hs b/gen/Amazonka/AppStream/Types/ServiceAccountCredentials.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/ServiceAccountCredentials.hs
@@ -0,0 +1,112 @@
+{-# 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.AppStream.Types.ServiceAccountCredentials
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.ServiceAccountCredentials 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
+
+-- | Describes the credentials for the service account used by the fleet or
+-- image builder to connect to the directory.
+--
+-- /See:/ 'newServiceAccountCredentials' smart constructor.
+data ServiceAccountCredentials = ServiceAccountCredentials'
+  { -- | The user name of the account. This account must have the following
+    -- privileges: create computer objects, join computers to the domain, and
+    -- change\/reset the password on descendant computer objects for the
+    -- organizational units specified.
+    accountName :: Data.Sensitive Prelude.Text,
+    -- | The password for the account.
+    accountPassword :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServiceAccountCredentials' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accountName', 'serviceAccountCredentials_accountName' - The user name of the account. This account must have the following
+-- privileges: create computer objects, join computers to the domain, and
+-- change\/reset the password on descendant computer objects for the
+-- organizational units specified.
+--
+-- 'accountPassword', 'serviceAccountCredentials_accountPassword' - The password for the account.
+newServiceAccountCredentials ::
+  -- | 'accountName'
+  Prelude.Text ->
+  -- | 'accountPassword'
+  Prelude.Text ->
+  ServiceAccountCredentials
+newServiceAccountCredentials
+  pAccountName_
+  pAccountPassword_ =
+    ServiceAccountCredentials'
+      { accountName =
+          Data._Sensitive Lens.# pAccountName_,
+        accountPassword =
+          Data._Sensitive Lens.# pAccountPassword_
+      }
+
+-- | The user name of the account. This account must have the following
+-- privileges: create computer objects, join computers to the domain, and
+-- change\/reset the password on descendant computer objects for the
+-- organizational units specified.
+serviceAccountCredentials_accountName :: Lens.Lens' ServiceAccountCredentials Prelude.Text
+serviceAccountCredentials_accountName = Lens.lens (\ServiceAccountCredentials' {accountName} -> accountName) (\s@ServiceAccountCredentials' {} a -> s {accountName = a} :: ServiceAccountCredentials) Prelude.. Data._Sensitive
+
+-- | The password for the account.
+serviceAccountCredentials_accountPassword :: Lens.Lens' ServiceAccountCredentials Prelude.Text
+serviceAccountCredentials_accountPassword = Lens.lens (\ServiceAccountCredentials' {accountPassword} -> accountPassword) (\s@ServiceAccountCredentials' {} a -> s {accountPassword = a} :: ServiceAccountCredentials) Prelude.. Data._Sensitive
+
+instance Data.FromJSON ServiceAccountCredentials where
+  parseJSON =
+    Data.withObject
+      "ServiceAccountCredentials"
+      ( \x ->
+          ServiceAccountCredentials'
+            Prelude.<$> (x Data..: "AccountName")
+            Prelude.<*> (x Data..: "AccountPassword")
+      )
+
+instance Prelude.Hashable ServiceAccountCredentials where
+  hashWithSalt _salt ServiceAccountCredentials' {..} =
+    _salt
+      `Prelude.hashWithSalt` accountName
+      `Prelude.hashWithSalt` accountPassword
+
+instance Prelude.NFData ServiceAccountCredentials where
+  rnf ServiceAccountCredentials' {..} =
+    Prelude.rnf accountName
+      `Prelude.seq` Prelude.rnf accountPassword
+
+instance Data.ToJSON ServiceAccountCredentials where
+  toJSON ServiceAccountCredentials' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("AccountName" Data..= accountName),
+            Prelude.Just
+              ("AccountPassword" Data..= accountPassword)
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/Session.hs b/gen/Amazonka/AppStream/Types/Session.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/Session.hs
@@ -0,0 +1,223 @@
+{-# 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.AppStream.Types.Session
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.Session where
+
+import Amazonka.AppStream.Types.AuthenticationType
+import Amazonka.AppStream.Types.NetworkAccessConfiguration
+import Amazonka.AppStream.Types.SessionConnectionState
+import Amazonka.AppStream.Types.SessionState
+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
+
+-- | Describes a streaming session.
+--
+-- /See:/ 'newSession' smart constructor.
+data Session = Session'
+  { -- | The authentication method. The user is authenticated using a streaming
+    -- URL (@API@) or SAML 2.0 federation (@SAML@).
+    authenticationType :: Prelude.Maybe AuthenticationType,
+    -- | Specifies whether a user is connected to the streaming session.
+    connectionState :: Prelude.Maybe SessionConnectionState,
+    -- | The time when the streaming session is set to expire. This time is based
+    -- on the @MaxUserDurationinSeconds@ value, which determines the maximum
+    -- length of time that a streaming session can run. A streaming session
+    -- might end earlier than the time specified in @SessionMaxExpirationTime@,
+    -- when the @DisconnectTimeOutInSeconds@ elapses or the user chooses to end
+    -- his or her session. If the @DisconnectTimeOutInSeconds@ elapses, or the
+    -- user chooses to end his or her session, the streaming instance is
+    -- terminated and the streaming session ends.
+    maxExpirationTime :: Prelude.Maybe Data.POSIX,
+    -- | The network details for the streaming session.
+    networkAccessConfiguration :: Prelude.Maybe NetworkAccessConfiguration,
+    -- | The time when a streaming instance is dedicated for the user.
+    startTime :: Prelude.Maybe Data.POSIX,
+    -- | The identifier of the streaming session.
+    id :: Prelude.Text,
+    -- | The identifier of the user for whom the session was created.
+    userId :: Prelude.Text,
+    -- | The name of the stack for the streaming session.
+    stackName :: Prelude.Text,
+    -- | The name of the fleet for the streaming session.
+    fleetName :: Prelude.Text,
+    -- | The current state of the streaming session.
+    state :: SessionState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Session' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'authenticationType', 'session_authenticationType' - The authentication method. The user is authenticated using a streaming
+-- URL (@API@) or SAML 2.0 federation (@SAML@).
+--
+-- 'connectionState', 'session_connectionState' - Specifies whether a user is connected to the streaming session.
+--
+-- 'maxExpirationTime', 'session_maxExpirationTime' - The time when the streaming session is set to expire. This time is based
+-- on the @MaxUserDurationinSeconds@ value, which determines the maximum
+-- length of time that a streaming session can run. A streaming session
+-- might end earlier than the time specified in @SessionMaxExpirationTime@,
+-- when the @DisconnectTimeOutInSeconds@ elapses or the user chooses to end
+-- his or her session. If the @DisconnectTimeOutInSeconds@ elapses, or the
+-- user chooses to end his or her session, the streaming instance is
+-- terminated and the streaming session ends.
+--
+-- 'networkAccessConfiguration', 'session_networkAccessConfiguration' - The network details for the streaming session.
+--
+-- 'startTime', 'session_startTime' - The time when a streaming instance is dedicated for the user.
+--
+-- 'id', 'session_id' - The identifier of the streaming session.
+--
+-- 'userId', 'session_userId' - The identifier of the user for whom the session was created.
+--
+-- 'stackName', 'session_stackName' - The name of the stack for the streaming session.
+--
+-- 'fleetName', 'session_fleetName' - The name of the fleet for the streaming session.
+--
+-- 'state', 'session_state' - The current state of the streaming session.
+newSession ::
+  -- | 'id'
+  Prelude.Text ->
+  -- | 'userId'
+  Prelude.Text ->
+  -- | 'stackName'
+  Prelude.Text ->
+  -- | 'fleetName'
+  Prelude.Text ->
+  -- | 'state'
+  SessionState ->
+  Session
+newSession
+  pId_
+  pUserId_
+  pStackName_
+  pFleetName_
+  pState_ =
+    Session'
+      { authenticationType = Prelude.Nothing,
+        connectionState = Prelude.Nothing,
+        maxExpirationTime = Prelude.Nothing,
+        networkAccessConfiguration = Prelude.Nothing,
+        startTime = Prelude.Nothing,
+        id = pId_,
+        userId = pUserId_,
+        stackName = pStackName_,
+        fleetName = pFleetName_,
+        state = pState_
+      }
+
+-- | The authentication method. The user is authenticated using a streaming
+-- URL (@API@) or SAML 2.0 federation (@SAML@).
+session_authenticationType :: Lens.Lens' Session (Prelude.Maybe AuthenticationType)
+session_authenticationType = Lens.lens (\Session' {authenticationType} -> authenticationType) (\s@Session' {} a -> s {authenticationType = a} :: Session)
+
+-- | Specifies whether a user is connected to the streaming session.
+session_connectionState :: Lens.Lens' Session (Prelude.Maybe SessionConnectionState)
+session_connectionState = Lens.lens (\Session' {connectionState} -> connectionState) (\s@Session' {} a -> s {connectionState = a} :: Session)
+
+-- | The time when the streaming session is set to expire. This time is based
+-- on the @MaxUserDurationinSeconds@ value, which determines the maximum
+-- length of time that a streaming session can run. A streaming session
+-- might end earlier than the time specified in @SessionMaxExpirationTime@,
+-- when the @DisconnectTimeOutInSeconds@ elapses or the user chooses to end
+-- his or her session. If the @DisconnectTimeOutInSeconds@ elapses, or the
+-- user chooses to end his or her session, the streaming instance is
+-- terminated and the streaming session ends.
+session_maxExpirationTime :: Lens.Lens' Session (Prelude.Maybe Prelude.UTCTime)
+session_maxExpirationTime = Lens.lens (\Session' {maxExpirationTime} -> maxExpirationTime) (\s@Session' {} a -> s {maxExpirationTime = a} :: Session) Prelude.. Lens.mapping Data._Time
+
+-- | The network details for the streaming session.
+session_networkAccessConfiguration :: Lens.Lens' Session (Prelude.Maybe NetworkAccessConfiguration)
+session_networkAccessConfiguration = Lens.lens (\Session' {networkAccessConfiguration} -> networkAccessConfiguration) (\s@Session' {} a -> s {networkAccessConfiguration = a} :: Session)
+
+-- | The time when a streaming instance is dedicated for the user.
+session_startTime :: Lens.Lens' Session (Prelude.Maybe Prelude.UTCTime)
+session_startTime = Lens.lens (\Session' {startTime} -> startTime) (\s@Session' {} a -> s {startTime = a} :: Session) Prelude.. Lens.mapping Data._Time
+
+-- | The identifier of the streaming session.
+session_id :: Lens.Lens' Session Prelude.Text
+session_id = Lens.lens (\Session' {id} -> id) (\s@Session' {} a -> s {id = a} :: Session)
+
+-- | The identifier of the user for whom the session was created.
+session_userId :: Lens.Lens' Session Prelude.Text
+session_userId = Lens.lens (\Session' {userId} -> userId) (\s@Session' {} a -> s {userId = a} :: Session)
+
+-- | The name of the stack for the streaming session.
+session_stackName :: Lens.Lens' Session Prelude.Text
+session_stackName = Lens.lens (\Session' {stackName} -> stackName) (\s@Session' {} a -> s {stackName = a} :: Session)
+
+-- | The name of the fleet for the streaming session.
+session_fleetName :: Lens.Lens' Session Prelude.Text
+session_fleetName = Lens.lens (\Session' {fleetName} -> fleetName) (\s@Session' {} a -> s {fleetName = a} :: Session)
+
+-- | The current state of the streaming session.
+session_state :: Lens.Lens' Session SessionState
+session_state = Lens.lens (\Session' {state} -> state) (\s@Session' {} a -> s {state = a} :: Session)
+
+instance Data.FromJSON Session where
+  parseJSON =
+    Data.withObject
+      "Session"
+      ( \x ->
+          Session'
+            Prelude.<$> (x Data..:? "AuthenticationType")
+            Prelude.<*> (x Data..:? "ConnectionState")
+            Prelude.<*> (x Data..:? "MaxExpirationTime")
+            Prelude.<*> (x Data..:? "NetworkAccessConfiguration")
+            Prelude.<*> (x Data..:? "StartTime")
+            Prelude.<*> (x Data..: "Id")
+            Prelude.<*> (x Data..: "UserId")
+            Prelude.<*> (x Data..: "StackName")
+            Prelude.<*> (x Data..: "FleetName")
+            Prelude.<*> (x Data..: "State")
+      )
+
+instance Prelude.Hashable Session where
+  hashWithSalt _salt Session' {..} =
+    _salt
+      `Prelude.hashWithSalt` authenticationType
+      `Prelude.hashWithSalt` connectionState
+      `Prelude.hashWithSalt` maxExpirationTime
+      `Prelude.hashWithSalt` networkAccessConfiguration
+      `Prelude.hashWithSalt` startTime
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` userId
+      `Prelude.hashWithSalt` stackName
+      `Prelude.hashWithSalt` fleetName
+      `Prelude.hashWithSalt` state
+
+instance Prelude.NFData Session where
+  rnf Session' {..} =
+    Prelude.rnf authenticationType
+      `Prelude.seq` Prelude.rnf connectionState
+      `Prelude.seq` Prelude.rnf maxExpirationTime
+      `Prelude.seq` Prelude.rnf networkAccessConfiguration
+      `Prelude.seq` Prelude.rnf startTime
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf userId
+      `Prelude.seq` Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf fleetName
+      `Prelude.seq` Prelude.rnf state
diff --git a/gen/Amazonka/AppStream/Types/SessionConnectionState.hs b/gen/Amazonka/AppStream/Types/SessionConnectionState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/SessionConnectionState.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.AppStream.Types.SessionConnectionState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.SessionConnectionState
+  ( SessionConnectionState
+      ( ..,
+        SessionConnectionState_CONNECTED,
+        SessionConnectionState_NOT_CONNECTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SessionConnectionState = SessionConnectionState'
+  { fromSessionConnectionState ::
+      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 SessionConnectionState_CONNECTED :: SessionConnectionState
+pattern SessionConnectionState_CONNECTED = SessionConnectionState' "CONNECTED"
+
+pattern SessionConnectionState_NOT_CONNECTED :: SessionConnectionState
+pattern SessionConnectionState_NOT_CONNECTED = SessionConnectionState' "NOT_CONNECTED"
+
+{-# COMPLETE
+  SessionConnectionState_CONNECTED,
+  SessionConnectionState_NOT_CONNECTED,
+  SessionConnectionState'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/SessionState.hs b/gen/Amazonka/AppStream/Types/SessionState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/SessionState.hs
@@ -0,0 +1,77 @@
+{-# 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.AppStream.Types.SessionState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.SessionState
+  ( SessionState
+      ( ..,
+        SessionState_ACTIVE,
+        SessionState_EXPIRED,
+        SessionState_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Possible values for the state of a streaming session.
+newtype SessionState = SessionState'
+  { fromSessionState ::
+      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 SessionState_ACTIVE :: SessionState
+pattern SessionState_ACTIVE = SessionState' "ACTIVE"
+
+pattern SessionState_EXPIRED :: SessionState
+pattern SessionState_EXPIRED = SessionState' "EXPIRED"
+
+pattern SessionState_PENDING :: SessionState
+pattern SessionState_PENDING = SessionState' "PENDING"
+
+{-# COMPLETE
+  SessionState_ACTIVE,
+  SessionState_EXPIRED,
+  SessionState_PENDING,
+  SessionState'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/SharedImagePermissions.hs b/gen/Amazonka/AppStream/Types/SharedImagePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/SharedImagePermissions.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.SharedImagePermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.SharedImagePermissions where
+
+import Amazonka.AppStream.Types.ImagePermissions
+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
+
+-- | Describes the permissions that are available to the specified AWS
+-- account for a shared image.
+--
+-- /See:/ 'newSharedImagePermissions' smart constructor.
+data SharedImagePermissions = SharedImagePermissions'
+  { -- | The 12-digit identifier of the AWS account with which the image is
+    -- shared.
+    sharedAccountId :: Prelude.Text,
+    -- | Describes the permissions for a shared image.
+    imagePermissions :: ImagePermissions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SharedImagePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sharedAccountId', 'sharedImagePermissions_sharedAccountId' - The 12-digit identifier of the AWS account with which the image is
+-- shared.
+--
+-- 'imagePermissions', 'sharedImagePermissions_imagePermissions' - Describes the permissions for a shared image.
+newSharedImagePermissions ::
+  -- | 'sharedAccountId'
+  Prelude.Text ->
+  -- | 'imagePermissions'
+  ImagePermissions ->
+  SharedImagePermissions
+newSharedImagePermissions
+  pSharedAccountId_
+  pImagePermissions_ =
+    SharedImagePermissions'
+      { sharedAccountId =
+          pSharedAccountId_,
+        imagePermissions = pImagePermissions_
+      }
+
+-- | The 12-digit identifier of the AWS account with which the image is
+-- shared.
+sharedImagePermissions_sharedAccountId :: Lens.Lens' SharedImagePermissions Prelude.Text
+sharedImagePermissions_sharedAccountId = Lens.lens (\SharedImagePermissions' {sharedAccountId} -> sharedAccountId) (\s@SharedImagePermissions' {} a -> s {sharedAccountId = a} :: SharedImagePermissions)
+
+-- | Describes the permissions for a shared image.
+sharedImagePermissions_imagePermissions :: Lens.Lens' SharedImagePermissions ImagePermissions
+sharedImagePermissions_imagePermissions = Lens.lens (\SharedImagePermissions' {imagePermissions} -> imagePermissions) (\s@SharedImagePermissions' {} a -> s {imagePermissions = a} :: SharedImagePermissions)
+
+instance Data.FromJSON SharedImagePermissions where
+  parseJSON =
+    Data.withObject
+      "SharedImagePermissions"
+      ( \x ->
+          SharedImagePermissions'
+            Prelude.<$> (x Data..: "sharedAccountId")
+            Prelude.<*> (x Data..: "imagePermissions")
+      )
+
+instance Prelude.Hashable SharedImagePermissions where
+  hashWithSalt _salt SharedImagePermissions' {..} =
+    _salt
+      `Prelude.hashWithSalt` sharedAccountId
+      `Prelude.hashWithSalt` imagePermissions
+
+instance Prelude.NFData SharedImagePermissions where
+  rnf SharedImagePermissions' {..} =
+    Prelude.rnf sharedAccountId
+      `Prelude.seq` Prelude.rnf imagePermissions
diff --git a/gen/Amazonka/AppStream/Types/Stack.hs b/gen/Amazonka/AppStream/Types/Stack.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/Stack.hs
@@ -0,0 +1,260 @@
+{-# 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.AppStream.Types.Stack
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.Stack where
+
+import Amazonka.AppStream.Types.AccessEndpoint
+import Amazonka.AppStream.Types.ApplicationSettingsResponse
+import Amazonka.AppStream.Types.StackError
+import Amazonka.AppStream.Types.StorageConnector
+import Amazonka.AppStream.Types.StreamingExperienceSettings
+import Amazonka.AppStream.Types.UserSetting
+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
+
+-- | Describes a stack.
+--
+-- /See:/ 'newStack' smart constructor.
+data Stack = Stack'
+  { -- | The list of virtual private cloud (VPC) interface endpoint objects.
+    -- Users of the stack can connect to AppStream 2.0 only through the
+    -- specified endpoints.
+    accessEndpoints :: Prelude.Maybe (Prelude.NonEmpty AccessEndpoint),
+    -- | The persistent application settings for users of the stack.
+    applicationSettings :: Prelude.Maybe ApplicationSettingsResponse,
+    -- | The ARN of the stack.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The time the stack was created.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | The description to display.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The stack name to display.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The domains where AppStream 2.0 streaming sessions can be embedded in an
+    -- iframe. You must approve the domains that you want to host embedded
+    -- AppStream 2.0 streaming sessions.
+    embedHostDomains :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The URL that users are redirected to after they click the Send Feedback
+    -- link. If no URL is specified, no Send Feedback link is displayed.
+    feedbackURL :: Prelude.Maybe Prelude.Text,
+    -- | The URL that users are redirected to after their streaming session ends.
+    redirectURL :: Prelude.Maybe Prelude.Text,
+    -- | The errors for the stack.
+    stackErrors :: Prelude.Maybe [StackError],
+    -- | The storage connectors to enable.
+    storageConnectors :: Prelude.Maybe [StorageConnector],
+    -- | The streaming protocol you want your stack to prefer. This can be UDP or
+    -- TCP. Currently, UDP is only supported in the Windows native client.
+    streamingExperienceSettings :: Prelude.Maybe StreamingExperienceSettings,
+    -- | The actions that are enabled or disabled for users during their
+    -- streaming sessions. By default these actions are enabled.
+    userSettings :: Prelude.Maybe (Prelude.NonEmpty UserSetting),
+    -- | The name of the stack.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Stack' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessEndpoints', 'stack_accessEndpoints' - The list of virtual private cloud (VPC) interface endpoint objects.
+-- Users of the stack can connect to AppStream 2.0 only through the
+-- specified endpoints.
+--
+-- 'applicationSettings', 'stack_applicationSettings' - The persistent application settings for users of the stack.
+--
+-- 'arn', 'stack_arn' - The ARN of the stack.
+--
+-- 'createdTime', 'stack_createdTime' - The time the stack was created.
+--
+-- 'description', 'stack_description' - The description to display.
+--
+-- 'displayName', 'stack_displayName' - The stack name to display.
+--
+-- 'embedHostDomains', 'stack_embedHostDomains' - The domains where AppStream 2.0 streaming sessions can be embedded in an
+-- iframe. You must approve the domains that you want to host embedded
+-- AppStream 2.0 streaming sessions.
+--
+-- 'feedbackURL', 'stack_feedbackURL' - The URL that users are redirected to after they click the Send Feedback
+-- link. If no URL is specified, no Send Feedback link is displayed.
+--
+-- 'redirectURL', 'stack_redirectURL' - The URL that users are redirected to after their streaming session ends.
+--
+-- 'stackErrors', 'stack_stackErrors' - The errors for the stack.
+--
+-- 'storageConnectors', 'stack_storageConnectors' - The storage connectors to enable.
+--
+-- 'streamingExperienceSettings', 'stack_streamingExperienceSettings' - The streaming protocol you want your stack to prefer. This can be UDP or
+-- TCP. Currently, UDP is only supported in the Windows native client.
+--
+-- 'userSettings', 'stack_userSettings' - The actions that are enabled or disabled for users during their
+-- streaming sessions. By default these actions are enabled.
+--
+-- 'name', 'stack_name' - The name of the stack.
+newStack ::
+  -- | 'name'
+  Prelude.Text ->
+  Stack
+newStack pName_ =
+  Stack'
+    { accessEndpoints = Prelude.Nothing,
+      applicationSettings = Prelude.Nothing,
+      arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      embedHostDomains = Prelude.Nothing,
+      feedbackURL = Prelude.Nothing,
+      redirectURL = Prelude.Nothing,
+      stackErrors = Prelude.Nothing,
+      storageConnectors = Prelude.Nothing,
+      streamingExperienceSettings = Prelude.Nothing,
+      userSettings = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The list of virtual private cloud (VPC) interface endpoint objects.
+-- Users of the stack can connect to AppStream 2.0 only through the
+-- specified endpoints.
+stack_accessEndpoints :: Lens.Lens' Stack (Prelude.Maybe (Prelude.NonEmpty AccessEndpoint))
+stack_accessEndpoints = Lens.lens (\Stack' {accessEndpoints} -> accessEndpoints) (\s@Stack' {} a -> s {accessEndpoints = a} :: Stack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The persistent application settings for users of the stack.
+stack_applicationSettings :: Lens.Lens' Stack (Prelude.Maybe ApplicationSettingsResponse)
+stack_applicationSettings = Lens.lens (\Stack' {applicationSettings} -> applicationSettings) (\s@Stack' {} a -> s {applicationSettings = a} :: Stack)
+
+-- | The ARN of the stack.
+stack_arn :: Lens.Lens' Stack (Prelude.Maybe Prelude.Text)
+stack_arn = Lens.lens (\Stack' {arn} -> arn) (\s@Stack' {} a -> s {arn = a} :: Stack)
+
+-- | The time the stack was created.
+stack_createdTime :: Lens.Lens' Stack (Prelude.Maybe Prelude.UTCTime)
+stack_createdTime = Lens.lens (\Stack' {createdTime} -> createdTime) (\s@Stack' {} a -> s {createdTime = a} :: Stack) Prelude.. Lens.mapping Data._Time
+
+-- | The description to display.
+stack_description :: Lens.Lens' Stack (Prelude.Maybe Prelude.Text)
+stack_description = Lens.lens (\Stack' {description} -> description) (\s@Stack' {} a -> s {description = a} :: Stack)
+
+-- | The stack name to display.
+stack_displayName :: Lens.Lens' Stack (Prelude.Maybe Prelude.Text)
+stack_displayName = Lens.lens (\Stack' {displayName} -> displayName) (\s@Stack' {} a -> s {displayName = a} :: Stack)
+
+-- | The domains where AppStream 2.0 streaming sessions can be embedded in an
+-- iframe. You must approve the domains that you want to host embedded
+-- AppStream 2.0 streaming sessions.
+stack_embedHostDomains :: Lens.Lens' Stack (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+stack_embedHostDomains = Lens.lens (\Stack' {embedHostDomains} -> embedHostDomains) (\s@Stack' {} a -> s {embedHostDomains = a} :: Stack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The URL that users are redirected to after they click the Send Feedback
+-- link. If no URL is specified, no Send Feedback link is displayed.
+stack_feedbackURL :: Lens.Lens' Stack (Prelude.Maybe Prelude.Text)
+stack_feedbackURL = Lens.lens (\Stack' {feedbackURL} -> feedbackURL) (\s@Stack' {} a -> s {feedbackURL = a} :: Stack)
+
+-- | The URL that users are redirected to after their streaming session ends.
+stack_redirectURL :: Lens.Lens' Stack (Prelude.Maybe Prelude.Text)
+stack_redirectURL = Lens.lens (\Stack' {redirectURL} -> redirectURL) (\s@Stack' {} a -> s {redirectURL = a} :: Stack)
+
+-- | The errors for the stack.
+stack_stackErrors :: Lens.Lens' Stack (Prelude.Maybe [StackError])
+stack_stackErrors = Lens.lens (\Stack' {stackErrors} -> stackErrors) (\s@Stack' {} a -> s {stackErrors = a} :: Stack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The storage connectors to enable.
+stack_storageConnectors :: Lens.Lens' Stack (Prelude.Maybe [StorageConnector])
+stack_storageConnectors = Lens.lens (\Stack' {storageConnectors} -> storageConnectors) (\s@Stack' {} a -> s {storageConnectors = a} :: Stack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The streaming protocol you want your stack to prefer. This can be UDP or
+-- TCP. Currently, UDP is only supported in the Windows native client.
+stack_streamingExperienceSettings :: Lens.Lens' Stack (Prelude.Maybe StreamingExperienceSettings)
+stack_streamingExperienceSettings = Lens.lens (\Stack' {streamingExperienceSettings} -> streamingExperienceSettings) (\s@Stack' {} a -> s {streamingExperienceSettings = a} :: Stack)
+
+-- | The actions that are enabled or disabled for users during their
+-- streaming sessions. By default these actions are enabled.
+stack_userSettings :: Lens.Lens' Stack (Prelude.Maybe (Prelude.NonEmpty UserSetting))
+stack_userSettings = Lens.lens (\Stack' {userSettings} -> userSettings) (\s@Stack' {} a -> s {userSettings = a} :: Stack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the stack.
+stack_name :: Lens.Lens' Stack Prelude.Text
+stack_name = Lens.lens (\Stack' {name} -> name) (\s@Stack' {} a -> s {name = a} :: Stack)
+
+instance Data.FromJSON Stack where
+  parseJSON =
+    Data.withObject
+      "Stack"
+      ( \x ->
+          Stack'
+            Prelude.<$> (x Data..:? "AccessEndpoints")
+            Prelude.<*> (x Data..:? "ApplicationSettings")
+            Prelude.<*> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "DisplayName")
+            Prelude.<*> (x Data..:? "EmbedHostDomains")
+            Prelude.<*> (x Data..:? "FeedbackURL")
+            Prelude.<*> (x Data..:? "RedirectURL")
+            Prelude.<*> (x Data..:? "StackErrors" Data..!= Prelude.mempty)
+            Prelude.<*> ( x
+                            Data..:? "StorageConnectors"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "StreamingExperienceSettings")
+            Prelude.<*> (x Data..:? "UserSettings")
+            Prelude.<*> (x Data..: "Name")
+      )
+
+instance Prelude.Hashable Stack where
+  hashWithSalt _salt Stack' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessEndpoints
+      `Prelude.hashWithSalt` applicationSettings
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` embedHostDomains
+      `Prelude.hashWithSalt` feedbackURL
+      `Prelude.hashWithSalt` redirectURL
+      `Prelude.hashWithSalt` stackErrors
+      `Prelude.hashWithSalt` storageConnectors
+      `Prelude.hashWithSalt` streamingExperienceSettings
+      `Prelude.hashWithSalt` userSettings
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData Stack where
+  rnf Stack' {..} =
+    Prelude.rnf accessEndpoints
+      `Prelude.seq` Prelude.rnf applicationSettings
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf embedHostDomains
+      `Prelude.seq` Prelude.rnf feedbackURL
+      `Prelude.seq` Prelude.rnf redirectURL
+      `Prelude.seq` Prelude.rnf stackErrors
+      `Prelude.seq` Prelude.rnf storageConnectors
+      `Prelude.seq` Prelude.rnf streamingExperienceSettings
+      `Prelude.seq` Prelude.rnf userSettings
+      `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/AppStream/Types/StackAttribute.hs b/gen/Amazonka/AppStream/Types/StackAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/StackAttribute.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.StackAttribute
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.StackAttribute
+  ( StackAttribute
+      ( ..,
+        StackAttribute_ACCESS_ENDPOINTS,
+        StackAttribute_EMBED_HOST_DOMAINS,
+        StackAttribute_FEEDBACK_URL,
+        StackAttribute_IAM_ROLE_ARN,
+        StackAttribute_REDIRECT_URL,
+        StackAttribute_STORAGE_CONNECTORS,
+        StackAttribute_STORAGE_CONNECTOR_GOOGLE_DRIVE,
+        StackAttribute_STORAGE_CONNECTOR_HOMEFOLDERS,
+        StackAttribute_STORAGE_CONNECTOR_ONE_DRIVE,
+        StackAttribute_STREAMING_EXPERIENCE_SETTINGS,
+        StackAttribute_THEME_NAME,
+        StackAttribute_USER_SETTINGS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StackAttribute = StackAttribute'
+  { fromStackAttribute ::
+      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 StackAttribute_ACCESS_ENDPOINTS :: StackAttribute
+pattern StackAttribute_ACCESS_ENDPOINTS = StackAttribute' "ACCESS_ENDPOINTS"
+
+pattern StackAttribute_EMBED_HOST_DOMAINS :: StackAttribute
+pattern StackAttribute_EMBED_HOST_DOMAINS = StackAttribute' "EMBED_HOST_DOMAINS"
+
+pattern StackAttribute_FEEDBACK_URL :: StackAttribute
+pattern StackAttribute_FEEDBACK_URL = StackAttribute' "FEEDBACK_URL"
+
+pattern StackAttribute_IAM_ROLE_ARN :: StackAttribute
+pattern StackAttribute_IAM_ROLE_ARN = StackAttribute' "IAM_ROLE_ARN"
+
+pattern StackAttribute_REDIRECT_URL :: StackAttribute
+pattern StackAttribute_REDIRECT_URL = StackAttribute' "REDIRECT_URL"
+
+pattern StackAttribute_STORAGE_CONNECTORS :: StackAttribute
+pattern StackAttribute_STORAGE_CONNECTORS = StackAttribute' "STORAGE_CONNECTORS"
+
+pattern StackAttribute_STORAGE_CONNECTOR_GOOGLE_DRIVE :: StackAttribute
+pattern StackAttribute_STORAGE_CONNECTOR_GOOGLE_DRIVE = StackAttribute' "STORAGE_CONNECTOR_GOOGLE_DRIVE"
+
+pattern StackAttribute_STORAGE_CONNECTOR_HOMEFOLDERS :: StackAttribute
+pattern StackAttribute_STORAGE_CONNECTOR_HOMEFOLDERS = StackAttribute' "STORAGE_CONNECTOR_HOMEFOLDERS"
+
+pattern StackAttribute_STORAGE_CONNECTOR_ONE_DRIVE :: StackAttribute
+pattern StackAttribute_STORAGE_CONNECTOR_ONE_DRIVE = StackAttribute' "STORAGE_CONNECTOR_ONE_DRIVE"
+
+pattern StackAttribute_STREAMING_EXPERIENCE_SETTINGS :: StackAttribute
+pattern StackAttribute_STREAMING_EXPERIENCE_SETTINGS = StackAttribute' "STREAMING_EXPERIENCE_SETTINGS"
+
+pattern StackAttribute_THEME_NAME :: StackAttribute
+pattern StackAttribute_THEME_NAME = StackAttribute' "THEME_NAME"
+
+pattern StackAttribute_USER_SETTINGS :: StackAttribute
+pattern StackAttribute_USER_SETTINGS = StackAttribute' "USER_SETTINGS"
+
+{-# COMPLETE
+  StackAttribute_ACCESS_ENDPOINTS,
+  StackAttribute_EMBED_HOST_DOMAINS,
+  StackAttribute_FEEDBACK_URL,
+  StackAttribute_IAM_ROLE_ARN,
+  StackAttribute_REDIRECT_URL,
+  StackAttribute_STORAGE_CONNECTORS,
+  StackAttribute_STORAGE_CONNECTOR_GOOGLE_DRIVE,
+  StackAttribute_STORAGE_CONNECTOR_HOMEFOLDERS,
+  StackAttribute_STORAGE_CONNECTOR_ONE_DRIVE,
+  StackAttribute_STREAMING_EXPERIENCE_SETTINGS,
+  StackAttribute_THEME_NAME,
+  StackAttribute_USER_SETTINGS,
+  StackAttribute'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/StackError.hs b/gen/Amazonka/AppStream/Types/StackError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/StackError.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.StackError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.StackError where
+
+import Amazonka.AppStream.Types.StackErrorCode
+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
+
+-- | Describes a stack error.
+--
+-- /See:/ 'newStackError' smart constructor.
+data StackError = StackError'
+  { -- | The error code.
+    errorCode :: Prelude.Maybe StackErrorCode,
+    -- | The error message.
+    errorMessage :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StackError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'stackError_errorCode' - The error code.
+--
+-- 'errorMessage', 'stackError_errorMessage' - The error message.
+newStackError ::
+  StackError
+newStackError =
+  StackError'
+    { errorCode = Prelude.Nothing,
+      errorMessage = Prelude.Nothing
+    }
+
+-- | The error code.
+stackError_errorCode :: Lens.Lens' StackError (Prelude.Maybe StackErrorCode)
+stackError_errorCode = Lens.lens (\StackError' {errorCode} -> errorCode) (\s@StackError' {} a -> s {errorCode = a} :: StackError)
+
+-- | The error message.
+stackError_errorMessage :: Lens.Lens' StackError (Prelude.Maybe Prelude.Text)
+stackError_errorMessage = Lens.lens (\StackError' {errorMessage} -> errorMessage) (\s@StackError' {} a -> s {errorMessage = a} :: StackError)
+
+instance Data.FromJSON StackError where
+  parseJSON =
+    Data.withObject
+      "StackError"
+      ( \x ->
+          StackError'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+      )
+
+instance Prelude.Hashable StackError where
+  hashWithSalt _salt StackError' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+
+instance Prelude.NFData StackError where
+  rnf StackError' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
diff --git a/gen/Amazonka/AppStream/Types/StackErrorCode.hs b/gen/Amazonka/AppStream/Types/StackErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/StackErrorCode.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.AppStream.Types.StackErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.StackErrorCode
+  ( StackErrorCode
+      ( ..,
+        StackErrorCode_INTERNAL_SERVICE_ERROR,
+        StackErrorCode_STORAGE_CONNECTOR_ERROR
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StackErrorCode = StackErrorCode'
+  { fromStackErrorCode ::
+      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 StackErrorCode_INTERNAL_SERVICE_ERROR :: StackErrorCode
+pattern StackErrorCode_INTERNAL_SERVICE_ERROR = StackErrorCode' "INTERNAL_SERVICE_ERROR"
+
+pattern StackErrorCode_STORAGE_CONNECTOR_ERROR :: StackErrorCode
+pattern StackErrorCode_STORAGE_CONNECTOR_ERROR = StackErrorCode' "STORAGE_CONNECTOR_ERROR"
+
+{-# COMPLETE
+  StackErrorCode_INTERNAL_SERVICE_ERROR,
+  StackErrorCode_STORAGE_CONNECTOR_ERROR,
+  StackErrorCode'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/StorageConnector.hs b/gen/Amazonka/AppStream/Types/StorageConnector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/StorageConnector.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.StorageConnector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.StorageConnector where
+
+import Amazonka.AppStream.Types.StorageConnectorType
+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
+
+-- | Describes a connector that enables persistent storage for users.
+--
+-- /See:/ 'newStorageConnector' smart constructor.
+data StorageConnector = StorageConnector'
+  { -- | The names of the domains for the account.
+    domains :: Prelude.Maybe [Prelude.Text],
+    -- | The ARN of the storage connector.
+    resourceIdentifier :: Prelude.Maybe Prelude.Text,
+    -- | The type of storage connector.
+    connectorType :: StorageConnectorType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StorageConnector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domains', 'storageConnector_domains' - The names of the domains for the account.
+--
+-- 'resourceIdentifier', 'storageConnector_resourceIdentifier' - The ARN of the storage connector.
+--
+-- 'connectorType', 'storageConnector_connectorType' - The type of storage connector.
+newStorageConnector ::
+  -- | 'connectorType'
+  StorageConnectorType ->
+  StorageConnector
+newStorageConnector pConnectorType_ =
+  StorageConnector'
+    { domains = Prelude.Nothing,
+      resourceIdentifier = Prelude.Nothing,
+      connectorType = pConnectorType_
+    }
+
+-- | The names of the domains for the account.
+storageConnector_domains :: Lens.Lens' StorageConnector (Prelude.Maybe [Prelude.Text])
+storageConnector_domains = Lens.lens (\StorageConnector' {domains} -> domains) (\s@StorageConnector' {} a -> s {domains = a} :: StorageConnector) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ARN of the storage connector.
+storageConnector_resourceIdentifier :: Lens.Lens' StorageConnector (Prelude.Maybe Prelude.Text)
+storageConnector_resourceIdentifier = Lens.lens (\StorageConnector' {resourceIdentifier} -> resourceIdentifier) (\s@StorageConnector' {} a -> s {resourceIdentifier = a} :: StorageConnector)
+
+-- | The type of storage connector.
+storageConnector_connectorType :: Lens.Lens' StorageConnector StorageConnectorType
+storageConnector_connectorType = Lens.lens (\StorageConnector' {connectorType} -> connectorType) (\s@StorageConnector' {} a -> s {connectorType = a} :: StorageConnector)
+
+instance Data.FromJSON StorageConnector where
+  parseJSON =
+    Data.withObject
+      "StorageConnector"
+      ( \x ->
+          StorageConnector'
+            Prelude.<$> (x Data..:? "Domains" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "ResourceIdentifier")
+            Prelude.<*> (x Data..: "ConnectorType")
+      )
+
+instance Prelude.Hashable StorageConnector where
+  hashWithSalt _salt StorageConnector' {..} =
+    _salt
+      `Prelude.hashWithSalt` domains
+      `Prelude.hashWithSalt` resourceIdentifier
+      `Prelude.hashWithSalt` connectorType
+
+instance Prelude.NFData StorageConnector where
+  rnf StorageConnector' {..} =
+    Prelude.rnf domains
+      `Prelude.seq` Prelude.rnf resourceIdentifier
+      `Prelude.seq` Prelude.rnf connectorType
+
+instance Data.ToJSON StorageConnector where
+  toJSON StorageConnector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Domains" Data..=) Prelude.<$> domains,
+            ("ResourceIdentifier" Data..=)
+              Prelude.<$> resourceIdentifier,
+            Prelude.Just
+              ("ConnectorType" Data..= connectorType)
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/StorageConnectorType.hs b/gen/Amazonka/AppStream/Types/StorageConnectorType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/StorageConnectorType.hs
@@ -0,0 +1,77 @@
+{-# 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.AppStream.Types.StorageConnectorType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.StorageConnectorType
+  ( StorageConnectorType
+      ( ..,
+        StorageConnectorType_GOOGLE_DRIVE,
+        StorageConnectorType_HOMEFOLDERS,
+        StorageConnectorType_ONE_DRIVE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The type of storage connector.
+newtype StorageConnectorType = StorageConnectorType'
+  { fromStorageConnectorType ::
+      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 StorageConnectorType_GOOGLE_DRIVE :: StorageConnectorType
+pattern StorageConnectorType_GOOGLE_DRIVE = StorageConnectorType' "GOOGLE_DRIVE"
+
+pattern StorageConnectorType_HOMEFOLDERS :: StorageConnectorType
+pattern StorageConnectorType_HOMEFOLDERS = StorageConnectorType' "HOMEFOLDERS"
+
+pattern StorageConnectorType_ONE_DRIVE :: StorageConnectorType
+pattern StorageConnectorType_ONE_DRIVE = StorageConnectorType' "ONE_DRIVE"
+
+{-# COMPLETE
+  StorageConnectorType_GOOGLE_DRIVE,
+  StorageConnectorType_HOMEFOLDERS,
+  StorageConnectorType_ONE_DRIVE,
+  StorageConnectorType'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/StreamView.hs b/gen/Amazonka/AppStream/Types/StreamView.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/StreamView.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.AppStream.Types.StreamView
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.StreamView
+  ( StreamView
+      ( ..,
+        StreamView_APP,
+        StreamView_DESKTOP
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StreamView = StreamView'
+  { fromStreamView ::
+      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 StreamView_APP :: StreamView
+pattern StreamView_APP = StreamView' "APP"
+
+pattern StreamView_DESKTOP :: StreamView
+pattern StreamView_DESKTOP = StreamView' "DESKTOP"
+
+{-# COMPLETE
+  StreamView_APP,
+  StreamView_DESKTOP,
+  StreamView'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/StreamingExperienceSettings.hs b/gen/Amazonka/AppStream/Types/StreamingExperienceSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/StreamingExperienceSettings.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.StreamingExperienceSettings
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.StreamingExperienceSettings where
+
+import Amazonka.AppStream.Types.PreferredProtocol
+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 streaming protocol you want your stack to prefer. This can be UDP or
+-- TCP. Currently, UDP is only supported in the Windows native client.
+--
+-- /See:/ 'newStreamingExperienceSettings' smart constructor.
+data StreamingExperienceSettings = StreamingExperienceSettings'
+  { -- | The preferred protocol that you want to use while streaming your
+    -- application.
+    preferredProtocol :: Prelude.Maybe PreferredProtocol
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StreamingExperienceSettings' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'preferredProtocol', 'streamingExperienceSettings_preferredProtocol' - The preferred protocol that you want to use while streaming your
+-- application.
+newStreamingExperienceSettings ::
+  StreamingExperienceSettings
+newStreamingExperienceSettings =
+  StreamingExperienceSettings'
+    { preferredProtocol =
+        Prelude.Nothing
+    }
+
+-- | The preferred protocol that you want to use while streaming your
+-- application.
+streamingExperienceSettings_preferredProtocol :: Lens.Lens' StreamingExperienceSettings (Prelude.Maybe PreferredProtocol)
+streamingExperienceSettings_preferredProtocol = Lens.lens (\StreamingExperienceSettings' {preferredProtocol} -> preferredProtocol) (\s@StreamingExperienceSettings' {} a -> s {preferredProtocol = a} :: StreamingExperienceSettings)
+
+instance Data.FromJSON StreamingExperienceSettings where
+  parseJSON =
+    Data.withObject
+      "StreamingExperienceSettings"
+      ( \x ->
+          StreamingExperienceSettings'
+            Prelude.<$> (x Data..:? "PreferredProtocol")
+      )
+
+instance Prelude.Hashable StreamingExperienceSettings where
+  hashWithSalt _salt StreamingExperienceSettings' {..} =
+    _salt `Prelude.hashWithSalt` preferredProtocol
+
+instance Prelude.NFData StreamingExperienceSettings where
+  rnf StreamingExperienceSettings' {..} =
+    Prelude.rnf preferredProtocol
+
+instance Data.ToJSON StreamingExperienceSettings where
+  toJSON StreamingExperienceSettings' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("PreferredProtocol" Data..=)
+              Prelude.<$> preferredProtocol
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/UsageReportExecutionErrorCode.hs b/gen/Amazonka/AppStream/Types/UsageReportExecutionErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/UsageReportExecutionErrorCode.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.UsageReportExecutionErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.UsageReportExecutionErrorCode
+  ( UsageReportExecutionErrorCode
+      ( ..,
+        UsageReportExecutionErrorCode_ACCESS_DENIED,
+        UsageReportExecutionErrorCode_INTERNAL_SERVICE_ERROR,
+        UsageReportExecutionErrorCode_RESOURCE_NOT_FOUND
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UsageReportExecutionErrorCode = UsageReportExecutionErrorCode'
+  { fromUsageReportExecutionErrorCode ::
+      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 UsageReportExecutionErrorCode_ACCESS_DENIED :: UsageReportExecutionErrorCode
+pattern UsageReportExecutionErrorCode_ACCESS_DENIED = UsageReportExecutionErrorCode' "ACCESS_DENIED"
+
+pattern UsageReportExecutionErrorCode_INTERNAL_SERVICE_ERROR :: UsageReportExecutionErrorCode
+pattern UsageReportExecutionErrorCode_INTERNAL_SERVICE_ERROR = UsageReportExecutionErrorCode' "INTERNAL_SERVICE_ERROR"
+
+pattern UsageReportExecutionErrorCode_RESOURCE_NOT_FOUND :: UsageReportExecutionErrorCode
+pattern UsageReportExecutionErrorCode_RESOURCE_NOT_FOUND = UsageReportExecutionErrorCode' "RESOURCE_NOT_FOUND"
+
+{-# COMPLETE
+  UsageReportExecutionErrorCode_ACCESS_DENIED,
+  UsageReportExecutionErrorCode_INTERNAL_SERVICE_ERROR,
+  UsageReportExecutionErrorCode_RESOURCE_NOT_FOUND,
+  UsageReportExecutionErrorCode'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/UsageReportSchedule.hs b/gen/Amazonka/AppStream/Types/UsageReportSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/UsageReportSchedule.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.AppStream.Types.UsageReportSchedule
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.UsageReportSchedule
+  ( UsageReportSchedule
+      ( ..,
+        UsageReportSchedule_DAILY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UsageReportSchedule = UsageReportSchedule'
+  { fromUsageReportSchedule ::
+      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 UsageReportSchedule_DAILY :: UsageReportSchedule
+pattern UsageReportSchedule_DAILY = UsageReportSchedule' "DAILY"
+
+{-# COMPLETE
+  UsageReportSchedule_DAILY,
+  UsageReportSchedule'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/UsageReportSubscription.hs b/gen/Amazonka/AppStream/Types/UsageReportSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/UsageReportSubscription.hs
@@ -0,0 +1,138 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.UsageReportSubscription
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.UsageReportSubscription where
+
+import Amazonka.AppStream.Types.LastReportGenerationExecutionError
+import Amazonka.AppStream.Types.UsageReportSchedule
+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
+
+-- | Describes information about the usage report subscription.
+--
+-- /See:/ 'newUsageReportSubscription' smart constructor.
+data UsageReportSubscription = UsageReportSubscription'
+  { -- | The time when the last usage report was generated.
+    lastGeneratedReportDate :: Prelude.Maybe Data.POSIX,
+    -- | The Amazon S3 bucket where generated reports are stored.
+    --
+    -- If you enabled on-instance session scripts and Amazon S3 logging for
+    -- your session script configuration, AppStream 2.0 created an S3 bucket to
+    -- store the script output. The bucket is unique to your account and
+    -- Region. When you enable usage reporting in this case, AppStream 2.0 uses
+    -- the same bucket to store your usage reports. If you haven\'t already
+    -- enabled on-instance session scripts, when you enable usage reports,
+    -- AppStream 2.0 creates a new S3 bucket.
+    s3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The schedule for generating usage reports.
+    schedule :: Prelude.Maybe UsageReportSchedule,
+    -- | The errors that were returned if usage reports couldn\'t be generated.
+    subscriptionErrors :: Prelude.Maybe [LastReportGenerationExecutionError]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UsageReportSubscription' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastGeneratedReportDate', 'usageReportSubscription_lastGeneratedReportDate' - The time when the last usage report was generated.
+--
+-- 's3BucketName', 'usageReportSubscription_s3BucketName' - The Amazon S3 bucket where generated reports are stored.
+--
+-- If you enabled on-instance session scripts and Amazon S3 logging for
+-- your session script configuration, AppStream 2.0 created an S3 bucket to
+-- store the script output. The bucket is unique to your account and
+-- Region. When you enable usage reporting in this case, AppStream 2.0 uses
+-- the same bucket to store your usage reports. If you haven\'t already
+-- enabled on-instance session scripts, when you enable usage reports,
+-- AppStream 2.0 creates a new S3 bucket.
+--
+-- 'schedule', 'usageReportSubscription_schedule' - The schedule for generating usage reports.
+--
+-- 'subscriptionErrors', 'usageReportSubscription_subscriptionErrors' - The errors that were returned if usage reports couldn\'t be generated.
+newUsageReportSubscription ::
+  UsageReportSubscription
+newUsageReportSubscription =
+  UsageReportSubscription'
+    { lastGeneratedReportDate =
+        Prelude.Nothing,
+      s3BucketName = Prelude.Nothing,
+      schedule = Prelude.Nothing,
+      subscriptionErrors = Prelude.Nothing
+    }
+
+-- | The time when the last usage report was generated.
+usageReportSubscription_lastGeneratedReportDate :: Lens.Lens' UsageReportSubscription (Prelude.Maybe Prelude.UTCTime)
+usageReportSubscription_lastGeneratedReportDate = Lens.lens (\UsageReportSubscription' {lastGeneratedReportDate} -> lastGeneratedReportDate) (\s@UsageReportSubscription' {} a -> s {lastGeneratedReportDate = a} :: UsageReportSubscription) Prelude.. Lens.mapping Data._Time
+
+-- | The Amazon S3 bucket where generated reports are stored.
+--
+-- If you enabled on-instance session scripts and Amazon S3 logging for
+-- your session script configuration, AppStream 2.0 created an S3 bucket to
+-- store the script output. The bucket is unique to your account and
+-- Region. When you enable usage reporting in this case, AppStream 2.0 uses
+-- the same bucket to store your usage reports. If you haven\'t already
+-- enabled on-instance session scripts, when you enable usage reports,
+-- AppStream 2.0 creates a new S3 bucket.
+usageReportSubscription_s3BucketName :: Lens.Lens' UsageReportSubscription (Prelude.Maybe Prelude.Text)
+usageReportSubscription_s3BucketName = Lens.lens (\UsageReportSubscription' {s3BucketName} -> s3BucketName) (\s@UsageReportSubscription' {} a -> s {s3BucketName = a} :: UsageReportSubscription)
+
+-- | The schedule for generating usage reports.
+usageReportSubscription_schedule :: Lens.Lens' UsageReportSubscription (Prelude.Maybe UsageReportSchedule)
+usageReportSubscription_schedule = Lens.lens (\UsageReportSubscription' {schedule} -> schedule) (\s@UsageReportSubscription' {} a -> s {schedule = a} :: UsageReportSubscription)
+
+-- | The errors that were returned if usage reports couldn\'t be generated.
+usageReportSubscription_subscriptionErrors :: Lens.Lens' UsageReportSubscription (Prelude.Maybe [LastReportGenerationExecutionError])
+usageReportSubscription_subscriptionErrors = Lens.lens (\UsageReportSubscription' {subscriptionErrors} -> subscriptionErrors) (\s@UsageReportSubscription' {} a -> s {subscriptionErrors = a} :: UsageReportSubscription) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON UsageReportSubscription where
+  parseJSON =
+    Data.withObject
+      "UsageReportSubscription"
+      ( \x ->
+          UsageReportSubscription'
+            Prelude.<$> (x Data..:? "LastGeneratedReportDate")
+            Prelude.<*> (x Data..:? "S3BucketName")
+            Prelude.<*> (x Data..:? "Schedule")
+            Prelude.<*> ( x
+                            Data..:? "SubscriptionErrors"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable UsageReportSubscription where
+  hashWithSalt _salt UsageReportSubscription' {..} =
+    _salt
+      `Prelude.hashWithSalt` lastGeneratedReportDate
+      `Prelude.hashWithSalt` s3BucketName
+      `Prelude.hashWithSalt` schedule
+      `Prelude.hashWithSalt` subscriptionErrors
+
+instance Prelude.NFData UsageReportSubscription where
+  rnf UsageReportSubscription' {..} =
+    Prelude.rnf lastGeneratedReportDate
+      `Prelude.seq` Prelude.rnf s3BucketName
+      `Prelude.seq` Prelude.rnf schedule
+      `Prelude.seq` Prelude.rnf subscriptionErrors
diff --git a/gen/Amazonka/AppStream/Types/User.hs b/gen/Amazonka/AppStream/Types/User.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/User.hs
@@ -0,0 +1,201 @@
+{-# 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.AppStream.Types.User
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.User where
+
+import Amazonka.AppStream.Types.AuthenticationType
+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
+
+-- | Describes a user in the user pool.
+--
+-- /See:/ 'newUser' smart constructor.
+data User = User'
+  { -- | The ARN of the user.
+    arn :: Prelude.Maybe Prelude.Text,
+    -- | The date and time the user was created in the user pool.
+    createdTime :: Prelude.Maybe Data.POSIX,
+    -- | Specifies whether the user in the user pool is enabled.
+    enabled :: Prelude.Maybe Prelude.Bool,
+    -- | The first name, or given name, of the user.
+    firstName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The last name, or surname, of the user.
+    lastName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The status of the user in the user pool. The status can be one of the
+    -- following:
+    --
+    -- -   UNCONFIRMED – The user is created but not confirmed.
+    --
+    -- -   CONFIRMED – The user is confirmed.
+    --
+    -- -   ARCHIVED – The user is no longer active.
+    --
+    -- -   COMPROMISED – The user is disabled because of a potential security
+    --     threat.
+    --
+    -- -   UNKNOWN – The user status is not known.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The email address of the user.
+    --
+    -- Users\' email addresses are case-sensitive.
+    userName :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The authentication type for the user.
+    authenticationType :: AuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'User' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'user_arn' - The ARN of the user.
+--
+-- 'createdTime', 'user_createdTime' - The date and time the user was created in the user pool.
+--
+-- 'enabled', 'user_enabled' - Specifies whether the user in the user pool is enabled.
+--
+-- 'firstName', 'user_firstName' - The first name, or given name, of the user.
+--
+-- 'lastName', 'user_lastName' - The last name, or surname, of the user.
+--
+-- 'status', 'user_status' - The status of the user in the user pool. The status can be one of the
+-- following:
+--
+-- -   UNCONFIRMED – The user is created but not confirmed.
+--
+-- -   CONFIRMED – The user is confirmed.
+--
+-- -   ARCHIVED – The user is no longer active.
+--
+-- -   COMPROMISED – The user is disabled because of a potential security
+--     threat.
+--
+-- -   UNKNOWN – The user status is not known.
+--
+-- 'userName', 'user_userName' - The email address of the user.
+--
+-- Users\' email addresses are case-sensitive.
+--
+-- 'authenticationType', 'user_authenticationType' - The authentication type for the user.
+newUser ::
+  -- | 'authenticationType'
+  AuthenticationType ->
+  User
+newUser pAuthenticationType_ =
+  User'
+    { arn = Prelude.Nothing,
+      createdTime = Prelude.Nothing,
+      enabled = Prelude.Nothing,
+      firstName = Prelude.Nothing,
+      lastName = Prelude.Nothing,
+      status = Prelude.Nothing,
+      userName = Prelude.Nothing,
+      authenticationType = pAuthenticationType_
+    }
+
+-- | The ARN of the user.
+user_arn :: Lens.Lens' User (Prelude.Maybe Prelude.Text)
+user_arn = Lens.lens (\User' {arn} -> arn) (\s@User' {} a -> s {arn = a} :: User)
+
+-- | The date and time the user was created in the user pool.
+user_createdTime :: Lens.Lens' User (Prelude.Maybe Prelude.UTCTime)
+user_createdTime = Lens.lens (\User' {createdTime} -> createdTime) (\s@User' {} a -> s {createdTime = a} :: User) Prelude.. Lens.mapping Data._Time
+
+-- | Specifies whether the user in the user pool is enabled.
+user_enabled :: Lens.Lens' User (Prelude.Maybe Prelude.Bool)
+user_enabled = Lens.lens (\User' {enabled} -> enabled) (\s@User' {} a -> s {enabled = a} :: User)
+
+-- | The first name, or given name, of the user.
+user_firstName :: Lens.Lens' User (Prelude.Maybe Prelude.Text)
+user_firstName = Lens.lens (\User' {firstName} -> firstName) (\s@User' {} a -> s {firstName = a} :: User) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The last name, or surname, of the user.
+user_lastName :: Lens.Lens' User (Prelude.Maybe Prelude.Text)
+user_lastName = Lens.lens (\User' {lastName} -> lastName) (\s@User' {} a -> s {lastName = a} :: User) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The status of the user in the user pool. The status can be one of the
+-- following:
+--
+-- -   UNCONFIRMED – The user is created but not confirmed.
+--
+-- -   CONFIRMED – The user is confirmed.
+--
+-- -   ARCHIVED – The user is no longer active.
+--
+-- -   COMPROMISED – The user is disabled because of a potential security
+--     threat.
+--
+-- -   UNKNOWN – The user status is not known.
+user_status :: Lens.Lens' User (Prelude.Maybe Prelude.Text)
+user_status = Lens.lens (\User' {status} -> status) (\s@User' {} a -> s {status = a} :: User)
+
+-- | The email address of the user.
+--
+-- Users\' email addresses are case-sensitive.
+user_userName :: Lens.Lens' User (Prelude.Maybe Prelude.Text)
+user_userName = Lens.lens (\User' {userName} -> userName) (\s@User' {} a -> s {userName = a} :: User) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The authentication type for the user.
+user_authenticationType :: Lens.Lens' User AuthenticationType
+user_authenticationType = Lens.lens (\User' {authenticationType} -> authenticationType) (\s@User' {} a -> s {authenticationType = a} :: User)
+
+instance Data.FromJSON User where
+  parseJSON =
+    Data.withObject
+      "User"
+      ( \x ->
+          User'
+            Prelude.<$> (x Data..:? "Arn")
+            Prelude.<*> (x Data..:? "CreatedTime")
+            Prelude.<*> (x Data..:? "Enabled")
+            Prelude.<*> (x Data..:? "FirstName")
+            Prelude.<*> (x Data..:? "LastName")
+            Prelude.<*> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "UserName")
+            Prelude.<*> (x Data..: "AuthenticationType")
+      )
+
+instance Prelude.Hashable User where
+  hashWithSalt _salt User' {..} =
+    _salt
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` createdTime
+      `Prelude.hashWithSalt` enabled
+      `Prelude.hashWithSalt` firstName
+      `Prelude.hashWithSalt` lastName
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` userName
+      `Prelude.hashWithSalt` authenticationType
+
+instance Prelude.NFData User where
+  rnf User' {..} =
+    Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf createdTime
+      `Prelude.seq` Prelude.rnf enabled
+      `Prelude.seq` Prelude.rnf firstName
+      `Prelude.seq` Prelude.rnf lastName
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf userName
+      `Prelude.seq` Prelude.rnf authenticationType
diff --git a/gen/Amazonka/AppStream/Types/UserSetting.hs b/gen/Amazonka/AppStream/Types/UserSetting.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/UserSetting.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.AppStream.Types.UserSetting
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.UserSetting where
+
+import Amazonka.AppStream.Types.Action
+import Amazonka.AppStream.Types.Permission
+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
+
+-- | Describes an action and whether the action is enabled or disabled for
+-- users during their streaming sessions.
+--
+-- /See:/ 'newUserSetting' smart constructor.
+data UserSetting = UserSetting'
+  { -- | The action that is enabled or disabled.
+    action :: Action,
+    -- | Indicates whether the action is enabled or disabled.
+    permission :: Permission
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserSetting' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'action', 'userSetting_action' - The action that is enabled or disabled.
+--
+-- 'permission', 'userSetting_permission' - Indicates whether the action is enabled or disabled.
+newUserSetting ::
+  -- | 'action'
+  Action ->
+  -- | 'permission'
+  Permission ->
+  UserSetting
+newUserSetting pAction_ pPermission_ =
+  UserSetting'
+    { action = pAction_,
+      permission = pPermission_
+    }
+
+-- | The action that is enabled or disabled.
+userSetting_action :: Lens.Lens' UserSetting Action
+userSetting_action = Lens.lens (\UserSetting' {action} -> action) (\s@UserSetting' {} a -> s {action = a} :: UserSetting)
+
+-- | Indicates whether the action is enabled or disabled.
+userSetting_permission :: Lens.Lens' UserSetting Permission
+userSetting_permission = Lens.lens (\UserSetting' {permission} -> permission) (\s@UserSetting' {} a -> s {permission = a} :: UserSetting)
+
+instance Data.FromJSON UserSetting where
+  parseJSON =
+    Data.withObject
+      "UserSetting"
+      ( \x ->
+          UserSetting'
+            Prelude.<$> (x Data..: "Action")
+            Prelude.<*> (x Data..: "Permission")
+      )
+
+instance Prelude.Hashable UserSetting where
+  hashWithSalt _salt UserSetting' {..} =
+    _salt
+      `Prelude.hashWithSalt` action
+      `Prelude.hashWithSalt` permission
+
+instance Prelude.NFData UserSetting where
+  rnf UserSetting' {..} =
+    Prelude.rnf action
+      `Prelude.seq` Prelude.rnf permission
+
+instance Data.ToJSON UserSetting where
+  toJSON UserSetting' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Action" Data..= action),
+            Prelude.Just ("Permission" Data..= permission)
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/UserStackAssociation.hs b/gen/Amazonka/AppStream/Types/UserStackAssociation.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/UserStackAssociation.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.UserStackAssociation
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.UserStackAssociation where
+
+import Amazonka.AppStream.Types.AuthenticationType
+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
+
+-- | Describes a user in the user pool and the associated stack.
+--
+-- /See:/ 'newUserStackAssociation' smart constructor.
+data UserStackAssociation = UserStackAssociation'
+  { -- | Specifies whether a welcome email is sent to a user after the user is
+    -- created in the user pool.
+    sendEmailNotification :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the stack that is associated with the user.
+    stackName :: Prelude.Text,
+    -- | The email address of the user who is associated with the stack.
+    --
+    -- Users\' email addresses are case-sensitive.
+    userName :: Data.Sensitive Prelude.Text,
+    -- | The authentication type for the user.
+    authenticationType :: AuthenticationType
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserStackAssociation' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'sendEmailNotification', 'userStackAssociation_sendEmailNotification' - Specifies whether a welcome email is sent to a user after the user is
+-- created in the user pool.
+--
+-- 'stackName', 'userStackAssociation_stackName' - The name of the stack that is associated with the user.
+--
+-- 'userName', 'userStackAssociation_userName' - The email address of the user who is associated with the stack.
+--
+-- Users\' email addresses are case-sensitive.
+--
+-- 'authenticationType', 'userStackAssociation_authenticationType' - The authentication type for the user.
+newUserStackAssociation ::
+  -- | 'stackName'
+  Prelude.Text ->
+  -- | 'userName'
+  Prelude.Text ->
+  -- | 'authenticationType'
+  AuthenticationType ->
+  UserStackAssociation
+newUserStackAssociation
+  pStackName_
+  pUserName_
+  pAuthenticationType_ =
+    UserStackAssociation'
+      { sendEmailNotification =
+          Prelude.Nothing,
+        stackName = pStackName_,
+        userName = Data._Sensitive Lens.# pUserName_,
+        authenticationType = pAuthenticationType_
+      }
+
+-- | Specifies whether a welcome email is sent to a user after the user is
+-- created in the user pool.
+userStackAssociation_sendEmailNotification :: Lens.Lens' UserStackAssociation (Prelude.Maybe Prelude.Bool)
+userStackAssociation_sendEmailNotification = Lens.lens (\UserStackAssociation' {sendEmailNotification} -> sendEmailNotification) (\s@UserStackAssociation' {} a -> s {sendEmailNotification = a} :: UserStackAssociation)
+
+-- | The name of the stack that is associated with the user.
+userStackAssociation_stackName :: Lens.Lens' UserStackAssociation Prelude.Text
+userStackAssociation_stackName = Lens.lens (\UserStackAssociation' {stackName} -> stackName) (\s@UserStackAssociation' {} a -> s {stackName = a} :: UserStackAssociation)
+
+-- | The email address of the user who is associated with the stack.
+--
+-- Users\' email addresses are case-sensitive.
+userStackAssociation_userName :: Lens.Lens' UserStackAssociation Prelude.Text
+userStackAssociation_userName = Lens.lens (\UserStackAssociation' {userName} -> userName) (\s@UserStackAssociation' {} a -> s {userName = a} :: UserStackAssociation) Prelude.. Data._Sensitive
+
+-- | The authentication type for the user.
+userStackAssociation_authenticationType :: Lens.Lens' UserStackAssociation AuthenticationType
+userStackAssociation_authenticationType = Lens.lens (\UserStackAssociation' {authenticationType} -> authenticationType) (\s@UserStackAssociation' {} a -> s {authenticationType = a} :: UserStackAssociation)
+
+instance Data.FromJSON UserStackAssociation where
+  parseJSON =
+    Data.withObject
+      "UserStackAssociation"
+      ( \x ->
+          UserStackAssociation'
+            Prelude.<$> (x Data..:? "SendEmailNotification")
+            Prelude.<*> (x Data..: "StackName")
+            Prelude.<*> (x Data..: "UserName")
+            Prelude.<*> (x Data..: "AuthenticationType")
+      )
+
+instance Prelude.Hashable UserStackAssociation where
+  hashWithSalt _salt UserStackAssociation' {..} =
+    _salt
+      `Prelude.hashWithSalt` sendEmailNotification
+      `Prelude.hashWithSalt` stackName
+      `Prelude.hashWithSalt` userName
+      `Prelude.hashWithSalt` authenticationType
+
+instance Prelude.NFData UserStackAssociation where
+  rnf UserStackAssociation' {..} =
+    Prelude.rnf sendEmailNotification
+      `Prelude.seq` Prelude.rnf stackName
+      `Prelude.seq` Prelude.rnf userName
+      `Prelude.seq` Prelude.rnf authenticationType
+
+instance Data.ToJSON UserStackAssociation where
+  toJSON UserStackAssociation' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SendEmailNotification" Data..=)
+              Prelude.<$> sendEmailNotification,
+            Prelude.Just ("StackName" Data..= stackName),
+            Prelude.Just ("UserName" Data..= userName),
+            Prelude.Just
+              ("AuthenticationType" Data..= authenticationType)
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/Types/UserStackAssociationError.hs b/gen/Amazonka/AppStream/Types/UserStackAssociationError.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/UserStackAssociationError.hs
@@ -0,0 +1,106 @@
+{-# 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.AppStream.Types.UserStackAssociationError
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.UserStackAssociationError where
+
+import Amazonka.AppStream.Types.UserStackAssociation
+import Amazonka.AppStream.Types.UserStackAssociationErrorCode
+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
+
+-- | Describes the error that is returned when a user can’t be associated
+-- with or disassociated from a stack.
+--
+-- /See:/ 'newUserStackAssociationError' smart constructor.
+data UserStackAssociationError = UserStackAssociationError'
+  { -- | The error code for the error that is returned when a user can’t be
+    -- associated with or disassociated from a stack.
+    errorCode :: Prelude.Maybe UserStackAssociationErrorCode,
+    -- | The error message for the error that is returned when a user can’t be
+    -- associated with or disassociated from a stack.
+    errorMessage :: Prelude.Maybe Prelude.Text,
+    -- | Information about the user and associated stack.
+    userStackAssociation :: Prelude.Maybe UserStackAssociation
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserStackAssociationError' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'errorCode', 'userStackAssociationError_errorCode' - The error code for the error that is returned when a user can’t be
+-- associated with or disassociated from a stack.
+--
+-- 'errorMessage', 'userStackAssociationError_errorMessage' - The error message for the error that is returned when a user can’t be
+-- associated with or disassociated from a stack.
+--
+-- 'userStackAssociation', 'userStackAssociationError_userStackAssociation' - Information about the user and associated stack.
+newUserStackAssociationError ::
+  UserStackAssociationError
+newUserStackAssociationError =
+  UserStackAssociationError'
+    { errorCode =
+        Prelude.Nothing,
+      errorMessage = Prelude.Nothing,
+      userStackAssociation = Prelude.Nothing
+    }
+
+-- | The error code for the error that is returned when a user can’t be
+-- associated with or disassociated from a stack.
+userStackAssociationError_errorCode :: Lens.Lens' UserStackAssociationError (Prelude.Maybe UserStackAssociationErrorCode)
+userStackAssociationError_errorCode = Lens.lens (\UserStackAssociationError' {errorCode} -> errorCode) (\s@UserStackAssociationError' {} a -> s {errorCode = a} :: UserStackAssociationError)
+
+-- | The error message for the error that is returned when a user can’t be
+-- associated with or disassociated from a stack.
+userStackAssociationError_errorMessage :: Lens.Lens' UserStackAssociationError (Prelude.Maybe Prelude.Text)
+userStackAssociationError_errorMessage = Lens.lens (\UserStackAssociationError' {errorMessage} -> errorMessage) (\s@UserStackAssociationError' {} a -> s {errorMessage = a} :: UserStackAssociationError)
+
+-- | Information about the user and associated stack.
+userStackAssociationError_userStackAssociation :: Lens.Lens' UserStackAssociationError (Prelude.Maybe UserStackAssociation)
+userStackAssociationError_userStackAssociation = Lens.lens (\UserStackAssociationError' {userStackAssociation} -> userStackAssociation) (\s@UserStackAssociationError' {} a -> s {userStackAssociation = a} :: UserStackAssociationError)
+
+instance Data.FromJSON UserStackAssociationError where
+  parseJSON =
+    Data.withObject
+      "UserStackAssociationError"
+      ( \x ->
+          UserStackAssociationError'
+            Prelude.<$> (x Data..:? "ErrorCode")
+            Prelude.<*> (x Data..:? "ErrorMessage")
+            Prelude.<*> (x Data..:? "UserStackAssociation")
+      )
+
+instance Prelude.Hashable UserStackAssociationError where
+  hashWithSalt _salt UserStackAssociationError' {..} =
+    _salt
+      `Prelude.hashWithSalt` errorCode
+      `Prelude.hashWithSalt` errorMessage
+      `Prelude.hashWithSalt` userStackAssociation
+
+instance Prelude.NFData UserStackAssociationError where
+  rnf UserStackAssociationError' {..} =
+    Prelude.rnf errorCode
+      `Prelude.seq` Prelude.rnf errorMessage
+      `Prelude.seq` Prelude.rnf userStackAssociation
diff --git a/gen/Amazonka/AppStream/Types/UserStackAssociationErrorCode.hs b/gen/Amazonka/AppStream/Types/UserStackAssociationErrorCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/UserStackAssociationErrorCode.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.AppStream.Types.UserStackAssociationErrorCode
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.UserStackAssociationErrorCode
+  ( UserStackAssociationErrorCode
+      ( ..,
+        UserStackAssociationErrorCode_DIRECTORY_NOT_FOUND,
+        UserStackAssociationErrorCode_INTERNAL_ERROR,
+        UserStackAssociationErrorCode_STACK_NOT_FOUND,
+        UserStackAssociationErrorCode_USER_NAME_NOT_FOUND
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype UserStackAssociationErrorCode = UserStackAssociationErrorCode'
+  { fromUserStackAssociationErrorCode ::
+      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 UserStackAssociationErrorCode_DIRECTORY_NOT_FOUND :: UserStackAssociationErrorCode
+pattern UserStackAssociationErrorCode_DIRECTORY_NOT_FOUND = UserStackAssociationErrorCode' "DIRECTORY_NOT_FOUND"
+
+pattern UserStackAssociationErrorCode_INTERNAL_ERROR :: UserStackAssociationErrorCode
+pattern UserStackAssociationErrorCode_INTERNAL_ERROR = UserStackAssociationErrorCode' "INTERNAL_ERROR"
+
+pattern UserStackAssociationErrorCode_STACK_NOT_FOUND :: UserStackAssociationErrorCode
+pattern UserStackAssociationErrorCode_STACK_NOT_FOUND = UserStackAssociationErrorCode' "STACK_NOT_FOUND"
+
+pattern UserStackAssociationErrorCode_USER_NAME_NOT_FOUND :: UserStackAssociationErrorCode
+pattern UserStackAssociationErrorCode_USER_NAME_NOT_FOUND = UserStackAssociationErrorCode' "USER_NAME_NOT_FOUND"
+
+{-# COMPLETE
+  UserStackAssociationErrorCode_DIRECTORY_NOT_FOUND,
+  UserStackAssociationErrorCode_INTERNAL_ERROR,
+  UserStackAssociationErrorCode_STACK_NOT_FOUND,
+  UserStackAssociationErrorCode_USER_NAME_NOT_FOUND,
+  UserStackAssociationErrorCode'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/VisibilityType.hs b/gen/Amazonka/AppStream/Types/VisibilityType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/VisibilityType.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.VisibilityType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.VisibilityType
+  ( VisibilityType
+      ( ..,
+        VisibilityType_PRIVATE,
+        VisibilityType_PUBLIC,
+        VisibilityType_SHARED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VisibilityType = VisibilityType'
+  { fromVisibilityType ::
+      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 VisibilityType_PRIVATE :: VisibilityType
+pattern VisibilityType_PRIVATE = VisibilityType' "PRIVATE"
+
+pattern VisibilityType_PUBLIC :: VisibilityType
+pattern VisibilityType_PUBLIC = VisibilityType' "PUBLIC"
+
+pattern VisibilityType_SHARED :: VisibilityType
+pattern VisibilityType_SHARED = VisibilityType' "SHARED"
+
+{-# COMPLETE
+  VisibilityType_PRIVATE,
+  VisibilityType_PUBLIC,
+  VisibilityType_SHARED,
+  VisibilityType'
+  #-}
diff --git a/gen/Amazonka/AppStream/Types/VpcConfig.hs b/gen/Amazonka/AppStream/Types/VpcConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Types/VpcConfig.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.AppStream.Types.VpcConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.AppStream.Types.VpcConfig 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
+
+-- | Describes VPC configuration information for fleets and image builders.
+--
+-- /See:/ 'newVpcConfig' smart constructor.
+data VpcConfig = VpcConfig'
+  { -- | The identifiers of the security groups for the fleet or image builder.
+    securityGroupIds :: Prelude.Maybe [Prelude.Text],
+    -- | The identifiers of the subnets to which a network interface is attached
+    -- from the fleet instance or image builder instance. Fleet instances use
+    -- one or more subnets. Image builder instances use one subnet.
+    subnetIds :: Prelude.Maybe [Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VpcConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'securityGroupIds', 'vpcConfig_securityGroupIds' - The identifiers of the security groups for the fleet or image builder.
+--
+-- 'subnetIds', 'vpcConfig_subnetIds' - The identifiers of the subnets to which a network interface is attached
+-- from the fleet instance or image builder instance. Fleet instances use
+-- one or more subnets. Image builder instances use one subnet.
+newVpcConfig ::
+  VpcConfig
+newVpcConfig =
+  VpcConfig'
+    { securityGroupIds = Prelude.Nothing,
+      subnetIds = Prelude.Nothing
+    }
+
+-- | The identifiers of the security groups for the fleet or image builder.
+vpcConfig_securityGroupIds :: Lens.Lens' VpcConfig (Prelude.Maybe [Prelude.Text])
+vpcConfig_securityGroupIds = Lens.lens (\VpcConfig' {securityGroupIds} -> securityGroupIds) (\s@VpcConfig' {} a -> s {securityGroupIds = a} :: VpcConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The identifiers of the subnets to which a network interface is attached
+-- from the fleet instance or image builder instance. Fleet instances use
+-- one or more subnets. Image builder instances use one subnet.
+vpcConfig_subnetIds :: Lens.Lens' VpcConfig (Prelude.Maybe [Prelude.Text])
+vpcConfig_subnetIds = Lens.lens (\VpcConfig' {subnetIds} -> subnetIds) (\s@VpcConfig' {} a -> s {subnetIds = a} :: VpcConfig) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON VpcConfig where
+  parseJSON =
+    Data.withObject
+      "VpcConfig"
+      ( \x ->
+          VpcConfig'
+            Prelude.<$> ( x
+                            Data..:? "SecurityGroupIds"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "SubnetIds" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable VpcConfig where
+  hashWithSalt _salt VpcConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` securityGroupIds
+      `Prelude.hashWithSalt` subnetIds
+
+instance Prelude.NFData VpcConfig where
+  rnf VpcConfig' {..} =
+    Prelude.rnf securityGroupIds
+      `Prelude.seq` Prelude.rnf subnetIds
+
+instance Data.ToJSON VpcConfig where
+  toJSON VpcConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SecurityGroupIds" Data..=)
+              Prelude.<$> securityGroupIds,
+            ("SubnetIds" Data..=) Prelude.<$> subnetIds
+          ]
+      )
diff --git a/gen/Amazonka/AppStream/UntagResource.hs b/gen/Amazonka/AppStream/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/UntagResource.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.AppStream.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)
+--
+-- Disassociates one or more specified tags from the specified AppStream
+-- 2.0 resource.
+--
+-- To list the current tags for your resources, use ListTagsForResource.
+--
+-- For more information about tags, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+module Amazonka.AppStream.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceArn,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUntagResource' smart constructor.
+data UntagResource = UntagResource'
+  { -- | The Amazon Resource Name (ARN) of the resource.
+    resourceArn :: Prelude.Text,
+    -- | The tag keys for the tags to disassociate.
+    tagKeys :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceArn', 'untagResource_resourceArn' - The Amazon Resource Name (ARN) of the resource.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag keys for the tags to disassociate.
+newUntagResource ::
+  -- | 'resourceArn'
+  Prelude.Text ->
+  -- | 'tagKeys'
+  Prelude.NonEmpty Prelude.Text ->
+  UntagResource
+newUntagResource pResourceArn_ pTagKeys_ =
+  UntagResource'
+    { resourceArn = pResourceArn_,
+      tagKeys = Lens.coerced Lens.# pTagKeys_
+    }
+
+-- | The Amazon Resource Name (ARN) of the resource.
+untagResource_resourceArn :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceArn = Lens.lens (\UntagResource' {resourceArn} -> resourceArn) (\s@UntagResource' {} a -> s {resourceArn = a} :: UntagResource)
+
+-- | The tag keys for the tags to disassociate.
+untagResource_tagKeys :: Lens.Lens' UntagResource (Prelude.NonEmpty Prelude.Text)
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.postJSON (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
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.UntagResource" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UntagResource where
+  toJSON UntagResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("ResourceArn" Data..= resourceArn),
+            Prelude.Just ("TagKeys" Data..= tagKeys)
+          ]
+      )
+
+instance Data.ToPath UntagResource where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UntagResource where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /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/AppStream/UpdateApplication.hs b/gen/Amazonka/AppStream/UpdateApplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/UpdateApplication.hs
@@ -0,0 +1,286 @@
+{-# 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.AppStream.UpdateApplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified application.
+module Amazonka.AppStream.UpdateApplication
+  ( -- * Creating a Request
+    UpdateApplication (..),
+    newUpdateApplication,
+
+    -- * Request Lenses
+    updateApplication_appBlockArn,
+    updateApplication_attributesToDelete,
+    updateApplication_description,
+    updateApplication_displayName,
+    updateApplication_iconS3Location,
+    updateApplication_launchParameters,
+    updateApplication_launchPath,
+    updateApplication_workingDirectory,
+    updateApplication_name,
+
+    -- * Destructuring the Response
+    UpdateApplicationResponse (..),
+    newUpdateApplicationResponse,
+
+    -- * Response Lenses
+    updateApplicationResponse_application,
+    updateApplicationResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateApplication' smart constructor.
+data UpdateApplication = UpdateApplication'
+  { -- | The ARN of the app block.
+    appBlockArn :: Prelude.Maybe Prelude.Text,
+    -- | The attributes to delete for an application.
+    attributesToDelete :: Prelude.Maybe [ApplicationAttribute],
+    -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The display name of the application. This name is visible to users in
+    -- the application catalog.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The icon S3 location of the application.
+    iconS3Location :: Prelude.Maybe S3Location,
+    -- | The launch parameters of the application.
+    launchParameters :: Prelude.Maybe Prelude.Text,
+    -- | The launch path of the application.
+    launchPath :: Prelude.Maybe Prelude.Text,
+    -- | The working directory of the application.
+    workingDirectory :: Prelude.Maybe Prelude.Text,
+    -- | The name of the application. This name is visible to users when display
+    -- name is not specified.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appBlockArn', 'updateApplication_appBlockArn' - The ARN of the app block.
+--
+-- 'attributesToDelete', 'updateApplication_attributesToDelete' - The attributes to delete for an application.
+--
+-- 'description', 'updateApplication_description' - The description of the application.
+--
+-- 'displayName', 'updateApplication_displayName' - The display name of the application. This name is visible to users in
+-- the application catalog.
+--
+-- 'iconS3Location', 'updateApplication_iconS3Location' - The icon S3 location of the application.
+--
+-- 'launchParameters', 'updateApplication_launchParameters' - The launch parameters of the application.
+--
+-- 'launchPath', 'updateApplication_launchPath' - The launch path of the application.
+--
+-- 'workingDirectory', 'updateApplication_workingDirectory' - The working directory of the application.
+--
+-- 'name', 'updateApplication_name' - The name of the application. This name is visible to users when display
+-- name is not specified.
+newUpdateApplication ::
+  -- | 'name'
+  Prelude.Text ->
+  UpdateApplication
+newUpdateApplication pName_ =
+  UpdateApplication'
+    { appBlockArn = Prelude.Nothing,
+      attributesToDelete = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      iconS3Location = Prelude.Nothing,
+      launchParameters = Prelude.Nothing,
+      launchPath = Prelude.Nothing,
+      workingDirectory = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The ARN of the app block.
+updateApplication_appBlockArn :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_appBlockArn = Lens.lens (\UpdateApplication' {appBlockArn} -> appBlockArn) (\s@UpdateApplication' {} a -> s {appBlockArn = a} :: UpdateApplication)
+
+-- | The attributes to delete for an application.
+updateApplication_attributesToDelete :: Lens.Lens' UpdateApplication (Prelude.Maybe [ApplicationAttribute])
+updateApplication_attributesToDelete = Lens.lens (\UpdateApplication' {attributesToDelete} -> attributesToDelete) (\s@UpdateApplication' {} a -> s {attributesToDelete = a} :: UpdateApplication) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description of the application.
+updateApplication_description :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_description = Lens.lens (\UpdateApplication' {description} -> description) (\s@UpdateApplication' {} a -> s {description = a} :: UpdateApplication)
+
+-- | The display name of the application. This name is visible to users in
+-- the application catalog.
+updateApplication_displayName :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_displayName = Lens.lens (\UpdateApplication' {displayName} -> displayName) (\s@UpdateApplication' {} a -> s {displayName = a} :: UpdateApplication)
+
+-- | The icon S3 location of the application.
+updateApplication_iconS3Location :: Lens.Lens' UpdateApplication (Prelude.Maybe S3Location)
+updateApplication_iconS3Location = Lens.lens (\UpdateApplication' {iconS3Location} -> iconS3Location) (\s@UpdateApplication' {} a -> s {iconS3Location = a} :: UpdateApplication)
+
+-- | The launch parameters of the application.
+updateApplication_launchParameters :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_launchParameters = Lens.lens (\UpdateApplication' {launchParameters} -> launchParameters) (\s@UpdateApplication' {} a -> s {launchParameters = a} :: UpdateApplication)
+
+-- | The launch path of the application.
+updateApplication_launchPath :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_launchPath = Lens.lens (\UpdateApplication' {launchPath} -> launchPath) (\s@UpdateApplication' {} a -> s {launchPath = a} :: UpdateApplication)
+
+-- | The working directory of the application.
+updateApplication_workingDirectory :: Lens.Lens' UpdateApplication (Prelude.Maybe Prelude.Text)
+updateApplication_workingDirectory = Lens.lens (\UpdateApplication' {workingDirectory} -> workingDirectory) (\s@UpdateApplication' {} a -> s {workingDirectory = a} :: UpdateApplication)
+
+-- | The name of the application. This name is visible to users when display
+-- name is not specified.
+updateApplication_name :: Lens.Lens' UpdateApplication Prelude.Text
+updateApplication_name = Lens.lens (\UpdateApplication' {name} -> name) (\s@UpdateApplication' {} a -> s {name = a} :: UpdateApplication)
+
+instance Core.AWSRequest UpdateApplication where
+  type
+    AWSResponse UpdateApplication =
+      UpdateApplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateApplicationResponse'
+            Prelude.<$> (x Data..?> "Application")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateApplication where
+  hashWithSalt _salt UpdateApplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` appBlockArn
+      `Prelude.hashWithSalt` attributesToDelete
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` iconS3Location
+      `Prelude.hashWithSalt` launchParameters
+      `Prelude.hashWithSalt` launchPath
+      `Prelude.hashWithSalt` workingDirectory
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateApplication where
+  rnf UpdateApplication' {..} =
+    Prelude.rnf appBlockArn
+      `Prelude.seq` Prelude.rnf attributesToDelete
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf iconS3Location
+      `Prelude.seq` Prelude.rnf launchParameters
+      `Prelude.seq` Prelude.rnf launchPath
+      `Prelude.seq` Prelude.rnf workingDirectory
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateApplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.UpdateApplication" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateApplication where
+  toJSON UpdateApplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AppBlockArn" Data..=) Prelude.<$> appBlockArn,
+            ("AttributesToDelete" Data..=)
+              Prelude.<$> attributesToDelete,
+            ("Description" Data..=) Prelude.<$> description,
+            ("DisplayName" Data..=) Prelude.<$> displayName,
+            ("IconS3Location" Data..=)
+              Prelude.<$> iconS3Location,
+            ("LaunchParameters" Data..=)
+              Prelude.<$> launchParameters,
+            ("LaunchPath" Data..=) Prelude.<$> launchPath,
+            ("WorkingDirectory" Data..=)
+              Prelude.<$> workingDirectory,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath UpdateApplication where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateApplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateApplicationResponse' smart constructor.
+data UpdateApplicationResponse = UpdateApplicationResponse'
+  { application :: Prelude.Maybe Application,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'application', 'updateApplicationResponse_application' - Undocumented member.
+--
+-- 'httpStatus', 'updateApplicationResponse_httpStatus' - The response's http status code.
+newUpdateApplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateApplicationResponse
+newUpdateApplicationResponse pHttpStatus_ =
+  UpdateApplicationResponse'
+    { application =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Undocumented member.
+updateApplicationResponse_application :: Lens.Lens' UpdateApplicationResponse (Prelude.Maybe Application)
+updateApplicationResponse_application = Lens.lens (\UpdateApplicationResponse' {application} -> application) (\s@UpdateApplicationResponse' {} a -> s {application = a} :: UpdateApplicationResponse)
+
+-- | The response's http status code.
+updateApplicationResponse_httpStatus :: Lens.Lens' UpdateApplicationResponse Prelude.Int
+updateApplicationResponse_httpStatus = Lens.lens (\UpdateApplicationResponse' {httpStatus} -> httpStatus) (\s@UpdateApplicationResponse' {} a -> s {httpStatus = a} :: UpdateApplicationResponse)
+
+instance Prelude.NFData UpdateApplicationResponse where
+  rnf UpdateApplicationResponse' {..} =
+    Prelude.rnf application
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/UpdateDirectoryConfig.hs b/gen/Amazonka/AppStream/UpdateDirectoryConfig.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/UpdateDirectoryConfig.hs
@@ -0,0 +1,253 @@
+{-# 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.AppStream.UpdateDirectoryConfig
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified Directory Config object in AppStream 2.0. This
+-- object includes the configuration information required to join fleets
+-- and image builders to Microsoft Active Directory domains.
+module Amazonka.AppStream.UpdateDirectoryConfig
+  ( -- * Creating a Request
+    UpdateDirectoryConfig (..),
+    newUpdateDirectoryConfig,
+
+    -- * Request Lenses
+    updateDirectoryConfig_certificateBasedAuthProperties,
+    updateDirectoryConfig_organizationalUnitDistinguishedNames,
+    updateDirectoryConfig_serviceAccountCredentials,
+    updateDirectoryConfig_directoryName,
+
+    -- * Destructuring the Response
+    UpdateDirectoryConfigResponse (..),
+    newUpdateDirectoryConfigResponse,
+
+    -- * Response Lenses
+    updateDirectoryConfigResponse_directoryConfig,
+    updateDirectoryConfigResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateDirectoryConfig' smart constructor.
+data UpdateDirectoryConfig = UpdateDirectoryConfig'
+  { -- | The certificate-based authentication properties used to authenticate
+    -- SAML 2.0 Identity Provider (IdP) user identities to Active Directory
+    -- domain-joined streaming instances. Fallback is turned on by default when
+    -- certificate-based authentication is __Enabled__ . Fallback allows users
+    -- to log in using their AD domain password if certificate-based
+    -- authentication is unsuccessful, or to unlock a desktop lock screen.
+    -- __Enabled_no_directory_login_fallback__ enables certificate-based
+    -- authentication, but does not allow users to log in using their AD domain
+    -- password. Users will be disconnected to re-authenticate using
+    -- certificates.
+    certificateBasedAuthProperties :: Prelude.Maybe CertificateBasedAuthProperties,
+    -- | The distinguished names of the organizational units for computer
+    -- accounts.
+    organizationalUnitDistinguishedNames :: Prelude.Maybe [Prelude.Text],
+    -- | The credentials for the service account used by the fleet or image
+    -- builder to connect to the directory.
+    serviceAccountCredentials :: Prelude.Maybe ServiceAccountCredentials,
+    -- | The name of the Directory Config object.
+    directoryName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDirectoryConfig' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'certificateBasedAuthProperties', 'updateDirectoryConfig_certificateBasedAuthProperties' - The certificate-based authentication properties used to authenticate
+-- SAML 2.0 Identity Provider (IdP) user identities to Active Directory
+-- domain-joined streaming instances. Fallback is turned on by default when
+-- certificate-based authentication is __Enabled__ . Fallback allows users
+-- to log in using their AD domain password if certificate-based
+-- authentication is unsuccessful, or to unlock a desktop lock screen.
+-- __Enabled_no_directory_login_fallback__ enables certificate-based
+-- authentication, but does not allow users to log in using their AD domain
+-- password. Users will be disconnected to re-authenticate using
+-- certificates.
+--
+-- 'organizationalUnitDistinguishedNames', 'updateDirectoryConfig_organizationalUnitDistinguishedNames' - The distinguished names of the organizational units for computer
+-- accounts.
+--
+-- 'serviceAccountCredentials', 'updateDirectoryConfig_serviceAccountCredentials' - The credentials for the service account used by the fleet or image
+-- builder to connect to the directory.
+--
+-- 'directoryName', 'updateDirectoryConfig_directoryName' - The name of the Directory Config object.
+newUpdateDirectoryConfig ::
+  -- | 'directoryName'
+  Prelude.Text ->
+  UpdateDirectoryConfig
+newUpdateDirectoryConfig pDirectoryName_ =
+  UpdateDirectoryConfig'
+    { certificateBasedAuthProperties =
+        Prelude.Nothing,
+      organizationalUnitDistinguishedNames =
+        Prelude.Nothing,
+      serviceAccountCredentials = Prelude.Nothing,
+      directoryName = pDirectoryName_
+    }
+
+-- | The certificate-based authentication properties used to authenticate
+-- SAML 2.0 Identity Provider (IdP) user identities to Active Directory
+-- domain-joined streaming instances. Fallback is turned on by default when
+-- certificate-based authentication is __Enabled__ . Fallback allows users
+-- to log in using their AD domain password if certificate-based
+-- authentication is unsuccessful, or to unlock a desktop lock screen.
+-- __Enabled_no_directory_login_fallback__ enables certificate-based
+-- authentication, but does not allow users to log in using their AD domain
+-- password. Users will be disconnected to re-authenticate using
+-- certificates.
+updateDirectoryConfig_certificateBasedAuthProperties :: Lens.Lens' UpdateDirectoryConfig (Prelude.Maybe CertificateBasedAuthProperties)
+updateDirectoryConfig_certificateBasedAuthProperties = Lens.lens (\UpdateDirectoryConfig' {certificateBasedAuthProperties} -> certificateBasedAuthProperties) (\s@UpdateDirectoryConfig' {} a -> s {certificateBasedAuthProperties = a} :: UpdateDirectoryConfig)
+
+-- | The distinguished names of the organizational units for computer
+-- accounts.
+updateDirectoryConfig_organizationalUnitDistinguishedNames :: Lens.Lens' UpdateDirectoryConfig (Prelude.Maybe [Prelude.Text])
+updateDirectoryConfig_organizationalUnitDistinguishedNames = Lens.lens (\UpdateDirectoryConfig' {organizationalUnitDistinguishedNames} -> organizationalUnitDistinguishedNames) (\s@UpdateDirectoryConfig' {} a -> s {organizationalUnitDistinguishedNames = a} :: UpdateDirectoryConfig) Prelude.. Lens.mapping Lens.coerced
+
+-- | The credentials for the service account used by the fleet or image
+-- builder to connect to the directory.
+updateDirectoryConfig_serviceAccountCredentials :: Lens.Lens' UpdateDirectoryConfig (Prelude.Maybe ServiceAccountCredentials)
+updateDirectoryConfig_serviceAccountCredentials = Lens.lens (\UpdateDirectoryConfig' {serviceAccountCredentials} -> serviceAccountCredentials) (\s@UpdateDirectoryConfig' {} a -> s {serviceAccountCredentials = a} :: UpdateDirectoryConfig)
+
+-- | The name of the Directory Config object.
+updateDirectoryConfig_directoryName :: Lens.Lens' UpdateDirectoryConfig Prelude.Text
+updateDirectoryConfig_directoryName = Lens.lens (\UpdateDirectoryConfig' {directoryName} -> directoryName) (\s@UpdateDirectoryConfig' {} a -> s {directoryName = a} :: UpdateDirectoryConfig)
+
+instance Core.AWSRequest UpdateDirectoryConfig where
+  type
+    AWSResponse UpdateDirectoryConfig =
+      UpdateDirectoryConfigResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateDirectoryConfigResponse'
+            Prelude.<$> (x Data..?> "DirectoryConfig")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateDirectoryConfig where
+  hashWithSalt _salt UpdateDirectoryConfig' {..} =
+    _salt
+      `Prelude.hashWithSalt` certificateBasedAuthProperties
+      `Prelude.hashWithSalt` organizationalUnitDistinguishedNames
+      `Prelude.hashWithSalt` serviceAccountCredentials
+      `Prelude.hashWithSalt` directoryName
+
+instance Prelude.NFData UpdateDirectoryConfig where
+  rnf UpdateDirectoryConfig' {..} =
+    Prelude.rnf certificateBasedAuthProperties
+      `Prelude.seq` Prelude.rnf organizationalUnitDistinguishedNames
+      `Prelude.seq` Prelude.rnf serviceAccountCredentials
+      `Prelude.seq` Prelude.rnf directoryName
+
+instance Data.ToHeaders UpdateDirectoryConfig where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.UpdateDirectoryConfig" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateDirectoryConfig where
+  toJSON UpdateDirectoryConfig' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("CertificateBasedAuthProperties" Data..=)
+              Prelude.<$> certificateBasedAuthProperties,
+            ("OrganizationalUnitDistinguishedNames" Data..=)
+              Prelude.<$> organizationalUnitDistinguishedNames,
+            ("ServiceAccountCredentials" Data..=)
+              Prelude.<$> serviceAccountCredentials,
+            Prelude.Just
+              ("DirectoryName" Data..= directoryName)
+          ]
+      )
+
+instance Data.ToPath UpdateDirectoryConfig where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateDirectoryConfig where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateDirectoryConfigResponse' smart constructor.
+data UpdateDirectoryConfigResponse = UpdateDirectoryConfigResponse'
+  { -- | Information about the Directory Config object.
+    directoryConfig :: Prelude.Maybe DirectoryConfig,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateDirectoryConfigResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'directoryConfig', 'updateDirectoryConfigResponse_directoryConfig' - Information about the Directory Config object.
+--
+-- 'httpStatus', 'updateDirectoryConfigResponse_httpStatus' - The response's http status code.
+newUpdateDirectoryConfigResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateDirectoryConfigResponse
+newUpdateDirectoryConfigResponse pHttpStatus_ =
+  UpdateDirectoryConfigResponse'
+    { directoryConfig =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the Directory Config object.
+updateDirectoryConfigResponse_directoryConfig :: Lens.Lens' UpdateDirectoryConfigResponse (Prelude.Maybe DirectoryConfig)
+updateDirectoryConfigResponse_directoryConfig = Lens.lens (\UpdateDirectoryConfigResponse' {directoryConfig} -> directoryConfig) (\s@UpdateDirectoryConfigResponse' {} a -> s {directoryConfig = a} :: UpdateDirectoryConfigResponse)
+
+-- | The response's http status code.
+updateDirectoryConfigResponse_httpStatus :: Lens.Lens' UpdateDirectoryConfigResponse Prelude.Int
+updateDirectoryConfigResponse_httpStatus = Lens.lens (\UpdateDirectoryConfigResponse' {httpStatus} -> httpStatus) (\s@UpdateDirectoryConfigResponse' {} a -> s {httpStatus = a} :: UpdateDirectoryConfigResponse)
+
+instance Prelude.NFData UpdateDirectoryConfigResponse where
+  rnf UpdateDirectoryConfigResponse' {..} =
+    Prelude.rnf directoryConfig
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/UpdateEntitlement.hs b/gen/Amazonka/AppStream/UpdateEntitlement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/UpdateEntitlement.hs
@@ -0,0 +1,227 @@
+{-# 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.AppStream.UpdateEntitlement
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified entitlement.
+module Amazonka.AppStream.UpdateEntitlement
+  ( -- * Creating a Request
+    UpdateEntitlement (..),
+    newUpdateEntitlement,
+
+    -- * Request Lenses
+    updateEntitlement_appVisibility,
+    updateEntitlement_attributes,
+    updateEntitlement_description,
+    updateEntitlement_name,
+    updateEntitlement_stackName,
+
+    -- * Destructuring the Response
+    UpdateEntitlementResponse (..),
+    newUpdateEntitlementResponse,
+
+    -- * Response Lenses
+    updateEntitlementResponse_entitlement,
+    updateEntitlementResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateEntitlement' smart constructor.
+data UpdateEntitlement = UpdateEntitlement'
+  { -- | Specifies whether all or only selected apps are entitled.
+    appVisibility :: Prelude.Maybe AppVisibility,
+    -- | The attributes of the entitlement.
+    attributes :: Prelude.Maybe (Prelude.NonEmpty EntitlementAttribute),
+    -- | The description of the entitlement.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the entitlement.
+    name :: Prelude.Text,
+    -- | The name of the stack with which the entitlement is associated.
+    stackName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEntitlement' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appVisibility', 'updateEntitlement_appVisibility' - Specifies whether all or only selected apps are entitled.
+--
+-- 'attributes', 'updateEntitlement_attributes' - The attributes of the entitlement.
+--
+-- 'description', 'updateEntitlement_description' - The description of the entitlement.
+--
+-- 'name', 'updateEntitlement_name' - The name of the entitlement.
+--
+-- 'stackName', 'updateEntitlement_stackName' - The name of the stack with which the entitlement is associated.
+newUpdateEntitlement ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'stackName'
+  Prelude.Text ->
+  UpdateEntitlement
+newUpdateEntitlement pName_ pStackName_ =
+  UpdateEntitlement'
+    { appVisibility = Prelude.Nothing,
+      attributes = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = pName_,
+      stackName = pStackName_
+    }
+
+-- | Specifies whether all or only selected apps are entitled.
+updateEntitlement_appVisibility :: Lens.Lens' UpdateEntitlement (Prelude.Maybe AppVisibility)
+updateEntitlement_appVisibility = Lens.lens (\UpdateEntitlement' {appVisibility} -> appVisibility) (\s@UpdateEntitlement' {} a -> s {appVisibility = a} :: UpdateEntitlement)
+
+-- | The attributes of the entitlement.
+updateEntitlement_attributes :: Lens.Lens' UpdateEntitlement (Prelude.Maybe (Prelude.NonEmpty EntitlementAttribute))
+updateEntitlement_attributes = Lens.lens (\UpdateEntitlement' {attributes} -> attributes) (\s@UpdateEntitlement' {} a -> s {attributes = a} :: UpdateEntitlement) Prelude.. Lens.mapping Lens.coerced
+
+-- | The description of the entitlement.
+updateEntitlement_description :: Lens.Lens' UpdateEntitlement (Prelude.Maybe Prelude.Text)
+updateEntitlement_description = Lens.lens (\UpdateEntitlement' {description} -> description) (\s@UpdateEntitlement' {} a -> s {description = a} :: UpdateEntitlement)
+
+-- | The name of the entitlement.
+updateEntitlement_name :: Lens.Lens' UpdateEntitlement Prelude.Text
+updateEntitlement_name = Lens.lens (\UpdateEntitlement' {name} -> name) (\s@UpdateEntitlement' {} a -> s {name = a} :: UpdateEntitlement)
+
+-- | The name of the stack with which the entitlement is associated.
+updateEntitlement_stackName :: Lens.Lens' UpdateEntitlement Prelude.Text
+updateEntitlement_stackName = Lens.lens (\UpdateEntitlement' {stackName} -> stackName) (\s@UpdateEntitlement' {} a -> s {stackName = a} :: UpdateEntitlement)
+
+instance Core.AWSRequest UpdateEntitlement where
+  type
+    AWSResponse UpdateEntitlement =
+      UpdateEntitlementResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateEntitlementResponse'
+            Prelude.<$> (x Data..?> "Entitlement")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateEntitlement where
+  hashWithSalt _salt UpdateEntitlement' {..} =
+    _salt
+      `Prelude.hashWithSalt` appVisibility
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` stackName
+
+instance Prelude.NFData UpdateEntitlement where
+  rnf UpdateEntitlement' {..} =
+    Prelude.rnf appVisibility
+      `Prelude.seq` Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf stackName
+
+instance Data.ToHeaders UpdateEntitlement where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.UpdateEntitlement" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEntitlement where
+  toJSON UpdateEntitlement' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AppVisibility" Data..=) Prelude.<$> appVisibility,
+            ("Attributes" Data..=) Prelude.<$> attributes,
+            ("Description" Data..=) Prelude.<$> description,
+            Prelude.Just ("Name" Data..= name),
+            Prelude.Just ("StackName" Data..= stackName)
+          ]
+      )
+
+instance Data.ToPath UpdateEntitlement where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateEntitlement where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateEntitlementResponse' smart constructor.
+data UpdateEntitlementResponse = UpdateEntitlementResponse'
+  { -- | The entitlement.
+    entitlement :: Prelude.Maybe Entitlement,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEntitlementResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'entitlement', 'updateEntitlementResponse_entitlement' - The entitlement.
+--
+-- 'httpStatus', 'updateEntitlementResponse_httpStatus' - The response's http status code.
+newUpdateEntitlementResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEntitlementResponse
+newUpdateEntitlementResponse pHttpStatus_ =
+  UpdateEntitlementResponse'
+    { entitlement =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The entitlement.
+updateEntitlementResponse_entitlement :: Lens.Lens' UpdateEntitlementResponse (Prelude.Maybe Entitlement)
+updateEntitlementResponse_entitlement = Lens.lens (\UpdateEntitlementResponse' {entitlement} -> entitlement) (\s@UpdateEntitlementResponse' {} a -> s {entitlement = a} :: UpdateEntitlementResponse)
+
+-- | The response's http status code.
+updateEntitlementResponse_httpStatus :: Lens.Lens' UpdateEntitlementResponse Prelude.Int
+updateEntitlementResponse_httpStatus = Lens.lens (\UpdateEntitlementResponse' {httpStatus} -> httpStatus) (\s@UpdateEntitlementResponse' {} a -> s {httpStatus = a} :: UpdateEntitlementResponse)
+
+instance Prelude.NFData UpdateEntitlementResponse where
+  rnf UpdateEntitlementResponse' {..} =
+    Prelude.rnf entitlement
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/UpdateFleet.hs b/gen/Amazonka/AppStream/UpdateFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/UpdateFleet.hs
@@ -0,0 +1,882 @@
+{-# 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.AppStream.UpdateFleet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified fleet.
+--
+-- If the fleet is in the @STOPPED@ state, you can update any attribute
+-- except the fleet name.
+--
+-- If the fleet is in the @RUNNING@ state, you can update the following
+-- based on the fleet type:
+--
+-- -   Always-On and On-Demand fleet types
+--
+--     You can update the @DisplayName@, @ComputeCapacity@, @ImageARN@,
+--     @ImageName@, @IdleDisconnectTimeoutInSeconds@, and
+--     @DisconnectTimeoutInSeconds@ attributes.
+--
+-- -   Elastic fleet type
+--
+--     You can update the @DisplayName@, @IdleDisconnectTimeoutInSeconds@,
+--     @DisconnectTimeoutInSeconds@, @MaxConcurrentSessions@,
+--     @SessionScriptS3Location@ and @UsbDeviceFilterStrings@ attributes.
+--
+-- If the fleet is in the @STARTING@ or @STOPPED@ state, you can\'t update
+-- it.
+module Amazonka.AppStream.UpdateFleet
+  ( -- * Creating a Request
+    UpdateFleet (..),
+    newUpdateFleet,
+
+    -- * Request Lenses
+    updateFleet_attributesToDelete,
+    updateFleet_computeCapacity,
+    updateFleet_deleteVpcConfig,
+    updateFleet_description,
+    updateFleet_disconnectTimeoutInSeconds,
+    updateFleet_displayName,
+    updateFleet_domainJoinInfo,
+    updateFleet_enableDefaultInternetAccess,
+    updateFleet_iamRoleArn,
+    updateFleet_idleDisconnectTimeoutInSeconds,
+    updateFleet_imageArn,
+    updateFleet_imageName,
+    updateFleet_instanceType,
+    updateFleet_maxConcurrentSessions,
+    updateFleet_maxUserDurationInSeconds,
+    updateFleet_name,
+    updateFleet_platform,
+    updateFleet_sessionScriptS3Location,
+    updateFleet_streamView,
+    updateFleet_usbDeviceFilterStrings,
+    updateFleet_vpcConfig,
+
+    -- * Destructuring the Response
+    UpdateFleetResponse (..),
+    newUpdateFleetResponse,
+
+    -- * Response Lenses
+    updateFleetResponse_fleet,
+    updateFleetResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateFleet' smart constructor.
+data UpdateFleet = UpdateFleet'
+  { -- | The fleet attributes to delete.
+    attributesToDelete :: Prelude.Maybe [FleetAttribute],
+    -- | The desired capacity for the fleet. This is not allowed for Elastic
+    -- fleets.
+    computeCapacity :: Prelude.Maybe ComputeCapacity,
+    -- | Deletes the VPC association for the specified fleet.
+    deleteVpcConfig :: Prelude.Maybe Prelude.Bool,
+    -- | The description to display.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time that a streaming session remains active after users
+    -- disconnect. If users try to reconnect to the streaming session after a
+    -- disconnection or network interruption within this time interval, they
+    -- are connected to their previous session. Otherwise, they are connected
+    -- to a new session with a new streaming instance.
+    --
+    -- Specify a value between 60 and 360000.
+    disconnectTimeoutInSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The fleet name to display.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the directory and organizational unit (OU) to use to join
+    -- the fleet to a Microsoft Active Directory domain.
+    domainJoinInfo :: Prelude.Maybe DomainJoinInfo,
+    -- | Enables or disables default internet access for the fleet.
+    enableDefaultInternetAccess :: Prelude.Maybe Prelude.Bool,
+    -- | The Amazon Resource Name (ARN) of the IAM role to apply to the fleet. To
+    -- assume a role, a fleet instance calls the AWS Security Token Service
+    -- (STS) @AssumeRole@ API operation and passes the ARN of the role to use.
+    -- The operation creates a new session with temporary credentials.
+    -- AppStream 2.0 retrieves the temporary credentials and creates the
+    -- __appstream_machine_role__ credential profile on the instance.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+    -- in the /Amazon AppStream 2.0 Administration Guide/.
+    iamRoleArn :: Prelude.Maybe Prelude.Text,
+    -- | The amount of time that users can be idle (inactive) before they are
+    -- disconnected from their streaming session and the
+    -- @DisconnectTimeoutInSeconds@ time interval begins. Users are notified
+    -- before they are disconnected due to inactivity. If users try to
+    -- reconnect to the streaming session before the time interval specified in
+    -- @DisconnectTimeoutInSeconds@ elapses, they are connected to their
+    -- previous session. Users are considered idle when they stop providing
+    -- keyboard or mouse input during their streaming session. File uploads and
+    -- downloads, audio in, audio out, and pixels changing do not qualify as
+    -- user activity. If users continue to be idle after the time interval in
+    -- @IdleDisconnectTimeoutInSeconds@ elapses, they are disconnected.
+    --
+    -- To prevent users from being disconnected due to inactivity, specify a
+    -- value of 0. Otherwise, specify a value between 60 and 3600. The default
+    -- value is 0.
+    --
+    -- If you enable this feature, we recommend that you specify a value that
+    -- corresponds exactly to a whole number of minutes (for example, 60, 120,
+    -- and 180). If you don\'t do this, the value is rounded to the nearest
+    -- minute. For example, if you specify a value of 70, users are
+    -- disconnected after 1 minute of inactivity. If you specify a value that
+    -- is at the midpoint between two different minutes, the value is rounded
+    -- up. For example, if you specify a value of 90, users are disconnected
+    -- after 2 minutes of inactivity.
+    idleDisconnectTimeoutInSeconds :: Prelude.Maybe Prelude.Int,
+    -- | The ARN of the public, private, or shared image to use.
+    imageArn :: Prelude.Maybe Prelude.Text,
+    -- | The name of the image used to create the fleet.
+    imageName :: Prelude.Maybe Prelude.Text,
+    -- | The instance type to use when launching fleet instances. The following
+    -- instance types are available:
+    --
+    -- -   stream.standard.small
+    --
+    -- -   stream.standard.medium
+    --
+    -- -   stream.standard.large
+    --
+    -- -   stream.standard.xlarge
+    --
+    -- -   stream.standard.2xlarge
+    --
+    -- -   stream.compute.large
+    --
+    -- -   stream.compute.xlarge
+    --
+    -- -   stream.compute.2xlarge
+    --
+    -- -   stream.compute.4xlarge
+    --
+    -- -   stream.compute.8xlarge
+    --
+    -- -   stream.memory.large
+    --
+    -- -   stream.memory.xlarge
+    --
+    -- -   stream.memory.2xlarge
+    --
+    -- -   stream.memory.4xlarge
+    --
+    -- -   stream.memory.8xlarge
+    --
+    -- -   stream.memory.z1d.large
+    --
+    -- -   stream.memory.z1d.xlarge
+    --
+    -- -   stream.memory.z1d.2xlarge
+    --
+    -- -   stream.memory.z1d.3xlarge
+    --
+    -- -   stream.memory.z1d.6xlarge
+    --
+    -- -   stream.memory.z1d.12xlarge
+    --
+    -- -   stream.graphics-design.large
+    --
+    -- -   stream.graphics-design.xlarge
+    --
+    -- -   stream.graphics-design.2xlarge
+    --
+    -- -   stream.graphics-design.4xlarge
+    --
+    -- -   stream.graphics-desktop.2xlarge
+    --
+    -- -   stream.graphics.g4dn.xlarge
+    --
+    -- -   stream.graphics.g4dn.2xlarge
+    --
+    -- -   stream.graphics.g4dn.4xlarge
+    --
+    -- -   stream.graphics.g4dn.8xlarge
+    --
+    -- -   stream.graphics.g4dn.12xlarge
+    --
+    -- -   stream.graphics.g4dn.16xlarge
+    --
+    -- -   stream.graphics-pro.4xlarge
+    --
+    -- -   stream.graphics-pro.8xlarge
+    --
+    -- -   stream.graphics-pro.16xlarge
+    --
+    -- The following instance types are available for Elastic fleets:
+    --
+    -- -   stream.standard.small
+    --
+    -- -   stream.standard.medium
+    --
+    -- -   stream.standard.large
+    --
+    -- -   stream.standard.xlarge
+    --
+    -- -   stream.standard.2xlarge
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of concurrent sessions for a fleet.
+    maxConcurrentSessions :: Prelude.Maybe Prelude.Int,
+    -- | The maximum amount of time that a streaming session can remain active,
+    -- in seconds. If users are still connected to a streaming instance five
+    -- minutes before this limit is reached, they are prompted to save any open
+    -- documents before being disconnected. After this time elapses, the
+    -- instance is terminated and replaced by a new instance.
+    --
+    -- Specify a value between 600 and 360000.
+    maxUserDurationInSeconds :: Prelude.Maybe Prelude.Int,
+    -- | A unique name for the fleet.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The platform of the fleet. WINDOWS_SERVER_2019 and AMAZON_LINUX2 are
+    -- supported for Elastic fleets.
+    platform :: Prelude.Maybe PlatformType,
+    -- | The S3 location of the session scripts configuration zip file. This only
+    -- applies to Elastic fleets.
+    sessionScriptS3Location :: Prelude.Maybe S3Location,
+    -- | The AppStream 2.0 view that is displayed to your users when they stream
+    -- from the fleet. When @APP@ is specified, only the windows of
+    -- applications opened by users display. When @DESKTOP@ is specified, the
+    -- standard desktop that is provided by the operating system displays.
+    --
+    -- The default value is @APP@.
+    streamView :: Prelude.Maybe StreamView,
+    -- | The USB device filter strings that specify which USB devices a user can
+    -- redirect to the fleet streaming session, when using the Windows native
+    -- client. This is allowed but not required for Elastic fleets.
+    usbDeviceFilterStrings :: Prelude.Maybe [Prelude.Text],
+    -- | The VPC configuration for the fleet. This is required for Elastic
+    -- fleets, but not required for other fleet types. Elastic fleets require
+    -- that you specify at least two subnets in different availability zones.
+    vpcConfig :: Prelude.Maybe VpcConfig
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFleet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributesToDelete', 'updateFleet_attributesToDelete' - The fleet attributes to delete.
+--
+-- 'computeCapacity', 'updateFleet_computeCapacity' - The desired capacity for the fleet. This is not allowed for Elastic
+-- fleets.
+--
+-- 'deleteVpcConfig', 'updateFleet_deleteVpcConfig' - Deletes the VPC association for the specified fleet.
+--
+-- 'description', 'updateFleet_description' - The description to display.
+--
+-- 'disconnectTimeoutInSeconds', 'updateFleet_disconnectTimeoutInSeconds' - The amount of time that a streaming session remains active after users
+-- disconnect. If users try to reconnect to the streaming session after a
+-- disconnection or network interruption within this time interval, they
+-- are connected to their previous session. Otherwise, they are connected
+-- to a new session with a new streaming instance.
+--
+-- Specify a value between 60 and 360000.
+--
+-- 'displayName', 'updateFleet_displayName' - The fleet name to display.
+--
+-- 'domainJoinInfo', 'updateFleet_domainJoinInfo' - The name of the directory and organizational unit (OU) to use to join
+-- the fleet to a Microsoft Active Directory domain.
+--
+-- 'enableDefaultInternetAccess', 'updateFleet_enableDefaultInternetAccess' - Enables or disables default internet access for the fleet.
+--
+-- 'iamRoleArn', 'updateFleet_iamRoleArn' - The Amazon Resource Name (ARN) of the IAM role to apply to the fleet. To
+-- assume a role, a fleet instance calls the AWS Security Token Service
+-- (STS) @AssumeRole@ API operation and passes the ARN of the role to use.
+-- The operation creates a new session with temporary credentials.
+-- AppStream 2.0 retrieves the temporary credentials and creates the
+-- __appstream_machine_role__ credential profile on the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+--
+-- 'idleDisconnectTimeoutInSeconds', 'updateFleet_idleDisconnectTimeoutInSeconds' - The amount of time that users can be idle (inactive) before they are
+-- disconnected from their streaming session and the
+-- @DisconnectTimeoutInSeconds@ time interval begins. Users are notified
+-- before they are disconnected due to inactivity. If users try to
+-- reconnect to the streaming session before the time interval specified in
+-- @DisconnectTimeoutInSeconds@ elapses, they are connected to their
+-- previous session. Users are considered idle when they stop providing
+-- keyboard or mouse input during their streaming session. File uploads and
+-- downloads, audio in, audio out, and pixels changing do not qualify as
+-- user activity. If users continue to be idle after the time interval in
+-- @IdleDisconnectTimeoutInSeconds@ elapses, they are disconnected.
+--
+-- To prevent users from being disconnected due to inactivity, specify a
+-- value of 0. Otherwise, specify a value between 60 and 3600. The default
+-- value is 0.
+--
+-- If you enable this feature, we recommend that you specify a value that
+-- corresponds exactly to a whole number of minutes (for example, 60, 120,
+-- and 180). If you don\'t do this, the value is rounded to the nearest
+-- minute. For example, if you specify a value of 70, users are
+-- disconnected after 1 minute of inactivity. If you specify a value that
+-- is at the midpoint between two different minutes, the value is rounded
+-- up. For example, if you specify a value of 90, users are disconnected
+-- after 2 minutes of inactivity.
+--
+-- 'imageArn', 'updateFleet_imageArn' - The ARN of the public, private, or shared image to use.
+--
+-- 'imageName', 'updateFleet_imageName' - The name of the image used to create the fleet.
+--
+-- 'instanceType', 'updateFleet_instanceType' - The instance type to use when launching fleet instances. The following
+-- instance types are available:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.standard.xlarge
+--
+-- -   stream.standard.2xlarge
+--
+-- -   stream.compute.large
+--
+-- -   stream.compute.xlarge
+--
+-- -   stream.compute.2xlarge
+--
+-- -   stream.compute.4xlarge
+--
+-- -   stream.compute.8xlarge
+--
+-- -   stream.memory.large
+--
+-- -   stream.memory.xlarge
+--
+-- -   stream.memory.2xlarge
+--
+-- -   stream.memory.4xlarge
+--
+-- -   stream.memory.8xlarge
+--
+-- -   stream.memory.z1d.large
+--
+-- -   stream.memory.z1d.xlarge
+--
+-- -   stream.memory.z1d.2xlarge
+--
+-- -   stream.memory.z1d.3xlarge
+--
+-- -   stream.memory.z1d.6xlarge
+--
+-- -   stream.memory.z1d.12xlarge
+--
+-- -   stream.graphics-design.large
+--
+-- -   stream.graphics-design.xlarge
+--
+-- -   stream.graphics-design.2xlarge
+--
+-- -   stream.graphics-design.4xlarge
+--
+-- -   stream.graphics-desktop.2xlarge
+--
+-- -   stream.graphics.g4dn.xlarge
+--
+-- -   stream.graphics.g4dn.2xlarge
+--
+-- -   stream.graphics.g4dn.4xlarge
+--
+-- -   stream.graphics.g4dn.8xlarge
+--
+-- -   stream.graphics.g4dn.12xlarge
+--
+-- -   stream.graphics.g4dn.16xlarge
+--
+-- -   stream.graphics-pro.4xlarge
+--
+-- -   stream.graphics-pro.8xlarge
+--
+-- -   stream.graphics-pro.16xlarge
+--
+-- The following instance types are available for Elastic fleets:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.standard.xlarge
+--
+-- -   stream.standard.2xlarge
+--
+-- 'maxConcurrentSessions', 'updateFleet_maxConcurrentSessions' - The maximum number of concurrent sessions for a fleet.
+--
+-- 'maxUserDurationInSeconds', 'updateFleet_maxUserDurationInSeconds' - The maximum amount of time that a streaming session can remain active,
+-- in seconds. If users are still connected to a streaming instance five
+-- minutes before this limit is reached, they are prompted to save any open
+-- documents before being disconnected. After this time elapses, the
+-- instance is terminated and replaced by a new instance.
+--
+-- Specify a value between 600 and 360000.
+--
+-- 'name', 'updateFleet_name' - A unique name for the fleet.
+--
+-- 'platform', 'updateFleet_platform' - The platform of the fleet. WINDOWS_SERVER_2019 and AMAZON_LINUX2 are
+-- supported for Elastic fleets.
+--
+-- 'sessionScriptS3Location', 'updateFleet_sessionScriptS3Location' - The S3 location of the session scripts configuration zip file. This only
+-- applies to Elastic fleets.
+--
+-- 'streamView', 'updateFleet_streamView' - The AppStream 2.0 view that is displayed to your users when they stream
+-- from the fleet. When @APP@ is specified, only the windows of
+-- applications opened by users display. When @DESKTOP@ is specified, the
+-- standard desktop that is provided by the operating system displays.
+--
+-- The default value is @APP@.
+--
+-- 'usbDeviceFilterStrings', 'updateFleet_usbDeviceFilterStrings' - The USB device filter strings that specify which USB devices a user can
+-- redirect to the fleet streaming session, when using the Windows native
+-- client. This is allowed but not required for Elastic fleets.
+--
+-- 'vpcConfig', 'updateFleet_vpcConfig' - The VPC configuration for the fleet. This is required for Elastic
+-- fleets, but not required for other fleet types. Elastic fleets require
+-- that you specify at least two subnets in different availability zones.
+newUpdateFleet ::
+  UpdateFleet
+newUpdateFleet =
+  UpdateFleet'
+    { attributesToDelete = Prelude.Nothing,
+      computeCapacity = Prelude.Nothing,
+      deleteVpcConfig = Prelude.Nothing,
+      description = Prelude.Nothing,
+      disconnectTimeoutInSeconds = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      domainJoinInfo = Prelude.Nothing,
+      enableDefaultInternetAccess = Prelude.Nothing,
+      iamRoleArn = Prelude.Nothing,
+      idleDisconnectTimeoutInSeconds = Prelude.Nothing,
+      imageArn = Prelude.Nothing,
+      imageName = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      maxConcurrentSessions = Prelude.Nothing,
+      maxUserDurationInSeconds = Prelude.Nothing,
+      name = Prelude.Nothing,
+      platform = Prelude.Nothing,
+      sessionScriptS3Location = Prelude.Nothing,
+      streamView = Prelude.Nothing,
+      usbDeviceFilterStrings = Prelude.Nothing,
+      vpcConfig = Prelude.Nothing
+    }
+
+-- | The fleet attributes to delete.
+updateFleet_attributesToDelete :: Lens.Lens' UpdateFleet (Prelude.Maybe [FleetAttribute])
+updateFleet_attributesToDelete = Lens.lens (\UpdateFleet' {attributesToDelete} -> attributesToDelete) (\s@UpdateFleet' {} a -> s {attributesToDelete = a} :: UpdateFleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The desired capacity for the fleet. This is not allowed for Elastic
+-- fleets.
+updateFleet_computeCapacity :: Lens.Lens' UpdateFleet (Prelude.Maybe ComputeCapacity)
+updateFleet_computeCapacity = Lens.lens (\UpdateFleet' {computeCapacity} -> computeCapacity) (\s@UpdateFleet' {} a -> s {computeCapacity = a} :: UpdateFleet)
+
+-- | Deletes the VPC association for the specified fleet.
+updateFleet_deleteVpcConfig :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Bool)
+updateFleet_deleteVpcConfig = Lens.lens (\UpdateFleet' {deleteVpcConfig} -> deleteVpcConfig) (\s@UpdateFleet' {} a -> s {deleteVpcConfig = a} :: UpdateFleet)
+
+-- | The description to display.
+updateFleet_description :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Text)
+updateFleet_description = Lens.lens (\UpdateFleet' {description} -> description) (\s@UpdateFleet' {} a -> s {description = a} :: UpdateFleet)
+
+-- | The amount of time that a streaming session remains active after users
+-- disconnect. If users try to reconnect to the streaming session after a
+-- disconnection or network interruption within this time interval, they
+-- are connected to their previous session. Otherwise, they are connected
+-- to a new session with a new streaming instance.
+--
+-- Specify a value between 60 and 360000.
+updateFleet_disconnectTimeoutInSeconds :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Int)
+updateFleet_disconnectTimeoutInSeconds = Lens.lens (\UpdateFleet' {disconnectTimeoutInSeconds} -> disconnectTimeoutInSeconds) (\s@UpdateFleet' {} a -> s {disconnectTimeoutInSeconds = a} :: UpdateFleet)
+
+-- | The fleet name to display.
+updateFleet_displayName :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Text)
+updateFleet_displayName = Lens.lens (\UpdateFleet' {displayName} -> displayName) (\s@UpdateFleet' {} a -> s {displayName = a} :: UpdateFleet)
+
+-- | The name of the directory and organizational unit (OU) to use to join
+-- the fleet to a Microsoft Active Directory domain.
+updateFleet_domainJoinInfo :: Lens.Lens' UpdateFleet (Prelude.Maybe DomainJoinInfo)
+updateFleet_domainJoinInfo = Lens.lens (\UpdateFleet' {domainJoinInfo} -> domainJoinInfo) (\s@UpdateFleet' {} a -> s {domainJoinInfo = a} :: UpdateFleet)
+
+-- | Enables or disables default internet access for the fleet.
+updateFleet_enableDefaultInternetAccess :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Bool)
+updateFleet_enableDefaultInternetAccess = Lens.lens (\UpdateFleet' {enableDefaultInternetAccess} -> enableDefaultInternetAccess) (\s@UpdateFleet' {} a -> s {enableDefaultInternetAccess = a} :: UpdateFleet)
+
+-- | The Amazon Resource Name (ARN) of the IAM role to apply to the fleet. To
+-- assume a role, a fleet instance calls the AWS Security Token Service
+-- (STS) @AssumeRole@ API operation and passes the ARN of the role to use.
+-- The operation creates a new session with temporary credentials.
+-- AppStream 2.0 retrieves the temporary credentials and creates the
+-- __appstream_machine_role__ credential profile on the instance.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/appstream2/latest/developerguide/using-iam-roles-to-grant-permissions-to-applications-scripts-streaming-instances.html Using an IAM Role to Grant Permissions to Applications and Scripts Running on AppStream 2.0 Streaming Instances>
+-- in the /Amazon AppStream 2.0 Administration Guide/.
+updateFleet_iamRoleArn :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Text)
+updateFleet_iamRoleArn = Lens.lens (\UpdateFleet' {iamRoleArn} -> iamRoleArn) (\s@UpdateFleet' {} a -> s {iamRoleArn = a} :: UpdateFleet)
+
+-- | The amount of time that users can be idle (inactive) before they are
+-- disconnected from their streaming session and the
+-- @DisconnectTimeoutInSeconds@ time interval begins. Users are notified
+-- before they are disconnected due to inactivity. If users try to
+-- reconnect to the streaming session before the time interval specified in
+-- @DisconnectTimeoutInSeconds@ elapses, they are connected to their
+-- previous session. Users are considered idle when they stop providing
+-- keyboard or mouse input during their streaming session. File uploads and
+-- downloads, audio in, audio out, and pixels changing do not qualify as
+-- user activity. If users continue to be idle after the time interval in
+-- @IdleDisconnectTimeoutInSeconds@ elapses, they are disconnected.
+--
+-- To prevent users from being disconnected due to inactivity, specify a
+-- value of 0. Otherwise, specify a value between 60 and 3600. The default
+-- value is 0.
+--
+-- If you enable this feature, we recommend that you specify a value that
+-- corresponds exactly to a whole number of minutes (for example, 60, 120,
+-- and 180). If you don\'t do this, the value is rounded to the nearest
+-- minute. For example, if you specify a value of 70, users are
+-- disconnected after 1 minute of inactivity. If you specify a value that
+-- is at the midpoint between two different minutes, the value is rounded
+-- up. For example, if you specify a value of 90, users are disconnected
+-- after 2 minutes of inactivity.
+updateFleet_idleDisconnectTimeoutInSeconds :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Int)
+updateFleet_idleDisconnectTimeoutInSeconds = Lens.lens (\UpdateFleet' {idleDisconnectTimeoutInSeconds} -> idleDisconnectTimeoutInSeconds) (\s@UpdateFleet' {} a -> s {idleDisconnectTimeoutInSeconds = a} :: UpdateFleet)
+
+-- | The ARN of the public, private, or shared image to use.
+updateFleet_imageArn :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Text)
+updateFleet_imageArn = Lens.lens (\UpdateFleet' {imageArn} -> imageArn) (\s@UpdateFleet' {} a -> s {imageArn = a} :: UpdateFleet)
+
+-- | The name of the image used to create the fleet.
+updateFleet_imageName :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Text)
+updateFleet_imageName = Lens.lens (\UpdateFleet' {imageName} -> imageName) (\s@UpdateFleet' {} a -> s {imageName = a} :: UpdateFleet)
+
+-- | The instance type to use when launching fleet instances. The following
+-- instance types are available:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.standard.xlarge
+--
+-- -   stream.standard.2xlarge
+--
+-- -   stream.compute.large
+--
+-- -   stream.compute.xlarge
+--
+-- -   stream.compute.2xlarge
+--
+-- -   stream.compute.4xlarge
+--
+-- -   stream.compute.8xlarge
+--
+-- -   stream.memory.large
+--
+-- -   stream.memory.xlarge
+--
+-- -   stream.memory.2xlarge
+--
+-- -   stream.memory.4xlarge
+--
+-- -   stream.memory.8xlarge
+--
+-- -   stream.memory.z1d.large
+--
+-- -   stream.memory.z1d.xlarge
+--
+-- -   stream.memory.z1d.2xlarge
+--
+-- -   stream.memory.z1d.3xlarge
+--
+-- -   stream.memory.z1d.6xlarge
+--
+-- -   stream.memory.z1d.12xlarge
+--
+-- -   stream.graphics-design.large
+--
+-- -   stream.graphics-design.xlarge
+--
+-- -   stream.graphics-design.2xlarge
+--
+-- -   stream.graphics-design.4xlarge
+--
+-- -   stream.graphics-desktop.2xlarge
+--
+-- -   stream.graphics.g4dn.xlarge
+--
+-- -   stream.graphics.g4dn.2xlarge
+--
+-- -   stream.graphics.g4dn.4xlarge
+--
+-- -   stream.graphics.g4dn.8xlarge
+--
+-- -   stream.graphics.g4dn.12xlarge
+--
+-- -   stream.graphics.g4dn.16xlarge
+--
+-- -   stream.graphics-pro.4xlarge
+--
+-- -   stream.graphics-pro.8xlarge
+--
+-- -   stream.graphics-pro.16xlarge
+--
+-- The following instance types are available for Elastic fleets:
+--
+-- -   stream.standard.small
+--
+-- -   stream.standard.medium
+--
+-- -   stream.standard.large
+--
+-- -   stream.standard.xlarge
+--
+-- -   stream.standard.2xlarge
+updateFleet_instanceType :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Text)
+updateFleet_instanceType = Lens.lens (\UpdateFleet' {instanceType} -> instanceType) (\s@UpdateFleet' {} a -> s {instanceType = a} :: UpdateFleet)
+
+-- | The maximum number of concurrent sessions for a fleet.
+updateFleet_maxConcurrentSessions :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Int)
+updateFleet_maxConcurrentSessions = Lens.lens (\UpdateFleet' {maxConcurrentSessions} -> maxConcurrentSessions) (\s@UpdateFleet' {} a -> s {maxConcurrentSessions = a} :: UpdateFleet)
+
+-- | The maximum amount of time that a streaming session can remain active,
+-- in seconds. If users are still connected to a streaming instance five
+-- minutes before this limit is reached, they are prompted to save any open
+-- documents before being disconnected. After this time elapses, the
+-- instance is terminated and replaced by a new instance.
+--
+-- Specify a value between 600 and 360000.
+updateFleet_maxUserDurationInSeconds :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Int)
+updateFleet_maxUserDurationInSeconds = Lens.lens (\UpdateFleet' {maxUserDurationInSeconds} -> maxUserDurationInSeconds) (\s@UpdateFleet' {} a -> s {maxUserDurationInSeconds = a} :: UpdateFleet)
+
+-- | A unique name for the fleet.
+updateFleet_name :: Lens.Lens' UpdateFleet (Prelude.Maybe Prelude.Text)
+updateFleet_name = Lens.lens (\UpdateFleet' {name} -> name) (\s@UpdateFleet' {} a -> s {name = a} :: UpdateFleet)
+
+-- | The platform of the fleet. WINDOWS_SERVER_2019 and AMAZON_LINUX2 are
+-- supported for Elastic fleets.
+updateFleet_platform :: Lens.Lens' UpdateFleet (Prelude.Maybe PlatformType)
+updateFleet_platform = Lens.lens (\UpdateFleet' {platform} -> platform) (\s@UpdateFleet' {} a -> s {platform = a} :: UpdateFleet)
+
+-- | The S3 location of the session scripts configuration zip file. This only
+-- applies to Elastic fleets.
+updateFleet_sessionScriptS3Location :: Lens.Lens' UpdateFleet (Prelude.Maybe S3Location)
+updateFleet_sessionScriptS3Location = Lens.lens (\UpdateFleet' {sessionScriptS3Location} -> sessionScriptS3Location) (\s@UpdateFleet' {} a -> s {sessionScriptS3Location = a} :: UpdateFleet)
+
+-- | The AppStream 2.0 view that is displayed to your users when they stream
+-- from the fleet. When @APP@ is specified, only the windows of
+-- applications opened by users display. When @DESKTOP@ is specified, the
+-- standard desktop that is provided by the operating system displays.
+--
+-- The default value is @APP@.
+updateFleet_streamView :: Lens.Lens' UpdateFleet (Prelude.Maybe StreamView)
+updateFleet_streamView = Lens.lens (\UpdateFleet' {streamView} -> streamView) (\s@UpdateFleet' {} a -> s {streamView = a} :: UpdateFleet)
+
+-- | The USB device filter strings that specify which USB devices a user can
+-- redirect to the fleet streaming session, when using the Windows native
+-- client. This is allowed but not required for Elastic fleets.
+updateFleet_usbDeviceFilterStrings :: Lens.Lens' UpdateFleet (Prelude.Maybe [Prelude.Text])
+updateFleet_usbDeviceFilterStrings = Lens.lens (\UpdateFleet' {usbDeviceFilterStrings} -> usbDeviceFilterStrings) (\s@UpdateFleet' {} a -> s {usbDeviceFilterStrings = a} :: UpdateFleet) Prelude.. Lens.mapping Lens.coerced
+
+-- | The VPC configuration for the fleet. This is required for Elastic
+-- fleets, but not required for other fleet types. Elastic fleets require
+-- that you specify at least two subnets in different availability zones.
+updateFleet_vpcConfig :: Lens.Lens' UpdateFleet (Prelude.Maybe VpcConfig)
+updateFleet_vpcConfig = Lens.lens (\UpdateFleet' {vpcConfig} -> vpcConfig) (\s@UpdateFleet' {} a -> s {vpcConfig = a} :: UpdateFleet)
+
+instance Core.AWSRequest UpdateFleet where
+  type AWSResponse UpdateFleet = UpdateFleetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateFleetResponse'
+            Prelude.<$> (x Data..?> "Fleet")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateFleet where
+  hashWithSalt _salt UpdateFleet' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributesToDelete
+      `Prelude.hashWithSalt` computeCapacity
+      `Prelude.hashWithSalt` deleteVpcConfig
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` disconnectTimeoutInSeconds
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` domainJoinInfo
+      `Prelude.hashWithSalt` enableDefaultInternetAccess
+      `Prelude.hashWithSalt` iamRoleArn
+      `Prelude.hashWithSalt` idleDisconnectTimeoutInSeconds
+      `Prelude.hashWithSalt` imageArn
+      `Prelude.hashWithSalt` imageName
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` maxConcurrentSessions
+      `Prelude.hashWithSalt` maxUserDurationInSeconds
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` platform
+      `Prelude.hashWithSalt` sessionScriptS3Location
+      `Prelude.hashWithSalt` streamView
+      `Prelude.hashWithSalt` usbDeviceFilterStrings
+      `Prelude.hashWithSalt` vpcConfig
+
+instance Prelude.NFData UpdateFleet where
+  rnf UpdateFleet' {..} =
+    Prelude.rnf attributesToDelete
+      `Prelude.seq` Prelude.rnf computeCapacity
+      `Prelude.seq` Prelude.rnf deleteVpcConfig
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf disconnectTimeoutInSeconds
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf domainJoinInfo
+      `Prelude.seq` Prelude.rnf enableDefaultInternetAccess
+      `Prelude.seq` Prelude.rnf iamRoleArn
+      `Prelude.seq` Prelude.rnf idleDisconnectTimeoutInSeconds
+      `Prelude.seq` Prelude.rnf imageArn
+      `Prelude.seq` Prelude.rnf imageName
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf maxConcurrentSessions
+      `Prelude.seq` Prelude.rnf maxUserDurationInSeconds
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf platform
+      `Prelude.seq` Prelude.rnf
+        sessionScriptS3Location
+      `Prelude.seq` Prelude.rnf streamView
+      `Prelude.seq` Prelude.rnf
+        usbDeviceFilterStrings
+      `Prelude.seq` Prelude.rnf vpcConfig
+
+instance Data.ToHeaders UpdateFleet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.UpdateFleet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateFleet where
+  toJSON UpdateFleet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AttributesToDelete" Data..=)
+              Prelude.<$> attributesToDelete,
+            ("ComputeCapacity" Data..=)
+              Prelude.<$> computeCapacity,
+            ("DeleteVpcConfig" Data..=)
+              Prelude.<$> deleteVpcConfig,
+            ("Description" Data..=) Prelude.<$> description,
+            ("DisconnectTimeoutInSeconds" Data..=)
+              Prelude.<$> disconnectTimeoutInSeconds,
+            ("DisplayName" Data..=) Prelude.<$> displayName,
+            ("DomainJoinInfo" Data..=)
+              Prelude.<$> domainJoinInfo,
+            ("EnableDefaultInternetAccess" Data..=)
+              Prelude.<$> enableDefaultInternetAccess,
+            ("IamRoleArn" Data..=) Prelude.<$> iamRoleArn,
+            ("IdleDisconnectTimeoutInSeconds" Data..=)
+              Prelude.<$> idleDisconnectTimeoutInSeconds,
+            ("ImageArn" Data..=) Prelude.<$> imageArn,
+            ("ImageName" Data..=) Prelude.<$> imageName,
+            ("InstanceType" Data..=) Prelude.<$> instanceType,
+            ("MaxConcurrentSessions" Data..=)
+              Prelude.<$> maxConcurrentSessions,
+            ("MaxUserDurationInSeconds" Data..=)
+              Prelude.<$> maxUserDurationInSeconds,
+            ("Name" Data..=) Prelude.<$> name,
+            ("Platform" Data..=) Prelude.<$> platform,
+            ("SessionScriptS3Location" Data..=)
+              Prelude.<$> sessionScriptS3Location,
+            ("StreamView" Data..=) Prelude.<$> streamView,
+            ("UsbDeviceFilterStrings" Data..=)
+              Prelude.<$> usbDeviceFilterStrings,
+            ("VpcConfig" Data..=) Prelude.<$> vpcConfig
+          ]
+      )
+
+instance Data.ToPath UpdateFleet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateFleet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateFleetResponse' smart constructor.
+data UpdateFleetResponse = UpdateFleetResponse'
+  { -- | Information about the fleet.
+    fleet :: Prelude.Maybe Fleet,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateFleetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'fleet', 'updateFleetResponse_fleet' - Information about the fleet.
+--
+-- 'httpStatus', 'updateFleetResponse_httpStatus' - The response's http status code.
+newUpdateFleetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateFleetResponse
+newUpdateFleetResponse pHttpStatus_ =
+  UpdateFleetResponse'
+    { fleet = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the fleet.
+updateFleetResponse_fleet :: Lens.Lens' UpdateFleetResponse (Prelude.Maybe Fleet)
+updateFleetResponse_fleet = Lens.lens (\UpdateFleetResponse' {fleet} -> fleet) (\s@UpdateFleetResponse' {} a -> s {fleet = a} :: UpdateFleetResponse)
+
+-- | The response's http status code.
+updateFleetResponse_httpStatus :: Lens.Lens' UpdateFleetResponse Prelude.Int
+updateFleetResponse_httpStatus = Lens.lens (\UpdateFleetResponse' {httpStatus} -> httpStatus) (\s@UpdateFleetResponse' {} a -> s {httpStatus = a} :: UpdateFleetResponse)
+
+instance Prelude.NFData UpdateFleetResponse where
+  rnf UpdateFleetResponse' {..} =
+    Prelude.rnf fleet
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/UpdateImagePermissions.hs b/gen/Amazonka/AppStream/UpdateImagePermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/UpdateImagePermissions.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.AppStream.UpdateImagePermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Adds or updates permissions for the specified private image.
+module Amazonka.AppStream.UpdateImagePermissions
+  ( -- * Creating a Request
+    UpdateImagePermissions (..),
+    newUpdateImagePermissions,
+
+    -- * Request Lenses
+    updateImagePermissions_name,
+    updateImagePermissions_sharedAccountId,
+    updateImagePermissions_imagePermissions,
+
+    -- * Destructuring the Response
+    UpdateImagePermissionsResponse (..),
+    newUpdateImagePermissionsResponse,
+
+    -- * Response Lenses
+    updateImagePermissionsResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateImagePermissions' smart constructor.
+data UpdateImagePermissions = UpdateImagePermissions'
+  { -- | The name of the private image.
+    name :: Prelude.Text,
+    -- | The 12-digit identifier of the AWS account for which you want add or
+    -- update image permissions.
+    sharedAccountId :: Prelude.Text,
+    -- | The permissions for the image.
+    imagePermissions :: ImagePermissions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateImagePermissions' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateImagePermissions_name' - The name of the private image.
+--
+-- 'sharedAccountId', 'updateImagePermissions_sharedAccountId' - The 12-digit identifier of the AWS account for which you want add or
+-- update image permissions.
+--
+-- 'imagePermissions', 'updateImagePermissions_imagePermissions' - The permissions for the image.
+newUpdateImagePermissions ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'sharedAccountId'
+  Prelude.Text ->
+  -- | 'imagePermissions'
+  ImagePermissions ->
+  UpdateImagePermissions
+newUpdateImagePermissions
+  pName_
+  pSharedAccountId_
+  pImagePermissions_ =
+    UpdateImagePermissions'
+      { name = pName_,
+        sharedAccountId = pSharedAccountId_,
+        imagePermissions = pImagePermissions_
+      }
+
+-- | The name of the private image.
+updateImagePermissions_name :: Lens.Lens' UpdateImagePermissions Prelude.Text
+updateImagePermissions_name = Lens.lens (\UpdateImagePermissions' {name} -> name) (\s@UpdateImagePermissions' {} a -> s {name = a} :: UpdateImagePermissions)
+
+-- | The 12-digit identifier of the AWS account for which you want add or
+-- update image permissions.
+updateImagePermissions_sharedAccountId :: Lens.Lens' UpdateImagePermissions Prelude.Text
+updateImagePermissions_sharedAccountId = Lens.lens (\UpdateImagePermissions' {sharedAccountId} -> sharedAccountId) (\s@UpdateImagePermissions' {} a -> s {sharedAccountId = a} :: UpdateImagePermissions)
+
+-- | The permissions for the image.
+updateImagePermissions_imagePermissions :: Lens.Lens' UpdateImagePermissions ImagePermissions
+updateImagePermissions_imagePermissions = Lens.lens (\UpdateImagePermissions' {imagePermissions} -> imagePermissions) (\s@UpdateImagePermissions' {} a -> s {imagePermissions = a} :: UpdateImagePermissions)
+
+instance Core.AWSRequest UpdateImagePermissions where
+  type
+    AWSResponse UpdateImagePermissions =
+      UpdateImagePermissionsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateImagePermissionsResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateImagePermissions where
+  hashWithSalt _salt UpdateImagePermissions' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` sharedAccountId
+      `Prelude.hashWithSalt` imagePermissions
+
+instance Prelude.NFData UpdateImagePermissions where
+  rnf UpdateImagePermissions' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf sharedAccountId
+      `Prelude.seq` Prelude.rnf imagePermissions
+
+instance Data.ToHeaders UpdateImagePermissions where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.UpdateImagePermissions" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateImagePermissions where
+  toJSON UpdateImagePermissions' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Name" Data..= name),
+            Prelude.Just
+              ("SharedAccountId" Data..= sharedAccountId),
+            Prelude.Just
+              ("ImagePermissions" Data..= imagePermissions)
+          ]
+      )
+
+instance Data.ToPath UpdateImagePermissions where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateImagePermissions where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateImagePermissionsResponse' smart constructor.
+data UpdateImagePermissionsResponse = UpdateImagePermissionsResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateImagePermissionsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateImagePermissionsResponse_httpStatus' - The response's http status code.
+newUpdateImagePermissionsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateImagePermissionsResponse
+newUpdateImagePermissionsResponse pHttpStatus_ =
+  UpdateImagePermissionsResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateImagePermissionsResponse_httpStatus :: Lens.Lens' UpdateImagePermissionsResponse Prelude.Int
+updateImagePermissionsResponse_httpStatus = Lens.lens (\UpdateImagePermissionsResponse' {httpStatus} -> httpStatus) (\s@UpdateImagePermissionsResponse' {} a -> s {httpStatus = a} :: UpdateImagePermissionsResponse)
+
+instance
+  Prelude.NFData
+    UpdateImagePermissionsResponse
+  where
+  rnf UpdateImagePermissionsResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/UpdateStack.hs b/gen/Amazonka/AppStream/UpdateStack.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/UpdateStack.hs
@@ -0,0 +1,363 @@
+{-# 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.AppStream.UpdateStack
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified fields for the specified stack.
+module Amazonka.AppStream.UpdateStack
+  ( -- * Creating a Request
+    UpdateStack (..),
+    newUpdateStack,
+
+    -- * Request Lenses
+    updateStack_accessEndpoints,
+    updateStack_applicationSettings,
+    updateStack_attributesToDelete,
+    updateStack_deleteStorageConnectors,
+    updateStack_description,
+    updateStack_displayName,
+    updateStack_embedHostDomains,
+    updateStack_feedbackURL,
+    updateStack_redirectURL,
+    updateStack_storageConnectors,
+    updateStack_streamingExperienceSettings,
+    updateStack_userSettings,
+    updateStack_name,
+
+    -- * Destructuring the Response
+    UpdateStackResponse (..),
+    newUpdateStackResponse,
+
+    -- * Response Lenses
+    updateStackResponse_stack,
+    updateStackResponse_httpStatus,
+  )
+where
+
+import Amazonka.AppStream.Types
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+
+-- | /See:/ 'newUpdateStack' smart constructor.
+data UpdateStack = UpdateStack'
+  { -- | The list of interface VPC endpoint (interface endpoint) objects. Users
+    -- of the stack can connect to AppStream 2.0 only through the specified
+    -- endpoints.
+    accessEndpoints :: Prelude.Maybe (Prelude.NonEmpty AccessEndpoint),
+    -- | The persistent application settings for users of a stack. When these
+    -- settings are enabled, changes that users make to applications and
+    -- Windows settings are automatically saved after each session and applied
+    -- to the next session.
+    applicationSettings :: Prelude.Maybe ApplicationSettings,
+    -- | The stack attributes to delete.
+    attributesToDelete :: Prelude.Maybe [StackAttribute],
+    -- | Deletes the storage connectors currently enabled for the stack.
+    deleteStorageConnectors :: Prelude.Maybe Prelude.Bool,
+    -- | The description to display.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The stack name to display.
+    displayName :: Prelude.Maybe Prelude.Text,
+    -- | The domains where AppStream 2.0 streaming sessions can be embedded in an
+    -- iframe. You must approve the domains that you want to host embedded
+    -- AppStream 2.0 streaming sessions.
+    embedHostDomains :: Prelude.Maybe (Prelude.NonEmpty Prelude.Text),
+    -- | The URL that users are redirected to after they choose the Send Feedback
+    -- link. If no URL is specified, no Send Feedback link is displayed.
+    feedbackURL :: Prelude.Maybe Prelude.Text,
+    -- | The URL that users are redirected to after their streaming session ends.
+    redirectURL :: Prelude.Maybe Prelude.Text,
+    -- | The storage connectors to enable.
+    storageConnectors :: Prelude.Maybe [StorageConnector],
+    -- | The streaming protocol you want your stack to prefer. This can be UDP or
+    -- TCP. Currently, UDP is only supported in the Windows native client.
+    streamingExperienceSettings :: Prelude.Maybe StreamingExperienceSettings,
+    -- | The actions that are enabled or disabled for users during their
+    -- streaming sessions. By default, these actions are enabled.
+    userSettings :: Prelude.Maybe (Prelude.NonEmpty UserSetting),
+    -- | The name of the stack.
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateStack' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'accessEndpoints', 'updateStack_accessEndpoints' - The list of interface VPC endpoint (interface endpoint) objects. Users
+-- of the stack can connect to AppStream 2.0 only through the specified
+-- endpoints.
+--
+-- 'applicationSettings', 'updateStack_applicationSettings' - The persistent application settings for users of a stack. When these
+-- settings are enabled, changes that users make to applications and
+-- Windows settings are automatically saved after each session and applied
+-- to the next session.
+--
+-- 'attributesToDelete', 'updateStack_attributesToDelete' - The stack attributes to delete.
+--
+-- 'deleteStorageConnectors', 'updateStack_deleteStorageConnectors' - Deletes the storage connectors currently enabled for the stack.
+--
+-- 'description', 'updateStack_description' - The description to display.
+--
+-- 'displayName', 'updateStack_displayName' - The stack name to display.
+--
+-- 'embedHostDomains', 'updateStack_embedHostDomains' - The domains where AppStream 2.0 streaming sessions can be embedded in an
+-- iframe. You must approve the domains that you want to host embedded
+-- AppStream 2.0 streaming sessions.
+--
+-- 'feedbackURL', 'updateStack_feedbackURL' - The URL that users are redirected to after they choose the Send Feedback
+-- link. If no URL is specified, no Send Feedback link is displayed.
+--
+-- 'redirectURL', 'updateStack_redirectURL' - The URL that users are redirected to after their streaming session ends.
+--
+-- 'storageConnectors', 'updateStack_storageConnectors' - The storage connectors to enable.
+--
+-- 'streamingExperienceSettings', 'updateStack_streamingExperienceSettings' - The streaming protocol you want your stack to prefer. This can be UDP or
+-- TCP. Currently, UDP is only supported in the Windows native client.
+--
+-- 'userSettings', 'updateStack_userSettings' - The actions that are enabled or disabled for users during their
+-- streaming sessions. By default, these actions are enabled.
+--
+-- 'name', 'updateStack_name' - The name of the stack.
+newUpdateStack ::
+  -- | 'name'
+  Prelude.Text ->
+  UpdateStack
+newUpdateStack pName_ =
+  UpdateStack'
+    { accessEndpoints = Prelude.Nothing,
+      applicationSettings = Prelude.Nothing,
+      attributesToDelete = Prelude.Nothing,
+      deleteStorageConnectors = Prelude.Nothing,
+      description = Prelude.Nothing,
+      displayName = Prelude.Nothing,
+      embedHostDomains = Prelude.Nothing,
+      feedbackURL = Prelude.Nothing,
+      redirectURL = Prelude.Nothing,
+      storageConnectors = Prelude.Nothing,
+      streamingExperienceSettings = Prelude.Nothing,
+      userSettings = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | The list of interface VPC endpoint (interface endpoint) objects. Users
+-- of the stack can connect to AppStream 2.0 only through the specified
+-- endpoints.
+updateStack_accessEndpoints :: Lens.Lens' UpdateStack (Prelude.Maybe (Prelude.NonEmpty AccessEndpoint))
+updateStack_accessEndpoints = Lens.lens (\UpdateStack' {accessEndpoints} -> accessEndpoints) (\s@UpdateStack' {} a -> s {accessEndpoints = a} :: UpdateStack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The persistent application settings for users of a stack. When these
+-- settings are enabled, changes that users make to applications and
+-- Windows settings are automatically saved after each session and applied
+-- to the next session.
+updateStack_applicationSettings :: Lens.Lens' UpdateStack (Prelude.Maybe ApplicationSettings)
+updateStack_applicationSettings = Lens.lens (\UpdateStack' {applicationSettings} -> applicationSettings) (\s@UpdateStack' {} a -> s {applicationSettings = a} :: UpdateStack)
+
+-- | The stack attributes to delete.
+updateStack_attributesToDelete :: Lens.Lens' UpdateStack (Prelude.Maybe [StackAttribute])
+updateStack_attributesToDelete = Lens.lens (\UpdateStack' {attributesToDelete} -> attributesToDelete) (\s@UpdateStack' {} a -> s {attributesToDelete = a} :: UpdateStack) Prelude.. Lens.mapping Lens.coerced
+
+-- | Deletes the storage connectors currently enabled for the stack.
+updateStack_deleteStorageConnectors :: Lens.Lens' UpdateStack (Prelude.Maybe Prelude.Bool)
+updateStack_deleteStorageConnectors = Lens.lens (\UpdateStack' {deleteStorageConnectors} -> deleteStorageConnectors) (\s@UpdateStack' {} a -> s {deleteStorageConnectors = a} :: UpdateStack)
+
+-- | The description to display.
+updateStack_description :: Lens.Lens' UpdateStack (Prelude.Maybe Prelude.Text)
+updateStack_description = Lens.lens (\UpdateStack' {description} -> description) (\s@UpdateStack' {} a -> s {description = a} :: UpdateStack)
+
+-- | The stack name to display.
+updateStack_displayName :: Lens.Lens' UpdateStack (Prelude.Maybe Prelude.Text)
+updateStack_displayName = Lens.lens (\UpdateStack' {displayName} -> displayName) (\s@UpdateStack' {} a -> s {displayName = a} :: UpdateStack)
+
+-- | The domains where AppStream 2.0 streaming sessions can be embedded in an
+-- iframe. You must approve the domains that you want to host embedded
+-- AppStream 2.0 streaming sessions.
+updateStack_embedHostDomains :: Lens.Lens' UpdateStack (Prelude.Maybe (Prelude.NonEmpty Prelude.Text))
+updateStack_embedHostDomains = Lens.lens (\UpdateStack' {embedHostDomains} -> embedHostDomains) (\s@UpdateStack' {} a -> s {embedHostDomains = a} :: UpdateStack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The URL that users are redirected to after they choose the Send Feedback
+-- link. If no URL is specified, no Send Feedback link is displayed.
+updateStack_feedbackURL :: Lens.Lens' UpdateStack (Prelude.Maybe Prelude.Text)
+updateStack_feedbackURL = Lens.lens (\UpdateStack' {feedbackURL} -> feedbackURL) (\s@UpdateStack' {} a -> s {feedbackURL = a} :: UpdateStack)
+
+-- | The URL that users are redirected to after their streaming session ends.
+updateStack_redirectURL :: Lens.Lens' UpdateStack (Prelude.Maybe Prelude.Text)
+updateStack_redirectURL = Lens.lens (\UpdateStack' {redirectURL} -> redirectURL) (\s@UpdateStack' {} a -> s {redirectURL = a} :: UpdateStack)
+
+-- | The storage connectors to enable.
+updateStack_storageConnectors :: Lens.Lens' UpdateStack (Prelude.Maybe [StorageConnector])
+updateStack_storageConnectors = Lens.lens (\UpdateStack' {storageConnectors} -> storageConnectors) (\s@UpdateStack' {} a -> s {storageConnectors = a} :: UpdateStack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The streaming protocol you want your stack to prefer. This can be UDP or
+-- TCP. Currently, UDP is only supported in the Windows native client.
+updateStack_streamingExperienceSettings :: Lens.Lens' UpdateStack (Prelude.Maybe StreamingExperienceSettings)
+updateStack_streamingExperienceSettings = Lens.lens (\UpdateStack' {streamingExperienceSettings} -> streamingExperienceSettings) (\s@UpdateStack' {} a -> s {streamingExperienceSettings = a} :: UpdateStack)
+
+-- | The actions that are enabled or disabled for users during their
+-- streaming sessions. By default, these actions are enabled.
+updateStack_userSettings :: Lens.Lens' UpdateStack (Prelude.Maybe (Prelude.NonEmpty UserSetting))
+updateStack_userSettings = Lens.lens (\UpdateStack' {userSettings} -> userSettings) (\s@UpdateStack' {} a -> s {userSettings = a} :: UpdateStack) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the stack.
+updateStack_name :: Lens.Lens' UpdateStack Prelude.Text
+updateStack_name = Lens.lens (\UpdateStack' {name} -> name) (\s@UpdateStack' {} a -> s {name = a} :: UpdateStack)
+
+instance Core.AWSRequest UpdateStack where
+  type AWSResponse UpdateStack = UpdateStackResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateStackResponse'
+            Prelude.<$> (x Data..?> "Stack")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateStack where
+  hashWithSalt _salt UpdateStack' {..} =
+    _salt
+      `Prelude.hashWithSalt` accessEndpoints
+      `Prelude.hashWithSalt` applicationSettings
+      `Prelude.hashWithSalt` attributesToDelete
+      `Prelude.hashWithSalt` deleteStorageConnectors
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` displayName
+      `Prelude.hashWithSalt` embedHostDomains
+      `Prelude.hashWithSalt` feedbackURL
+      `Prelude.hashWithSalt` redirectURL
+      `Prelude.hashWithSalt` storageConnectors
+      `Prelude.hashWithSalt` streamingExperienceSettings
+      `Prelude.hashWithSalt` userSettings
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData UpdateStack where
+  rnf UpdateStack' {..} =
+    Prelude.rnf accessEndpoints
+      `Prelude.seq` Prelude.rnf applicationSettings
+      `Prelude.seq` Prelude.rnf attributesToDelete
+      `Prelude.seq` Prelude.rnf deleteStorageConnectors
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf displayName
+      `Prelude.seq` Prelude.rnf embedHostDomains
+      `Prelude.seq` Prelude.rnf feedbackURL
+      `Prelude.seq` Prelude.rnf redirectURL
+      `Prelude.seq` Prelude.rnf storageConnectors
+      `Prelude.seq` Prelude.rnf streamingExperienceSettings
+      `Prelude.seq` Prelude.rnf userSettings
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToHeaders UpdateStack where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "PhotonAdminProxyService.UpdateStack" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateStack where
+  toJSON UpdateStack' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AccessEndpoints" Data..=)
+              Prelude.<$> accessEndpoints,
+            ("ApplicationSettings" Data..=)
+              Prelude.<$> applicationSettings,
+            ("AttributesToDelete" Data..=)
+              Prelude.<$> attributesToDelete,
+            ("DeleteStorageConnectors" Data..=)
+              Prelude.<$> deleteStorageConnectors,
+            ("Description" Data..=) Prelude.<$> description,
+            ("DisplayName" Data..=) Prelude.<$> displayName,
+            ("EmbedHostDomains" Data..=)
+              Prelude.<$> embedHostDomains,
+            ("FeedbackURL" Data..=) Prelude.<$> feedbackURL,
+            ("RedirectURL" Data..=) Prelude.<$> redirectURL,
+            ("StorageConnectors" Data..=)
+              Prelude.<$> storageConnectors,
+            ("StreamingExperienceSettings" Data..=)
+              Prelude.<$> streamingExperienceSettings,
+            ("UserSettings" Data..=) Prelude.<$> userSettings,
+            Prelude.Just ("Name" Data..= name)
+          ]
+      )
+
+instance Data.ToPath UpdateStack where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateStack where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateStackResponse' smart constructor.
+data UpdateStackResponse = UpdateStackResponse'
+  { -- | Information about the stack.
+    stack :: Prelude.Maybe Stack,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateStackResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stack', 'updateStackResponse_stack' - Information about the stack.
+--
+-- 'httpStatus', 'updateStackResponse_httpStatus' - The response's http status code.
+newUpdateStackResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateStackResponse
+newUpdateStackResponse pHttpStatus_ =
+  UpdateStackResponse'
+    { stack = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the stack.
+updateStackResponse_stack :: Lens.Lens' UpdateStackResponse (Prelude.Maybe Stack)
+updateStackResponse_stack = Lens.lens (\UpdateStackResponse' {stack} -> stack) (\s@UpdateStackResponse' {} a -> s {stack = a} :: UpdateStackResponse)
+
+-- | The response's http status code.
+updateStackResponse_httpStatus :: Lens.Lens' UpdateStackResponse Prelude.Int
+updateStackResponse_httpStatus = Lens.lens (\UpdateStackResponse' {httpStatus} -> httpStatus) (\s@UpdateStackResponse' {} a -> s {httpStatus = a} :: UpdateStackResponse)
+
+instance Prelude.NFData UpdateStackResponse where
+  rnf UpdateStackResponse' {..} =
+    Prelude.rnf stack
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/AppStream/Waiters.hs b/gen/Amazonka/AppStream/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/AppStream/Waiters.hs
@@ -0,0 +1,107 @@
+{-# 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.AppStream.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.AppStream.Waiters where
+
+import Amazonka.AppStream.DescribeFleets
+import Amazonka.AppStream.Lens
+import Amazonka.AppStream.Types
+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
+
+-- | Polls 'Amazonka.AppStream.DescribeFleets' every 30 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newFleetStarted :: Core.Wait DescribeFleets
+newFleetStarted =
+  Core.Wait
+    { Core.name = "FleetStarted",
+      Core.attempts = 40,
+      Core.delay = 30,
+      Core.acceptors =
+        [ Core.matchAll
+            "ACTIVE"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    (describeFleetsResponse_fleets Prelude.. Lens._Just)
+                )
+                Prelude.. fleet_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "PENDING_DEACTIVATE"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    (describeFleetsResponse_fleets Prelude.. Lens._Just)
+                )
+                Prelude.. fleet_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "INACTIVE"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    (describeFleetsResponse_fleets Prelude.. Lens._Just)
+                )
+                Prelude.. fleet_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
+
+-- | Polls 'Amazonka.AppStream.DescribeFleets' every 30 seconds until a successful state is reached. An error is returned after 40 failed checks.
+newFleetStopped :: Core.Wait DescribeFleets
+newFleetStopped =
+  Core.Wait
+    { Core.name = "FleetStopped",
+      Core.attempts = 40,
+      Core.delay = 30,
+      Core.acceptors =
+        [ Core.matchAll
+            "INACTIVE"
+            Core.AcceptSuccess
+            ( Lens.folding
+                ( Lens.concatOf
+                    (describeFleetsResponse_fleets Prelude.. Lens._Just)
+                )
+                Prelude.. fleet_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "PENDING_ACTIVATE"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    (describeFleetsResponse_fleets Prelude.. Lens._Just)
+                )
+                Prelude.. fleet_state
+                Prelude.. Lens.to Data.toTextCI
+            ),
+          Core.matchAny
+            "ACTIVE"
+            Core.AcceptFailure
+            ( Lens.folding
+                ( Lens.concatOf
+                    (describeFleetsResponse_fleets Prelude.. Lens._Just)
+                )
+                Prelude.. fleet_state
+                Prelude.. Lens.to Data.toTextCI
+            )
+        ]
+    }
diff --git a/gen/Network/AWS/AppStream.hs b/gen/Network/AWS/AppStream.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream.hs
+++ /dev/null
@@ -1,449 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
-{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- __Amazon AppStream 2.0__
---
--- You can use Amazon AppStream 2.0 to stream desktop applications to any device running a web browser, without rewriting them.
---
-module Network.AWS.AppStream
-    (
-    -- * Service Configuration
-      appStream
-
-    -- * Errors
-    -- $errors
-
-    -- ** InvalidRoleException
-    , _InvalidRoleException
-
-    -- ** ResourceAlreadyExistsException
-    , _ResourceAlreadyExistsException
-
-    -- ** IncompatibleImageException
-    , _IncompatibleImageException
-
-    -- ** ConcurrentModificationException
-    , _ConcurrentModificationException
-
-    -- ** OperationNotPermittedException
-    , _OperationNotPermittedException
-
-    -- ** InvalidAccountStatusException
-    , _InvalidAccountStatusException
-
-    -- ** ResourceNotFoundException
-    , _ResourceNotFoundException
-
-    -- ** InvalidParameterCombinationException
-    , _InvalidParameterCombinationException
-
-    -- ** ResourceNotAvailableException
-    , _ResourceNotAvailableException
-
-    -- ** LimitExceededException
-    , _LimitExceededException
-
-    -- ** ResourceInUseException
-    , _ResourceInUseException
-
-    -- * Waiters
-    -- $waiters
-
-    -- ** FleetStopped
-    , fleetStopped
-
-    -- ** FleetStarted
-    , fleetStarted
-
-    -- * Operations
-    -- $operations
-
-    -- ** DisassociateFleet
-    , module Network.AWS.AppStream.DisassociateFleet
-
-    -- ** ListAssociatedFleets
-    , module Network.AWS.AppStream.ListAssociatedFleets
-
-    -- ** DeleteStack
-    , module Network.AWS.AppStream.DeleteStack
-
-    -- ** UpdateStack
-    , module Network.AWS.AppStream.UpdateStack
-
-    -- ** CreateDirectoryConfig
-    , module Network.AWS.AppStream.CreateDirectoryConfig
-
-    -- ** ListAssociatedStacks
-    , module Network.AWS.AppStream.ListAssociatedStacks
-
-    -- ** DeleteFleet
-    , module Network.AWS.AppStream.DeleteFleet
-
-    -- ** UpdateFleet
-    , module Network.AWS.AppStream.UpdateFleet
-
-    -- ** DeleteImageBuilder
-    , module Network.AWS.AppStream.DeleteImageBuilder
-
-    -- ** AssociateFleet
-    , module Network.AWS.AppStream.AssociateFleet
-
-    -- ** CreateImageBuilder
-    , module Network.AWS.AppStream.CreateImageBuilder
-
-    -- ** ListTagsForResource
-    , module Network.AWS.AppStream.ListTagsForResource
-
-    -- ** DescribeDirectoryConfigs
-    , module Network.AWS.AppStream.DescribeDirectoryConfigs
-
-    -- ** CreateImageBuilderStreamingURL
-    , module Network.AWS.AppStream.CreateImageBuilderStreamingURL
-
-    -- ** DescribeSessions
-    , module Network.AWS.AppStream.DescribeSessions
-
-    -- ** DescribeStacks
-    , module Network.AWS.AppStream.DescribeStacks
-
-    -- ** DescribeFleets
-    , module Network.AWS.AppStream.DescribeFleets
-
-    -- ** DescribeImageBuilders
-    , module Network.AWS.AppStream.DescribeImageBuilders
-
-    -- ** StopFleet
-    , module Network.AWS.AppStream.StopFleet
-
-    -- ** StartImageBuilder
-    , module Network.AWS.AppStream.StartImageBuilder
-
-    -- ** DeleteDirectoryConfig
-    , module Network.AWS.AppStream.DeleteDirectoryConfig
-
-    -- ** UpdateDirectoryConfig
-    , module Network.AWS.AppStream.UpdateDirectoryConfig
-
-    -- ** CreateFleet
-    , module Network.AWS.AppStream.CreateFleet
-
-    -- ** CreateStack
-    , module Network.AWS.AppStream.CreateStack
-
-    -- ** CopyImage
-    , module Network.AWS.AppStream.CopyImage
-
-    -- ** ExpireSession
-    , module Network.AWS.AppStream.ExpireSession
-
-    -- ** TagResource
-    , module Network.AWS.AppStream.TagResource
-
-    -- ** CreateStreamingURL
-    , module Network.AWS.AppStream.CreateStreamingURL
-
-    -- ** UntagResource
-    , module Network.AWS.AppStream.UntagResource
-
-    -- ** StartFleet
-    , module Network.AWS.AppStream.StartFleet
-
-    -- ** StopImageBuilder
-    , module Network.AWS.AppStream.StopImageBuilder
-
-    -- ** DeleteImage
-    , module Network.AWS.AppStream.DeleteImage
-
-    -- ** DescribeImages
-    , module Network.AWS.AppStream.DescribeImages
-
-    -- * Types
-
-    -- ** AuthenticationType
-    , AuthenticationType (..)
-
-    -- ** FleetAttribute
-    , FleetAttribute (..)
-
-    -- ** FleetErrorCode
-    , FleetErrorCode (..)
-
-    -- ** FleetState
-    , FleetState (..)
-
-    -- ** FleetType
-    , FleetType (..)
-
-    -- ** ImageBuilderState
-    , ImageBuilderState (..)
-
-    -- ** ImageBuilderStateChangeReasonCode
-    , ImageBuilderStateChangeReasonCode (..)
-
-    -- ** ImageState
-    , ImageState (..)
-
-    -- ** ImageStateChangeReasonCode
-    , ImageStateChangeReasonCode (..)
-
-    -- ** PlatformType
-    , PlatformType (..)
-
-    -- ** SessionState
-    , SessionState (..)
-
-    -- ** StackAttribute
-    , StackAttribute (..)
-
-    -- ** StackErrorCode
-    , StackErrorCode (..)
-
-    -- ** StorageConnectorType
-    , StorageConnectorType (..)
-
-    -- ** VisibilityType
-    , VisibilityType (..)
-
-    -- ** Application
-    , Application
-    , application
-    , aEnabled
-    , aLaunchPath
-    , aLaunchParameters
-    , aName
-    , aDisplayName
-    , aMetadata
-    , aIconURL
-
-    -- ** ComputeCapacity
-    , ComputeCapacity
-    , computeCapacity
-    , ccDesiredInstances
-
-    -- ** ComputeCapacityStatus
-    , ComputeCapacityStatus
-    , computeCapacityStatus
-    , ccsInUse
-    , ccsRunning
-    , ccsAvailable
-    , ccsDesired
-
-    -- ** DirectoryConfig
-    , DirectoryConfig
-    , directoryConfig
-    , dcCreatedTime
-    , dcServiceAccountCredentials
-    , dcOrganizationalUnitDistinguishedNames
-    , dcDirectoryName
-
-    -- ** DomainJoinInfo
-    , DomainJoinInfo
-    , domainJoinInfo
-    , djiOrganizationalUnitDistinguishedName
-    , djiDirectoryName
-
-    -- ** Fleet
-    , Fleet
-    , fleet
-    , fDomainJoinInfo
-    , fDisconnectTimeoutInSeconds
-    , fMaxUserDurationInSeconds
-    , fCreatedTime
-    , fFleetType
-    , fVPCConfig
-    , fFleetErrors
-    , fDisplayName
-    , fEnableDefaultInternetAccess
-    , fDescription
-    , fARN
-    , fName
-    , fImageName
-    , fInstanceType
-    , fComputeCapacityStatus
-    , fState
-
-    -- ** FleetError
-    , FleetError
-    , fleetError
-    , feErrorCode
-    , feErrorMessage
-
-    -- ** Image
-    , Image
-    , image
-    , iState
-    , iPlatform
-    , iPublicBaseImageReleasedDate
-    , iStateChangeReason
-    , iARN
-    , iCreatedTime
-    , iImageBuilderSupported
-    , iVisibility
-    , iBaseImageARN
-    , iDisplayName
-    , iDescription
-    , iAppstreamAgentVersion
-    , iApplications
-    , iName
-
-    -- ** ImageBuilder
-    , ImageBuilder
-    , imageBuilder
-    , ibDomainJoinInfo
-    , ibState
-    , ibPlatform
-    , ibStateChangeReason
-    , ibARN
-    , ibCreatedTime
-    , ibImageBuilderErrors
-    , ibInstanceType
-    , ibVPCConfig
-    , ibImageARN
-    , ibDisplayName
-    , ibEnableDefaultInternetAccess
-    , ibDescription
-    , ibAppstreamAgentVersion
-    , ibName
-
-    -- ** ImageBuilderStateChangeReason
-    , ImageBuilderStateChangeReason
-    , imageBuilderStateChangeReason
-    , ibscrCode
-    , ibscrMessage
-
-    -- ** ImageStateChangeReason
-    , ImageStateChangeReason
-    , imageStateChangeReason
-    , iscrCode
-    , iscrMessage
-
-    -- ** ResourceError
-    , ResourceError
-    , resourceError
-    , reErrorCode
-    , reErrorMessage
-    , reErrorTimestamp
-
-    -- ** ServiceAccountCredentials
-    , ServiceAccountCredentials
-    , serviceAccountCredentials
-    , sacAccountName
-    , sacAccountPassword
-
-    -- ** Session
-    , Session
-    , session
-    , sAuthenticationType
-    , sId
-    , sUserId
-    , sStackName
-    , sFleetName
-    , sState
-
-    -- ** Stack
-    , Stack
-    , stack
-    , sFeedbackURL
-    , sARN
-    , sCreatedTime
-    , sStorageConnectors
-    , sDisplayName
-    , sStackErrors
-    , sDescription
-    , sRedirectURL
-    , sName
-
-    -- ** StackError
-    , StackError
-    , stackError
-    , seErrorCode
-    , seErrorMessage
-
-    -- ** StorageConnector
-    , StorageConnector
-    , storageConnector
-    , scResourceIdentifier
-    , scConnectorType
-
-    -- ** VPCConfig
-    , VPCConfig
-    , vpcConfig
-    , vcSecurityGroupIds
-    , vcSubnetIds
-    ) where
-
-import Network.AWS.AppStream.AssociateFleet
-import Network.AWS.AppStream.CopyImage
-import Network.AWS.AppStream.CreateDirectoryConfig
-import Network.AWS.AppStream.CreateFleet
-import Network.AWS.AppStream.CreateImageBuilder
-import Network.AWS.AppStream.CreateImageBuilderStreamingURL
-import Network.AWS.AppStream.CreateStack
-import Network.AWS.AppStream.CreateStreamingURL
-import Network.AWS.AppStream.DeleteDirectoryConfig
-import Network.AWS.AppStream.DeleteFleet
-import Network.AWS.AppStream.DeleteImage
-import Network.AWS.AppStream.DeleteImageBuilder
-import Network.AWS.AppStream.DeleteStack
-import Network.AWS.AppStream.DescribeDirectoryConfigs
-import Network.AWS.AppStream.DescribeFleets
-import Network.AWS.AppStream.DescribeImageBuilders
-import Network.AWS.AppStream.DescribeImages
-import Network.AWS.AppStream.DescribeSessions
-import Network.AWS.AppStream.DescribeStacks
-import Network.AWS.AppStream.DisassociateFleet
-import Network.AWS.AppStream.ExpireSession
-import Network.AWS.AppStream.ListAssociatedFleets
-import Network.AWS.AppStream.ListAssociatedStacks
-import Network.AWS.AppStream.ListTagsForResource
-import Network.AWS.AppStream.StartFleet
-import Network.AWS.AppStream.StartImageBuilder
-import Network.AWS.AppStream.StopFleet
-import Network.AWS.AppStream.StopImageBuilder
-import Network.AWS.AppStream.TagResource
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.UntagResource
-import Network.AWS.AppStream.UpdateDirectoryConfig
-import Network.AWS.AppStream.UpdateFleet
-import Network.AWS.AppStream.UpdateStack
-import Network.AWS.AppStream.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 'AppStream'.
--}
-
-{- $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/Network/AWS/AppStream/AssociateFleet.hs b/gen/Network/AWS/AppStream/AssociateFleet.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/AssociateFleet.hs
+++ /dev/null
@@ -1,134 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.AssociateFleet
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Associates the specified fleet with the specified stack.
---
---
-module Network.AWS.AppStream.AssociateFleet
-    (
-    -- * Creating a Request
-      associateFleet
-    , AssociateFleet
-    -- * Request Lenses
-    , afFleetName
-    , afStackName
-
-    -- * Destructuring the Response
-    , associateFleetResponse
-    , AssociateFleetResponse
-    -- * Response Lenses
-    , afrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'associateFleet' smart constructor.
-data AssociateFleet = AssociateFleet'
-  { _afFleetName :: !Text
-  , _afStackName :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateFleet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'afFleetName' - The name of the fleet.
---
--- * 'afStackName' - The name of the stack.
-associateFleet
-    :: Text -- ^ 'afFleetName'
-    -> Text -- ^ 'afStackName'
-    -> AssociateFleet
-associateFleet pFleetName_ pStackName_ =
-  AssociateFleet' {_afFleetName = pFleetName_, _afStackName = pStackName_}
-
-
--- | The name of the fleet.
-afFleetName :: Lens' AssociateFleet Text
-afFleetName = lens _afFleetName (\ s a -> s{_afFleetName = a})
-
--- | The name of the stack.
-afStackName :: Lens' AssociateFleet Text
-afStackName = lens _afStackName (\ s a -> s{_afStackName = a})
-
-instance AWSRequest AssociateFleet where
-        type Rs AssociateFleet = AssociateFleetResponse
-        request = postJSON appStream
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 AssociateFleetResponse' <$> (pure (fromEnum s)))
-
-instance Hashable AssociateFleet where
-
-instance NFData AssociateFleet where
-
-instance ToHeaders AssociateFleet where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.AssociateFleet" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON AssociateFleet where
-        toJSON AssociateFleet'{..}
-          = object
-              (catMaybes
-                 [Just ("FleetName" .= _afFleetName),
-                  Just ("StackName" .= _afStackName)])
-
-instance ToPath AssociateFleet where
-        toPath = const "/"
-
-instance ToQuery AssociateFleet where
-        toQuery = const mempty
-
--- | /See:/ 'associateFleetResponse' smart constructor.
-newtype AssociateFleetResponse = AssociateFleetResponse'
-  { _afrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'AssociateFleetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'afrsResponseStatus' - -- | The response status code.
-associateFleetResponse
-    :: Int -- ^ 'afrsResponseStatus'
-    -> AssociateFleetResponse
-associateFleetResponse pResponseStatus_ =
-  AssociateFleetResponse' {_afrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-afrsResponseStatus :: Lens' AssociateFleetResponse Int
-afrsResponseStatus = lens _afrsResponseStatus (\ s a -> s{_afrsResponseStatus = a})
-
-instance NFData AssociateFleetResponse where
diff --git a/gen/Network/AWS/AppStream/CopyImage.hs b/gen/Network/AWS/AppStream/CopyImage.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/CopyImage.hs
+++ /dev/null
@@ -1,172 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.CopyImage
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Copies the image within the same region or to a new region within the same AWS account. Note that any tags you added to the image will not be copied.
---
---
-module Network.AWS.AppStream.CopyImage
-    (
-    -- * Creating a Request
-      copyImage
-    , CopyImage
-    -- * Request Lenses
-    , ciDestinationImageDescription
-    , ciSourceImageName
-    , ciDestinationImageName
-    , ciDestinationRegion
-
-    -- * Destructuring the Response
-    , copyImageResponse
-    , CopyImageResponse
-    -- * Response Lenses
-    , cirsDestinationImageName
-    , cirsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'copyImage' smart constructor.
-data CopyImage = CopyImage'
-  { _ciDestinationImageDescription :: !(Maybe Text)
-  , _ciSourceImageName             :: !Text
-  , _ciDestinationImageName        :: !Text
-  , _ciDestinationRegion           :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CopyImage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ciDestinationImageDescription' - The description that the image will have when it is copied to the destination.
---
--- * 'ciSourceImageName' - The name of the image to copy.
---
--- * 'ciDestinationImageName' - The name that the image will have when it is copied to the destination.
---
--- * 'ciDestinationRegion' - The destination region to which the image will be copied. This parameter is required, even if you are copying an image within the same region.
-copyImage
-    :: Text -- ^ 'ciSourceImageName'
-    -> Text -- ^ 'ciDestinationImageName'
-    -> Text -- ^ 'ciDestinationRegion'
-    -> CopyImage
-copyImage pSourceImageName_ pDestinationImageName_ pDestinationRegion_ =
-  CopyImage'
-    { _ciDestinationImageDescription = Nothing
-    , _ciSourceImageName = pSourceImageName_
-    , _ciDestinationImageName = pDestinationImageName_
-    , _ciDestinationRegion = pDestinationRegion_
-    }
-
-
--- | The description that the image will have when it is copied to the destination.
-ciDestinationImageDescription :: Lens' CopyImage (Maybe Text)
-ciDestinationImageDescription = lens _ciDestinationImageDescription (\ s a -> s{_ciDestinationImageDescription = a})
-
--- | The name of the image to copy.
-ciSourceImageName :: Lens' CopyImage Text
-ciSourceImageName = lens _ciSourceImageName (\ s a -> s{_ciSourceImageName = a})
-
--- | The name that the image will have when it is copied to the destination.
-ciDestinationImageName :: Lens' CopyImage Text
-ciDestinationImageName = lens _ciDestinationImageName (\ s a -> s{_ciDestinationImageName = a})
-
--- | The destination region to which the image will be copied. This parameter is required, even if you are copying an image within the same region.
-ciDestinationRegion :: Lens' CopyImage Text
-ciDestinationRegion = lens _ciDestinationRegion (\ s a -> s{_ciDestinationRegion = a})
-
-instance AWSRequest CopyImage where
-        type Rs CopyImage = CopyImageResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CopyImageResponse' <$>
-                   (x .?> "DestinationImageName") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable CopyImage where
-
-instance NFData CopyImage where
-
-instance ToHeaders CopyImage where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.CopyImage" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CopyImage where
-        toJSON CopyImage'{..}
-          = object
-              (catMaybes
-                 [("DestinationImageDescription" .=) <$>
-                    _ciDestinationImageDescription,
-                  Just ("SourceImageName" .= _ciSourceImageName),
-                  Just
-                    ("DestinationImageName" .= _ciDestinationImageName),
-                  Just ("DestinationRegion" .= _ciDestinationRegion)])
-
-instance ToPath CopyImage where
-        toPath = const "/"
-
-instance ToQuery CopyImage where
-        toQuery = const mempty
-
--- | /See:/ 'copyImageResponse' smart constructor.
-data CopyImageResponse = CopyImageResponse'
-  { _cirsDestinationImageName :: !(Maybe Text)
-  , _cirsResponseStatus       :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CopyImageResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cirsDestinationImageName' - The name of the destination image.
---
--- * 'cirsResponseStatus' - -- | The response status code.
-copyImageResponse
-    :: Int -- ^ 'cirsResponseStatus'
-    -> CopyImageResponse
-copyImageResponse pResponseStatus_ =
-  CopyImageResponse'
-    { _cirsDestinationImageName = Nothing
-    , _cirsResponseStatus = pResponseStatus_
-    }
-
-
--- | The name of the destination image.
-cirsDestinationImageName :: Lens' CopyImageResponse (Maybe Text)
-cirsDestinationImageName = lens _cirsDestinationImageName (\ s a -> s{_cirsDestinationImageName = a})
-
--- | -- | The response status code.
-cirsResponseStatus :: Lens' CopyImageResponse Int
-cirsResponseStatus = lens _cirsResponseStatus (\ s a -> s{_cirsResponseStatus = a})
-
-instance NFData CopyImageResponse where
diff --git a/gen/Network/AWS/AppStream/CreateDirectoryConfig.hs b/gen/Network/AWS/AppStream/CreateDirectoryConfig.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/CreateDirectoryConfig.hs
+++ /dev/null
@@ -1,162 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.CreateDirectoryConfig
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a directory configuration.
---
---
-module Network.AWS.AppStream.CreateDirectoryConfig
-    (
-    -- * Creating a Request
-      createDirectoryConfig
-    , CreateDirectoryConfig
-    -- * Request Lenses
-    , cdcDirectoryName
-    , cdcOrganizationalUnitDistinguishedNames
-    , cdcServiceAccountCredentials
-
-    -- * Destructuring the Response
-    , createDirectoryConfigResponse
-    , CreateDirectoryConfigResponse
-    -- * Response Lenses
-    , cdcrsDirectoryConfig
-    , cdcrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createDirectoryConfig' smart constructor.
-data CreateDirectoryConfig = CreateDirectoryConfig'
-  { _cdcDirectoryName                        :: !Text
-  , _cdcOrganizationalUnitDistinguishedNames :: ![Text]
-  , _cdcServiceAccountCredentials            :: !ServiceAccountCredentials
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateDirectoryConfig' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdcDirectoryName' - The fully qualified name of the directory (for example, corp.example.com).
---
--- * 'cdcOrganizationalUnitDistinguishedNames' - The distinguished names of the organizational units for computer accounts.
---
--- * 'cdcServiceAccountCredentials' - The credentials for the service account used by the streaming instance to connect to the directory.
-createDirectoryConfig
-    :: Text -- ^ 'cdcDirectoryName'
-    -> ServiceAccountCredentials -- ^ 'cdcServiceAccountCredentials'
-    -> CreateDirectoryConfig
-createDirectoryConfig pDirectoryName_ pServiceAccountCredentials_ =
-  CreateDirectoryConfig'
-    { _cdcDirectoryName = pDirectoryName_
-    , _cdcOrganizationalUnitDistinguishedNames = mempty
-    , _cdcServiceAccountCredentials = pServiceAccountCredentials_
-    }
-
-
--- | The fully qualified name of the directory (for example, corp.example.com).
-cdcDirectoryName :: Lens' CreateDirectoryConfig Text
-cdcDirectoryName = lens _cdcDirectoryName (\ s a -> s{_cdcDirectoryName = a})
-
--- | The distinguished names of the organizational units for computer accounts.
-cdcOrganizationalUnitDistinguishedNames :: Lens' CreateDirectoryConfig [Text]
-cdcOrganizationalUnitDistinguishedNames = lens _cdcOrganizationalUnitDistinguishedNames (\ s a -> s{_cdcOrganizationalUnitDistinguishedNames = a}) . _Coerce
-
--- | The credentials for the service account used by the streaming instance to connect to the directory.
-cdcServiceAccountCredentials :: Lens' CreateDirectoryConfig ServiceAccountCredentials
-cdcServiceAccountCredentials = lens _cdcServiceAccountCredentials (\ s a -> s{_cdcServiceAccountCredentials = a})
-
-instance AWSRequest CreateDirectoryConfig where
-        type Rs CreateDirectoryConfig =
-             CreateDirectoryConfigResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateDirectoryConfigResponse' <$>
-                   (x .?> "DirectoryConfig") <*> (pure (fromEnum s)))
-
-instance Hashable CreateDirectoryConfig where
-
-instance NFData CreateDirectoryConfig where
-
-instance ToHeaders CreateDirectoryConfig where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.CreateDirectoryConfig" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateDirectoryConfig where
-        toJSON CreateDirectoryConfig'{..}
-          = object
-              (catMaybes
-                 [Just ("DirectoryName" .= _cdcDirectoryName),
-                  Just
-                    ("OrganizationalUnitDistinguishedNames" .=
-                       _cdcOrganizationalUnitDistinguishedNames),
-                  Just
-                    ("ServiceAccountCredentials" .=
-                       _cdcServiceAccountCredentials)])
-
-instance ToPath CreateDirectoryConfig where
-        toPath = const "/"
-
-instance ToQuery CreateDirectoryConfig where
-        toQuery = const mempty
-
--- | /See:/ 'createDirectoryConfigResponse' smart constructor.
-data CreateDirectoryConfigResponse = CreateDirectoryConfigResponse'
-  { _cdcrsDirectoryConfig :: !(Maybe DirectoryConfig)
-  , _cdcrsResponseStatus  :: !Int
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateDirectoryConfigResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdcrsDirectoryConfig' - Information about the directory configuration.
---
--- * 'cdcrsResponseStatus' - -- | The response status code.
-createDirectoryConfigResponse
-    :: Int -- ^ 'cdcrsResponseStatus'
-    -> CreateDirectoryConfigResponse
-createDirectoryConfigResponse pResponseStatus_ =
-  CreateDirectoryConfigResponse'
-    {_cdcrsDirectoryConfig = Nothing, _cdcrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the directory configuration.
-cdcrsDirectoryConfig :: Lens' CreateDirectoryConfigResponse (Maybe DirectoryConfig)
-cdcrsDirectoryConfig = lens _cdcrsDirectoryConfig (\ s a -> s{_cdcrsDirectoryConfig = a})
-
--- | -- | The response status code.
-cdcrsResponseStatus :: Lens' CreateDirectoryConfigResponse Int
-cdcrsResponseStatus = lens _cdcrsResponseStatus (\ s a -> s{_cdcrsResponseStatus = a})
-
-instance NFData CreateDirectoryConfigResponse where
diff --git a/gen/Network/AWS/AppStream/CreateFleet.hs b/gen/Network/AWS/AppStream/CreateFleet.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/CreateFleet.hs
+++ /dev/null
@@ -1,252 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.CreateFleet
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a fleet.
---
---
-module Network.AWS.AppStream.CreateFleet
-    (
-    -- * Creating a Request
-      createFleet
-    , CreateFleet
-    -- * Request Lenses
-    , cfDomainJoinInfo
-    , cfDisconnectTimeoutInSeconds
-    , cfMaxUserDurationInSeconds
-    , cfFleetType
-    , cfVPCConfig
-    , cfDisplayName
-    , cfEnableDefaultInternetAccess
-    , cfDescription
-    , cfName
-    , cfImageName
-    , cfInstanceType
-    , cfComputeCapacity
-
-    -- * Destructuring the Response
-    , createFleetResponse
-    , CreateFleetResponse
-    -- * Response Lenses
-    , cfrsFleet
-    , cfrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createFleet' smart constructor.
-data CreateFleet = CreateFleet'
-  { _cfDomainJoinInfo              :: !(Maybe DomainJoinInfo)
-  , _cfDisconnectTimeoutInSeconds  :: !(Maybe Int)
-  , _cfMaxUserDurationInSeconds    :: !(Maybe Int)
-  , _cfFleetType                   :: !(Maybe FleetType)
-  , _cfVPCConfig                   :: !(Maybe VPCConfig)
-  , _cfDisplayName                 :: !(Maybe Text)
-  , _cfEnableDefaultInternetAccess :: !(Maybe Bool)
-  , _cfDescription                 :: !(Maybe Text)
-  , _cfName                        :: !Text
-  , _cfImageName                   :: !Text
-  , _cfInstanceType                :: !Text
-  , _cfComputeCapacity             :: !ComputeCapacity
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateFleet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cfDomainJoinInfo' - The information needed to join a Microsoft Active Directory domain.
---
--- * 'cfDisconnectTimeoutInSeconds' - The time after disconnection when a session is considered to have ended, in seconds. If a user who was disconnected reconnects within this time interval, the user is connected to their previous session. Specify a value between 60 and 57600.
---
--- * 'cfMaxUserDurationInSeconds' - The maximum time that a streaming session can run, in seconds. Specify a value between 600 and 57600.
---
--- * 'cfFleetType' - The fleet type.     * ALWAYS_ON    * Provides users with instant-on access to their apps. You are charged for all running instances in your fleet, even if no users are streaming apps.     * ON_DEMAND    * Provide users with access to applications after they connect, which takes one to two minutes. You are charged for instance streaming when users are connected and a small hourly fee for instances that are not streaming apps.
---
--- * 'cfVPCConfig' - The VPC configuration for the fleet.
---
--- * 'cfDisplayName' - The fleet name for display.
---
--- * 'cfEnableDefaultInternetAccess' - Enables or disables default internet access for the fleet.
---
--- * 'cfDescription' - The description for display.
---
--- * 'cfName' - A unique name for the fleet.
---
--- * 'cfImageName' - The name of the image used to create the fleet.
---
--- * 'cfInstanceType' - The instance type to use when launching fleet instances. The following instance types are available:     * stream.standard.medium     * stream.standard.large     * stream.compute.large     * stream.compute.xlarge     * stream.compute.2xlarge     * stream.compute.4xlarge     * stream.compute.8xlarge     * stream.memory.large     * stream.memory.xlarge     * stream.memory.2xlarge     * stream.memory.4xlarge     * stream.memory.8xlarge     * stream.graphics-design.large     * stream.graphics-design.xlarge     * stream.graphics-design.2xlarge     * stream.graphics-design.4xlarge     * stream.graphics-desktop.2xlarge     * stream.graphics-pro.4xlarge     * stream.graphics-pro.8xlarge     * stream.graphics-pro.16xlarge
---
--- * 'cfComputeCapacity' - The desired capacity for the fleet.
-createFleet
-    :: Text -- ^ 'cfName'
-    -> Text -- ^ 'cfImageName'
-    -> Text -- ^ 'cfInstanceType'
-    -> ComputeCapacity -- ^ 'cfComputeCapacity'
-    -> CreateFleet
-createFleet pName_ pImageName_ pInstanceType_ pComputeCapacity_ =
-  CreateFleet'
-    { _cfDomainJoinInfo = Nothing
-    , _cfDisconnectTimeoutInSeconds = Nothing
-    , _cfMaxUserDurationInSeconds = Nothing
-    , _cfFleetType = Nothing
-    , _cfVPCConfig = Nothing
-    , _cfDisplayName = Nothing
-    , _cfEnableDefaultInternetAccess = Nothing
-    , _cfDescription = Nothing
-    , _cfName = pName_
-    , _cfImageName = pImageName_
-    , _cfInstanceType = pInstanceType_
-    , _cfComputeCapacity = pComputeCapacity_
-    }
-
-
--- | The information needed to join a Microsoft Active Directory domain.
-cfDomainJoinInfo :: Lens' CreateFleet (Maybe DomainJoinInfo)
-cfDomainJoinInfo = lens _cfDomainJoinInfo (\ s a -> s{_cfDomainJoinInfo = a})
-
--- | The time after disconnection when a session is considered to have ended, in seconds. If a user who was disconnected reconnects within this time interval, the user is connected to their previous session. Specify a value between 60 and 57600.
-cfDisconnectTimeoutInSeconds :: Lens' CreateFleet (Maybe Int)
-cfDisconnectTimeoutInSeconds = lens _cfDisconnectTimeoutInSeconds (\ s a -> s{_cfDisconnectTimeoutInSeconds = a})
-
--- | The maximum time that a streaming session can run, in seconds. Specify a value between 600 and 57600.
-cfMaxUserDurationInSeconds :: Lens' CreateFleet (Maybe Int)
-cfMaxUserDurationInSeconds = lens _cfMaxUserDurationInSeconds (\ s a -> s{_cfMaxUserDurationInSeconds = a})
-
--- | The fleet type.     * ALWAYS_ON    * Provides users with instant-on access to their apps. You are charged for all running instances in your fleet, even if no users are streaming apps.     * ON_DEMAND    * Provide users with access to applications after they connect, which takes one to two minutes. You are charged for instance streaming when users are connected and a small hourly fee for instances that are not streaming apps.
-cfFleetType :: Lens' CreateFleet (Maybe FleetType)
-cfFleetType = lens _cfFleetType (\ s a -> s{_cfFleetType = a})
-
--- | The VPC configuration for the fleet.
-cfVPCConfig :: Lens' CreateFleet (Maybe VPCConfig)
-cfVPCConfig = lens _cfVPCConfig (\ s a -> s{_cfVPCConfig = a})
-
--- | The fleet name for display.
-cfDisplayName :: Lens' CreateFleet (Maybe Text)
-cfDisplayName = lens _cfDisplayName (\ s a -> s{_cfDisplayName = a})
-
--- | Enables or disables default internet access for the fleet.
-cfEnableDefaultInternetAccess :: Lens' CreateFleet (Maybe Bool)
-cfEnableDefaultInternetAccess = lens _cfEnableDefaultInternetAccess (\ s a -> s{_cfEnableDefaultInternetAccess = a})
-
--- | The description for display.
-cfDescription :: Lens' CreateFleet (Maybe Text)
-cfDescription = lens _cfDescription (\ s a -> s{_cfDescription = a})
-
--- | A unique name for the fleet.
-cfName :: Lens' CreateFleet Text
-cfName = lens _cfName (\ s a -> s{_cfName = a})
-
--- | The name of the image used to create the fleet.
-cfImageName :: Lens' CreateFleet Text
-cfImageName = lens _cfImageName (\ s a -> s{_cfImageName = a})
-
--- | The instance type to use when launching fleet instances. The following instance types are available:     * stream.standard.medium     * stream.standard.large     * stream.compute.large     * stream.compute.xlarge     * stream.compute.2xlarge     * stream.compute.4xlarge     * stream.compute.8xlarge     * stream.memory.large     * stream.memory.xlarge     * stream.memory.2xlarge     * stream.memory.4xlarge     * stream.memory.8xlarge     * stream.graphics-design.large     * stream.graphics-design.xlarge     * stream.graphics-design.2xlarge     * stream.graphics-design.4xlarge     * stream.graphics-desktop.2xlarge     * stream.graphics-pro.4xlarge     * stream.graphics-pro.8xlarge     * stream.graphics-pro.16xlarge
-cfInstanceType :: Lens' CreateFleet Text
-cfInstanceType = lens _cfInstanceType (\ s a -> s{_cfInstanceType = a})
-
--- | The desired capacity for the fleet.
-cfComputeCapacity :: Lens' CreateFleet ComputeCapacity
-cfComputeCapacity = lens _cfComputeCapacity (\ s a -> s{_cfComputeCapacity = a})
-
-instance AWSRequest CreateFleet where
-        type Rs CreateFleet = CreateFleetResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateFleetResponse' <$>
-                   (x .?> "Fleet") <*> (pure (fromEnum s)))
-
-instance Hashable CreateFleet where
-
-instance NFData CreateFleet where
-
-instance ToHeaders CreateFleet where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.CreateFleet" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateFleet where
-        toJSON CreateFleet'{..}
-          = object
-              (catMaybes
-                 [("DomainJoinInfo" .=) <$> _cfDomainJoinInfo,
-                  ("DisconnectTimeoutInSeconds" .=) <$>
-                    _cfDisconnectTimeoutInSeconds,
-                  ("MaxUserDurationInSeconds" .=) <$>
-                    _cfMaxUserDurationInSeconds,
-                  ("FleetType" .=) <$> _cfFleetType,
-                  ("VpcConfig" .=) <$> _cfVPCConfig,
-                  ("DisplayName" .=) <$> _cfDisplayName,
-                  ("EnableDefaultInternetAccess" .=) <$>
-                    _cfEnableDefaultInternetAccess,
-                  ("Description" .=) <$> _cfDescription,
-                  Just ("Name" .= _cfName),
-                  Just ("ImageName" .= _cfImageName),
-                  Just ("InstanceType" .= _cfInstanceType),
-                  Just ("ComputeCapacity" .= _cfComputeCapacity)])
-
-instance ToPath CreateFleet where
-        toPath = const "/"
-
-instance ToQuery CreateFleet where
-        toQuery = const mempty
-
--- | /See:/ 'createFleetResponse' smart constructor.
-data CreateFleetResponse = CreateFleetResponse'
-  { _cfrsFleet          :: !(Maybe Fleet)
-  , _cfrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateFleetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cfrsFleet' - Information about the fleet.
---
--- * 'cfrsResponseStatus' - -- | The response status code.
-createFleetResponse
-    :: Int -- ^ 'cfrsResponseStatus'
-    -> CreateFleetResponse
-createFleetResponse pResponseStatus_ =
-  CreateFleetResponse'
-    {_cfrsFleet = Nothing, _cfrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the fleet.
-cfrsFleet :: Lens' CreateFleetResponse (Maybe Fleet)
-cfrsFleet = lens _cfrsFleet (\ s a -> s{_cfrsFleet = a})
-
--- | -- | The response status code.
-cfrsResponseStatus :: Lens' CreateFleetResponse Int
-cfrsResponseStatus = lens _cfrsResponseStatus (\ s a -> s{_cfrsResponseStatus = a})
-
-instance NFData CreateFleetResponse where
diff --git a/gen/Network/AWS/AppStream/CreateImageBuilder.hs b/gen/Network/AWS/AppStream/CreateImageBuilder.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/CreateImageBuilder.hs
+++ /dev/null
@@ -1,223 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.CreateImageBuilder
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an image builder.
---
---
--- The initial state of the builder is @PENDING@ . When it is ready, the state is @RUNNING@ .
---
-module Network.AWS.AppStream.CreateImageBuilder
-    (
-    -- * Creating a Request
-      createImageBuilder
-    , CreateImageBuilder
-    -- * Request Lenses
-    , cibDomainJoinInfo
-    , cibVPCConfig
-    , cibDisplayName
-    , cibEnableDefaultInternetAccess
-    , cibDescription
-    , cibAppstreamAgentVersion
-    , cibName
-    , cibImageName
-    , cibInstanceType
-
-    -- * Destructuring the Response
-    , createImageBuilderResponse
-    , CreateImageBuilderResponse
-    -- * Response Lenses
-    , cibrsImageBuilder
-    , cibrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createImageBuilder' smart constructor.
-data CreateImageBuilder = CreateImageBuilder'
-  { _cibDomainJoinInfo              :: !(Maybe DomainJoinInfo)
-  , _cibVPCConfig                   :: !(Maybe VPCConfig)
-  , _cibDisplayName                 :: !(Maybe Text)
-  , _cibEnableDefaultInternetAccess :: !(Maybe Bool)
-  , _cibDescription                 :: !(Maybe Text)
-  , _cibAppstreamAgentVersion       :: !(Maybe Text)
-  , _cibName                        :: !Text
-  , _cibImageName                   :: !Text
-  , _cibInstanceType                :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateImageBuilder' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cibDomainJoinInfo' - The information needed to join a Microsoft Active Directory domain.
---
--- * 'cibVPCConfig' - The VPC configuration for the image builder. You can specify only one subnet.
---
--- * 'cibDisplayName' - The image builder name for display.
---
--- * 'cibEnableDefaultInternetAccess' - Enables or disables default internet access for the image builder.
---
--- * 'cibDescription' - The description for display.
---
--- * 'cibAppstreamAgentVersion' - The version of the AppStream 2.0 agent to use for this image builder. To use the latest version of the AppStream 2.0 agent, specify [LATEST].
---
--- * 'cibName' - A unique name for the image builder.
---
--- * 'cibImageName' - The name of the image used to create the builder.
---
--- * 'cibInstanceType' - The instance type to use when launching the image builder.
-createImageBuilder
-    :: Text -- ^ 'cibName'
-    -> Text -- ^ 'cibImageName'
-    -> Text -- ^ 'cibInstanceType'
-    -> CreateImageBuilder
-createImageBuilder pName_ pImageName_ pInstanceType_ =
-  CreateImageBuilder'
-    { _cibDomainJoinInfo = Nothing
-    , _cibVPCConfig = Nothing
-    , _cibDisplayName = Nothing
-    , _cibEnableDefaultInternetAccess = Nothing
-    , _cibDescription = Nothing
-    , _cibAppstreamAgentVersion = Nothing
-    , _cibName = pName_
-    , _cibImageName = pImageName_
-    , _cibInstanceType = pInstanceType_
-    }
-
-
--- | The information needed to join a Microsoft Active Directory domain.
-cibDomainJoinInfo :: Lens' CreateImageBuilder (Maybe DomainJoinInfo)
-cibDomainJoinInfo = lens _cibDomainJoinInfo (\ s a -> s{_cibDomainJoinInfo = a})
-
--- | The VPC configuration for the image builder. You can specify only one subnet.
-cibVPCConfig :: Lens' CreateImageBuilder (Maybe VPCConfig)
-cibVPCConfig = lens _cibVPCConfig (\ s a -> s{_cibVPCConfig = a})
-
--- | The image builder name for display.
-cibDisplayName :: Lens' CreateImageBuilder (Maybe Text)
-cibDisplayName = lens _cibDisplayName (\ s a -> s{_cibDisplayName = a})
-
--- | Enables or disables default internet access for the image builder.
-cibEnableDefaultInternetAccess :: Lens' CreateImageBuilder (Maybe Bool)
-cibEnableDefaultInternetAccess = lens _cibEnableDefaultInternetAccess (\ s a -> s{_cibEnableDefaultInternetAccess = a})
-
--- | The description for display.
-cibDescription :: Lens' CreateImageBuilder (Maybe Text)
-cibDescription = lens _cibDescription (\ s a -> s{_cibDescription = a})
-
--- | The version of the AppStream 2.0 agent to use for this image builder. To use the latest version of the AppStream 2.0 agent, specify [LATEST].
-cibAppstreamAgentVersion :: Lens' CreateImageBuilder (Maybe Text)
-cibAppstreamAgentVersion = lens _cibAppstreamAgentVersion (\ s a -> s{_cibAppstreamAgentVersion = a})
-
--- | A unique name for the image builder.
-cibName :: Lens' CreateImageBuilder Text
-cibName = lens _cibName (\ s a -> s{_cibName = a})
-
--- | The name of the image used to create the builder.
-cibImageName :: Lens' CreateImageBuilder Text
-cibImageName = lens _cibImageName (\ s a -> s{_cibImageName = a})
-
--- | The instance type to use when launching the image builder.
-cibInstanceType :: Lens' CreateImageBuilder Text
-cibInstanceType = lens _cibInstanceType (\ s a -> s{_cibInstanceType = a})
-
-instance AWSRequest CreateImageBuilder where
-        type Rs CreateImageBuilder =
-             CreateImageBuilderResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateImageBuilderResponse' <$>
-                   (x .?> "ImageBuilder") <*> (pure (fromEnum s)))
-
-instance Hashable CreateImageBuilder where
-
-instance NFData CreateImageBuilder where
-
-instance ToHeaders CreateImageBuilder where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.CreateImageBuilder" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateImageBuilder where
-        toJSON CreateImageBuilder'{..}
-          = object
-              (catMaybes
-                 [("DomainJoinInfo" .=) <$> _cibDomainJoinInfo,
-                  ("VpcConfig" .=) <$> _cibVPCConfig,
-                  ("DisplayName" .=) <$> _cibDisplayName,
-                  ("EnableDefaultInternetAccess" .=) <$>
-                    _cibEnableDefaultInternetAccess,
-                  ("Description" .=) <$> _cibDescription,
-                  ("AppstreamAgentVersion" .=) <$>
-                    _cibAppstreamAgentVersion,
-                  Just ("Name" .= _cibName),
-                  Just ("ImageName" .= _cibImageName),
-                  Just ("InstanceType" .= _cibInstanceType)])
-
-instance ToPath CreateImageBuilder where
-        toPath = const "/"
-
-instance ToQuery CreateImageBuilder where
-        toQuery = const mempty
-
--- | /See:/ 'createImageBuilderResponse' smart constructor.
-data CreateImageBuilderResponse = CreateImageBuilderResponse'
-  { _cibrsImageBuilder   :: !(Maybe ImageBuilder)
-  , _cibrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateImageBuilderResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cibrsImageBuilder' - Information about the image builder.
---
--- * 'cibrsResponseStatus' - -- | The response status code.
-createImageBuilderResponse
-    :: Int -- ^ 'cibrsResponseStatus'
-    -> CreateImageBuilderResponse
-createImageBuilderResponse pResponseStatus_ =
-  CreateImageBuilderResponse'
-    {_cibrsImageBuilder = Nothing, _cibrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the image builder.
-cibrsImageBuilder :: Lens' CreateImageBuilderResponse (Maybe ImageBuilder)
-cibrsImageBuilder = lens _cibrsImageBuilder (\ s a -> s{_cibrsImageBuilder = a})
-
--- | -- | The response status code.
-cibrsResponseStatus :: Lens' CreateImageBuilderResponse Int
-cibrsResponseStatus = lens _cibrsResponseStatus (\ s a -> s{_cibrsResponseStatus = a})
-
-instance NFData CreateImageBuilderResponse where
diff --git a/gen/Network/AWS/AppStream/CreateImageBuilderStreamingURL.hs b/gen/Network/AWS/AppStream/CreateImageBuilderStreamingURL.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/CreateImageBuilderStreamingURL.hs
+++ /dev/null
@@ -1,162 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.CreateImageBuilderStreamingURL
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a URL to start an image builder streaming session.
---
---
-module Network.AWS.AppStream.CreateImageBuilderStreamingURL
-    (
-    -- * Creating a Request
-      createImageBuilderStreamingURL
-    , CreateImageBuilderStreamingURL
-    -- * Request Lenses
-    , cibsuValidity
-    , cibsuName
-
-    -- * Destructuring the Response
-    , createImageBuilderStreamingURLResponse
-    , CreateImageBuilderStreamingURLResponse
-    -- * Response Lenses
-    , cibsursStreamingURL
-    , cibsursExpires
-    , cibsursResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createImageBuilderStreamingURL' smart constructor.
-data CreateImageBuilderStreamingURL = CreateImageBuilderStreamingURL'
-  { _cibsuValidity :: !(Maybe Integer)
-  , _cibsuName     :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateImageBuilderStreamingURL' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cibsuValidity' - The time that the streaming URL will be valid, in seconds. Specify a value between 1 and 604800 seconds. The default is 3600 seconds.
---
--- * 'cibsuName' - The name of the image builder.
-createImageBuilderStreamingURL
-    :: Text -- ^ 'cibsuName'
-    -> CreateImageBuilderStreamingURL
-createImageBuilderStreamingURL pName_ =
-  CreateImageBuilderStreamingURL'
-    {_cibsuValidity = Nothing, _cibsuName = pName_}
-
-
--- | The time that the streaming URL will be valid, in seconds. Specify a value between 1 and 604800 seconds. The default is 3600 seconds.
-cibsuValidity :: Lens' CreateImageBuilderStreamingURL (Maybe Integer)
-cibsuValidity = lens _cibsuValidity (\ s a -> s{_cibsuValidity = a})
-
--- | The name of the image builder.
-cibsuName :: Lens' CreateImageBuilderStreamingURL Text
-cibsuName = lens _cibsuName (\ s a -> s{_cibsuName = a})
-
-instance AWSRequest CreateImageBuilderStreamingURL
-         where
-        type Rs CreateImageBuilderStreamingURL =
-             CreateImageBuilderStreamingURLResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateImageBuilderStreamingURLResponse' <$>
-                   (x .?> "StreamingURL") <*> (x .?> "Expires") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable CreateImageBuilderStreamingURL
-         where
-
-instance NFData CreateImageBuilderStreamingURL where
-
-instance ToHeaders CreateImageBuilderStreamingURL
-         where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.CreateImageBuilderStreamingURL"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateImageBuilderStreamingURL where
-        toJSON CreateImageBuilderStreamingURL'{..}
-          = object
-              (catMaybes
-                 [("Validity" .=) <$> _cibsuValidity,
-                  Just ("Name" .= _cibsuName)])
-
-instance ToPath CreateImageBuilderStreamingURL where
-        toPath = const "/"
-
-instance ToQuery CreateImageBuilderStreamingURL where
-        toQuery = const mempty
-
--- | /See:/ 'createImageBuilderStreamingURLResponse' smart constructor.
-data CreateImageBuilderStreamingURLResponse = CreateImageBuilderStreamingURLResponse'
-  { _cibsursStreamingURL   :: !(Maybe Text)
-  , _cibsursExpires        :: !(Maybe POSIX)
-  , _cibsursResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateImageBuilderStreamingURLResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cibsursStreamingURL' - The URL to start the AppStream 2.0 streaming session.
---
--- * 'cibsursExpires' - The elapsed time, in seconds after the Unix epoch, when this URL expires.
---
--- * 'cibsursResponseStatus' - -- | The response status code.
-createImageBuilderStreamingURLResponse
-    :: Int -- ^ 'cibsursResponseStatus'
-    -> CreateImageBuilderStreamingURLResponse
-createImageBuilderStreamingURLResponse pResponseStatus_ =
-  CreateImageBuilderStreamingURLResponse'
-    { _cibsursStreamingURL = Nothing
-    , _cibsursExpires = Nothing
-    , _cibsursResponseStatus = pResponseStatus_
-    }
-
-
--- | The URL to start the AppStream 2.0 streaming session.
-cibsursStreamingURL :: Lens' CreateImageBuilderStreamingURLResponse (Maybe Text)
-cibsursStreamingURL = lens _cibsursStreamingURL (\ s a -> s{_cibsursStreamingURL = a})
-
--- | The elapsed time, in seconds after the Unix epoch, when this URL expires.
-cibsursExpires :: Lens' CreateImageBuilderStreamingURLResponse (Maybe UTCTime)
-cibsursExpires = lens _cibsursExpires (\ s a -> s{_cibsursExpires = a}) . mapping _Time
-
--- | -- | The response status code.
-cibsursResponseStatus :: Lens' CreateImageBuilderStreamingURLResponse Int
-cibsursResponseStatus = lens _cibsursResponseStatus (\ s a -> s{_cibsursResponseStatus = a})
-
-instance NFData
-           CreateImageBuilderStreamingURLResponse
-         where
diff --git a/gen/Network/AWS/AppStream/CreateStack.hs b/gen/Network/AWS/AppStream/CreateStack.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/CreateStack.hs
+++ /dev/null
@@ -1,186 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.CreateStack
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a stack.
---
---
-module Network.AWS.AppStream.CreateStack
-    (
-    -- * Creating a Request
-      createStack
-    , CreateStack
-    -- * Request Lenses
-    , csFeedbackURL
-    , csStorageConnectors
-    , csDisplayName
-    , csDescription
-    , csRedirectURL
-    , csName
-
-    -- * Destructuring the Response
-    , createStackResponse
-    , CreateStackResponse
-    -- * Response Lenses
-    , csrsStack
-    , csrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createStack' smart constructor.
-data CreateStack = CreateStack'
-  { _csFeedbackURL       :: !(Maybe Text)
-  , _csStorageConnectors :: !(Maybe [StorageConnector])
-  , _csDisplayName       :: !(Maybe Text)
-  , _csDescription       :: !(Maybe Text)
-  , _csRedirectURL       :: !(Maybe Text)
-  , _csName              :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateStack' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csFeedbackURL' - The URL that users are redirected to after they click the Send Feedback link. If no URL is specified, no Send Feedback link is displayed.
---
--- * 'csStorageConnectors' - The storage connectors to enable.
---
--- * 'csDisplayName' - The stack name for display.
---
--- * 'csDescription' - The description for display.
---
--- * 'csRedirectURL' - The URL that users are redirected to after their streaming session ends.
---
--- * 'csName' - The name of the stack.
-createStack
-    :: Text -- ^ 'csName'
-    -> CreateStack
-createStack pName_ =
-  CreateStack'
-    { _csFeedbackURL = Nothing
-    , _csStorageConnectors = Nothing
-    , _csDisplayName = Nothing
-    , _csDescription = Nothing
-    , _csRedirectURL = Nothing
-    , _csName = pName_
-    }
-
-
--- | The URL that users are redirected to after they click the Send Feedback link. If no URL is specified, no Send Feedback link is displayed.
-csFeedbackURL :: Lens' CreateStack (Maybe Text)
-csFeedbackURL = lens _csFeedbackURL (\ s a -> s{_csFeedbackURL = a})
-
--- | The storage connectors to enable.
-csStorageConnectors :: Lens' CreateStack [StorageConnector]
-csStorageConnectors = lens _csStorageConnectors (\ s a -> s{_csStorageConnectors = a}) . _Default . _Coerce
-
--- | The stack name for display.
-csDisplayName :: Lens' CreateStack (Maybe Text)
-csDisplayName = lens _csDisplayName (\ s a -> s{_csDisplayName = a})
-
--- | The description for display.
-csDescription :: Lens' CreateStack (Maybe Text)
-csDescription = lens _csDescription (\ s a -> s{_csDescription = a})
-
--- | The URL that users are redirected to after their streaming session ends.
-csRedirectURL :: Lens' CreateStack (Maybe Text)
-csRedirectURL = lens _csRedirectURL (\ s a -> s{_csRedirectURL = a})
-
--- | The name of the stack.
-csName :: Lens' CreateStack Text
-csName = lens _csName (\ s a -> s{_csName = a})
-
-instance AWSRequest CreateStack where
-        type Rs CreateStack = CreateStackResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateStackResponse' <$>
-                   (x .?> "Stack") <*> (pure (fromEnum s)))
-
-instance Hashable CreateStack where
-
-instance NFData CreateStack where
-
-instance ToHeaders CreateStack where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.CreateStack" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateStack where
-        toJSON CreateStack'{..}
-          = object
-              (catMaybes
-                 [("FeedbackURL" .=) <$> _csFeedbackURL,
-                  ("StorageConnectors" .=) <$> _csStorageConnectors,
-                  ("DisplayName" .=) <$> _csDisplayName,
-                  ("Description" .=) <$> _csDescription,
-                  ("RedirectURL" .=) <$> _csRedirectURL,
-                  Just ("Name" .= _csName)])
-
-instance ToPath CreateStack where
-        toPath = const "/"
-
-instance ToQuery CreateStack where
-        toQuery = const mempty
-
--- | /See:/ 'createStackResponse' smart constructor.
-data CreateStackResponse = CreateStackResponse'
-  { _csrsStack          :: !(Maybe Stack)
-  , _csrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateStackResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csrsStack' - Information about the stack.
---
--- * 'csrsResponseStatus' - -- | The response status code.
-createStackResponse
-    :: Int -- ^ 'csrsResponseStatus'
-    -> CreateStackResponse
-createStackResponse pResponseStatus_ =
-  CreateStackResponse'
-    {_csrsStack = Nothing, _csrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the stack.
-csrsStack :: Lens' CreateStackResponse (Maybe Stack)
-csrsStack = lens _csrsStack (\ s a -> s{_csrsStack = a})
-
--- | -- | The response status code.
-csrsResponseStatus :: Lens' CreateStackResponse Int
-csrsResponseStatus = lens _csrsResponseStatus (\ s a -> s{_csrsResponseStatus = a})
-
-instance NFData CreateStackResponse where
diff --git a/gen/Network/AWS/AppStream/CreateStreamingURL.hs b/gen/Network/AWS/AppStream/CreateStreamingURL.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/CreateStreamingURL.hs
+++ /dev/null
@@ -1,201 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.CreateStreamingURL
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a URL to start a streaming session for the specified user.
---
---
-module Network.AWS.AppStream.CreateStreamingURL
-    (
-    -- * Creating a Request
-      createStreamingURL
-    , CreateStreamingURL
-    -- * Request Lenses
-    , csuSessionContext
-    , csuApplicationId
-    , csuValidity
-    , csuStackName
-    , csuFleetName
-    , csuUserId
-
-    -- * Destructuring the Response
-    , createStreamingURLResponse
-    , CreateStreamingURLResponse
-    -- * Response Lenses
-    , csursStreamingURL
-    , csursExpires
-    , csursResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createStreamingURL' smart constructor.
-data CreateStreamingURL = CreateStreamingURL'
-  { _csuSessionContext :: !(Maybe Text)
-  , _csuApplicationId  :: !(Maybe Text)
-  , _csuValidity       :: !(Maybe Integer)
-  , _csuStackName      :: !Text
-  , _csuFleetName      :: !Text
-  , _csuUserId         :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateStreamingURL' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csuSessionContext' - The session context. For more information, see <http://docs.aws.amazon.com/appstream2/latest/developerguide/managing-stacks-fleets.html#managing-stacks-fleets-parameters Session Context> in the /Amazon AppStream 2.0 Developer Guide/ .
---
--- * 'csuApplicationId' - The name of the application to launch after the session starts. This is the name that you specified as __Name__ in the Image Assistant.
---
--- * 'csuValidity' - The time that the streaming URL will be valid, in seconds. Specify a value between 1 and 604800 seconds. The default is 60 seconds.
---
--- * 'csuStackName' - The name of the stack.
---
--- * 'csuFleetName' - The name of the fleet.
---
--- * 'csuUserId' - The ID of the user.
-createStreamingURL
-    :: Text -- ^ 'csuStackName'
-    -> Text -- ^ 'csuFleetName'
-    -> Text -- ^ 'csuUserId'
-    -> CreateStreamingURL
-createStreamingURL pStackName_ pFleetName_ pUserId_ =
-  CreateStreamingURL'
-    { _csuSessionContext = Nothing
-    , _csuApplicationId = Nothing
-    , _csuValidity = Nothing
-    , _csuStackName = pStackName_
-    , _csuFleetName = pFleetName_
-    , _csuUserId = pUserId_
-    }
-
-
--- | The session context. For more information, see <http://docs.aws.amazon.com/appstream2/latest/developerguide/managing-stacks-fleets.html#managing-stacks-fleets-parameters Session Context> in the /Amazon AppStream 2.0 Developer Guide/ .
-csuSessionContext :: Lens' CreateStreamingURL (Maybe Text)
-csuSessionContext = lens _csuSessionContext (\ s a -> s{_csuSessionContext = a})
-
--- | The name of the application to launch after the session starts. This is the name that you specified as __Name__ in the Image Assistant.
-csuApplicationId :: Lens' CreateStreamingURL (Maybe Text)
-csuApplicationId = lens _csuApplicationId (\ s a -> s{_csuApplicationId = a})
-
--- | The time that the streaming URL will be valid, in seconds. Specify a value between 1 and 604800 seconds. The default is 60 seconds.
-csuValidity :: Lens' CreateStreamingURL (Maybe Integer)
-csuValidity = lens _csuValidity (\ s a -> s{_csuValidity = a})
-
--- | The name of the stack.
-csuStackName :: Lens' CreateStreamingURL Text
-csuStackName = lens _csuStackName (\ s a -> s{_csuStackName = a})
-
--- | The name of the fleet.
-csuFleetName :: Lens' CreateStreamingURL Text
-csuFleetName = lens _csuFleetName (\ s a -> s{_csuFleetName = a})
-
--- | The ID of the user.
-csuUserId :: Lens' CreateStreamingURL Text
-csuUserId = lens _csuUserId (\ s a -> s{_csuUserId = a})
-
-instance AWSRequest CreateStreamingURL where
-        type Rs CreateStreamingURL =
-             CreateStreamingURLResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateStreamingURLResponse' <$>
-                   (x .?> "StreamingURL") <*> (x .?> "Expires") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable CreateStreamingURL where
-
-instance NFData CreateStreamingURL where
-
-instance ToHeaders CreateStreamingURL where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.CreateStreamingURL" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateStreamingURL where
-        toJSON CreateStreamingURL'{..}
-          = object
-              (catMaybes
-                 [("SessionContext" .=) <$> _csuSessionContext,
-                  ("ApplicationId" .=) <$> _csuApplicationId,
-                  ("Validity" .=) <$> _csuValidity,
-                  Just ("StackName" .= _csuStackName),
-                  Just ("FleetName" .= _csuFleetName),
-                  Just ("UserId" .= _csuUserId)])
-
-instance ToPath CreateStreamingURL where
-        toPath = const "/"
-
-instance ToQuery CreateStreamingURL where
-        toQuery = const mempty
-
--- | /See:/ 'createStreamingURLResponse' smart constructor.
-data CreateStreamingURLResponse = CreateStreamingURLResponse'
-  { _csursStreamingURL   :: !(Maybe Text)
-  , _csursExpires        :: !(Maybe POSIX)
-  , _csursResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateStreamingURLResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'csursStreamingURL' - The URL to start the AppStream 2.0 streaming session.
---
--- * 'csursExpires' - The elapsed time, in seconds after the Unix epoch, when this URL expires.
---
--- * 'csursResponseStatus' - -- | The response status code.
-createStreamingURLResponse
-    :: Int -- ^ 'csursResponseStatus'
-    -> CreateStreamingURLResponse
-createStreamingURLResponse pResponseStatus_ =
-  CreateStreamingURLResponse'
-    { _csursStreamingURL = Nothing
-    , _csursExpires = Nothing
-    , _csursResponseStatus = pResponseStatus_
-    }
-
-
--- | The URL to start the AppStream 2.0 streaming session.
-csursStreamingURL :: Lens' CreateStreamingURLResponse (Maybe Text)
-csursStreamingURL = lens _csursStreamingURL (\ s a -> s{_csursStreamingURL = a})
-
--- | The elapsed time, in seconds after the Unix epoch, when this URL expires.
-csursExpires :: Lens' CreateStreamingURLResponse (Maybe UTCTime)
-csursExpires = lens _csursExpires (\ s a -> s{_csursExpires = a}) . mapping _Time
-
--- | -- | The response status code.
-csursResponseStatus :: Lens' CreateStreamingURLResponse Int
-csursResponseStatus = lens _csursResponseStatus (\ s a -> s{_csursResponseStatus = a})
-
-instance NFData CreateStreamingURLResponse where
diff --git a/gen/Network/AWS/AppStream/DeleteDirectoryConfig.hs b/gen/Network/AWS/AppStream/DeleteDirectoryConfig.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DeleteDirectoryConfig.hs
+++ /dev/null
@@ -1,126 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DeleteDirectoryConfig
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified directory configuration.
---
---
-module Network.AWS.AppStream.DeleteDirectoryConfig
-    (
-    -- * Creating a Request
-      deleteDirectoryConfig
-    , DeleteDirectoryConfig
-    -- * Request Lenses
-    , ddcDirectoryName
-
-    -- * Destructuring the Response
-    , deleteDirectoryConfigResponse
-    , DeleteDirectoryConfigResponse
-    -- * Response Lenses
-    , delrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteDirectoryConfig' smart constructor.
-newtype DeleteDirectoryConfig = DeleteDirectoryConfig'
-  { _ddcDirectoryName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteDirectoryConfig' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddcDirectoryName' - The name of the directory configuration.
-deleteDirectoryConfig
-    :: Text -- ^ 'ddcDirectoryName'
-    -> DeleteDirectoryConfig
-deleteDirectoryConfig pDirectoryName_ =
-  DeleteDirectoryConfig' {_ddcDirectoryName = pDirectoryName_}
-
-
--- | The name of the directory configuration.
-ddcDirectoryName :: Lens' DeleteDirectoryConfig Text
-ddcDirectoryName = lens _ddcDirectoryName (\ s a -> s{_ddcDirectoryName = a})
-
-instance AWSRequest DeleteDirectoryConfig where
-        type Rs DeleteDirectoryConfig =
-             DeleteDirectoryConfigResponse
-        request = postJSON appStream
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteDirectoryConfigResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable DeleteDirectoryConfig where
-
-instance NFData DeleteDirectoryConfig where
-
-instance ToHeaders DeleteDirectoryConfig where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DeleteDirectoryConfig" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteDirectoryConfig where
-        toJSON DeleteDirectoryConfig'{..}
-          = object
-              (catMaybes
-                 [Just ("DirectoryName" .= _ddcDirectoryName)])
-
-instance ToPath DeleteDirectoryConfig where
-        toPath = const "/"
-
-instance ToQuery DeleteDirectoryConfig where
-        toQuery = const mempty
-
--- | /See:/ 'deleteDirectoryConfigResponse' smart constructor.
-newtype DeleteDirectoryConfigResponse = DeleteDirectoryConfigResponse'
-  { _delrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteDirectoryConfigResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'delrsResponseStatus' - -- | The response status code.
-deleteDirectoryConfigResponse
-    :: Int -- ^ 'delrsResponseStatus'
-    -> DeleteDirectoryConfigResponse
-deleteDirectoryConfigResponse pResponseStatus_ =
-  DeleteDirectoryConfigResponse' {_delrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-delrsResponseStatus :: Lens' DeleteDirectoryConfigResponse Int
-delrsResponseStatus = lens _delrsResponseStatus (\ s a -> s{_delrsResponseStatus = a})
-
-instance NFData DeleteDirectoryConfigResponse where
diff --git a/gen/Network/AWS/AppStream/DeleteFleet.hs b/gen/Network/AWS/AppStream/DeleteFleet.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DeleteFleet.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DeleteFleet
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified fleet.
---
---
-module Network.AWS.AppStream.DeleteFleet
-    (
-    -- * Creating a Request
-      deleteFleet
-    , DeleteFleet
-    -- * Request Lenses
-    , dfName
-
-    -- * Destructuring the Response
-    , deleteFleetResponse
-    , DeleteFleetResponse
-    -- * Response Lenses
-    , dfrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteFleet' smart constructor.
-newtype DeleteFleet = DeleteFleet'
-  { _dfName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteFleet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dfName' - The name of the fleet.
-deleteFleet
-    :: Text -- ^ 'dfName'
-    -> DeleteFleet
-deleteFleet pName_ = DeleteFleet' {_dfName = pName_}
-
-
--- | The name of the fleet.
-dfName :: Lens' DeleteFleet Text
-dfName = lens _dfName (\ s a -> s{_dfName = a})
-
-instance AWSRequest DeleteFleet where
-        type Rs DeleteFleet = DeleteFleetResponse
-        request = postJSON appStream
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteFleetResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteFleet where
-
-instance NFData DeleteFleet where
-
-instance ToHeaders DeleteFleet where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DeleteFleet" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteFleet where
-        toJSON DeleteFleet'{..}
-          = object (catMaybes [Just ("Name" .= _dfName)])
-
-instance ToPath DeleteFleet where
-        toPath = const "/"
-
-instance ToQuery DeleteFleet where
-        toQuery = const mempty
-
--- | /See:/ 'deleteFleetResponse' smart constructor.
-newtype DeleteFleetResponse = DeleteFleetResponse'
-  { _dfrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteFleetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dfrsResponseStatus' - -- | The response status code.
-deleteFleetResponse
-    :: Int -- ^ 'dfrsResponseStatus'
-    -> DeleteFleetResponse
-deleteFleetResponse pResponseStatus_ =
-  DeleteFleetResponse' {_dfrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dfrsResponseStatus :: Lens' DeleteFleetResponse Int
-dfrsResponseStatus = lens _dfrsResponseStatus (\ s a -> s{_dfrsResponseStatus = a})
-
-instance NFData DeleteFleetResponse where
diff --git a/gen/Network/AWS/AppStream/DeleteImage.hs b/gen/Network/AWS/AppStream/DeleteImage.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DeleteImage.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DeleteImage
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified image. You cannot delete an image that is currently in use. After you delete an image, you cannot provision new capacity using the image.
---
---
-module Network.AWS.AppStream.DeleteImage
-    (
-    -- * Creating a Request
-      deleteImage
-    , DeleteImage
-    -- * Request Lenses
-    , diName
-
-    -- * Destructuring the Response
-    , deleteImageResponse
-    , DeleteImageResponse
-    -- * Response Lenses
-    , dirsImage
-    , dirsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteImage' smart constructor.
-newtype DeleteImage = DeleteImage'
-  { _diName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteImage' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diName' - The name of the image.
-deleteImage
-    :: Text -- ^ 'diName'
-    -> DeleteImage
-deleteImage pName_ = DeleteImage' {_diName = pName_}
-
-
--- | The name of the image.
-diName :: Lens' DeleteImage Text
-diName = lens _diName (\ s a -> s{_diName = a})
-
-instance AWSRequest DeleteImage where
-        type Rs DeleteImage = DeleteImageResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DeleteImageResponse' <$>
-                   (x .?> "Image") <*> (pure (fromEnum s)))
-
-instance Hashable DeleteImage where
-
-instance NFData DeleteImage where
-
-instance ToHeaders DeleteImage where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DeleteImage" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteImage where
-        toJSON DeleteImage'{..}
-          = object (catMaybes [Just ("Name" .= _diName)])
-
-instance ToPath DeleteImage where
-        toPath = const "/"
-
-instance ToQuery DeleteImage where
-        toQuery = const mempty
-
--- | /See:/ 'deleteImageResponse' smart constructor.
-data DeleteImageResponse = DeleteImageResponse'
-  { _dirsImage          :: !(Maybe Image)
-  , _dirsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteImageResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dirsImage' - Information about the image.
---
--- * 'dirsResponseStatus' - -- | The response status code.
-deleteImageResponse
-    :: Int -- ^ 'dirsResponseStatus'
-    -> DeleteImageResponse
-deleteImageResponse pResponseStatus_ =
-  DeleteImageResponse'
-    {_dirsImage = Nothing, _dirsResponseStatus = pResponseStatus_}
-
-
--- | Information about the image.
-dirsImage :: Lens' DeleteImageResponse (Maybe Image)
-dirsImage = lens _dirsImage (\ s a -> s{_dirsImage = a})
-
--- | -- | The response status code.
-dirsResponseStatus :: Lens' DeleteImageResponse Int
-dirsResponseStatus = lens _dirsResponseStatus (\ s a -> s{_dirsResponseStatus = a})
-
-instance NFData DeleteImageResponse where
diff --git a/gen/Network/AWS/AppStream/DeleteImageBuilder.hs b/gen/Network/AWS/AppStream/DeleteImageBuilder.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DeleteImageBuilder.hs
+++ /dev/null
@@ -1,132 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DeleteImageBuilder
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified image builder and releases the capacity.
---
---
-module Network.AWS.AppStream.DeleteImageBuilder
-    (
-    -- * Creating a Request
-      deleteImageBuilder
-    , DeleteImageBuilder
-    -- * Request Lenses
-    , dibName
-
-    -- * Destructuring the Response
-    , deleteImageBuilderResponse
-    , DeleteImageBuilderResponse
-    -- * Response Lenses
-    , dibrsImageBuilder
-    , dibrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteImageBuilder' smart constructor.
-newtype DeleteImageBuilder = DeleteImageBuilder'
-  { _dibName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteImageBuilder' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dibName' - The name of the image builder.
-deleteImageBuilder
-    :: Text -- ^ 'dibName'
-    -> DeleteImageBuilder
-deleteImageBuilder pName_ = DeleteImageBuilder' {_dibName = pName_}
-
-
--- | The name of the image builder.
-dibName :: Lens' DeleteImageBuilder Text
-dibName = lens _dibName (\ s a -> s{_dibName = a})
-
-instance AWSRequest DeleteImageBuilder where
-        type Rs DeleteImageBuilder =
-             DeleteImageBuilderResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DeleteImageBuilderResponse' <$>
-                   (x .?> "ImageBuilder") <*> (pure (fromEnum s)))
-
-instance Hashable DeleteImageBuilder where
-
-instance NFData DeleteImageBuilder where
-
-instance ToHeaders DeleteImageBuilder where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DeleteImageBuilder" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteImageBuilder where
-        toJSON DeleteImageBuilder'{..}
-          = object (catMaybes [Just ("Name" .= _dibName)])
-
-instance ToPath DeleteImageBuilder where
-        toPath = const "/"
-
-instance ToQuery DeleteImageBuilder where
-        toQuery = const mempty
-
--- | /See:/ 'deleteImageBuilderResponse' smart constructor.
-data DeleteImageBuilderResponse = DeleteImageBuilderResponse'
-  { _dibrsImageBuilder   :: !(Maybe ImageBuilder)
-  , _dibrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteImageBuilderResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dibrsImageBuilder' - Information about the image builder.
---
--- * 'dibrsResponseStatus' - -- | The response status code.
-deleteImageBuilderResponse
-    :: Int -- ^ 'dibrsResponseStatus'
-    -> DeleteImageBuilderResponse
-deleteImageBuilderResponse pResponseStatus_ =
-  DeleteImageBuilderResponse'
-    {_dibrsImageBuilder = Nothing, _dibrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the image builder.
-dibrsImageBuilder :: Lens' DeleteImageBuilderResponse (Maybe ImageBuilder)
-dibrsImageBuilder = lens _dibrsImageBuilder (\ s a -> s{_dibrsImageBuilder = a})
-
--- | -- | The response status code.
-dibrsResponseStatus :: Lens' DeleteImageBuilderResponse Int
-dibrsResponseStatus = lens _dibrsResponseStatus (\ s a -> s{_dibrsResponseStatus = a})
-
-instance NFData DeleteImageBuilderResponse where
diff --git a/gen/Network/AWS/AppStream/DeleteStack.hs b/gen/Network/AWS/AppStream/DeleteStack.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DeleteStack.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DeleteStack
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Deletes the specified stack. After this operation completes, the environment can no longer be activated and any reservations made for the stack are released.
---
---
-module Network.AWS.AppStream.DeleteStack
-    (
-    -- * Creating a Request
-      deleteStack
-    , DeleteStack
-    -- * Request Lenses
-    , dsName
-
-    -- * Destructuring the Response
-    , deleteStackResponse
-    , DeleteStackResponse
-    -- * Response Lenses
-    , dsrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteStack' smart constructor.
-newtype DeleteStack = DeleteStack'
-  { _dsName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteStack' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsName' - The name of the stack.
-deleteStack
-    :: Text -- ^ 'dsName'
-    -> DeleteStack
-deleteStack pName_ = DeleteStack' {_dsName = pName_}
-
-
--- | The name of the stack.
-dsName :: Lens' DeleteStack Text
-dsName = lens _dsName (\ s a -> s{_dsName = a})
-
-instance AWSRequest DeleteStack where
-        type Rs DeleteStack = DeleteStackResponse
-        request = postJSON appStream
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteStackResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteStack where
-
-instance NFData DeleteStack where
-
-instance ToHeaders DeleteStack where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DeleteStack" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteStack where
-        toJSON DeleteStack'{..}
-          = object (catMaybes [Just ("Name" .= _dsName)])
-
-instance ToPath DeleteStack where
-        toPath = const "/"
-
-instance ToQuery DeleteStack where
-        toQuery = const mempty
-
--- | /See:/ 'deleteStackResponse' smart constructor.
-newtype DeleteStackResponse = DeleteStackResponse'
-  { _dsrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteStackResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsrsResponseStatus' - -- | The response status code.
-deleteStackResponse
-    :: Int -- ^ 'dsrsResponseStatus'
-    -> DeleteStackResponse
-deleteStackResponse pResponseStatus_ =
-  DeleteStackResponse' {_dsrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dsrsResponseStatus :: Lens' DeleteStackResponse Int
-dsrsResponseStatus = lens _dsrsResponseStatus (\ s a -> s{_dsrsResponseStatus = a})
-
-instance NFData DeleteStackResponse where
diff --git a/gen/Network/AWS/AppStream/DescribeDirectoryConfigs.hs b/gen/Network/AWS/AppStream/DescribeDirectoryConfigs.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DescribeDirectoryConfigs.hs
+++ /dev/null
@@ -1,170 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DescribeDirectoryConfigs
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified directory configurations. Note that although the response syntax in this topic includes the account password, this password is not returned in the actual response.
---
---
-module Network.AWS.AppStream.DescribeDirectoryConfigs
-    (
-    -- * Creating a Request
-      describeDirectoryConfigs
-    , DescribeDirectoryConfigs
-    -- * Request Lenses
-    , ddcNextToken
-    , ddcDirectoryNames
-    , ddcMaxResults
-
-    -- * Destructuring the Response
-    , describeDirectoryConfigsResponse
-    , DescribeDirectoryConfigsResponse
-    -- * Response Lenses
-    , ddcrsNextToken
-    , ddcrsDirectoryConfigs
-    , ddcrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeDirectoryConfigs' smart constructor.
-data DescribeDirectoryConfigs = DescribeDirectoryConfigs'
-  { _ddcNextToken      :: !(Maybe Text)
-  , _ddcDirectoryNames :: !(Maybe [Text])
-  , _ddcMaxResults     :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeDirectoryConfigs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddcNextToken' - The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
---
--- * 'ddcDirectoryNames' - The directory names.
---
--- * 'ddcMaxResults' - The maximum size of each page of results.
-describeDirectoryConfigs
-    :: DescribeDirectoryConfigs
-describeDirectoryConfigs =
-  DescribeDirectoryConfigs'
-    { _ddcNextToken = Nothing
-    , _ddcDirectoryNames = Nothing
-    , _ddcMaxResults = Nothing
-    }
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
-ddcNextToken :: Lens' DescribeDirectoryConfigs (Maybe Text)
-ddcNextToken = lens _ddcNextToken (\ s a -> s{_ddcNextToken = a})
-
--- | The directory names.
-ddcDirectoryNames :: Lens' DescribeDirectoryConfigs [Text]
-ddcDirectoryNames = lens _ddcDirectoryNames (\ s a -> s{_ddcDirectoryNames = a}) . _Default . _Coerce
-
--- | The maximum size of each page of results.
-ddcMaxResults :: Lens' DescribeDirectoryConfigs (Maybe Int)
-ddcMaxResults = lens _ddcMaxResults (\ s a -> s{_ddcMaxResults = a})
-
-instance AWSRequest DescribeDirectoryConfigs where
-        type Rs DescribeDirectoryConfigs =
-             DescribeDirectoryConfigsResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeDirectoryConfigsResponse' <$>
-                   (x .?> "NextToken") <*>
-                     (x .?> "DirectoryConfigs" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeDirectoryConfigs where
-
-instance NFData DescribeDirectoryConfigs where
-
-instance ToHeaders DescribeDirectoryConfigs where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DescribeDirectoryConfigs"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeDirectoryConfigs where
-        toJSON DescribeDirectoryConfigs'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _ddcNextToken,
-                  ("DirectoryNames" .=) <$> _ddcDirectoryNames,
-                  ("MaxResults" .=) <$> _ddcMaxResults])
-
-instance ToPath DescribeDirectoryConfigs where
-        toPath = const "/"
-
-instance ToQuery DescribeDirectoryConfigs where
-        toQuery = const mempty
-
--- | /See:/ 'describeDirectoryConfigsResponse' smart constructor.
-data DescribeDirectoryConfigsResponse = DescribeDirectoryConfigsResponse'
-  { _ddcrsNextToken        :: !(Maybe Text)
-  , _ddcrsDirectoryConfigs :: !(Maybe [DirectoryConfig])
-  , _ddcrsResponseStatus   :: !Int
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeDirectoryConfigsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddcrsNextToken' - The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
---
--- * 'ddcrsDirectoryConfigs' - Information about the directory configurations. Note that although the response syntax in this topic includes the account password, this password is not returned in the actual response.
---
--- * 'ddcrsResponseStatus' - -- | The response status code.
-describeDirectoryConfigsResponse
-    :: Int -- ^ 'ddcrsResponseStatus'
-    -> DescribeDirectoryConfigsResponse
-describeDirectoryConfigsResponse pResponseStatus_ =
-  DescribeDirectoryConfigsResponse'
-    { _ddcrsNextToken = Nothing
-    , _ddcrsDirectoryConfigs = Nothing
-    , _ddcrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
-ddcrsNextToken :: Lens' DescribeDirectoryConfigsResponse (Maybe Text)
-ddcrsNextToken = lens _ddcrsNextToken (\ s a -> s{_ddcrsNextToken = a})
-
--- | Information about the directory configurations. Note that although the response syntax in this topic includes the account password, this password is not returned in the actual response.
-ddcrsDirectoryConfigs :: Lens' DescribeDirectoryConfigsResponse [DirectoryConfig]
-ddcrsDirectoryConfigs = lens _ddcrsDirectoryConfigs (\ s a -> s{_ddcrsDirectoryConfigs = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-ddcrsResponseStatus :: Lens' DescribeDirectoryConfigsResponse Int
-ddcrsResponseStatus = lens _ddcrsResponseStatus (\ s a -> s{_ddcrsResponseStatus = a})
-
-instance NFData DescribeDirectoryConfigsResponse
-         where
diff --git a/gen/Network/AWS/AppStream/DescribeFleets.hs b/gen/Network/AWS/AppStream/DescribeFleets.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DescribeFleets.hs
+++ /dev/null
@@ -1,153 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DescribeFleets
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified fleets or all fleets in the account.
---
---
-module Network.AWS.AppStream.DescribeFleets
-    (
-    -- * Creating a Request
-      describeFleets
-    , DescribeFleets
-    -- * Request Lenses
-    , dfNextToken
-    , dfNames
-
-    -- * Destructuring the Response
-    , describeFleetsResponse
-    , DescribeFleetsResponse
-    -- * Response Lenses
-    , dfsrsNextToken
-    , dfsrsFleets
-    , dfsrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeFleets' smart constructor.
-data DescribeFleets = DescribeFleets'
-  { _dfNextToken :: !(Maybe Text)
-  , _dfNames     :: !(Maybe [Text])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeFleets' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dfNextToken' - The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
---
--- * 'dfNames' - The names of the fleets to describe.
-describeFleets
-    :: DescribeFleets
-describeFleets = DescribeFleets' {_dfNextToken = Nothing, _dfNames = Nothing}
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
-dfNextToken :: Lens' DescribeFleets (Maybe Text)
-dfNextToken = lens _dfNextToken (\ s a -> s{_dfNextToken = a})
-
--- | The names of the fleets to describe.
-dfNames :: Lens' DescribeFleets [Text]
-dfNames = lens _dfNames (\ s a -> s{_dfNames = a}) . _Default . _Coerce
-
-instance AWSRequest DescribeFleets where
-        type Rs DescribeFleets = DescribeFleetsResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeFleetsResponse' <$>
-                   (x .?> "NextToken") <*> (x .?> "Fleets" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeFleets where
-
-instance NFData DescribeFleets where
-
-instance ToHeaders DescribeFleets where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DescribeFleets" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeFleets where
-        toJSON DescribeFleets'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _dfNextToken,
-                  ("Names" .=) <$> _dfNames])
-
-instance ToPath DescribeFleets where
-        toPath = const "/"
-
-instance ToQuery DescribeFleets where
-        toQuery = const mempty
-
--- | /See:/ 'describeFleetsResponse' smart constructor.
-data DescribeFleetsResponse = DescribeFleetsResponse'
-  { _dfsrsNextToken      :: !(Maybe Text)
-  , _dfsrsFleets         :: !(Maybe [Fleet])
-  , _dfsrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeFleetsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dfsrsNextToken' - The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
---
--- * 'dfsrsFleets' - Information about the fleets.
---
--- * 'dfsrsResponseStatus' - -- | The response status code.
-describeFleetsResponse
-    :: Int -- ^ 'dfsrsResponseStatus'
-    -> DescribeFleetsResponse
-describeFleetsResponse pResponseStatus_ =
-  DescribeFleetsResponse'
-    { _dfsrsNextToken = Nothing
-    , _dfsrsFleets = Nothing
-    , _dfsrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
-dfsrsNextToken :: Lens' DescribeFleetsResponse (Maybe Text)
-dfsrsNextToken = lens _dfsrsNextToken (\ s a -> s{_dfsrsNextToken = a})
-
--- | Information about the fleets.
-dfsrsFleets :: Lens' DescribeFleetsResponse [Fleet]
-dfsrsFleets = lens _dfsrsFleets (\ s a -> s{_dfsrsFleets = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-dfsrsResponseStatus :: Lens' DescribeFleetsResponse Int
-dfsrsResponseStatus = lens _dfsrsResponseStatus (\ s a -> s{_dfsrsResponseStatus = a})
-
-instance NFData DescribeFleetsResponse where
diff --git a/gen/Network/AWS/AppStream/DescribeImageBuilders.hs b/gen/Network/AWS/AppStream/DescribeImageBuilders.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DescribeImageBuilders.hs
+++ /dev/null
@@ -1,166 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DescribeImageBuilders
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified image builders or all image builders in the account.
---
---
-module Network.AWS.AppStream.DescribeImageBuilders
-    (
-    -- * Creating a Request
-      describeImageBuilders
-    , DescribeImageBuilders
-    -- * Request Lenses
-    , dibNextToken
-    , dibNames
-    , dibMaxResults
-
-    -- * Destructuring the Response
-    , describeImageBuildersResponse
-    , DescribeImageBuildersResponse
-    -- * Response Lenses
-    , dibsrsImageBuilders
-    , dibsrsNextToken
-    , dibsrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeImageBuilders' smart constructor.
-data DescribeImageBuilders = DescribeImageBuilders'
-  { _dibNextToken  :: !(Maybe Text)
-  , _dibNames      :: !(Maybe [Text])
-  , _dibMaxResults :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeImageBuilders' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dibNextToken' - The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
---
--- * 'dibNames' - The names of the image builders to describe.
---
--- * 'dibMaxResults' - The maximum size of each page of results.
-describeImageBuilders
-    :: DescribeImageBuilders
-describeImageBuilders =
-  DescribeImageBuilders'
-    {_dibNextToken = Nothing, _dibNames = Nothing, _dibMaxResults = Nothing}
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
-dibNextToken :: Lens' DescribeImageBuilders (Maybe Text)
-dibNextToken = lens _dibNextToken (\ s a -> s{_dibNextToken = a})
-
--- | The names of the image builders to describe.
-dibNames :: Lens' DescribeImageBuilders [Text]
-dibNames = lens _dibNames (\ s a -> s{_dibNames = a}) . _Default . _Coerce
-
--- | The maximum size of each page of results.
-dibMaxResults :: Lens' DescribeImageBuilders (Maybe Int)
-dibMaxResults = lens _dibMaxResults (\ s a -> s{_dibMaxResults = a})
-
-instance AWSRequest DescribeImageBuilders where
-        type Rs DescribeImageBuilders =
-             DescribeImageBuildersResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeImageBuildersResponse' <$>
-                   (x .?> "ImageBuilders" .!@ mempty) <*>
-                     (x .?> "NextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeImageBuilders where
-
-instance NFData DescribeImageBuilders where
-
-instance ToHeaders DescribeImageBuilders where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DescribeImageBuilders" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeImageBuilders where
-        toJSON DescribeImageBuilders'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _dibNextToken,
-                  ("Names" .=) <$> _dibNames,
-                  ("MaxResults" .=) <$> _dibMaxResults])
-
-instance ToPath DescribeImageBuilders where
-        toPath = const "/"
-
-instance ToQuery DescribeImageBuilders where
-        toQuery = const mempty
-
--- | /See:/ 'describeImageBuildersResponse' smart constructor.
-data DescribeImageBuildersResponse = DescribeImageBuildersResponse'
-  { _dibsrsImageBuilders  :: !(Maybe [ImageBuilder])
-  , _dibsrsNextToken      :: !(Maybe Text)
-  , _dibsrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeImageBuildersResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dibsrsImageBuilders' - Information about the image builders.
---
--- * 'dibsrsNextToken' - The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
---
--- * 'dibsrsResponseStatus' - -- | The response status code.
-describeImageBuildersResponse
-    :: Int -- ^ 'dibsrsResponseStatus'
-    -> DescribeImageBuildersResponse
-describeImageBuildersResponse pResponseStatus_ =
-  DescribeImageBuildersResponse'
-    { _dibsrsImageBuilders = Nothing
-    , _dibsrsNextToken = Nothing
-    , _dibsrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Information about the image builders.
-dibsrsImageBuilders :: Lens' DescribeImageBuildersResponse [ImageBuilder]
-dibsrsImageBuilders = lens _dibsrsImageBuilders (\ s a -> s{_dibsrsImageBuilders = a}) . _Default . _Coerce
-
--- | The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
-dibsrsNextToken :: Lens' DescribeImageBuildersResponse (Maybe Text)
-dibsrsNextToken = lens _dibsrsNextToken (\ s a -> s{_dibsrsNextToken = a})
-
--- | -- | The response status code.
-dibsrsResponseStatus :: Lens' DescribeImageBuildersResponse Int
-dibsrsResponseStatus = lens _dibsrsResponseStatus (\ s a -> s{_dibsrsResponseStatus = a})
-
-instance NFData DescribeImageBuildersResponse where
diff --git a/gen/Network/AWS/AppStream/DescribeImages.hs b/gen/Network/AWS/AppStream/DescribeImages.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DescribeImages.hs
+++ /dev/null
@@ -1,130 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DescribeImages
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified images or all images in the account.
---
---
-module Network.AWS.AppStream.DescribeImages
-    (
-    -- * Creating a Request
-      describeImages
-    , DescribeImages
-    -- * Request Lenses
-    , diNames
-
-    -- * Destructuring the Response
-    , describeImagesResponse
-    , DescribeImagesResponse
-    -- * Response Lenses
-    , disrsImages
-    , disrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeImages' smart constructor.
-newtype DescribeImages = DescribeImages'
-  { _diNames :: Maybe [Text]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeImages' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diNames' - The names of the images to describe.
-describeImages
-    :: DescribeImages
-describeImages = DescribeImages' {_diNames = Nothing}
-
-
--- | The names of the images to describe.
-diNames :: Lens' DescribeImages [Text]
-diNames = lens _diNames (\ s a -> s{_diNames = a}) . _Default . _Coerce
-
-instance AWSRequest DescribeImages where
-        type Rs DescribeImages = DescribeImagesResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeImagesResponse' <$>
-                   (x .?> "Images" .!@ mempty) <*> (pure (fromEnum s)))
-
-instance Hashable DescribeImages where
-
-instance NFData DescribeImages where
-
-instance ToHeaders DescribeImages where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DescribeImages" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeImages where
-        toJSON DescribeImages'{..}
-          = object (catMaybes [("Names" .=) <$> _diNames])
-
-instance ToPath DescribeImages where
-        toPath = const "/"
-
-instance ToQuery DescribeImages where
-        toQuery = const mempty
-
--- | /See:/ 'describeImagesResponse' smart constructor.
-data DescribeImagesResponse = DescribeImagesResponse'
-  { _disrsImages         :: !(Maybe [Image])
-  , _disrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeImagesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'disrsImages' - Information about the images.
---
--- * 'disrsResponseStatus' - -- | The response status code.
-describeImagesResponse
-    :: Int -- ^ 'disrsResponseStatus'
-    -> DescribeImagesResponse
-describeImagesResponse pResponseStatus_ =
-  DescribeImagesResponse'
-    {_disrsImages = Nothing, _disrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the images.
-disrsImages :: Lens' DescribeImagesResponse [Image]
-disrsImages = lens _disrsImages (\ s a -> s{_disrsImages = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-disrsResponseStatus :: Lens' DescribeImagesResponse Int
-disrsResponseStatus = lens _disrsResponseStatus (\ s a -> s{_disrsResponseStatus = a})
-
-instance NFData DescribeImagesResponse where
diff --git a/gen/Network/AWS/AppStream/DescribeSessions.hs b/gen/Network/AWS/AppStream/DescribeSessions.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DescribeSessions.hs
+++ /dev/null
@@ -1,199 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DescribeSessions
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the streaming sessions for the specified stack and fleet. If a user ID is provided, only the streaming sessions for only that user are returned. If an authentication type is not provided, the default is to authenticate users using a streaming URL.
---
---
-module Network.AWS.AppStream.DescribeSessions
-    (
-    -- * Creating a Request
-      describeSessions
-    , DescribeSessions
-    -- * Request Lenses
-    , dsUserId
-    , dsNextToken
-    , dsLimit
-    , dsAuthenticationType
-    , dsStackName
-    , dsFleetName
-
-    -- * Destructuring the Response
-    , describeSessionsResponse
-    , DescribeSessionsResponse
-    -- * Response Lenses
-    , dssrsNextToken
-    , dssrsSessions
-    , dssrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeSessions' smart constructor.
-data DescribeSessions = DescribeSessions'
-  { _dsUserId             :: !(Maybe Text)
-  , _dsNextToken          :: !(Maybe Text)
-  , _dsLimit              :: !(Maybe Int)
-  , _dsAuthenticationType :: !(Maybe AuthenticationType)
-  , _dsStackName          :: !Text
-  , _dsFleetName          :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeSessions' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dsUserId' - The user ID.
---
--- * 'dsNextToken' - The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
---
--- * 'dsLimit' - The size of each page of results. The default value is 20 and the maximum value is 50.
---
--- * 'dsAuthenticationType' - The authentication method. Specify @API@ for a user authenticated using a streaming URL or @SAML@ for a SAML federated user. The default is to authenticate users using a streaming URL.
---
--- * 'dsStackName' - The name of the stack. This value is case-sensitive.
---
--- * 'dsFleetName' - The name of the fleet. This value is case-sensitive.
-describeSessions
-    :: Text -- ^ 'dsStackName'
-    -> Text -- ^ 'dsFleetName'
-    -> DescribeSessions
-describeSessions pStackName_ pFleetName_ =
-  DescribeSessions'
-    { _dsUserId = Nothing
-    , _dsNextToken = Nothing
-    , _dsLimit = Nothing
-    , _dsAuthenticationType = Nothing
-    , _dsStackName = pStackName_
-    , _dsFleetName = pFleetName_
-    }
-
-
--- | The user ID.
-dsUserId :: Lens' DescribeSessions (Maybe Text)
-dsUserId = lens _dsUserId (\ s a -> s{_dsUserId = a})
-
--- | The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
-dsNextToken :: Lens' DescribeSessions (Maybe Text)
-dsNextToken = lens _dsNextToken (\ s a -> s{_dsNextToken = a})
-
--- | The size of each page of results. The default value is 20 and the maximum value is 50.
-dsLimit :: Lens' DescribeSessions (Maybe Int)
-dsLimit = lens _dsLimit (\ s a -> s{_dsLimit = a})
-
--- | The authentication method. Specify @API@ for a user authenticated using a streaming URL or @SAML@ for a SAML federated user. The default is to authenticate users using a streaming URL.
-dsAuthenticationType :: Lens' DescribeSessions (Maybe AuthenticationType)
-dsAuthenticationType = lens _dsAuthenticationType (\ s a -> s{_dsAuthenticationType = a})
-
--- | The name of the stack. This value is case-sensitive.
-dsStackName :: Lens' DescribeSessions Text
-dsStackName = lens _dsStackName (\ s a -> s{_dsStackName = a})
-
--- | The name of the fleet. This value is case-sensitive.
-dsFleetName :: Lens' DescribeSessions Text
-dsFleetName = lens _dsFleetName (\ s a -> s{_dsFleetName = a})
-
-instance AWSRequest DescribeSessions where
-        type Rs DescribeSessions = DescribeSessionsResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeSessionsResponse' <$>
-                   (x .?> "NextToken") <*> (x .?> "Sessions" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeSessions where
-
-instance NFData DescribeSessions where
-
-instance ToHeaders DescribeSessions where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DescribeSessions" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeSessions where
-        toJSON DescribeSessions'{..}
-          = object
-              (catMaybes
-                 [("UserId" .=) <$> _dsUserId,
-                  ("NextToken" .=) <$> _dsNextToken,
-                  ("Limit" .=) <$> _dsLimit,
-                  ("AuthenticationType" .=) <$> _dsAuthenticationType,
-                  Just ("StackName" .= _dsStackName),
-                  Just ("FleetName" .= _dsFleetName)])
-
-instance ToPath DescribeSessions where
-        toPath = const "/"
-
-instance ToQuery DescribeSessions where
-        toQuery = const mempty
-
--- | /See:/ 'describeSessionsResponse' smart constructor.
-data DescribeSessionsResponse = DescribeSessionsResponse'
-  { _dssrsNextToken      :: !(Maybe Text)
-  , _dssrsSessions       :: !(Maybe [Session])
-  , _dssrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeSessionsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dssrsNextToken' - The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
---
--- * 'dssrsSessions' - Information about the streaming sessions.
---
--- * 'dssrsResponseStatus' - -- | The response status code.
-describeSessionsResponse
-    :: Int -- ^ 'dssrsResponseStatus'
-    -> DescribeSessionsResponse
-describeSessionsResponse pResponseStatus_ =
-  DescribeSessionsResponse'
-    { _dssrsNextToken = Nothing
-    , _dssrsSessions = Nothing
-    , _dssrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
-dssrsNextToken :: Lens' DescribeSessionsResponse (Maybe Text)
-dssrsNextToken = lens _dssrsNextToken (\ s a -> s{_dssrsNextToken = a})
-
--- | Information about the streaming sessions.
-dssrsSessions :: Lens' DescribeSessionsResponse [Session]
-dssrsSessions = lens _dssrsSessions (\ s a -> s{_dssrsSessions = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-dssrsResponseStatus :: Lens' DescribeSessionsResponse Int
-dssrsResponseStatus = lens _dssrsResponseStatus (\ s a -> s{_dssrsResponseStatus = a})
-
-instance NFData DescribeSessionsResponse where
diff --git a/gen/Network/AWS/AppStream/DescribeStacks.hs b/gen/Network/AWS/AppStream/DescribeStacks.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DescribeStacks.hs
+++ /dev/null
@@ -1,153 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DescribeStacks
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Describes the specified stacks or all stacks in the account.
---
---
-module Network.AWS.AppStream.DescribeStacks
-    (
-    -- * Creating a Request
-      describeStacks
-    , DescribeStacks
-    -- * Request Lenses
-    , dNextToken
-    , dNames
-
-    -- * Destructuring the Response
-    , describeStacksResponse
-    , DescribeStacksResponse
-    -- * Response Lenses
-    , desrsNextToken
-    , desrsStacks
-    , desrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeStacks' smart constructor.
-data DescribeStacks = DescribeStacks'
-  { _dNextToken :: !(Maybe Text)
-  , _dNames     :: !(Maybe [Text])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeStacks' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dNextToken' - The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
---
--- * 'dNames' - The names of the stacks to describe.
-describeStacks
-    :: DescribeStacks
-describeStacks = DescribeStacks' {_dNextToken = Nothing, _dNames = Nothing}
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
-dNextToken :: Lens' DescribeStacks (Maybe Text)
-dNextToken = lens _dNextToken (\ s a -> s{_dNextToken = a})
-
--- | The names of the stacks to describe.
-dNames :: Lens' DescribeStacks [Text]
-dNames = lens _dNames (\ s a -> s{_dNames = a}) . _Default . _Coerce
-
-instance AWSRequest DescribeStacks where
-        type Rs DescribeStacks = DescribeStacksResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeStacksResponse' <$>
-                   (x .?> "NextToken") <*> (x .?> "Stacks" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeStacks where
-
-instance NFData DescribeStacks where
-
-instance ToHeaders DescribeStacks where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DescribeStacks" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeStacks where
-        toJSON DescribeStacks'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _dNextToken,
-                  ("Names" .=) <$> _dNames])
-
-instance ToPath DescribeStacks where
-        toPath = const "/"
-
-instance ToQuery DescribeStacks where
-        toQuery = const mempty
-
--- | /See:/ 'describeStacksResponse' smart constructor.
-data DescribeStacksResponse = DescribeStacksResponse'
-  { _desrsNextToken      :: !(Maybe Text)
-  , _desrsStacks         :: !(Maybe [Stack])
-  , _desrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeStacksResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'desrsNextToken' - The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
---
--- * 'desrsStacks' - Information about the stacks.
---
--- * 'desrsResponseStatus' - -- | The response status code.
-describeStacksResponse
-    :: Int -- ^ 'desrsResponseStatus'
-    -> DescribeStacksResponse
-describeStacksResponse pResponseStatus_ =
-  DescribeStacksResponse'
-    { _desrsNextToken = Nothing
-    , _desrsStacks = Nothing
-    , _desrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
-desrsNextToken :: Lens' DescribeStacksResponse (Maybe Text)
-desrsNextToken = lens _desrsNextToken (\ s a -> s{_desrsNextToken = a})
-
--- | Information about the stacks.
-desrsStacks :: Lens' DescribeStacksResponse [Stack]
-desrsStacks = lens _desrsStacks (\ s a -> s{_desrsStacks = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-desrsResponseStatus :: Lens' DescribeStacksResponse Int
-desrsResponseStatus = lens _desrsResponseStatus (\ s a -> s{_desrsResponseStatus = a})
-
-instance NFData DescribeStacksResponse where
diff --git a/gen/Network/AWS/AppStream/DisassociateFleet.hs b/gen/Network/AWS/AppStream/DisassociateFleet.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/DisassociateFleet.hs
+++ /dev/null
@@ -1,134 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.DisassociateFleet
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disassociates the specified fleet from the specified stack.
---
---
-module Network.AWS.AppStream.DisassociateFleet
-    (
-    -- * Creating a Request
-      disassociateFleet
-    , DisassociateFleet
-    -- * Request Lenses
-    , dfFleetName
-    , dfStackName
-
-    -- * Destructuring the Response
-    , disassociateFleetResponse
-    , DisassociateFleetResponse
-    -- * Response Lenses
-    , drsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'disassociateFleet' smart constructor.
-data DisassociateFleet = DisassociateFleet'
-  { _dfFleetName :: !Text
-  , _dfStackName :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateFleet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dfFleetName' - The name of the fleet.
---
--- * 'dfStackName' - The name of the stack.
-disassociateFleet
-    :: Text -- ^ 'dfFleetName'
-    -> Text -- ^ 'dfStackName'
-    -> DisassociateFleet
-disassociateFleet pFleetName_ pStackName_ =
-  DisassociateFleet' {_dfFleetName = pFleetName_, _dfStackName = pStackName_}
-
-
--- | The name of the fleet.
-dfFleetName :: Lens' DisassociateFleet Text
-dfFleetName = lens _dfFleetName (\ s a -> s{_dfFleetName = a})
-
--- | The name of the stack.
-dfStackName :: Lens' DisassociateFleet Text
-dfStackName = lens _dfStackName (\ s a -> s{_dfStackName = a})
-
-instance AWSRequest DisassociateFleet where
-        type Rs DisassociateFleet = DisassociateFleetResponse
-        request = postJSON appStream
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DisassociateFleetResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DisassociateFleet where
-
-instance NFData DisassociateFleet where
-
-instance ToHeaders DisassociateFleet where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.DisassociateFleet" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DisassociateFleet where
-        toJSON DisassociateFleet'{..}
-          = object
-              (catMaybes
-                 [Just ("FleetName" .= _dfFleetName),
-                  Just ("StackName" .= _dfStackName)])
-
-instance ToPath DisassociateFleet where
-        toPath = const "/"
-
-instance ToQuery DisassociateFleet where
-        toQuery = const mempty
-
--- | /See:/ 'disassociateFleetResponse' smart constructor.
-newtype DisassociateFleetResponse = DisassociateFleetResponse'
-  { _drsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateFleetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drsResponseStatus' - -- | The response status code.
-disassociateFleetResponse
-    :: Int -- ^ 'drsResponseStatus'
-    -> DisassociateFleetResponse
-disassociateFleetResponse pResponseStatus_ =
-  DisassociateFleetResponse' {_drsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-drsResponseStatus :: Lens' DisassociateFleetResponse Int
-drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a})
-
-instance NFData DisassociateFleetResponse where
diff --git a/gen/Network/AWS/AppStream/ExpireSession.hs b/gen/Network/AWS/AppStream/ExpireSession.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/ExpireSession.hs
+++ /dev/null
@@ -1,122 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.ExpireSession
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Stops the specified streaming session.
---
---
-module Network.AWS.AppStream.ExpireSession
-    (
-    -- * Creating a Request
-      expireSession
-    , ExpireSession
-    -- * Request Lenses
-    , esSessionId
-
-    -- * Destructuring the Response
-    , expireSessionResponse
-    , ExpireSessionResponse
-    -- * Response Lenses
-    , esrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'expireSession' smart constructor.
-newtype ExpireSession = ExpireSession'
-  { _esSessionId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExpireSession' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'esSessionId' - The ID of the streaming session.
-expireSession
-    :: Text -- ^ 'esSessionId'
-    -> ExpireSession
-expireSession pSessionId_ = ExpireSession' {_esSessionId = pSessionId_}
-
-
--- | The ID of the streaming session.
-esSessionId :: Lens' ExpireSession Text
-esSessionId = lens _esSessionId (\ s a -> s{_esSessionId = a})
-
-instance AWSRequest ExpireSession where
-        type Rs ExpireSession = ExpireSessionResponse
-        request = postJSON appStream
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 ExpireSessionResponse' <$> (pure (fromEnum s)))
-
-instance Hashable ExpireSession where
-
-instance NFData ExpireSession where
-
-instance ToHeaders ExpireSession where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.ExpireSession" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ExpireSession where
-        toJSON ExpireSession'{..}
-          = object
-              (catMaybes [Just ("SessionId" .= _esSessionId)])
-
-instance ToPath ExpireSession where
-        toPath = const "/"
-
-instance ToQuery ExpireSession where
-        toQuery = const mempty
-
--- | /See:/ 'expireSessionResponse' smart constructor.
-newtype ExpireSessionResponse = ExpireSessionResponse'
-  { _esrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ExpireSessionResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'esrsResponseStatus' - -- | The response status code.
-expireSessionResponse
-    :: Int -- ^ 'esrsResponseStatus'
-    -> ExpireSessionResponse
-expireSessionResponse pResponseStatus_ =
-  ExpireSessionResponse' {_esrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-esrsResponseStatus :: Lens' ExpireSessionResponse Int
-esrsResponseStatus = lens _esrsResponseStatus (\ s a -> s{_esrsResponseStatus = a})
-
-instance NFData ExpireSessionResponse where
diff --git a/gen/Network/AWS/AppStream/ListAssociatedFleets.hs b/gen/Network/AWS/AppStream/ListAssociatedFleets.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/ListAssociatedFleets.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.ListAssociatedFleets
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the fleets associated with the specified stack.
---
---
-module Network.AWS.AppStream.ListAssociatedFleets
-    (
-    -- * Creating a Request
-      listAssociatedFleets
-    , ListAssociatedFleets
-    -- * Request Lenses
-    , lafNextToken
-    , lafStackName
-
-    -- * Destructuring the Response
-    , listAssociatedFleetsResponse
-    , ListAssociatedFleetsResponse
-    -- * Response Lenses
-    , lafrsNextToken
-    , lafrsNames
-    , lafrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'listAssociatedFleets' smart constructor.
-data ListAssociatedFleets = ListAssociatedFleets'
-  { _lafNextToken :: !(Maybe Text)
-  , _lafStackName :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListAssociatedFleets' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lafNextToken' - The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
---
--- * 'lafStackName' - The name of the stack.
-listAssociatedFleets
-    :: Text -- ^ 'lafStackName'
-    -> ListAssociatedFleets
-listAssociatedFleets pStackName_ =
-  ListAssociatedFleets' {_lafNextToken = Nothing, _lafStackName = pStackName_}
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
-lafNextToken :: Lens' ListAssociatedFleets (Maybe Text)
-lafNextToken = lens _lafNextToken (\ s a -> s{_lafNextToken = a})
-
--- | The name of the stack.
-lafStackName :: Lens' ListAssociatedFleets Text
-lafStackName = lens _lafStackName (\ s a -> s{_lafStackName = a})
-
-instance AWSRequest ListAssociatedFleets where
-        type Rs ListAssociatedFleets =
-             ListAssociatedFleetsResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListAssociatedFleetsResponse' <$>
-                   (x .?> "NextToken") <*> (x .?> "Names" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListAssociatedFleets where
-
-instance NFData ListAssociatedFleets where
-
-instance ToHeaders ListAssociatedFleets where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.ListAssociatedFleets" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListAssociatedFleets where
-        toJSON ListAssociatedFleets'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _lafNextToken,
-                  Just ("StackName" .= _lafStackName)])
-
-instance ToPath ListAssociatedFleets where
-        toPath = const "/"
-
-instance ToQuery ListAssociatedFleets where
-        toQuery = const mempty
-
--- | /See:/ 'listAssociatedFleetsResponse' smart constructor.
-data ListAssociatedFleetsResponse = ListAssociatedFleetsResponse'
-  { _lafrsNextToken      :: !(Maybe Text)
-  , _lafrsNames          :: !(Maybe [Text])
-  , _lafrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListAssociatedFleetsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lafrsNextToken' - The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
---
--- * 'lafrsNames' - The names of the fleets.
---
--- * 'lafrsResponseStatus' - -- | The response status code.
-listAssociatedFleetsResponse
-    :: Int -- ^ 'lafrsResponseStatus'
-    -> ListAssociatedFleetsResponse
-listAssociatedFleetsResponse pResponseStatus_ =
-  ListAssociatedFleetsResponse'
-    { _lafrsNextToken = Nothing
-    , _lafrsNames = Nothing
-    , _lafrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
-lafrsNextToken :: Lens' ListAssociatedFleetsResponse (Maybe Text)
-lafrsNextToken = lens _lafrsNextToken (\ s a -> s{_lafrsNextToken = a})
-
--- | The names of the fleets.
-lafrsNames :: Lens' ListAssociatedFleetsResponse [Text]
-lafrsNames = lens _lafrsNames (\ s a -> s{_lafrsNames = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-lafrsResponseStatus :: Lens' ListAssociatedFleetsResponse Int
-lafrsResponseStatus = lens _lafrsResponseStatus (\ s a -> s{_lafrsResponseStatus = a})
-
-instance NFData ListAssociatedFleetsResponse where
diff --git a/gen/Network/AWS/AppStream/ListAssociatedStacks.hs b/gen/Network/AWS/AppStream/ListAssociatedStacks.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/ListAssociatedStacks.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.ListAssociatedStacks
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the stacks associated with the specified fleet.
---
---
-module Network.AWS.AppStream.ListAssociatedStacks
-    (
-    -- * Creating a Request
-      listAssociatedStacks
-    , ListAssociatedStacks
-    -- * Request Lenses
-    , lasNextToken
-    , lasFleetName
-
-    -- * Destructuring the Response
-    , listAssociatedStacksResponse
-    , ListAssociatedStacksResponse
-    -- * Response Lenses
-    , lasrsNextToken
-    , lasrsNames
-    , lasrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'listAssociatedStacks' smart constructor.
-data ListAssociatedStacks = ListAssociatedStacks'
-  { _lasNextToken :: !(Maybe Text)
-  , _lasFleetName :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListAssociatedStacks' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lasNextToken' - The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
---
--- * 'lasFleetName' - The name of the fleet.
-listAssociatedStacks
-    :: Text -- ^ 'lasFleetName'
-    -> ListAssociatedStacks
-listAssociatedStacks pFleetName_ =
-  ListAssociatedStacks' {_lasNextToken = Nothing, _lasFleetName = pFleetName_}
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If this value is null, it retrieves the first page.
-lasNextToken :: Lens' ListAssociatedStacks (Maybe Text)
-lasNextToken = lens _lasNextToken (\ s a -> s{_lasNextToken = a})
-
--- | The name of the fleet.
-lasFleetName :: Lens' ListAssociatedStacks Text
-lasFleetName = lens _lasFleetName (\ s a -> s{_lasFleetName = a})
-
-instance AWSRequest ListAssociatedStacks where
-        type Rs ListAssociatedStacks =
-             ListAssociatedStacksResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListAssociatedStacksResponse' <$>
-                   (x .?> "NextToken") <*> (x .?> "Names" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListAssociatedStacks where
-
-instance NFData ListAssociatedStacks where
-
-instance ToHeaders ListAssociatedStacks where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.ListAssociatedStacks" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListAssociatedStacks where
-        toJSON ListAssociatedStacks'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _lasNextToken,
-                  Just ("FleetName" .= _lasFleetName)])
-
-instance ToPath ListAssociatedStacks where
-        toPath = const "/"
-
-instance ToQuery ListAssociatedStacks where
-        toQuery = const mempty
-
--- | /See:/ 'listAssociatedStacksResponse' smart constructor.
-data ListAssociatedStacksResponse = ListAssociatedStacksResponse'
-  { _lasrsNextToken      :: !(Maybe Text)
-  , _lasrsNames          :: !(Maybe [Text])
-  , _lasrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListAssociatedStacksResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lasrsNextToken' - The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
---
--- * 'lasrsNames' - The names of the stacks.
---
--- * 'lasrsResponseStatus' - -- | The response status code.
-listAssociatedStacksResponse
-    :: Int -- ^ 'lasrsResponseStatus'
-    -> ListAssociatedStacksResponse
-listAssociatedStacksResponse pResponseStatus_ =
-  ListAssociatedStacksResponse'
-    { _lasrsNextToken = Nothing
-    , _lasrsNames = Nothing
-    , _lasrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The pagination token to use to retrieve the next page of results for this operation. If there are no more pages, this value is null.
-lasrsNextToken :: Lens' ListAssociatedStacksResponse (Maybe Text)
-lasrsNextToken = lens _lasrsNextToken (\ s a -> s{_lasrsNextToken = a})
-
--- | The names of the stacks.
-lasrsNames :: Lens' ListAssociatedStacksResponse [Text]
-lasrsNames = lens _lasrsNames (\ s a -> s{_lasrsNames = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-lasrsResponseStatus :: Lens' ListAssociatedStacksResponse Int
-lasrsResponseStatus = lens _lasrsResponseStatus (\ s a -> s{_lasrsResponseStatus = a})
-
-instance NFData ListAssociatedStacksResponse where
diff --git a/gen/Network/AWS/AppStream/ListTagsForResource.hs b/gen/Network/AWS/AppStream/ListTagsForResource.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/ListTagsForResource.hs
+++ /dev/null
@@ -1,137 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.ListTagsForResource
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Lists the tags for the specified AppStream 2.0 resource. You can tag AppStream 2.0 image builders, images, fleets, and stacks.
---
---
--- For more information about tags, see <http://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources> in the /Amazon AppStream 2.0 Developer Guide/ .
---
-module Network.AWS.AppStream.ListTagsForResource
-    (
-    -- * Creating a Request
-      listTagsForResource
-    , ListTagsForResource
-    -- * Request Lenses
-    , ltfrResourceARN
-
-    -- * Destructuring the Response
-    , listTagsForResourceResponse
-    , ListTagsForResourceResponse
-    -- * Response Lenses
-    , ltfrrsTags
-    , ltfrrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'listTagsForResource' smart constructor.
-newtype ListTagsForResource = ListTagsForResource'
-  { _ltfrResourceARN :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListTagsForResource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ltfrResourceARN' - The Amazon Resource Name (ARN) of the resource.
-listTagsForResource
-    :: Text -- ^ 'ltfrResourceARN'
-    -> ListTagsForResource
-listTagsForResource pResourceARN_ =
-  ListTagsForResource' {_ltfrResourceARN = pResourceARN_}
-
-
--- | The Amazon Resource Name (ARN) of the resource.
-ltfrResourceARN :: Lens' ListTagsForResource Text
-ltfrResourceARN = lens _ltfrResourceARN (\ s a -> s{_ltfrResourceARN = a})
-
-instance AWSRequest ListTagsForResource where
-        type Rs ListTagsForResource =
-             ListTagsForResourceResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListTagsForResourceResponse' <$>
-                   (x .?> "Tags" .!@ mempty) <*> (pure (fromEnum s)))
-
-instance Hashable ListTagsForResource where
-
-instance NFData ListTagsForResource where
-
-instance ToHeaders ListTagsForResource where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.ListTagsForResource" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListTagsForResource where
-        toJSON ListTagsForResource'{..}
-          = object
-              (catMaybes
-                 [Just ("ResourceArn" .= _ltfrResourceARN)])
-
-instance ToPath ListTagsForResource where
-        toPath = const "/"
-
-instance ToQuery ListTagsForResource where
-        toQuery = const mempty
-
--- | /See:/ 'listTagsForResourceResponse' smart constructor.
-data ListTagsForResourceResponse = ListTagsForResourceResponse'
-  { _ltfrrsTags           :: !(Maybe (Map Text Text))
-  , _ltfrrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListTagsForResourceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ltfrrsTags' - The information about the tags.
---
--- * 'ltfrrsResponseStatus' - -- | The response status code.
-listTagsForResourceResponse
-    :: Int -- ^ 'ltfrrsResponseStatus'
-    -> ListTagsForResourceResponse
-listTagsForResourceResponse pResponseStatus_ =
-  ListTagsForResourceResponse'
-    {_ltfrrsTags = Nothing, _ltfrrsResponseStatus = pResponseStatus_}
-
-
--- | The information about the tags.
-ltfrrsTags :: Lens' ListTagsForResourceResponse (HashMap Text Text)
-ltfrrsTags = lens _ltfrrsTags (\ s a -> s{_ltfrrsTags = a}) . _Default . _Map
-
--- | -- | The response status code.
-ltfrrsResponseStatus :: Lens' ListTagsForResourceResponse Int
-ltfrrsResponseStatus = lens _ltfrrsResponseStatus (\ s a -> s{_ltfrrsResponseStatus = a})
-
-instance NFData ListTagsForResourceResponse where
diff --git a/gen/Network/AWS/AppStream/StartFleet.hs b/gen/Network/AWS/AppStream/StartFleet.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/StartFleet.hs
+++ /dev/null
@@ -1,120 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.StartFleet
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Starts the specified fleet.
---
---
-module Network.AWS.AppStream.StartFleet
-    (
-    -- * Creating a Request
-      startFleet
-    , StartFleet
-    -- * Request Lenses
-    , staName
-
-    -- * Destructuring the Response
-    , startFleetResponse
-    , StartFleetResponse
-    -- * Response Lenses
-    , sfrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'startFleet' smart constructor.
-newtype StartFleet = StartFleet'
-  { _staName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartFleet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'staName' - The name of the fleet.
-startFleet
-    :: Text -- ^ 'staName'
-    -> StartFleet
-startFleet pName_ = StartFleet' {_staName = pName_}
-
-
--- | The name of the fleet.
-staName :: Lens' StartFleet Text
-staName = lens _staName (\ s a -> s{_staName = a})
-
-instance AWSRequest StartFleet where
-        type Rs StartFleet = StartFleetResponse
-        request = postJSON appStream
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 StartFleetResponse' <$> (pure (fromEnum s)))
-
-instance Hashable StartFleet where
-
-instance NFData StartFleet where
-
-instance ToHeaders StartFleet where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.StartFleet" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON StartFleet where
-        toJSON StartFleet'{..}
-          = object (catMaybes [Just ("Name" .= _staName)])
-
-instance ToPath StartFleet where
-        toPath = const "/"
-
-instance ToQuery StartFleet where
-        toQuery = const mempty
-
--- | /See:/ 'startFleetResponse' smart constructor.
-newtype StartFleetResponse = StartFleetResponse'
-  { _sfrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartFleetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfrsResponseStatus' - -- | The response status code.
-startFleetResponse
-    :: Int -- ^ 'sfrsResponseStatus'
-    -> StartFleetResponse
-startFleetResponse pResponseStatus_ =
-  StartFleetResponse' {_sfrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-sfrsResponseStatus :: Lens' StartFleetResponse Int
-sfrsResponseStatus = lens _sfrsResponseStatus (\ s a -> s{_sfrsResponseStatus = a})
-
-instance NFData StartFleetResponse where
diff --git a/gen/Network/AWS/AppStream/StartImageBuilder.hs b/gen/Network/AWS/AppStream/StartImageBuilder.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/StartImageBuilder.hs
+++ /dev/null
@@ -1,144 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.StartImageBuilder
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Starts the specified image builder.
---
---
-module Network.AWS.AppStream.StartImageBuilder
-    (
-    -- * Creating a Request
-      startImageBuilder
-    , StartImageBuilder
-    -- * Request Lenses
-    , sibAppstreamAgentVersion
-    , sibName
-
-    -- * Destructuring the Response
-    , startImageBuilderResponse
-    , StartImageBuilderResponse
-    -- * Response Lenses
-    , srsImageBuilder
-    , srsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'startImageBuilder' smart constructor.
-data StartImageBuilder = StartImageBuilder'
-  { _sibAppstreamAgentVersion :: !(Maybe Text)
-  , _sibName                  :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartImageBuilder' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sibAppstreamAgentVersion' - The version of the AppStream 2.0 agent to use for this image builder. To use the latest version of the AppStream 2.0 agent, specify [LATEST].
---
--- * 'sibName' - The name of the image builder.
-startImageBuilder
-    :: Text -- ^ 'sibName'
-    -> StartImageBuilder
-startImageBuilder pName_ =
-  StartImageBuilder' {_sibAppstreamAgentVersion = Nothing, _sibName = pName_}
-
-
--- | The version of the AppStream 2.0 agent to use for this image builder. To use the latest version of the AppStream 2.0 agent, specify [LATEST].
-sibAppstreamAgentVersion :: Lens' StartImageBuilder (Maybe Text)
-sibAppstreamAgentVersion = lens _sibAppstreamAgentVersion (\ s a -> s{_sibAppstreamAgentVersion = a})
-
--- | The name of the image builder.
-sibName :: Lens' StartImageBuilder Text
-sibName = lens _sibName (\ s a -> s{_sibName = a})
-
-instance AWSRequest StartImageBuilder where
-        type Rs StartImageBuilder = StartImageBuilderResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 StartImageBuilderResponse' <$>
-                   (x .?> "ImageBuilder") <*> (pure (fromEnum s)))
-
-instance Hashable StartImageBuilder where
-
-instance NFData StartImageBuilder where
-
-instance ToHeaders StartImageBuilder where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.StartImageBuilder" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON StartImageBuilder where
-        toJSON StartImageBuilder'{..}
-          = object
-              (catMaybes
-                 [("AppstreamAgentVersion" .=) <$>
-                    _sibAppstreamAgentVersion,
-                  Just ("Name" .= _sibName)])
-
-instance ToPath StartImageBuilder where
-        toPath = const "/"
-
-instance ToQuery StartImageBuilder where
-        toQuery = const mempty
-
--- | /See:/ 'startImageBuilderResponse' smart constructor.
-data StartImageBuilderResponse = StartImageBuilderResponse'
-  { _srsImageBuilder   :: !(Maybe ImageBuilder)
-  , _srsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartImageBuilderResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srsImageBuilder' - Information about the image builder.
---
--- * 'srsResponseStatus' - -- | The response status code.
-startImageBuilderResponse
-    :: Int -- ^ 'srsResponseStatus'
-    -> StartImageBuilderResponse
-startImageBuilderResponse pResponseStatus_ =
-  StartImageBuilderResponse'
-    {_srsImageBuilder = Nothing, _srsResponseStatus = pResponseStatus_}
-
-
--- | Information about the image builder.
-srsImageBuilder :: Lens' StartImageBuilderResponse (Maybe ImageBuilder)
-srsImageBuilder = lens _srsImageBuilder (\ s a -> s{_srsImageBuilder = a})
-
--- | -- | The response status code.
-srsResponseStatus :: Lens' StartImageBuilderResponse Int
-srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a})
-
-instance NFData StartImageBuilderResponse where
diff --git a/gen/Network/AWS/AppStream/StopFleet.hs b/gen/Network/AWS/AppStream/StopFleet.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/StopFleet.hs
+++ /dev/null
@@ -1,120 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.StopFleet
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Stops the specified fleet.
---
---
-module Network.AWS.AppStream.StopFleet
-    (
-    -- * Creating a Request
-      stopFleet
-    , StopFleet
-    -- * Request Lenses
-    , sfName
-
-    -- * Destructuring the Response
-    , stopFleetResponse
-    , StopFleetResponse
-    -- * Response Lenses
-    , storsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'stopFleet' smart constructor.
-newtype StopFleet = StopFleet'
-  { _sfName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StopFleet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sfName' - The name of the fleet.
-stopFleet
-    :: Text -- ^ 'sfName'
-    -> StopFleet
-stopFleet pName_ = StopFleet' {_sfName = pName_}
-
-
--- | The name of the fleet.
-sfName :: Lens' StopFleet Text
-sfName = lens _sfName (\ s a -> s{_sfName = a})
-
-instance AWSRequest StopFleet where
-        type Rs StopFleet = StopFleetResponse
-        request = postJSON appStream
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 StopFleetResponse' <$> (pure (fromEnum s)))
-
-instance Hashable StopFleet where
-
-instance NFData StopFleet where
-
-instance ToHeaders StopFleet where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.StopFleet" :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON StopFleet where
-        toJSON StopFleet'{..}
-          = object (catMaybes [Just ("Name" .= _sfName)])
-
-instance ToPath StopFleet where
-        toPath = const "/"
-
-instance ToQuery StopFleet where
-        toQuery = const mempty
-
--- | /See:/ 'stopFleetResponse' smart constructor.
-newtype StopFleetResponse = StopFleetResponse'
-  { _storsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StopFleetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'storsResponseStatus' - -- | The response status code.
-stopFleetResponse
-    :: Int -- ^ 'storsResponseStatus'
-    -> StopFleetResponse
-stopFleetResponse pResponseStatus_ =
-  StopFleetResponse' {_storsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-storsResponseStatus :: Lens' StopFleetResponse Int
-storsResponseStatus = lens _storsResponseStatus (\ s a -> s{_storsResponseStatus = a})
-
-instance NFData StopFleetResponse where
diff --git a/gen/Network/AWS/AppStream/StopImageBuilder.hs b/gen/Network/AWS/AppStream/StopImageBuilder.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/StopImageBuilder.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.StopImageBuilder
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Stops the specified image builder.
---
---
-module Network.AWS.AppStream.StopImageBuilder
-    (
-    -- * Creating a Request
-      stopImageBuilder
-    , StopImageBuilder
-    -- * Request Lenses
-    , stoName
-
-    -- * Destructuring the Response
-    , stopImageBuilderResponse
-    , StopImageBuilderResponse
-    -- * Response Lenses
-    , sibrsImageBuilder
-    , sibrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'stopImageBuilder' smart constructor.
-newtype StopImageBuilder = StopImageBuilder'
-  { _stoName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StopImageBuilder' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'stoName' - The name of the image builder.
-stopImageBuilder
-    :: Text -- ^ 'stoName'
-    -> StopImageBuilder
-stopImageBuilder pName_ = StopImageBuilder' {_stoName = pName_}
-
-
--- | The name of the image builder.
-stoName :: Lens' StopImageBuilder Text
-stoName = lens _stoName (\ s a -> s{_stoName = a})
-
-instance AWSRequest StopImageBuilder where
-        type Rs StopImageBuilder = StopImageBuilderResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 StopImageBuilderResponse' <$>
-                   (x .?> "ImageBuilder") <*> (pure (fromEnum s)))
-
-instance Hashable StopImageBuilder where
-
-instance NFData StopImageBuilder where
-
-instance ToHeaders StopImageBuilder where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.StopImageBuilder" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON StopImageBuilder where
-        toJSON StopImageBuilder'{..}
-          = object (catMaybes [Just ("Name" .= _stoName)])
-
-instance ToPath StopImageBuilder where
-        toPath = const "/"
-
-instance ToQuery StopImageBuilder where
-        toQuery = const mempty
-
--- | /See:/ 'stopImageBuilderResponse' smart constructor.
-data StopImageBuilderResponse = StopImageBuilderResponse'
-  { _sibrsImageBuilder   :: !(Maybe ImageBuilder)
-  , _sibrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StopImageBuilderResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sibrsImageBuilder' - Information about the image builder.
---
--- * 'sibrsResponseStatus' - -- | The response status code.
-stopImageBuilderResponse
-    :: Int -- ^ 'sibrsResponseStatus'
-    -> StopImageBuilderResponse
-stopImageBuilderResponse pResponseStatus_ =
-  StopImageBuilderResponse'
-    {_sibrsImageBuilder = Nothing, _sibrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the image builder.
-sibrsImageBuilder :: Lens' StopImageBuilderResponse (Maybe ImageBuilder)
-sibrsImageBuilder = lens _sibrsImageBuilder (\ s a -> s{_sibrsImageBuilder = a})
-
--- | -- | The response status code.
-sibrsResponseStatus :: Lens' StopImageBuilderResponse Int
-sibrsResponseStatus = lens _sibrsResponseStatus (\ s a -> s{_sibrsResponseStatus = a})
-
-instance NFData StopImageBuilderResponse where
diff --git a/gen/Network/AWS/AppStream/TagResource.hs b/gen/Network/AWS/AppStream/TagResource.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/TagResource.hs
+++ /dev/null
@@ -1,139 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.TagResource
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Adds or overwrites one or more tags for the specified AppStream 2.0 resource. You can tag AppStream 2.0 image builders, images, fleets, and stacks.
---
---
--- Each tag consists of a key and an optional value. If a resource already has a tag with the same key, this operation updates its value.
---
--- To list the current tags for your resources, use 'ListTagsForResource' . To disassociate tags from your resources, use 'UntagResource' .
---
--- For more information about tags, see <http://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources> in the /Amazon AppStream 2.0 Developer Guide/ .
---
-module Network.AWS.AppStream.TagResource
-    (
-    -- * Creating a Request
-      tagResource
-    , TagResource
-    -- * Request Lenses
-    , trResourceARN
-    , trTags
-
-    -- * Destructuring the Response
-    , tagResourceResponse
-    , TagResourceResponse
-    -- * Response Lenses
-    , trrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'tagResource' smart constructor.
-data TagResource = TagResource'
-  { _trResourceARN :: !Text
-  , _trTags        :: !(Map Text Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TagResource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trResourceARN' - The Amazon Resource Name (ARN) of the resource.
---
--- * 'trTags' - The tags to associate. A tag is a key-value pair (the value is optional). For example, @Environment=Test@ , or, if you do not specify a value, @Environment=@ .  If you do not specify a value, we set the value to an empty string.
-tagResource
-    :: Text -- ^ 'trResourceARN'
-    -> TagResource
-tagResource pResourceARN_ =
-  TagResource' {_trResourceARN = pResourceARN_, _trTags = mempty}
-
-
--- | The Amazon Resource Name (ARN) of the resource.
-trResourceARN :: Lens' TagResource Text
-trResourceARN = lens _trResourceARN (\ s a -> s{_trResourceARN = a})
-
--- | The tags to associate. A tag is a key-value pair (the value is optional). For example, @Environment=Test@ , or, if you do not specify a value, @Environment=@ .  If you do not specify a value, we set the value to an empty string.
-trTags :: Lens' TagResource (HashMap Text Text)
-trTags = lens _trTags (\ s a -> s{_trTags = a}) . _Map
-
-instance AWSRequest TagResource where
-        type Rs TagResource = TagResourceResponse
-        request = postJSON appStream
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 TagResourceResponse' <$> (pure (fromEnum s)))
-
-instance Hashable TagResource where
-
-instance NFData TagResource where
-
-instance ToHeaders TagResource where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.TagResource" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON TagResource where
-        toJSON TagResource'{..}
-          = object
-              (catMaybes
-                 [Just ("ResourceArn" .= _trResourceARN),
-                  Just ("Tags" .= _trTags)])
-
-instance ToPath TagResource where
-        toPath = const "/"
-
-instance ToQuery TagResource where
-        toQuery = const mempty
-
--- | /See:/ 'tagResourceResponse' smart constructor.
-newtype TagResourceResponse = TagResourceResponse'
-  { _trrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'TagResourceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'trrsResponseStatus' - -- | The response status code.
-tagResourceResponse
-    :: Int -- ^ 'trrsResponseStatus'
-    -> TagResourceResponse
-tagResourceResponse pResponseStatus_ =
-  TagResourceResponse' {_trrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-trrsResponseStatus :: Lens' TagResourceResponse Int
-trrsResponseStatus = lens _trrsResponseStatus (\ s a -> s{_trrsResponseStatus = a})
-
-instance NFData TagResourceResponse where
diff --git a/gen/Network/AWS/AppStream/Types.hs b/gen/Network/AWS/AppStream/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/Types.hs
+++ /dev/null
@@ -1,372 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.Types
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.AppStream.Types
-    (
-    -- * Service Configuration
-      appStream
-
-    -- * Errors
-    , _InvalidRoleException
-    , _ResourceAlreadyExistsException
-    , _IncompatibleImageException
-    , _ConcurrentModificationException
-    , _OperationNotPermittedException
-    , _InvalidAccountStatusException
-    , _ResourceNotFoundException
-    , _InvalidParameterCombinationException
-    , _ResourceNotAvailableException
-    , _LimitExceededException
-    , _ResourceInUseException
-
-    -- * AuthenticationType
-    , AuthenticationType (..)
-
-    -- * FleetAttribute
-    , FleetAttribute (..)
-
-    -- * FleetErrorCode
-    , FleetErrorCode (..)
-
-    -- * FleetState
-    , FleetState (..)
-
-    -- * FleetType
-    , FleetType (..)
-
-    -- * ImageBuilderState
-    , ImageBuilderState (..)
-
-    -- * ImageBuilderStateChangeReasonCode
-    , ImageBuilderStateChangeReasonCode (..)
-
-    -- * ImageState
-    , ImageState (..)
-
-    -- * ImageStateChangeReasonCode
-    , ImageStateChangeReasonCode (..)
-
-    -- * PlatformType
-    , PlatformType (..)
-
-    -- * SessionState
-    , SessionState (..)
-
-    -- * StackAttribute
-    , StackAttribute (..)
-
-    -- * StackErrorCode
-    , StackErrorCode (..)
-
-    -- * StorageConnectorType
-    , StorageConnectorType (..)
-
-    -- * VisibilityType
-    , VisibilityType (..)
-
-    -- * Application
-    , Application
-    , application
-    , aEnabled
-    , aLaunchPath
-    , aLaunchParameters
-    , aName
-    , aDisplayName
-    , aMetadata
-    , aIconURL
-
-    -- * ComputeCapacity
-    , ComputeCapacity
-    , computeCapacity
-    , ccDesiredInstances
-
-    -- * ComputeCapacityStatus
-    , ComputeCapacityStatus
-    , computeCapacityStatus
-    , ccsInUse
-    , ccsRunning
-    , ccsAvailable
-    , ccsDesired
-
-    -- * DirectoryConfig
-    , DirectoryConfig
-    , directoryConfig
-    , dcCreatedTime
-    , dcServiceAccountCredentials
-    , dcOrganizationalUnitDistinguishedNames
-    , dcDirectoryName
-
-    -- * DomainJoinInfo
-    , DomainJoinInfo
-    , domainJoinInfo
-    , djiOrganizationalUnitDistinguishedName
-    , djiDirectoryName
-
-    -- * Fleet
-    , Fleet
-    , fleet
-    , fDomainJoinInfo
-    , fDisconnectTimeoutInSeconds
-    , fMaxUserDurationInSeconds
-    , fCreatedTime
-    , fFleetType
-    , fVPCConfig
-    , fFleetErrors
-    , fDisplayName
-    , fEnableDefaultInternetAccess
-    , fDescription
-    , fARN
-    , fName
-    , fImageName
-    , fInstanceType
-    , fComputeCapacityStatus
-    , fState
-
-    -- * FleetError
-    , FleetError
-    , fleetError
-    , feErrorCode
-    , feErrorMessage
-
-    -- * Image
-    , Image
-    , image
-    , iState
-    , iPlatform
-    , iPublicBaseImageReleasedDate
-    , iStateChangeReason
-    , iARN
-    , iCreatedTime
-    , iImageBuilderSupported
-    , iVisibility
-    , iBaseImageARN
-    , iDisplayName
-    , iDescription
-    , iAppstreamAgentVersion
-    , iApplications
-    , iName
-
-    -- * ImageBuilder
-    , ImageBuilder
-    , imageBuilder
-    , ibDomainJoinInfo
-    , ibState
-    , ibPlatform
-    , ibStateChangeReason
-    , ibARN
-    , ibCreatedTime
-    , ibImageBuilderErrors
-    , ibInstanceType
-    , ibVPCConfig
-    , ibImageARN
-    , ibDisplayName
-    , ibEnableDefaultInternetAccess
-    , ibDescription
-    , ibAppstreamAgentVersion
-    , ibName
-
-    -- * ImageBuilderStateChangeReason
-    , ImageBuilderStateChangeReason
-    , imageBuilderStateChangeReason
-    , ibscrCode
-    , ibscrMessage
-
-    -- * ImageStateChangeReason
-    , ImageStateChangeReason
-    , imageStateChangeReason
-    , iscrCode
-    , iscrMessage
-
-    -- * ResourceError
-    , ResourceError
-    , resourceError
-    , reErrorCode
-    , reErrorMessage
-    , reErrorTimestamp
-
-    -- * ServiceAccountCredentials
-    , ServiceAccountCredentials
-    , serviceAccountCredentials
-    , sacAccountName
-    , sacAccountPassword
-
-    -- * Session
-    , Session
-    , session
-    , sAuthenticationType
-    , sId
-    , sUserId
-    , sStackName
-    , sFleetName
-    , sState
-
-    -- * Stack
-    , Stack
-    , stack
-    , sFeedbackURL
-    , sARN
-    , sCreatedTime
-    , sStorageConnectors
-    , sDisplayName
-    , sStackErrors
-    , sDescription
-    , sRedirectURL
-    , sName
-
-    -- * StackError
-    , StackError
-    , stackError
-    , seErrorCode
-    , seErrorMessage
-
-    -- * StorageConnector
-    , StorageConnector
-    , storageConnector
-    , scResourceIdentifier
-    , scConnectorType
-
-    -- * VPCConfig
-    , VPCConfig
-    , vpcConfig
-    , vcSecurityGroupIds
-    , vcSubnetIds
-    ) where
-
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.AppStream.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-
--- | API version @2016-12-01@ of the Amazon AppStream SDK configuration.
-appStream :: Service
-appStream =
-  Service
-    { _svcAbbrev = "AppStream"
-    , _svcSigner = v4
-    , _svcPrefix = "appstream2"
-    , _svcVersion = "2016-12-01"
-    , _svcEndpoint = defaultEndpoint appStream
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "AppStream"
-    , _svcRetry = retry
-    }
-  where
-    retry =
-      Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
-    check e
-      | has (hasCode "ThrottledException" . hasStatus 400) e =
-        Just "throttled_exception"
-      | has (hasStatus 429) e = Just "too_many_requests"
-      | has (hasCode "ThrottlingException" . hasStatus 400) e =
-        Just "throttling_exception"
-      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
-      | has (hasStatus 504) e = Just "gateway_timeout"
-      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
-        Just "request_throttled_exception"
-      | has (hasStatus 502) e = Just "bad_gateway"
-      | has (hasStatus 503) e = Just "service_unavailable"
-      | has (hasStatus 500) e = Just "general_server_error"
-      | has (hasStatus 509) e = Just "limit_exceeded"
-      | otherwise = Nothing
-
-
--- | The specified role is invalid.
---
---
-_InvalidRoleException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidRoleException = _MatchServiceError appStream "InvalidRoleException"
-
-
--- | The specified resource already exists.
---
---
-_ResourceAlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceAlreadyExistsException =
-  _MatchServiceError appStream "ResourceAlreadyExistsException"
-
-
--- | The image does not support storage connectors.
---
---
-_IncompatibleImageException :: AsError a => Getting (First ServiceError) a ServiceError
-_IncompatibleImageException =
-  _MatchServiceError appStream "IncompatibleImageException"
-
-
--- | An API error occurred. Wait a few minutes and try again.
---
---
-_ConcurrentModificationException :: AsError a => Getting (First ServiceError) a ServiceError
-_ConcurrentModificationException =
-  _MatchServiceError appStream "ConcurrentModificationException"
-
-
--- | The attempted operation is not permitted.
---
---
-_OperationNotPermittedException :: AsError a => Getting (First ServiceError) a ServiceError
-_OperationNotPermittedException =
-  _MatchServiceError appStream "OperationNotPermittedException"
-
-
--- | The resource cannot be created because your AWS account is suspended. For assistance, contact AWS Support.
---
---
-_InvalidAccountStatusException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidAccountStatusException =
-  _MatchServiceError appStream "InvalidAccountStatusException"
-
-
--- | The specified resource was not found.
---
---
-_ResourceNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceNotFoundException =
-  _MatchServiceError appStream "ResourceNotFoundException"
-
-
--- | Indicates an incorrect combination of parameters, or a missing parameter.
---
---
-_InvalidParameterCombinationException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidParameterCombinationException =
-  _MatchServiceError appStream "InvalidParameterCombinationException"
-
-
--- | The specified resource exists and is not in use, but isn't available.
---
---
-_ResourceNotAvailableException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceNotAvailableException =
-  _MatchServiceError appStream "ResourceNotAvailableException"
-
-
--- | The requested limit exceeds the permitted limit for an account.
---
---
-_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
-_LimitExceededException = _MatchServiceError appStream "LimitExceededException"
-
-
--- | The specified resource is in use.
---
---
-_ResourceInUseException :: AsError a => Getting (First ServiceError) a ServiceError
-_ResourceInUseException = _MatchServiceError appStream "ResourceInUseException"
-
diff --git a/gen/Network/AWS/AppStream/Types/Product.hs b/gen/Network/AWS/AppStream/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/Types/Product.hs
+++ /dev/null
@@ -1,1415 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.Types.Product
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.AppStream.Types.Product where
-
-import Network.AWS.AppStream.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-
--- | Describes an application in the application catalog.
---
---
---
--- /See:/ 'application' smart constructor.
-data Application = Application'
-  { _aEnabled          :: !(Maybe Bool)
-  , _aLaunchPath       :: !(Maybe Text)
-  , _aLaunchParameters :: !(Maybe Text)
-  , _aName             :: !(Maybe Text)
-  , _aDisplayName      :: !(Maybe Text)
-  , _aMetadata         :: !(Maybe (Map Text Text))
-  , _aIconURL          :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Application' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aEnabled' - If there is a problem, the application can be disabled after image creation.
---
--- * 'aLaunchPath' - The path to the application executable in the instance.
---
--- * 'aLaunchParameters' - The arguments that are passed to the application at launch.
---
--- * 'aName' - The name of the application.
---
--- * 'aDisplayName' - The application name for display.
---
--- * 'aMetadata' - Additional attributes that describe the application.
---
--- * 'aIconURL' - The URL for the application icon. This URL might be time-limited.
-application
-    :: Application
-application =
-  Application'
-    { _aEnabled = Nothing
-    , _aLaunchPath = Nothing
-    , _aLaunchParameters = Nothing
-    , _aName = Nothing
-    , _aDisplayName = Nothing
-    , _aMetadata = Nothing
-    , _aIconURL = Nothing
-    }
-
-
--- | If there is a problem, the application can be disabled after image creation.
-aEnabled :: Lens' Application (Maybe Bool)
-aEnabled = lens _aEnabled (\ s a -> s{_aEnabled = a})
-
--- | The path to the application executable in the instance.
-aLaunchPath :: Lens' Application (Maybe Text)
-aLaunchPath = lens _aLaunchPath (\ s a -> s{_aLaunchPath = a})
-
--- | The arguments that are passed to the application at launch.
-aLaunchParameters :: Lens' Application (Maybe Text)
-aLaunchParameters = lens _aLaunchParameters (\ s a -> s{_aLaunchParameters = a})
-
--- | The name of the application.
-aName :: Lens' Application (Maybe Text)
-aName = lens _aName (\ s a -> s{_aName = a})
-
--- | The application name for display.
-aDisplayName :: Lens' Application (Maybe Text)
-aDisplayName = lens _aDisplayName (\ s a -> s{_aDisplayName = a})
-
--- | Additional attributes that describe the application.
-aMetadata :: Lens' Application (HashMap Text Text)
-aMetadata = lens _aMetadata (\ s a -> s{_aMetadata = a}) . _Default . _Map
-
--- | The URL for the application icon. This URL might be time-limited.
-aIconURL :: Lens' Application (Maybe Text)
-aIconURL = lens _aIconURL (\ s a -> s{_aIconURL = a})
-
-instance FromJSON Application where
-        parseJSON
-          = withObject "Application"
-              (\ x ->
-                 Application' <$>
-                   (x .:? "Enabled") <*> (x .:? "LaunchPath") <*>
-                     (x .:? "LaunchParameters")
-                     <*> (x .:? "Name")
-                     <*> (x .:? "DisplayName")
-                     <*> (x .:? "Metadata" .!= mempty)
-                     <*> (x .:? "IconURL"))
-
-instance Hashable Application where
-
-instance NFData Application where
-
--- | Describes the capacity for a fleet.
---
---
---
--- /See:/ 'computeCapacity' smart constructor.
-newtype ComputeCapacity = ComputeCapacity'
-  { _ccDesiredInstances :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ComputeCapacity' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccDesiredInstances' - The desired number of streaming instances.
-computeCapacity
-    :: Int -- ^ 'ccDesiredInstances'
-    -> ComputeCapacity
-computeCapacity pDesiredInstances_ =
-  ComputeCapacity' {_ccDesiredInstances = pDesiredInstances_}
-
-
--- | The desired number of streaming instances.
-ccDesiredInstances :: Lens' ComputeCapacity Int
-ccDesiredInstances = lens _ccDesiredInstances (\ s a -> s{_ccDesiredInstances = a})
-
-instance Hashable ComputeCapacity where
-
-instance NFData ComputeCapacity where
-
-instance ToJSON ComputeCapacity where
-        toJSON ComputeCapacity'{..}
-          = object
-              (catMaybes
-                 [Just ("DesiredInstances" .= _ccDesiredInstances)])
-
--- | Describes the capacity status for a fleet.
---
---
---
--- /See:/ 'computeCapacityStatus' smart constructor.
-data ComputeCapacityStatus = ComputeCapacityStatus'
-  { _ccsInUse     :: !(Maybe Int)
-  , _ccsRunning   :: !(Maybe Int)
-  , _ccsAvailable :: !(Maybe Int)
-  , _ccsDesired   :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ComputeCapacityStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccsInUse' - The number of instances in use for streaming.
---
--- * 'ccsRunning' - The total number of simultaneous streaming instances that are running.
---
--- * 'ccsAvailable' - The number of currently available instances that can be used to stream sessions.
---
--- * 'ccsDesired' - The desired number of streaming instances.
-computeCapacityStatus
-    :: Int -- ^ 'ccsDesired'
-    -> ComputeCapacityStatus
-computeCapacityStatus pDesired_ =
-  ComputeCapacityStatus'
-    { _ccsInUse = Nothing
-    , _ccsRunning = Nothing
-    , _ccsAvailable = Nothing
-    , _ccsDesired = pDesired_
-    }
-
-
--- | The number of instances in use for streaming.
-ccsInUse :: Lens' ComputeCapacityStatus (Maybe Int)
-ccsInUse = lens _ccsInUse (\ s a -> s{_ccsInUse = a})
-
--- | The total number of simultaneous streaming instances that are running.
-ccsRunning :: Lens' ComputeCapacityStatus (Maybe Int)
-ccsRunning = lens _ccsRunning (\ s a -> s{_ccsRunning = a})
-
--- | The number of currently available instances that can be used to stream sessions.
-ccsAvailable :: Lens' ComputeCapacityStatus (Maybe Int)
-ccsAvailable = lens _ccsAvailable (\ s a -> s{_ccsAvailable = a})
-
--- | The desired number of streaming instances.
-ccsDesired :: Lens' ComputeCapacityStatus Int
-ccsDesired = lens _ccsDesired (\ s a -> s{_ccsDesired = a})
-
-instance FromJSON ComputeCapacityStatus where
-        parseJSON
-          = withObject "ComputeCapacityStatus"
-              (\ x ->
-                 ComputeCapacityStatus' <$>
-                   (x .:? "InUse") <*> (x .:? "Running") <*>
-                     (x .:? "Available")
-                     <*> (x .: "Desired"))
-
-instance Hashable ComputeCapacityStatus where
-
-instance NFData ComputeCapacityStatus where
-
--- | Configuration information for the directory used to join domains.
---
---
---
--- /See:/ 'directoryConfig' smart constructor.
-data DirectoryConfig = DirectoryConfig'
-  { _dcCreatedTime :: !(Maybe POSIX)
-  , _dcServiceAccountCredentials :: !(Maybe ServiceAccountCredentials)
-  , _dcOrganizationalUnitDistinguishedNames :: !(Maybe [Text])
-  , _dcDirectoryName :: !Text
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DirectoryConfig' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcCreatedTime' - The time the directory configuration was created.
---
--- * 'dcServiceAccountCredentials' - The credentials for the service account used by the streaming instance to connect to the directory.
---
--- * 'dcOrganizationalUnitDistinguishedNames' - The distinguished names of the organizational units for computer accounts.
---
--- * 'dcDirectoryName' - The fully qualified name of the directory (for example, corp.example.com).
-directoryConfig
-    :: Text -- ^ 'dcDirectoryName'
-    -> DirectoryConfig
-directoryConfig pDirectoryName_ =
-  DirectoryConfig'
-    { _dcCreatedTime = Nothing
-    , _dcServiceAccountCredentials = Nothing
-    , _dcOrganizationalUnitDistinguishedNames = Nothing
-    , _dcDirectoryName = pDirectoryName_
-    }
-
-
--- | The time the directory configuration was created.
-dcCreatedTime :: Lens' DirectoryConfig (Maybe UTCTime)
-dcCreatedTime = lens _dcCreatedTime (\ s a -> s{_dcCreatedTime = a}) . mapping _Time
-
--- | The credentials for the service account used by the streaming instance to connect to the directory.
-dcServiceAccountCredentials :: Lens' DirectoryConfig (Maybe ServiceAccountCredentials)
-dcServiceAccountCredentials = lens _dcServiceAccountCredentials (\ s a -> s{_dcServiceAccountCredentials = a})
-
--- | The distinguished names of the organizational units for computer accounts.
-dcOrganizationalUnitDistinguishedNames :: Lens' DirectoryConfig [Text]
-dcOrganizationalUnitDistinguishedNames = lens _dcOrganizationalUnitDistinguishedNames (\ s a -> s{_dcOrganizationalUnitDistinguishedNames = a}) . _Default . _Coerce
-
--- | The fully qualified name of the directory (for example, corp.example.com).
-dcDirectoryName :: Lens' DirectoryConfig Text
-dcDirectoryName = lens _dcDirectoryName (\ s a -> s{_dcDirectoryName = a})
-
-instance FromJSON DirectoryConfig where
-        parseJSON
-          = withObject "DirectoryConfig"
-              (\ x ->
-                 DirectoryConfig' <$>
-                   (x .:? "CreatedTime") <*>
-                     (x .:? "ServiceAccountCredentials")
-                     <*>
-                     (x .:? "OrganizationalUnitDistinguishedNames" .!=
-                        mempty)
-                     <*> (x .: "DirectoryName"))
-
-instance Hashable DirectoryConfig where
-
-instance NFData DirectoryConfig where
-
--- | Contains the information needed to join a Microsoft Active Directory domain.
---
---
---
--- /See:/ 'domainJoinInfo' smart constructor.
-data DomainJoinInfo = DomainJoinInfo'
-  { _djiOrganizationalUnitDistinguishedName :: !(Maybe Text)
-  , _djiDirectoryName                       :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DomainJoinInfo' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'djiOrganizationalUnitDistinguishedName' - The distinguished name of the organizational unit for computer accounts.
---
--- * 'djiDirectoryName' - The fully qualified name of the directory (for example, corp.example.com).
-domainJoinInfo
-    :: DomainJoinInfo
-domainJoinInfo =
-  DomainJoinInfo'
-    { _djiOrganizationalUnitDistinguishedName = Nothing
-    , _djiDirectoryName = Nothing
-    }
-
-
--- | The distinguished name of the organizational unit for computer accounts.
-djiOrganizationalUnitDistinguishedName :: Lens' DomainJoinInfo (Maybe Text)
-djiOrganizationalUnitDistinguishedName = lens _djiOrganizationalUnitDistinguishedName (\ s a -> s{_djiOrganizationalUnitDistinguishedName = a})
-
--- | The fully qualified name of the directory (for example, corp.example.com).
-djiDirectoryName :: Lens' DomainJoinInfo (Maybe Text)
-djiDirectoryName = lens _djiDirectoryName (\ s a -> s{_djiDirectoryName = a})
-
-instance FromJSON DomainJoinInfo where
-        parseJSON
-          = withObject "DomainJoinInfo"
-              (\ x ->
-                 DomainJoinInfo' <$>
-                   (x .:? "OrganizationalUnitDistinguishedName") <*>
-                     (x .:? "DirectoryName"))
-
-instance Hashable DomainJoinInfo where
-
-instance NFData DomainJoinInfo where
-
-instance ToJSON DomainJoinInfo where
-        toJSON DomainJoinInfo'{..}
-          = object
-              (catMaybes
-                 [("OrganizationalUnitDistinguishedName" .=) <$>
-                    _djiOrganizationalUnitDistinguishedName,
-                  ("DirectoryName" .=) <$> _djiDirectoryName])
-
--- | Contains the parameters for a fleet.
---
---
---
--- /See:/ 'fleet' smart constructor.
-data Fleet = Fleet'
-  { _fDomainJoinInfo              :: !(Maybe DomainJoinInfo)
-  , _fDisconnectTimeoutInSeconds  :: !(Maybe Int)
-  , _fMaxUserDurationInSeconds    :: !(Maybe Int)
-  , _fCreatedTime                 :: !(Maybe POSIX)
-  , _fFleetType                   :: !(Maybe FleetType)
-  , _fVPCConfig                   :: !(Maybe VPCConfig)
-  , _fFleetErrors                 :: !(Maybe [FleetError])
-  , _fDisplayName                 :: !(Maybe Text)
-  , _fEnableDefaultInternetAccess :: !(Maybe Bool)
-  , _fDescription                 :: !(Maybe Text)
-  , _fARN                         :: !Text
-  , _fName                        :: !Text
-  , _fImageName                   :: !Text
-  , _fInstanceType                :: !Text
-  , _fComputeCapacityStatus       :: !ComputeCapacityStatus
-  , _fState                       :: !FleetState
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Fleet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'fDomainJoinInfo' - The information needed to join a Microsoft Active Directory domain.
---
--- * 'fDisconnectTimeoutInSeconds' - The time after disconnection when a session is considered to have ended, in seconds. If a user who was disconnected reconnects within this time interval, the user is connected to their previous session. Specify a value between 60 and 57600.
---
--- * 'fMaxUserDurationInSeconds' - The maximum time that a streaming session can run, in seconds. Specify a value between 600 and 57600.
---
--- * 'fCreatedTime' - The time the fleet was created.
---
--- * 'fFleetType' - The fleet type.     * ALWAYS_ON    * Provides users with instant-on access to their apps. You are charged for all running instances in your fleet, even if no users are streaming apps.     * ON_DEMAND    * Provide users with access to applications after they connect, which takes one to two minutes. You are charged for instance streaming when users are connected and a small hourly fee for instances that are not streaming apps.
---
--- * 'fVPCConfig' - The VPC configuration for the fleet.
---
--- * 'fFleetErrors' - The fleet errors.
---
--- * 'fDisplayName' - The fleet name for display.
---
--- * 'fEnableDefaultInternetAccess' - Indicates whether default internet access is enabled for the fleet.
---
--- * 'fDescription' - The description for display.
---
--- * 'fARN' - The ARN for the fleet.
---
--- * 'fName' - The name of the fleet.
---
--- * 'fImageName' - The name of the image used to create the fleet.
---
--- * 'fInstanceType' - The instance type to use when launching fleet instances.
---
--- * 'fComputeCapacityStatus' - The capacity status for the fleet.
---
--- * 'fState' - The current state for the fleet.
-fleet
-    :: Text -- ^ 'fARN'
-    -> Text -- ^ 'fName'
-    -> Text -- ^ 'fImageName'
-    -> Text -- ^ 'fInstanceType'
-    -> ComputeCapacityStatus -- ^ 'fComputeCapacityStatus'
-    -> FleetState -- ^ 'fState'
-    -> Fleet
-fleet pARN_ pName_ pImageName_ pInstanceType_ pComputeCapacityStatus_ pState_ =
-  Fleet'
-    { _fDomainJoinInfo = Nothing
-    , _fDisconnectTimeoutInSeconds = Nothing
-    , _fMaxUserDurationInSeconds = Nothing
-    , _fCreatedTime = Nothing
-    , _fFleetType = Nothing
-    , _fVPCConfig = Nothing
-    , _fFleetErrors = Nothing
-    , _fDisplayName = Nothing
-    , _fEnableDefaultInternetAccess = Nothing
-    , _fDescription = Nothing
-    , _fARN = pARN_
-    , _fName = pName_
-    , _fImageName = pImageName_
-    , _fInstanceType = pInstanceType_
-    , _fComputeCapacityStatus = pComputeCapacityStatus_
-    , _fState = pState_
-    }
-
-
--- | The information needed to join a Microsoft Active Directory domain.
-fDomainJoinInfo :: Lens' Fleet (Maybe DomainJoinInfo)
-fDomainJoinInfo = lens _fDomainJoinInfo (\ s a -> s{_fDomainJoinInfo = a})
-
--- | The time after disconnection when a session is considered to have ended, in seconds. If a user who was disconnected reconnects within this time interval, the user is connected to their previous session. Specify a value between 60 and 57600.
-fDisconnectTimeoutInSeconds :: Lens' Fleet (Maybe Int)
-fDisconnectTimeoutInSeconds = lens _fDisconnectTimeoutInSeconds (\ s a -> s{_fDisconnectTimeoutInSeconds = a})
-
--- | The maximum time that a streaming session can run, in seconds. Specify a value between 600 and 57600.
-fMaxUserDurationInSeconds :: Lens' Fleet (Maybe Int)
-fMaxUserDurationInSeconds = lens _fMaxUserDurationInSeconds (\ s a -> s{_fMaxUserDurationInSeconds = a})
-
--- | The time the fleet was created.
-fCreatedTime :: Lens' Fleet (Maybe UTCTime)
-fCreatedTime = lens _fCreatedTime (\ s a -> s{_fCreatedTime = a}) . mapping _Time
-
--- | The fleet type.     * ALWAYS_ON    * Provides users with instant-on access to their apps. You are charged for all running instances in your fleet, even if no users are streaming apps.     * ON_DEMAND    * Provide users with access to applications after they connect, which takes one to two minutes. You are charged for instance streaming when users are connected and a small hourly fee for instances that are not streaming apps.
-fFleetType :: Lens' Fleet (Maybe FleetType)
-fFleetType = lens _fFleetType (\ s a -> s{_fFleetType = a})
-
--- | The VPC configuration for the fleet.
-fVPCConfig :: Lens' Fleet (Maybe VPCConfig)
-fVPCConfig = lens _fVPCConfig (\ s a -> s{_fVPCConfig = a})
-
--- | The fleet errors.
-fFleetErrors :: Lens' Fleet [FleetError]
-fFleetErrors = lens _fFleetErrors (\ s a -> s{_fFleetErrors = a}) . _Default . _Coerce
-
--- | The fleet name for display.
-fDisplayName :: Lens' Fleet (Maybe Text)
-fDisplayName = lens _fDisplayName (\ s a -> s{_fDisplayName = a})
-
--- | Indicates whether default internet access is enabled for the fleet.
-fEnableDefaultInternetAccess :: Lens' Fleet (Maybe Bool)
-fEnableDefaultInternetAccess = lens _fEnableDefaultInternetAccess (\ s a -> s{_fEnableDefaultInternetAccess = a})
-
--- | The description for display.
-fDescription :: Lens' Fleet (Maybe Text)
-fDescription = lens _fDescription (\ s a -> s{_fDescription = a})
-
--- | The ARN for the fleet.
-fARN :: Lens' Fleet Text
-fARN = lens _fARN (\ s a -> s{_fARN = a})
-
--- | The name of the fleet.
-fName :: Lens' Fleet Text
-fName = lens _fName (\ s a -> s{_fName = a})
-
--- | The name of the image used to create the fleet.
-fImageName :: Lens' Fleet Text
-fImageName = lens _fImageName (\ s a -> s{_fImageName = a})
-
--- | The instance type to use when launching fleet instances.
-fInstanceType :: Lens' Fleet Text
-fInstanceType = lens _fInstanceType (\ s a -> s{_fInstanceType = a})
-
--- | The capacity status for the fleet.
-fComputeCapacityStatus :: Lens' Fleet ComputeCapacityStatus
-fComputeCapacityStatus = lens _fComputeCapacityStatus (\ s a -> s{_fComputeCapacityStatus = a})
-
--- | The current state for the fleet.
-fState :: Lens' Fleet FleetState
-fState = lens _fState (\ s a -> s{_fState = a})
-
-instance FromJSON Fleet where
-        parseJSON
-          = withObject "Fleet"
-              (\ x ->
-                 Fleet' <$>
-                   (x .:? "DomainJoinInfo") <*>
-                     (x .:? "DisconnectTimeoutInSeconds")
-                     <*> (x .:? "MaxUserDurationInSeconds")
-                     <*> (x .:? "CreatedTime")
-                     <*> (x .:? "FleetType")
-                     <*> (x .:? "VpcConfig")
-                     <*> (x .:? "FleetErrors" .!= mempty)
-                     <*> (x .:? "DisplayName")
-                     <*> (x .:? "EnableDefaultInternetAccess")
-                     <*> (x .:? "Description")
-                     <*> (x .: "Arn")
-                     <*> (x .: "Name")
-                     <*> (x .: "ImageName")
-                     <*> (x .: "InstanceType")
-                     <*> (x .: "ComputeCapacityStatus")
-                     <*> (x .: "State"))
-
-instance Hashable Fleet where
-
-instance NFData Fleet where
-
--- | Describes a fleet error.
---
---
---
--- /See:/ 'fleetError' smart constructor.
-data FleetError = FleetError'
-  { _feErrorCode    :: !(Maybe FleetErrorCode)
-  , _feErrorMessage :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'FleetError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'feErrorCode' - The error code.
---
--- * 'feErrorMessage' - The error message.
-fleetError
-    :: FleetError
-fleetError = FleetError' {_feErrorCode = Nothing, _feErrorMessage = Nothing}
-
-
--- | The error code.
-feErrorCode :: Lens' FleetError (Maybe FleetErrorCode)
-feErrorCode = lens _feErrorCode (\ s a -> s{_feErrorCode = a})
-
--- | The error message.
-feErrorMessage :: Lens' FleetError (Maybe Text)
-feErrorMessage = lens _feErrorMessage (\ s a -> s{_feErrorMessage = a})
-
-instance FromJSON FleetError where
-        parseJSON
-          = withObject "FleetError"
-              (\ x ->
-                 FleetError' <$>
-                   (x .:? "ErrorCode") <*> (x .:? "ErrorMessage"))
-
-instance Hashable FleetError where
-
-instance NFData FleetError where
-
--- | Describes an image.
---
---
---
--- /See:/ 'image' smart constructor.
-data Image = Image'
-  { _iState                       :: !(Maybe ImageState)
-  , _iPlatform                    :: !(Maybe PlatformType)
-  , _iPublicBaseImageReleasedDate :: !(Maybe POSIX)
-  , _iStateChangeReason           :: !(Maybe ImageStateChangeReason)
-  , _iARN                         :: !(Maybe Text)
-  , _iCreatedTime                 :: !(Maybe POSIX)
-  , _iImageBuilderSupported       :: !(Maybe Bool)
-  , _iVisibility                  :: !(Maybe VisibilityType)
-  , _iBaseImageARN                :: !(Maybe Text)
-  , _iDisplayName                 :: !(Maybe Text)
-  , _iDescription                 :: !(Maybe Text)
-  , _iAppstreamAgentVersion       :: !(Maybe Text)
-  , _iApplications                :: !(Maybe [Application])
-  , _iName                        :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Image' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iState' - The image starts in the @PENDING@ state. If image creation succeeds, the state is @AVAILABLE@ . If image creation fails, the state is @FAILED@ .
---
--- * 'iPlatform' - The operating system platform of the image.
---
--- * 'iPublicBaseImageReleasedDate' - The release date of the public base image. For private images, this date is the release date of the base image from which the image was created.
---
--- * 'iStateChangeReason' - The reason why the last state change occurred.
---
--- * 'iARN' - The ARN of the image.
---
--- * 'iCreatedTime' - The time the image was created.
---
--- * 'iImageBuilderSupported' - Indicates whether an image builder can be launched from this image.
---
--- * 'iVisibility' - Indicates whether the image is public or private.
---
--- * 'iBaseImageARN' - The ARN of the image from which this image was created.
---
--- * 'iDisplayName' - The image name for display.
---
--- * 'iDescription' - The description for display.
---
--- * 'iAppstreamAgentVersion' - The version of the AppStream 2.0 agent to use for instances that are launched from this image.
---
--- * 'iApplications' - The applications associated with the image.
---
--- * 'iName' - The name of the image.
-image
-    :: Text -- ^ 'iName'
-    -> Image
-image pName_ =
-  Image'
-    { _iState = Nothing
-    , _iPlatform = Nothing
-    , _iPublicBaseImageReleasedDate = Nothing
-    , _iStateChangeReason = Nothing
-    , _iARN = Nothing
-    , _iCreatedTime = Nothing
-    , _iImageBuilderSupported = Nothing
-    , _iVisibility = Nothing
-    , _iBaseImageARN = Nothing
-    , _iDisplayName = Nothing
-    , _iDescription = Nothing
-    , _iAppstreamAgentVersion = Nothing
-    , _iApplications = Nothing
-    , _iName = pName_
-    }
-
-
--- | The image starts in the @PENDING@ state. If image creation succeeds, the state is @AVAILABLE@ . If image creation fails, the state is @FAILED@ .
-iState :: Lens' Image (Maybe ImageState)
-iState = lens _iState (\ s a -> s{_iState = a})
-
--- | The operating system platform of the image.
-iPlatform :: Lens' Image (Maybe PlatformType)
-iPlatform = lens _iPlatform (\ s a -> s{_iPlatform = a})
-
--- | The release date of the public base image. For private images, this date is the release date of the base image from which the image was created.
-iPublicBaseImageReleasedDate :: Lens' Image (Maybe UTCTime)
-iPublicBaseImageReleasedDate = lens _iPublicBaseImageReleasedDate (\ s a -> s{_iPublicBaseImageReleasedDate = a}) . mapping _Time
-
--- | The reason why the last state change occurred.
-iStateChangeReason :: Lens' Image (Maybe ImageStateChangeReason)
-iStateChangeReason = lens _iStateChangeReason (\ s a -> s{_iStateChangeReason = a})
-
--- | The ARN of the image.
-iARN :: Lens' Image (Maybe Text)
-iARN = lens _iARN (\ s a -> s{_iARN = a})
-
--- | The time the image was created.
-iCreatedTime :: Lens' Image (Maybe UTCTime)
-iCreatedTime = lens _iCreatedTime (\ s a -> s{_iCreatedTime = a}) . mapping _Time
-
--- | Indicates whether an image builder can be launched from this image.
-iImageBuilderSupported :: Lens' Image (Maybe Bool)
-iImageBuilderSupported = lens _iImageBuilderSupported (\ s a -> s{_iImageBuilderSupported = a})
-
--- | Indicates whether the image is public or private.
-iVisibility :: Lens' Image (Maybe VisibilityType)
-iVisibility = lens _iVisibility (\ s a -> s{_iVisibility = a})
-
--- | The ARN of the image from which this image was created.
-iBaseImageARN :: Lens' Image (Maybe Text)
-iBaseImageARN = lens _iBaseImageARN (\ s a -> s{_iBaseImageARN = a})
-
--- | The image name for display.
-iDisplayName :: Lens' Image (Maybe Text)
-iDisplayName = lens _iDisplayName (\ s a -> s{_iDisplayName = a})
-
--- | The description for display.
-iDescription :: Lens' Image (Maybe Text)
-iDescription = lens _iDescription (\ s a -> s{_iDescription = a})
-
--- | The version of the AppStream 2.0 agent to use for instances that are launched from this image.
-iAppstreamAgentVersion :: Lens' Image (Maybe Text)
-iAppstreamAgentVersion = lens _iAppstreamAgentVersion (\ s a -> s{_iAppstreamAgentVersion = a})
-
--- | The applications associated with the image.
-iApplications :: Lens' Image [Application]
-iApplications = lens _iApplications (\ s a -> s{_iApplications = a}) . _Default . _Coerce
-
--- | The name of the image.
-iName :: Lens' Image Text
-iName = lens _iName (\ s a -> s{_iName = a})
-
-instance FromJSON Image where
-        parseJSON
-          = withObject "Image"
-              (\ x ->
-                 Image' <$>
-                   (x .:? "State") <*> (x .:? "Platform") <*>
-                     (x .:? "PublicBaseImageReleasedDate")
-                     <*> (x .:? "StateChangeReason")
-                     <*> (x .:? "Arn")
-                     <*> (x .:? "CreatedTime")
-                     <*> (x .:? "ImageBuilderSupported")
-                     <*> (x .:? "Visibility")
-                     <*> (x .:? "BaseImageArn")
-                     <*> (x .:? "DisplayName")
-                     <*> (x .:? "Description")
-                     <*> (x .:? "AppstreamAgentVersion")
-                     <*> (x .:? "Applications" .!= mempty)
-                     <*> (x .: "Name"))
-
-instance Hashable Image where
-
-instance NFData Image where
-
--- | Describes a streaming instance used for editing an image. New images are created from a snapshot through an image builder.
---
---
---
--- /See:/ 'imageBuilder' smart constructor.
-data ImageBuilder = ImageBuilder'
-  { _ibDomainJoinInfo              :: !(Maybe DomainJoinInfo)
-  , _ibState                       :: !(Maybe ImageBuilderState)
-  , _ibPlatform                    :: !(Maybe PlatformType)
-  , _ibStateChangeReason           :: !(Maybe ImageBuilderStateChangeReason)
-  , _ibARN                         :: !(Maybe Text)
-  , _ibCreatedTime                 :: !(Maybe POSIX)
-  , _ibImageBuilderErrors          :: !(Maybe [ResourceError])
-  , _ibInstanceType                :: !(Maybe Text)
-  , _ibVPCConfig                   :: !(Maybe VPCConfig)
-  , _ibImageARN                    :: !(Maybe Text)
-  , _ibDisplayName                 :: !(Maybe Text)
-  , _ibEnableDefaultInternetAccess :: !(Maybe Bool)
-  , _ibDescription                 :: !(Maybe Text)
-  , _ibAppstreamAgentVersion       :: !(Maybe Text)
-  , _ibName                        :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ImageBuilder' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ibDomainJoinInfo' - The information needed to join a Microsoft Active Directory domain.
---
--- * 'ibState' - The state of the image builder.
---
--- * 'ibPlatform' - The operating system platform of the image builder.
---
--- * 'ibStateChangeReason' - The reason why the last state change occurred.
---
--- * 'ibARN' - The ARN for the image builder.
---
--- * 'ibCreatedTime' - The time stamp when the image builder was created.
---
--- * 'ibImageBuilderErrors' - The image builder errors.
---
--- * 'ibInstanceType' - The instance type for the image builder.
---
--- * 'ibVPCConfig' - The VPC configuration of the image builder.
---
--- * 'ibImageARN' - The ARN of the image from which this builder was created.
---
--- * 'ibDisplayName' - The image builder name for display.
---
--- * 'ibEnableDefaultInternetAccess' - Enables or disables default internet access for the image builder.
---
--- * 'ibDescription' - The description for display.
---
--- * 'ibAppstreamAgentVersion' - The version of the AppStream 2.0 agent that is currently being used by this image builder.
---
--- * 'ibName' - The name of the image builder.
-imageBuilder
-    :: Text -- ^ 'ibName'
-    -> ImageBuilder
-imageBuilder pName_ =
-  ImageBuilder'
-    { _ibDomainJoinInfo = Nothing
-    , _ibState = Nothing
-    , _ibPlatform = Nothing
-    , _ibStateChangeReason = Nothing
-    , _ibARN = Nothing
-    , _ibCreatedTime = Nothing
-    , _ibImageBuilderErrors = Nothing
-    , _ibInstanceType = Nothing
-    , _ibVPCConfig = Nothing
-    , _ibImageARN = Nothing
-    , _ibDisplayName = Nothing
-    , _ibEnableDefaultInternetAccess = Nothing
-    , _ibDescription = Nothing
-    , _ibAppstreamAgentVersion = Nothing
-    , _ibName = pName_
-    }
-
-
--- | The information needed to join a Microsoft Active Directory domain.
-ibDomainJoinInfo :: Lens' ImageBuilder (Maybe DomainJoinInfo)
-ibDomainJoinInfo = lens _ibDomainJoinInfo (\ s a -> s{_ibDomainJoinInfo = a})
-
--- | The state of the image builder.
-ibState :: Lens' ImageBuilder (Maybe ImageBuilderState)
-ibState = lens _ibState (\ s a -> s{_ibState = a})
-
--- | The operating system platform of the image builder.
-ibPlatform :: Lens' ImageBuilder (Maybe PlatformType)
-ibPlatform = lens _ibPlatform (\ s a -> s{_ibPlatform = a})
-
--- | The reason why the last state change occurred.
-ibStateChangeReason :: Lens' ImageBuilder (Maybe ImageBuilderStateChangeReason)
-ibStateChangeReason = lens _ibStateChangeReason (\ s a -> s{_ibStateChangeReason = a})
-
--- | The ARN for the image builder.
-ibARN :: Lens' ImageBuilder (Maybe Text)
-ibARN = lens _ibARN (\ s a -> s{_ibARN = a})
-
--- | The time stamp when the image builder was created.
-ibCreatedTime :: Lens' ImageBuilder (Maybe UTCTime)
-ibCreatedTime = lens _ibCreatedTime (\ s a -> s{_ibCreatedTime = a}) . mapping _Time
-
--- | The image builder errors.
-ibImageBuilderErrors :: Lens' ImageBuilder [ResourceError]
-ibImageBuilderErrors = lens _ibImageBuilderErrors (\ s a -> s{_ibImageBuilderErrors = a}) . _Default . _Coerce
-
--- | The instance type for the image builder.
-ibInstanceType :: Lens' ImageBuilder (Maybe Text)
-ibInstanceType = lens _ibInstanceType (\ s a -> s{_ibInstanceType = a})
-
--- | The VPC configuration of the image builder.
-ibVPCConfig :: Lens' ImageBuilder (Maybe VPCConfig)
-ibVPCConfig = lens _ibVPCConfig (\ s a -> s{_ibVPCConfig = a})
-
--- | The ARN of the image from which this builder was created.
-ibImageARN :: Lens' ImageBuilder (Maybe Text)
-ibImageARN = lens _ibImageARN (\ s a -> s{_ibImageARN = a})
-
--- | The image builder name for display.
-ibDisplayName :: Lens' ImageBuilder (Maybe Text)
-ibDisplayName = lens _ibDisplayName (\ s a -> s{_ibDisplayName = a})
-
--- | Enables or disables default internet access for the image builder.
-ibEnableDefaultInternetAccess :: Lens' ImageBuilder (Maybe Bool)
-ibEnableDefaultInternetAccess = lens _ibEnableDefaultInternetAccess (\ s a -> s{_ibEnableDefaultInternetAccess = a})
-
--- | The description for display.
-ibDescription :: Lens' ImageBuilder (Maybe Text)
-ibDescription = lens _ibDescription (\ s a -> s{_ibDescription = a})
-
--- | The version of the AppStream 2.0 agent that is currently being used by this image builder.
-ibAppstreamAgentVersion :: Lens' ImageBuilder (Maybe Text)
-ibAppstreamAgentVersion = lens _ibAppstreamAgentVersion (\ s a -> s{_ibAppstreamAgentVersion = a})
-
--- | The name of the image builder.
-ibName :: Lens' ImageBuilder Text
-ibName = lens _ibName (\ s a -> s{_ibName = a})
-
-instance FromJSON ImageBuilder where
-        parseJSON
-          = withObject "ImageBuilder"
-              (\ x ->
-                 ImageBuilder' <$>
-                   (x .:? "DomainJoinInfo") <*> (x .:? "State") <*>
-                     (x .:? "Platform")
-                     <*> (x .:? "StateChangeReason")
-                     <*> (x .:? "Arn")
-                     <*> (x .:? "CreatedTime")
-                     <*> (x .:? "ImageBuilderErrors" .!= mempty)
-                     <*> (x .:? "InstanceType")
-                     <*> (x .:? "VpcConfig")
-                     <*> (x .:? "ImageArn")
-                     <*> (x .:? "DisplayName")
-                     <*> (x .:? "EnableDefaultInternetAccess")
-                     <*> (x .:? "Description")
-                     <*> (x .:? "AppstreamAgentVersion")
-                     <*> (x .: "Name"))
-
-instance Hashable ImageBuilder where
-
-instance NFData ImageBuilder where
-
--- | Describes the reason why the last image builder state change occurred.
---
---
---
--- /See:/ 'imageBuilderStateChangeReason' smart constructor.
-data ImageBuilderStateChangeReason = ImageBuilderStateChangeReason'
-  { _ibscrCode    :: !(Maybe ImageBuilderStateChangeReasonCode)
-  , _ibscrMessage :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ImageBuilderStateChangeReason' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ibscrCode' - The state change reason code.
---
--- * 'ibscrMessage' - The state change reason message.
-imageBuilderStateChangeReason
-    :: ImageBuilderStateChangeReason
-imageBuilderStateChangeReason =
-  ImageBuilderStateChangeReason' {_ibscrCode = Nothing, _ibscrMessage = Nothing}
-
-
--- | The state change reason code.
-ibscrCode :: Lens' ImageBuilderStateChangeReason (Maybe ImageBuilderStateChangeReasonCode)
-ibscrCode = lens _ibscrCode (\ s a -> s{_ibscrCode = a})
-
--- | The state change reason message.
-ibscrMessage :: Lens' ImageBuilderStateChangeReason (Maybe Text)
-ibscrMessage = lens _ibscrMessage (\ s a -> s{_ibscrMessage = a})
-
-instance FromJSON ImageBuilderStateChangeReason where
-        parseJSON
-          = withObject "ImageBuilderStateChangeReason"
-              (\ x ->
-                 ImageBuilderStateChangeReason' <$>
-                   (x .:? "Code") <*> (x .:? "Message"))
-
-instance Hashable ImageBuilderStateChangeReason where
-
-instance NFData ImageBuilderStateChangeReason where
-
--- | Describes the reason why the last image state change occurred.
---
---
---
--- /See:/ 'imageStateChangeReason' smart constructor.
-data ImageStateChangeReason = ImageStateChangeReason'
-  { _iscrCode    :: !(Maybe ImageStateChangeReasonCode)
-  , _iscrMessage :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ImageStateChangeReason' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iscrCode' - The state change reason code.
---
--- * 'iscrMessage' - The state change reason message.
-imageStateChangeReason
-    :: ImageStateChangeReason
-imageStateChangeReason =
-  ImageStateChangeReason' {_iscrCode = Nothing, _iscrMessage = Nothing}
-
-
--- | The state change reason code.
-iscrCode :: Lens' ImageStateChangeReason (Maybe ImageStateChangeReasonCode)
-iscrCode = lens _iscrCode (\ s a -> s{_iscrCode = a})
-
--- | The state change reason message.
-iscrMessage :: Lens' ImageStateChangeReason (Maybe Text)
-iscrMessage = lens _iscrMessage (\ s a -> s{_iscrMessage = a})
-
-instance FromJSON ImageStateChangeReason where
-        parseJSON
-          = withObject "ImageStateChangeReason"
-              (\ x ->
-                 ImageStateChangeReason' <$>
-                   (x .:? "Code") <*> (x .:? "Message"))
-
-instance Hashable ImageStateChangeReason where
-
-instance NFData ImageStateChangeReason where
-
--- | Describes a resource error.
---
---
---
--- /See:/ 'resourceError' smart constructor.
-data ResourceError = ResourceError'
-  { _reErrorCode      :: !(Maybe FleetErrorCode)
-  , _reErrorMessage   :: !(Maybe Text)
-  , _reErrorTimestamp :: !(Maybe POSIX)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ResourceError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'reErrorCode' - The error code.
---
--- * 'reErrorMessage' - The error message.
---
--- * 'reErrorTimestamp' - The time the error occurred.
-resourceError
-    :: ResourceError
-resourceError =
-  ResourceError'
-    { _reErrorCode = Nothing
-    , _reErrorMessage = Nothing
-    , _reErrorTimestamp = Nothing
-    }
-
-
--- | The error code.
-reErrorCode :: Lens' ResourceError (Maybe FleetErrorCode)
-reErrorCode = lens _reErrorCode (\ s a -> s{_reErrorCode = a})
-
--- | The error message.
-reErrorMessage :: Lens' ResourceError (Maybe Text)
-reErrorMessage = lens _reErrorMessage (\ s a -> s{_reErrorMessage = a})
-
--- | The time the error occurred.
-reErrorTimestamp :: Lens' ResourceError (Maybe UTCTime)
-reErrorTimestamp = lens _reErrorTimestamp (\ s a -> s{_reErrorTimestamp = a}) . mapping _Time
-
-instance FromJSON ResourceError where
-        parseJSON
-          = withObject "ResourceError"
-              (\ x ->
-                 ResourceError' <$>
-                   (x .:? "ErrorCode") <*> (x .:? "ErrorMessage") <*>
-                     (x .:? "ErrorTimestamp"))
-
-instance Hashable ResourceError where
-
-instance NFData ResourceError where
-
--- | Describes the credentials for the service account used by the streaming instance to connect to the directory.
---
---
---
--- /See:/ 'serviceAccountCredentials' smart constructor.
-data ServiceAccountCredentials = ServiceAccountCredentials'
-  { _sacAccountName     :: !(Sensitive Text)
-  , _sacAccountPassword :: !(Sensitive Text)
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ServiceAccountCredentials' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sacAccountName' - The user name of the account. This account must have the following privileges: create computer objects, join computers to the domain, and change/reset the password on descendant computer objects for the organizational units specified.
---
--- * 'sacAccountPassword' - The password for the account.
-serviceAccountCredentials
-    :: Text -- ^ 'sacAccountName'
-    -> Text -- ^ 'sacAccountPassword'
-    -> ServiceAccountCredentials
-serviceAccountCredentials pAccountName_ pAccountPassword_ =
-  ServiceAccountCredentials'
-    { _sacAccountName = _Sensitive # pAccountName_
-    , _sacAccountPassword = _Sensitive # pAccountPassword_
-    }
-
-
--- | The user name of the account. This account must have the following privileges: create computer objects, join computers to the domain, and change/reset the password on descendant computer objects for the organizational units specified.
-sacAccountName :: Lens' ServiceAccountCredentials Text
-sacAccountName = lens _sacAccountName (\ s a -> s{_sacAccountName = a}) . _Sensitive
-
--- | The password for the account.
-sacAccountPassword :: Lens' ServiceAccountCredentials Text
-sacAccountPassword = lens _sacAccountPassword (\ s a -> s{_sacAccountPassword = a}) . _Sensitive
-
-instance FromJSON ServiceAccountCredentials where
-        parseJSON
-          = withObject "ServiceAccountCredentials"
-              (\ x ->
-                 ServiceAccountCredentials' <$>
-                   (x .: "AccountName") <*> (x .: "AccountPassword"))
-
-instance Hashable ServiceAccountCredentials where
-
-instance NFData ServiceAccountCredentials where
-
-instance ToJSON ServiceAccountCredentials where
-        toJSON ServiceAccountCredentials'{..}
-          = object
-              (catMaybes
-                 [Just ("AccountName" .= _sacAccountName),
-                  Just ("AccountPassword" .= _sacAccountPassword)])
-
--- | Describes a streaming session.
---
---
---
--- /See:/ 'session' smart constructor.
-data Session = Session'
-  { _sAuthenticationType :: !(Maybe AuthenticationType)
-  , _sId                 :: !Text
-  , _sUserId             :: !Text
-  , _sStackName          :: !Text
-  , _sFleetName          :: !Text
-  , _sState              :: !SessionState
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Session' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sAuthenticationType' - The authentication method. The user is authenticated using a streaming URL (@API@ ) or SAML federation (@SAML@ ).
---
--- * 'sId' - The ID of the streaming session.
---
--- * 'sUserId' - The identifier of the user for whom the session was created.
---
--- * 'sStackName' - The name of the stack for the streaming session.
---
--- * 'sFleetName' - The name of the fleet for the streaming session.
---
--- * 'sState' - The current state of the streaming session.
-session
-    :: Text -- ^ 'sId'
-    -> Text -- ^ 'sUserId'
-    -> Text -- ^ 'sStackName'
-    -> Text -- ^ 'sFleetName'
-    -> SessionState -- ^ 'sState'
-    -> Session
-session pId_ pUserId_ pStackName_ pFleetName_ pState_ =
-  Session'
-    { _sAuthenticationType = Nothing
-    , _sId = pId_
-    , _sUserId = pUserId_
-    , _sStackName = pStackName_
-    , _sFleetName = pFleetName_
-    , _sState = pState_
-    }
-
-
--- | The authentication method. The user is authenticated using a streaming URL (@API@ ) or SAML federation (@SAML@ ).
-sAuthenticationType :: Lens' Session (Maybe AuthenticationType)
-sAuthenticationType = lens _sAuthenticationType (\ s a -> s{_sAuthenticationType = a})
-
--- | The ID of the streaming session.
-sId :: Lens' Session Text
-sId = lens _sId (\ s a -> s{_sId = a})
-
--- | The identifier of the user for whom the session was created.
-sUserId :: Lens' Session Text
-sUserId = lens _sUserId (\ s a -> s{_sUserId = a})
-
--- | The name of the stack for the streaming session.
-sStackName :: Lens' Session Text
-sStackName = lens _sStackName (\ s a -> s{_sStackName = a})
-
--- | The name of the fleet for the streaming session.
-sFleetName :: Lens' Session Text
-sFleetName = lens _sFleetName (\ s a -> s{_sFleetName = a})
-
--- | The current state of the streaming session.
-sState :: Lens' Session SessionState
-sState = lens _sState (\ s a -> s{_sState = a})
-
-instance FromJSON Session where
-        parseJSON
-          = withObject "Session"
-              (\ x ->
-                 Session' <$>
-                   (x .:? "AuthenticationType") <*> (x .: "Id") <*>
-                     (x .: "UserId")
-                     <*> (x .: "StackName")
-                     <*> (x .: "FleetName")
-                     <*> (x .: "State"))
-
-instance Hashable Session where
-
-instance NFData Session where
-
--- | Describes a stack.
---
---
---
--- /See:/ 'stack' smart constructor.
-data Stack = Stack'
-  { _sFeedbackURL       :: !(Maybe Text)
-  , _sARN               :: !(Maybe Text)
-  , _sCreatedTime       :: !(Maybe POSIX)
-  , _sStorageConnectors :: !(Maybe [StorageConnector])
-  , _sDisplayName       :: !(Maybe Text)
-  , _sStackErrors       :: !(Maybe [StackError])
-  , _sDescription       :: !(Maybe Text)
-  , _sRedirectURL       :: !(Maybe Text)
-  , _sName              :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Stack' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sFeedbackURL' - The URL that users are redirected to after they click the Send Feedback link. If no URL is specified, no Send Feedback link is displayed.
---
--- * 'sARN' - The ARN of the stack.
---
--- * 'sCreatedTime' - The time the stack was created.
---
--- * 'sStorageConnectors' - The storage connectors to enable.
---
--- * 'sDisplayName' - The stack name for display.
---
--- * 'sStackErrors' - The errors for the stack.
---
--- * 'sDescription' - The description for display.
---
--- * 'sRedirectURL' - The URL that users are redirected to after their streaming session ends.
---
--- * 'sName' - The name of the stack.
-stack
-    :: Text -- ^ 'sName'
-    -> Stack
-stack pName_ =
-  Stack'
-    { _sFeedbackURL = Nothing
-    , _sARN = Nothing
-    , _sCreatedTime = Nothing
-    , _sStorageConnectors = Nothing
-    , _sDisplayName = Nothing
-    , _sStackErrors = Nothing
-    , _sDescription = Nothing
-    , _sRedirectURL = Nothing
-    , _sName = pName_
-    }
-
-
--- | The URL that users are redirected to after they click the Send Feedback link. If no URL is specified, no Send Feedback link is displayed.
-sFeedbackURL :: Lens' Stack (Maybe Text)
-sFeedbackURL = lens _sFeedbackURL (\ s a -> s{_sFeedbackURL = a})
-
--- | The ARN of the stack.
-sARN :: Lens' Stack (Maybe Text)
-sARN = lens _sARN (\ s a -> s{_sARN = a})
-
--- | The time the stack was created.
-sCreatedTime :: Lens' Stack (Maybe UTCTime)
-sCreatedTime = lens _sCreatedTime (\ s a -> s{_sCreatedTime = a}) . mapping _Time
-
--- | The storage connectors to enable.
-sStorageConnectors :: Lens' Stack [StorageConnector]
-sStorageConnectors = lens _sStorageConnectors (\ s a -> s{_sStorageConnectors = a}) . _Default . _Coerce
-
--- | The stack name for display.
-sDisplayName :: Lens' Stack (Maybe Text)
-sDisplayName = lens _sDisplayName (\ s a -> s{_sDisplayName = a})
-
--- | The errors for the stack.
-sStackErrors :: Lens' Stack [StackError]
-sStackErrors = lens _sStackErrors (\ s a -> s{_sStackErrors = a}) . _Default . _Coerce
-
--- | The description for display.
-sDescription :: Lens' Stack (Maybe Text)
-sDescription = lens _sDescription (\ s a -> s{_sDescription = a})
-
--- | The URL that users are redirected to after their streaming session ends.
-sRedirectURL :: Lens' Stack (Maybe Text)
-sRedirectURL = lens _sRedirectURL (\ s a -> s{_sRedirectURL = a})
-
--- | The name of the stack.
-sName :: Lens' Stack Text
-sName = lens _sName (\ s a -> s{_sName = a})
-
-instance FromJSON Stack where
-        parseJSON
-          = withObject "Stack"
-              (\ x ->
-                 Stack' <$>
-                   (x .:? "FeedbackURL") <*> (x .:? "Arn") <*>
-                     (x .:? "CreatedTime")
-                     <*> (x .:? "StorageConnectors" .!= mempty)
-                     <*> (x .:? "DisplayName")
-                     <*> (x .:? "StackErrors" .!= mempty)
-                     <*> (x .:? "Description")
-                     <*> (x .:? "RedirectURL")
-                     <*> (x .: "Name"))
-
-instance Hashable Stack where
-
-instance NFData Stack where
-
--- | Describes a stack error.
---
---
---
--- /See:/ 'stackError' smart constructor.
-data StackError = StackError'
-  { _seErrorCode    :: !(Maybe StackErrorCode)
-  , _seErrorMessage :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StackError' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'seErrorCode' - The error code.
---
--- * 'seErrorMessage' - The error message.
-stackError
-    :: StackError
-stackError = StackError' {_seErrorCode = Nothing, _seErrorMessage = Nothing}
-
-
--- | The error code.
-seErrorCode :: Lens' StackError (Maybe StackErrorCode)
-seErrorCode = lens _seErrorCode (\ s a -> s{_seErrorCode = a})
-
--- | The error message.
-seErrorMessage :: Lens' StackError (Maybe Text)
-seErrorMessage = lens _seErrorMessage (\ s a -> s{_seErrorMessage = a})
-
-instance FromJSON StackError where
-        parseJSON
-          = withObject "StackError"
-              (\ x ->
-                 StackError' <$>
-                   (x .:? "ErrorCode") <*> (x .:? "ErrorMessage"))
-
-instance Hashable StackError where
-
-instance NFData StackError where
-
--- | Describes a storage connector.
---
---
---
--- /See:/ 'storageConnector' smart constructor.
-data StorageConnector = StorageConnector'
-  { _scResourceIdentifier :: !(Maybe Text)
-  , _scConnectorType      :: !StorageConnectorType
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StorageConnector' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'scResourceIdentifier' - The ARN of the storage connector.
---
--- * 'scConnectorType' - The type of storage connector.
-storageConnector
-    :: StorageConnectorType -- ^ 'scConnectorType'
-    -> StorageConnector
-storageConnector pConnectorType_ =
-  StorageConnector'
-    {_scResourceIdentifier = Nothing, _scConnectorType = pConnectorType_}
-
-
--- | The ARN of the storage connector.
-scResourceIdentifier :: Lens' StorageConnector (Maybe Text)
-scResourceIdentifier = lens _scResourceIdentifier (\ s a -> s{_scResourceIdentifier = a})
-
--- | The type of storage connector.
-scConnectorType :: Lens' StorageConnector StorageConnectorType
-scConnectorType = lens _scConnectorType (\ s a -> s{_scConnectorType = a})
-
-instance FromJSON StorageConnector where
-        parseJSON
-          = withObject "StorageConnector"
-              (\ x ->
-                 StorageConnector' <$>
-                   (x .:? "ResourceIdentifier") <*>
-                     (x .: "ConnectorType"))
-
-instance Hashable StorageConnector where
-
-instance NFData StorageConnector where
-
-instance ToJSON StorageConnector where
-        toJSON StorageConnector'{..}
-          = object
-              (catMaybes
-                 [("ResourceIdentifier" .=) <$> _scResourceIdentifier,
-                  Just ("ConnectorType" .= _scConnectorType)])
-
--- | Describes VPC configuration information.
---
---
---
--- /See:/ 'vpcConfig' smart constructor.
-data VPCConfig = VPCConfig'
-  { _vcSecurityGroupIds :: !(Maybe [Text])
-  , _vcSubnetIds        :: !(Maybe [Text])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'VPCConfig' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vcSecurityGroupIds' - The security groups for the fleet.
---
--- * 'vcSubnetIds' - The subnets to which a network interface is established from the fleet instance.
-vpcConfig
-    :: VPCConfig
-vpcConfig = VPCConfig' {_vcSecurityGroupIds = Nothing, _vcSubnetIds = Nothing}
-
-
--- | The security groups for the fleet.
-vcSecurityGroupIds :: Lens' VPCConfig [Text]
-vcSecurityGroupIds = lens _vcSecurityGroupIds (\ s a -> s{_vcSecurityGroupIds = a}) . _Default . _Coerce
-
--- | The subnets to which a network interface is established from the fleet instance.
-vcSubnetIds :: Lens' VPCConfig [Text]
-vcSubnetIds = lens _vcSubnetIds (\ s a -> s{_vcSubnetIds = a}) . _Default . _Coerce
-
-instance FromJSON VPCConfig where
-        parseJSON
-          = withObject "VPCConfig"
-              (\ x ->
-                 VPCConfig' <$>
-                   (x .:? "SecurityGroupIds" .!= mempty) <*>
-                     (x .:? "SubnetIds" .!= mempty))
-
-instance Hashable VPCConfig where
-
-instance NFData VPCConfig where
-
-instance ToJSON VPCConfig where
-        toJSON VPCConfig'{..}
-          = object
-              (catMaybes
-                 [("SecurityGroupIds" .=) <$> _vcSecurityGroupIds,
-                  ("SubnetIds" .=) <$> _vcSubnetIds])
diff --git a/gen/Network/AWS/AppStream/Types/Sum.hs b/gen/Network/AWS/AppStream/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/Types/Sum.hs
+++ /dev/null
@@ -1,563 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE LambdaCase         #-}
-{-# LANGUAGE OverloadedStrings  #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.Types.Sum
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.AppStream.Types.Sum where
-
-import Network.AWS.Prelude
-
-data AuthenticationType
-  = API
-  | Saml
-  | Userpool
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText AuthenticationType where
-    parser = takeLowerText >>= \case
-        "api" -> pure API
-        "saml" -> pure Saml
-        "userpool" -> pure Userpool
-        e -> fromTextError $ "Failure parsing AuthenticationType from value: '" <> e
-           <> "'. Accepted values: api, saml, userpool"
-
-instance ToText AuthenticationType where
-    toText = \case
-        API -> "API"
-        Saml -> "SAML"
-        Userpool -> "USERPOOL"
-
-instance Hashable     AuthenticationType
-instance NFData       AuthenticationType
-instance ToByteString AuthenticationType
-instance ToQuery      AuthenticationType
-instance ToHeader     AuthenticationType
-
-instance ToJSON AuthenticationType where
-    toJSON = toJSONText
-
-instance FromJSON AuthenticationType where
-    parseJSON = parseJSONText "AuthenticationType"
-
--- | The fleet attribute.
---
---
-data FleetAttribute
-  = DomainJoinInfo
-  | VPCConfiguration
-  | VPCConfigurationSecurityGroupIds
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText FleetAttribute where
-    parser = takeLowerText >>= \case
-        "domain_join_info" -> pure DomainJoinInfo
-        "vpc_configuration" -> pure VPCConfiguration
-        "vpc_configuration_security_group_ids" -> pure VPCConfigurationSecurityGroupIds
-        e -> fromTextError $ "Failure parsing FleetAttribute from value: '" <> e
-           <> "'. Accepted values: domain_join_info, vpc_configuration, vpc_configuration_security_group_ids"
-
-instance ToText FleetAttribute where
-    toText = \case
-        DomainJoinInfo -> "DOMAIN_JOIN_INFO"
-        VPCConfiguration -> "VPC_CONFIGURATION"
-        VPCConfigurationSecurityGroupIds -> "VPC_CONFIGURATION_SECURITY_GROUP_IDS"
-
-instance Hashable     FleetAttribute
-instance NFData       FleetAttribute
-instance ToByteString FleetAttribute
-instance ToQuery      FleetAttribute
-instance ToHeader     FleetAttribute
-
-instance ToJSON FleetAttribute where
-    toJSON = toJSONText
-
-data FleetErrorCode
-  = DomainJoinErrorAccessDenied
-  | DomainJoinErrorDsMachineAccountQuotaExceeded
-  | DomainJoinErrorFileNotFound
-  | DomainJoinErrorInvalidParameter
-  | DomainJoinErrorLogonFailure
-  | DomainJoinErrorMoreData
-  | DomainJoinErrorNoSuchDomain
-  | DomainJoinErrorNotSupported
-  | DomainJoinInternalServiceError
-  | DomainJoinNerrInvalidWorkgroupName
-  | DomainJoinNerrPasswordExpired
-  | DomainJoinNerrWorkstationNotStarted
-  | IAMServiceRoleIsMissing
-  | IAMServiceRoleMissingDescribeSecurityGroupsAction
-  | IAMServiceRoleMissingDescribeSubnetAction
-  | IAMServiceRoleMissingEniCreateAction
-  | IAMServiceRoleMissingEniDeleteAction
-  | IAMServiceRoleMissingEniDescribeAction
-  | IgwNotAttached
-  | ImageNotFound
-  | InternalServiceError
-  | InvalidSubnetConfiguration
-  | NetworkInterfaceLimitExceeded
-  | SecurityGroupsNotFound
-  | SubnetHasInsufficientIPAddresses
-  | SubnetNotFound
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText FleetErrorCode where
-    parser = takeLowerText >>= \case
-        "domain_join_error_access_denied" -> pure DomainJoinErrorAccessDenied
-        "domain_join_error_ds_machine_account_quota_exceeded" -> pure DomainJoinErrorDsMachineAccountQuotaExceeded
-        "domain_join_error_file_not_found" -> pure DomainJoinErrorFileNotFound
-        "domain_join_error_invalid_parameter" -> pure DomainJoinErrorInvalidParameter
-        "domain_join_error_logon_failure" -> pure DomainJoinErrorLogonFailure
-        "domain_join_error_more_data" -> pure DomainJoinErrorMoreData
-        "domain_join_error_no_such_domain" -> pure DomainJoinErrorNoSuchDomain
-        "domain_join_error_not_supported" -> pure DomainJoinErrorNotSupported
-        "domain_join_internal_service_error" -> pure DomainJoinInternalServiceError
-        "domain_join_nerr_invalid_workgroup_name" -> pure DomainJoinNerrInvalidWorkgroupName
-        "domain_join_nerr_password_expired" -> pure DomainJoinNerrPasswordExpired
-        "domain_join_nerr_workstation_not_started" -> pure DomainJoinNerrWorkstationNotStarted
-        "iam_service_role_is_missing" -> pure IAMServiceRoleIsMissing
-        "iam_service_role_missing_describe_security_groups_action" -> pure IAMServiceRoleMissingDescribeSecurityGroupsAction
-        "iam_service_role_missing_describe_subnet_action" -> pure IAMServiceRoleMissingDescribeSubnetAction
-        "iam_service_role_missing_eni_create_action" -> pure IAMServiceRoleMissingEniCreateAction
-        "iam_service_role_missing_eni_delete_action" -> pure IAMServiceRoleMissingEniDeleteAction
-        "iam_service_role_missing_eni_describe_action" -> pure IAMServiceRoleMissingEniDescribeAction
-        "igw_not_attached" -> pure IgwNotAttached
-        "image_not_found" -> pure ImageNotFound
-        "internal_service_error" -> pure InternalServiceError
-        "invalid_subnet_configuration" -> pure InvalidSubnetConfiguration
-        "network_interface_limit_exceeded" -> pure NetworkInterfaceLimitExceeded
-        "security_groups_not_found" -> pure SecurityGroupsNotFound
-        "subnet_has_insufficient_ip_addresses" -> pure SubnetHasInsufficientIPAddresses
-        "subnet_not_found" -> pure SubnetNotFound
-        e -> fromTextError $ "Failure parsing FleetErrorCode from value: '" <> e
-           <> "'. Accepted values: domain_join_error_access_denied, domain_join_error_ds_machine_account_quota_exceeded, domain_join_error_file_not_found, domain_join_error_invalid_parameter, domain_join_error_logon_failure, domain_join_error_more_data, domain_join_error_no_such_domain, domain_join_error_not_supported, domain_join_internal_service_error, domain_join_nerr_invalid_workgroup_name, domain_join_nerr_password_expired, domain_join_nerr_workstation_not_started, iam_service_role_is_missing, iam_service_role_missing_describe_security_groups_action, iam_service_role_missing_describe_subnet_action, iam_service_role_missing_eni_create_action, iam_service_role_missing_eni_delete_action, iam_service_role_missing_eni_describe_action, igw_not_attached, image_not_found, internal_service_error, invalid_subnet_configuration, network_interface_limit_exceeded, security_groups_not_found, subnet_has_insufficient_ip_addresses, subnet_not_found"
-
-instance ToText FleetErrorCode where
-    toText = \case
-        DomainJoinErrorAccessDenied -> "DOMAIN_JOIN_ERROR_ACCESS_DENIED"
-        DomainJoinErrorDsMachineAccountQuotaExceeded -> "DOMAIN_JOIN_ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED"
-        DomainJoinErrorFileNotFound -> "DOMAIN_JOIN_ERROR_FILE_NOT_FOUND"
-        DomainJoinErrorInvalidParameter -> "DOMAIN_JOIN_ERROR_INVALID_PARAMETER"
-        DomainJoinErrorLogonFailure -> "DOMAIN_JOIN_ERROR_LOGON_FAILURE"
-        DomainJoinErrorMoreData -> "DOMAIN_JOIN_ERROR_MORE_DATA"
-        DomainJoinErrorNoSuchDomain -> "DOMAIN_JOIN_ERROR_NO_SUCH_DOMAIN"
-        DomainJoinErrorNotSupported -> "DOMAIN_JOIN_ERROR_NOT_SUPPORTED"
-        DomainJoinInternalServiceError -> "DOMAIN_JOIN_INTERNAL_SERVICE_ERROR"
-        DomainJoinNerrInvalidWorkgroupName -> "DOMAIN_JOIN_NERR_INVALID_WORKGROUP_NAME"
-        DomainJoinNerrPasswordExpired -> "DOMAIN_JOIN_NERR_PASSWORD_EXPIRED"
-        DomainJoinNerrWorkstationNotStarted -> "DOMAIN_JOIN_NERR_WORKSTATION_NOT_STARTED"
-        IAMServiceRoleIsMissing -> "IAM_SERVICE_ROLE_IS_MISSING"
-        IAMServiceRoleMissingDescribeSecurityGroupsAction -> "IAM_SERVICE_ROLE_MISSING_DESCRIBE_SECURITY_GROUPS_ACTION"
-        IAMServiceRoleMissingDescribeSubnetAction -> "IAM_SERVICE_ROLE_MISSING_DESCRIBE_SUBNET_ACTION"
-        IAMServiceRoleMissingEniCreateAction -> "IAM_SERVICE_ROLE_MISSING_ENI_CREATE_ACTION"
-        IAMServiceRoleMissingEniDeleteAction -> "IAM_SERVICE_ROLE_MISSING_ENI_DELETE_ACTION"
-        IAMServiceRoleMissingEniDescribeAction -> "IAM_SERVICE_ROLE_MISSING_ENI_DESCRIBE_ACTION"
-        IgwNotAttached -> "IGW_NOT_ATTACHED"
-        ImageNotFound -> "IMAGE_NOT_FOUND"
-        InternalServiceError -> "INTERNAL_SERVICE_ERROR"
-        InvalidSubnetConfiguration -> "INVALID_SUBNET_CONFIGURATION"
-        NetworkInterfaceLimitExceeded -> "NETWORK_INTERFACE_LIMIT_EXCEEDED"
-        SecurityGroupsNotFound -> "SECURITY_GROUPS_NOT_FOUND"
-        SubnetHasInsufficientIPAddresses -> "SUBNET_HAS_INSUFFICIENT_IP_ADDRESSES"
-        SubnetNotFound -> "SUBNET_NOT_FOUND"
-
-instance Hashable     FleetErrorCode
-instance NFData       FleetErrorCode
-instance ToByteString FleetErrorCode
-instance ToQuery      FleetErrorCode
-instance ToHeader     FleetErrorCode
-
-instance FromJSON FleetErrorCode where
-    parseJSON = parseJSONText "FleetErrorCode"
-
-data FleetState
-  = Running
-  | Starting
-  | Stopped
-  | Stopping
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText FleetState where
-    parser = takeLowerText >>= \case
-        "running" -> pure Running
-        "starting" -> pure Starting
-        "stopped" -> pure Stopped
-        "stopping" -> pure Stopping
-        e -> fromTextError $ "Failure parsing FleetState from value: '" <> e
-           <> "'. Accepted values: running, starting, stopped, stopping"
-
-instance ToText FleetState where
-    toText = \case
-        Running -> "RUNNING"
-        Starting -> "STARTING"
-        Stopped -> "STOPPED"
-        Stopping -> "STOPPING"
-
-instance Hashable     FleetState
-instance NFData       FleetState
-instance ToByteString FleetState
-instance ToQuery      FleetState
-instance ToHeader     FleetState
-
-instance FromJSON FleetState where
-    parseJSON = parseJSONText "FleetState"
-
-data FleetType
-  = AlwaysOn
-  | OnDemand
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText FleetType where
-    parser = takeLowerText >>= \case
-        "always_on" -> pure AlwaysOn
-        "on_demand" -> pure OnDemand
-        e -> fromTextError $ "Failure parsing FleetType from value: '" <> e
-           <> "'. Accepted values: always_on, on_demand"
-
-instance ToText FleetType where
-    toText = \case
-        AlwaysOn -> "ALWAYS_ON"
-        OnDemand -> "ON_DEMAND"
-
-instance Hashable     FleetType
-instance NFData       FleetType
-instance ToByteString FleetType
-instance ToQuery      FleetType
-instance ToHeader     FleetType
-
-instance ToJSON FleetType where
-    toJSON = toJSONText
-
-instance FromJSON FleetType where
-    parseJSON = parseJSONText "FleetType"
-
-data ImageBuilderState
-  = IBSDeleting
-  | IBSFailed
-  | IBSPending
-  | IBSRebooting
-  | IBSRunning
-  | IBSSnapshotting
-  | IBSStopped
-  | IBSStopping
-  | IBSUpdatingAgent
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ImageBuilderState where
-    parser = takeLowerText >>= \case
-        "deleting" -> pure IBSDeleting
-        "failed" -> pure IBSFailed
-        "pending" -> pure IBSPending
-        "rebooting" -> pure IBSRebooting
-        "running" -> pure IBSRunning
-        "snapshotting" -> pure IBSSnapshotting
-        "stopped" -> pure IBSStopped
-        "stopping" -> pure IBSStopping
-        "updating_agent" -> pure IBSUpdatingAgent
-        e -> fromTextError $ "Failure parsing ImageBuilderState from value: '" <> e
-           <> "'. Accepted values: deleting, failed, pending, rebooting, running, snapshotting, stopped, stopping, updating_agent"
-
-instance ToText ImageBuilderState where
-    toText = \case
-        IBSDeleting -> "DELETING"
-        IBSFailed -> "FAILED"
-        IBSPending -> "PENDING"
-        IBSRebooting -> "REBOOTING"
-        IBSRunning -> "RUNNING"
-        IBSSnapshotting -> "SNAPSHOTTING"
-        IBSStopped -> "STOPPED"
-        IBSStopping -> "STOPPING"
-        IBSUpdatingAgent -> "UPDATING_AGENT"
-
-instance Hashable     ImageBuilderState
-instance NFData       ImageBuilderState
-instance ToByteString ImageBuilderState
-instance ToQuery      ImageBuilderState
-instance ToHeader     ImageBuilderState
-
-instance FromJSON ImageBuilderState where
-    parseJSON = parseJSONText "ImageBuilderState"
-
-data ImageBuilderStateChangeReasonCode
-  = ImageUnavailable
-  | InternalError
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ImageBuilderStateChangeReasonCode where
-    parser = takeLowerText >>= \case
-        "image_unavailable" -> pure ImageUnavailable
-        "internal_error" -> pure InternalError
-        e -> fromTextError $ "Failure parsing ImageBuilderStateChangeReasonCode from value: '" <> e
-           <> "'. Accepted values: image_unavailable, internal_error"
-
-instance ToText ImageBuilderStateChangeReasonCode where
-    toText = \case
-        ImageUnavailable -> "IMAGE_UNAVAILABLE"
-        InternalError -> "INTERNAL_ERROR"
-
-instance Hashable     ImageBuilderStateChangeReasonCode
-instance NFData       ImageBuilderStateChangeReasonCode
-instance ToByteString ImageBuilderStateChangeReasonCode
-instance ToQuery      ImageBuilderStateChangeReasonCode
-instance ToHeader     ImageBuilderStateChangeReasonCode
-
-instance FromJSON ImageBuilderStateChangeReasonCode where
-    parseJSON = parseJSONText "ImageBuilderStateChangeReasonCode"
-
-data ImageState
-  = ISAvailable
-  | ISCopying
-  | ISDeleting
-  | ISFailed
-  | ISPending
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ImageState where
-    parser = takeLowerText >>= \case
-        "available" -> pure ISAvailable
-        "copying" -> pure ISCopying
-        "deleting" -> pure ISDeleting
-        "failed" -> pure ISFailed
-        "pending" -> pure ISPending
-        e -> fromTextError $ "Failure parsing ImageState from value: '" <> e
-           <> "'. Accepted values: available, copying, deleting, failed, pending"
-
-instance ToText ImageState where
-    toText = \case
-        ISAvailable -> "AVAILABLE"
-        ISCopying -> "COPYING"
-        ISDeleting -> "DELETING"
-        ISFailed -> "FAILED"
-        ISPending -> "PENDING"
-
-instance Hashable     ImageState
-instance NFData       ImageState
-instance ToByteString ImageState
-instance ToQuery      ImageState
-instance ToHeader     ImageState
-
-instance FromJSON ImageState where
-    parseJSON = parseJSONText "ImageState"
-
-data ImageStateChangeReasonCode
-  = ISCRCImageBuilderNotAvailable
-  | ISCRCImageCopyFailure
-  | ISCRCInternalError
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ImageStateChangeReasonCode where
-    parser = takeLowerText >>= \case
-        "image_builder_not_available" -> pure ISCRCImageBuilderNotAvailable
-        "image_copy_failure" -> pure ISCRCImageCopyFailure
-        "internal_error" -> pure ISCRCInternalError
-        e -> fromTextError $ "Failure parsing ImageStateChangeReasonCode from value: '" <> e
-           <> "'. Accepted values: image_builder_not_available, image_copy_failure, internal_error"
-
-instance ToText ImageStateChangeReasonCode where
-    toText = \case
-        ISCRCImageBuilderNotAvailable -> "IMAGE_BUILDER_NOT_AVAILABLE"
-        ISCRCImageCopyFailure -> "IMAGE_COPY_FAILURE"
-        ISCRCInternalError -> "INTERNAL_ERROR"
-
-instance Hashable     ImageStateChangeReasonCode
-instance NFData       ImageStateChangeReasonCode
-instance ToByteString ImageStateChangeReasonCode
-instance ToQuery      ImageStateChangeReasonCode
-instance ToHeader     ImageStateChangeReasonCode
-
-instance FromJSON ImageStateChangeReasonCode where
-    parseJSON = parseJSONText "ImageStateChangeReasonCode"
-
-data PlatformType =
-  Windows
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText PlatformType where
-    parser = takeLowerText >>= \case
-        "windows" -> pure Windows
-        e -> fromTextError $ "Failure parsing PlatformType from value: '" <> e
-           <> "'. Accepted values: windows"
-
-instance ToText PlatformType where
-    toText = \case
-        Windows -> "WINDOWS"
-
-instance Hashable     PlatformType
-instance NFData       PlatformType
-instance ToByteString PlatformType
-instance ToQuery      PlatformType
-instance ToHeader     PlatformType
-
-instance FromJSON PlatformType where
-    parseJSON = parseJSONText "PlatformType"
-
--- | Possible values for the state of a streaming session.
---
---
-data SessionState
-  = Active
-  | Expired
-  | Pending
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText SessionState where
-    parser = takeLowerText >>= \case
-        "active" -> pure Active
-        "expired" -> pure Expired
-        "pending" -> pure Pending
-        e -> fromTextError $ "Failure parsing SessionState from value: '" <> e
-           <> "'. Accepted values: active, expired, pending"
-
-instance ToText SessionState where
-    toText = \case
-        Active -> "ACTIVE"
-        Expired -> "EXPIRED"
-        Pending -> "PENDING"
-
-instance Hashable     SessionState
-instance NFData       SessionState
-instance ToByteString SessionState
-instance ToQuery      SessionState
-instance ToHeader     SessionState
-
-instance FromJSON SessionState where
-    parseJSON = parseJSONText "SessionState"
-
-data StackAttribute
-  = FeedbackURL
-  | RedirectURL
-  | StorageConnectors
-  | ThemeName
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText StackAttribute where
-    parser = takeLowerText >>= \case
-        "feedback_url" -> pure FeedbackURL
-        "redirect_url" -> pure RedirectURL
-        "storage_connectors" -> pure StorageConnectors
-        "theme_name" -> pure ThemeName
-        e -> fromTextError $ "Failure parsing StackAttribute from value: '" <> e
-           <> "'. Accepted values: feedback_url, redirect_url, storage_connectors, theme_name"
-
-instance ToText StackAttribute where
-    toText = \case
-        FeedbackURL -> "FEEDBACK_URL"
-        RedirectURL -> "REDIRECT_URL"
-        StorageConnectors -> "STORAGE_CONNECTORS"
-        ThemeName -> "THEME_NAME"
-
-instance Hashable     StackAttribute
-instance NFData       StackAttribute
-instance ToByteString StackAttribute
-instance ToQuery      StackAttribute
-instance ToHeader     StackAttribute
-
-instance ToJSON StackAttribute where
-    toJSON = toJSONText
-
-data StackErrorCode
-  = SECInternalServiceError
-  | SECStorageConnectorError
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText StackErrorCode where
-    parser = takeLowerText >>= \case
-        "internal_service_error" -> pure SECInternalServiceError
-        "storage_connector_error" -> pure SECStorageConnectorError
-        e -> fromTextError $ "Failure parsing StackErrorCode from value: '" <> e
-           <> "'. Accepted values: internal_service_error, storage_connector_error"
-
-instance ToText StackErrorCode where
-    toText = \case
-        SECInternalServiceError -> "INTERNAL_SERVICE_ERROR"
-        SECStorageConnectorError -> "STORAGE_CONNECTOR_ERROR"
-
-instance Hashable     StackErrorCode
-instance NFData       StackErrorCode
-instance ToByteString StackErrorCode
-instance ToQuery      StackErrorCode
-instance ToHeader     StackErrorCode
-
-instance FromJSON StackErrorCode where
-    parseJSON = parseJSONText "StackErrorCode"
-
--- | The type of storage connector.
---
---
-data StorageConnectorType =
-  Homefolders
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText StorageConnectorType where
-    parser = takeLowerText >>= \case
-        "homefolders" -> pure Homefolders
-        e -> fromTextError $ "Failure parsing StorageConnectorType from value: '" <> e
-           <> "'. Accepted values: homefolders"
-
-instance ToText StorageConnectorType where
-    toText = \case
-        Homefolders -> "HOMEFOLDERS"
-
-instance Hashable     StorageConnectorType
-instance NFData       StorageConnectorType
-instance ToByteString StorageConnectorType
-instance ToQuery      StorageConnectorType
-instance ToHeader     StorageConnectorType
-
-instance ToJSON StorageConnectorType where
-    toJSON = toJSONText
-
-instance FromJSON StorageConnectorType where
-    parseJSON = parseJSONText "StorageConnectorType"
-
-data VisibilityType
-  = Private
-  | Public
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText VisibilityType where
-    parser = takeLowerText >>= \case
-        "private" -> pure Private
-        "public" -> pure Public
-        e -> fromTextError $ "Failure parsing VisibilityType from value: '" <> e
-           <> "'. Accepted values: private, public"
-
-instance ToText VisibilityType where
-    toText = \case
-        Private -> "PRIVATE"
-        Public -> "PUBLIC"
-
-instance Hashable     VisibilityType
-instance NFData       VisibilityType
-instance ToByteString VisibilityType
-instance ToQuery      VisibilityType
-instance ToHeader     VisibilityType
-
-instance FromJSON VisibilityType where
-    parseJSON = parseJSONText "VisibilityType"
diff --git a/gen/Network/AWS/AppStream/UntagResource.hs b/gen/Network/AWS/AppStream/UntagResource.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/UntagResource.hs
+++ /dev/null
@@ -1,139 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.UntagResource
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Disassociates the specified tags from the specified AppStream 2.0 resource.
---
---
--- To list the current tags for your resources, use 'ListTagsForResource' .
---
--- For more information about tags, see <http://docs.aws.amazon.com/appstream2/latest/developerguide/tagging-basic.html Tagging Your Resources> in the /Amazon AppStream 2.0 Developer Guide/ .
---
-module Network.AWS.AppStream.UntagResource
-    (
-    -- * Creating a Request
-      untagResource
-    , UntagResource
-    -- * Request Lenses
-    , urResourceARN
-    , urTagKeys
-
-    -- * Destructuring the Response
-    , untagResourceResponse
-    , UntagResourceResponse
-    -- * Response Lenses
-    , urrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'untagResource' smart constructor.
-data UntagResource = UntagResource'
-  { _urResourceARN :: !Text
-  , _urTagKeys     :: !(List1 Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UntagResource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urResourceARN' - The Amazon Resource Name (ARN) of the resource.
---
--- * 'urTagKeys' - The tag keys for the tags to disassociate.
-untagResource
-    :: Text -- ^ 'urResourceARN'
-    -> NonEmpty Text -- ^ 'urTagKeys'
-    -> UntagResource
-untagResource pResourceARN_ pTagKeys_ =
-  UntagResource'
-    {_urResourceARN = pResourceARN_, _urTagKeys = _List1 # pTagKeys_}
-
-
--- | The Amazon Resource Name (ARN) of the resource.
-urResourceARN :: Lens' UntagResource Text
-urResourceARN = lens _urResourceARN (\ s a -> s{_urResourceARN = a})
-
--- | The tag keys for the tags to disassociate.
-urTagKeys :: Lens' UntagResource (NonEmpty Text)
-urTagKeys = lens _urTagKeys (\ s a -> s{_urTagKeys = a}) . _List1
-
-instance AWSRequest UntagResource where
-        type Rs UntagResource = UntagResourceResponse
-        request = postJSON appStream
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UntagResourceResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UntagResource where
-
-instance NFData UntagResource where
-
-instance ToHeaders UntagResource where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.UntagResource" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UntagResource where
-        toJSON UntagResource'{..}
-          = object
-              (catMaybes
-                 [Just ("ResourceArn" .= _urResourceARN),
-                  Just ("TagKeys" .= _urTagKeys)])
-
-instance ToPath UntagResource where
-        toPath = const "/"
-
-instance ToQuery UntagResource where
-        toQuery = const mempty
-
--- | /See:/ 'untagResourceResponse' smart constructor.
-newtype UntagResourceResponse = UntagResourceResponse'
-  { _urrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UntagResourceResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urrsResponseStatus' - -- | The response status code.
-untagResourceResponse
-    :: Int -- ^ 'urrsResponseStatus'
-    -> UntagResourceResponse
-untagResourceResponse pResponseStatus_ =
-  UntagResourceResponse' {_urrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-urrsResponseStatus :: Lens' UntagResourceResponse Int
-urrsResponseStatus = lens _urrsResponseStatus (\ s a -> s{_urrsResponseStatus = a})
-
-instance NFData UntagResourceResponse where
diff --git a/gen/Network/AWS/AppStream/UpdateDirectoryConfig.hs b/gen/Network/AWS/AppStream/UpdateDirectoryConfig.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/UpdateDirectoryConfig.hs
+++ /dev/null
@@ -1,159 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.UpdateDirectoryConfig
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates the specified directory configuration.
---
---
-module Network.AWS.AppStream.UpdateDirectoryConfig
-    (
-    -- * Creating a Request
-      updateDirectoryConfig
-    , UpdateDirectoryConfig
-    -- * Request Lenses
-    , udcServiceAccountCredentials
-    , udcOrganizationalUnitDistinguishedNames
-    , udcDirectoryName
-
-    -- * Destructuring the Response
-    , updateDirectoryConfigResponse
-    , UpdateDirectoryConfigResponse
-    -- * Response Lenses
-    , udcrsDirectoryConfig
-    , udcrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateDirectoryConfig' smart constructor.
-data UpdateDirectoryConfig = UpdateDirectoryConfig'
-  { _udcServiceAccountCredentials :: !(Maybe ServiceAccountCredentials)
-  , _udcOrganizationalUnitDistinguishedNames :: !(Maybe [Text])
-  , _udcDirectoryName :: !Text
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateDirectoryConfig' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'udcServiceAccountCredentials' - The credentials for the service account used by the streaming instance to connect to the directory.
---
--- * 'udcOrganizationalUnitDistinguishedNames' - The distinguished names of the organizational units for computer accounts.
---
--- * 'udcDirectoryName' - The name of the directory configuration.
-updateDirectoryConfig
-    :: Text -- ^ 'udcDirectoryName'
-    -> UpdateDirectoryConfig
-updateDirectoryConfig pDirectoryName_ =
-  UpdateDirectoryConfig'
-    { _udcServiceAccountCredentials = Nothing
-    , _udcOrganizationalUnitDistinguishedNames = Nothing
-    , _udcDirectoryName = pDirectoryName_
-    }
-
-
--- | The credentials for the service account used by the streaming instance to connect to the directory.
-udcServiceAccountCredentials :: Lens' UpdateDirectoryConfig (Maybe ServiceAccountCredentials)
-udcServiceAccountCredentials = lens _udcServiceAccountCredentials (\ s a -> s{_udcServiceAccountCredentials = a})
-
--- | The distinguished names of the organizational units for computer accounts.
-udcOrganizationalUnitDistinguishedNames :: Lens' UpdateDirectoryConfig [Text]
-udcOrganizationalUnitDistinguishedNames = lens _udcOrganizationalUnitDistinguishedNames (\ s a -> s{_udcOrganizationalUnitDistinguishedNames = a}) . _Default . _Coerce
-
--- | The name of the directory configuration.
-udcDirectoryName :: Lens' UpdateDirectoryConfig Text
-udcDirectoryName = lens _udcDirectoryName (\ s a -> s{_udcDirectoryName = a})
-
-instance AWSRequest UpdateDirectoryConfig where
-        type Rs UpdateDirectoryConfig =
-             UpdateDirectoryConfigResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 UpdateDirectoryConfigResponse' <$>
-                   (x .?> "DirectoryConfig") <*> (pure (fromEnum s)))
-
-instance Hashable UpdateDirectoryConfig where
-
-instance NFData UpdateDirectoryConfig where
-
-instance ToHeaders UpdateDirectoryConfig where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.UpdateDirectoryConfig" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateDirectoryConfig where
-        toJSON UpdateDirectoryConfig'{..}
-          = object
-              (catMaybes
-                 [("ServiceAccountCredentials" .=) <$>
-                    _udcServiceAccountCredentials,
-                  ("OrganizationalUnitDistinguishedNames" .=) <$>
-                    _udcOrganizationalUnitDistinguishedNames,
-                  Just ("DirectoryName" .= _udcDirectoryName)])
-
-instance ToPath UpdateDirectoryConfig where
-        toPath = const "/"
-
-instance ToQuery UpdateDirectoryConfig where
-        toQuery = const mempty
-
--- | /See:/ 'updateDirectoryConfigResponse' smart constructor.
-data UpdateDirectoryConfigResponse = UpdateDirectoryConfigResponse'
-  { _udcrsDirectoryConfig :: !(Maybe DirectoryConfig)
-  , _udcrsResponseStatus  :: !Int
-  } deriving (Eq, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateDirectoryConfigResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'udcrsDirectoryConfig' - Information about the directory configuration.
---
--- * 'udcrsResponseStatus' - -- | The response status code.
-updateDirectoryConfigResponse
-    :: Int -- ^ 'udcrsResponseStatus'
-    -> UpdateDirectoryConfigResponse
-updateDirectoryConfigResponse pResponseStatus_ =
-  UpdateDirectoryConfigResponse'
-    {_udcrsDirectoryConfig = Nothing, _udcrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the directory configuration.
-udcrsDirectoryConfig :: Lens' UpdateDirectoryConfigResponse (Maybe DirectoryConfig)
-udcrsDirectoryConfig = lens _udcrsDirectoryConfig (\ s a -> s{_udcrsDirectoryConfig = a})
-
--- | -- | The response status code.
-udcrsResponseStatus :: Lens' UpdateDirectoryConfigResponse Int
-udcrsResponseStatus = lens _udcrsResponseStatus (\ s a -> s{_udcrsResponseStatus = a})
-
-instance NFData UpdateDirectoryConfigResponse where
diff --git a/gen/Network/AWS/AppStream/UpdateFleet.hs b/gen/Network/AWS/AppStream/UpdateFleet.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/UpdateFleet.hs
+++ /dev/null
@@ -1,261 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.UpdateFleet
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates the specified fleet.
---
---
--- If the fleet is in the @STOPPED@ state, you can update any attribute except the fleet name. If the fleet is in the @RUNNING@ state, you can update the @DisplayName@ and @ComputeCapacity@ attributes. If the fleet is in the @STARTING@ or @STOPPING@ state, you can't update it.
---
-module Network.AWS.AppStream.UpdateFleet
-    (
-    -- * Creating a Request
-      updateFleet
-    , UpdateFleet
-    -- * Request Lenses
-    , ufDomainJoinInfo
-    , ufDisconnectTimeoutInSeconds
-    , ufMaxUserDurationInSeconds
-    , ufAttributesToDelete
-    , ufDeleteVPCConfig
-    , ufInstanceType
-    , ufVPCConfig
-    , ufDisplayName
-    , ufEnableDefaultInternetAccess
-    , ufImageName
-    , ufDescription
-    , ufComputeCapacity
-    , ufName
-
-    -- * Destructuring the Response
-    , updateFleetResponse
-    , UpdateFleetResponse
-    -- * Response Lenses
-    , ufrsFleet
-    , ufrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateFleet' smart constructor.
-data UpdateFleet = UpdateFleet'
-  { _ufDomainJoinInfo              :: !(Maybe DomainJoinInfo)
-  , _ufDisconnectTimeoutInSeconds  :: !(Maybe Int)
-  , _ufMaxUserDurationInSeconds    :: !(Maybe Int)
-  , _ufAttributesToDelete          :: !(Maybe [FleetAttribute])
-  , _ufDeleteVPCConfig             :: !(Maybe Bool)
-  , _ufInstanceType                :: !(Maybe Text)
-  , _ufVPCConfig                   :: !(Maybe VPCConfig)
-  , _ufDisplayName                 :: !(Maybe Text)
-  , _ufEnableDefaultInternetAccess :: !(Maybe Bool)
-  , _ufImageName                   :: !(Maybe Text)
-  , _ufDescription                 :: !(Maybe Text)
-  , _ufComputeCapacity             :: !(Maybe ComputeCapacity)
-  , _ufName                        :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateFleet' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ufDomainJoinInfo' - The information needed to join a Microsoft Active Directory domain.
---
--- * 'ufDisconnectTimeoutInSeconds' - The time after disconnection when a session is considered to have ended, in seconds. If a user who was disconnected reconnects within this time interval, the user is connected to their previous session. Specify a value between 60 and 57600.
---
--- * 'ufMaxUserDurationInSeconds' - The maximum time that a streaming session can run, in seconds. Specify a value between 600 and 57600.
---
--- * 'ufAttributesToDelete' - The fleet attributes to delete.
---
--- * 'ufDeleteVPCConfig' - Deletes the VPC association for the specified fleet.
---
--- * 'ufInstanceType' - The instance type to use when launching fleet instances. The following instance types are available:     * stream.standard.medium     * stream.standard.large     * stream.compute.large     * stream.compute.xlarge     * stream.compute.2xlarge     * stream.compute.4xlarge     * stream.compute.8xlarge     * stream.memory.large     * stream.memory.xlarge     * stream.memory.2xlarge     * stream.memory.4xlarge     * stream.memory.8xlarge     * stream.graphics-design.large     * stream.graphics-design.xlarge     * stream.graphics-design.2xlarge     * stream.graphics-design.4xlarge     * stream.graphics-desktop.2xlarge     * stream.graphics-pro.4xlarge     * stream.graphics-pro.8xlarge     * stream.graphics-pro.16xlarge
---
--- * 'ufVPCConfig' - The VPC configuration for the fleet.
---
--- * 'ufDisplayName' - The fleet name for display.
---
--- * 'ufEnableDefaultInternetAccess' - Enables or disables default internet access for the fleet.
---
--- * 'ufImageName' - The name of the image used to create the fleet.
---
--- * 'ufDescription' - The description for display.
---
--- * 'ufComputeCapacity' - The desired capacity for the fleet.
---
--- * 'ufName' - A unique name for the fleet.
-updateFleet
-    :: Text -- ^ 'ufName'
-    -> UpdateFleet
-updateFleet pName_ =
-  UpdateFleet'
-    { _ufDomainJoinInfo = Nothing
-    , _ufDisconnectTimeoutInSeconds = Nothing
-    , _ufMaxUserDurationInSeconds = Nothing
-    , _ufAttributesToDelete = Nothing
-    , _ufDeleteVPCConfig = Nothing
-    , _ufInstanceType = Nothing
-    , _ufVPCConfig = Nothing
-    , _ufDisplayName = Nothing
-    , _ufEnableDefaultInternetAccess = Nothing
-    , _ufImageName = Nothing
-    , _ufDescription = Nothing
-    , _ufComputeCapacity = Nothing
-    , _ufName = pName_
-    }
-
-
--- | The information needed to join a Microsoft Active Directory domain.
-ufDomainJoinInfo :: Lens' UpdateFleet (Maybe DomainJoinInfo)
-ufDomainJoinInfo = lens _ufDomainJoinInfo (\ s a -> s{_ufDomainJoinInfo = a})
-
--- | The time after disconnection when a session is considered to have ended, in seconds. If a user who was disconnected reconnects within this time interval, the user is connected to their previous session. Specify a value between 60 and 57600.
-ufDisconnectTimeoutInSeconds :: Lens' UpdateFleet (Maybe Int)
-ufDisconnectTimeoutInSeconds = lens _ufDisconnectTimeoutInSeconds (\ s a -> s{_ufDisconnectTimeoutInSeconds = a})
-
--- | The maximum time that a streaming session can run, in seconds. Specify a value between 600 and 57600.
-ufMaxUserDurationInSeconds :: Lens' UpdateFleet (Maybe Int)
-ufMaxUserDurationInSeconds = lens _ufMaxUserDurationInSeconds (\ s a -> s{_ufMaxUserDurationInSeconds = a})
-
--- | The fleet attributes to delete.
-ufAttributesToDelete :: Lens' UpdateFleet [FleetAttribute]
-ufAttributesToDelete = lens _ufAttributesToDelete (\ s a -> s{_ufAttributesToDelete = a}) . _Default . _Coerce
-
--- | Deletes the VPC association for the specified fleet.
-ufDeleteVPCConfig :: Lens' UpdateFleet (Maybe Bool)
-ufDeleteVPCConfig = lens _ufDeleteVPCConfig (\ s a -> s{_ufDeleteVPCConfig = a})
-
--- | The instance type to use when launching fleet instances. The following instance types are available:     * stream.standard.medium     * stream.standard.large     * stream.compute.large     * stream.compute.xlarge     * stream.compute.2xlarge     * stream.compute.4xlarge     * stream.compute.8xlarge     * stream.memory.large     * stream.memory.xlarge     * stream.memory.2xlarge     * stream.memory.4xlarge     * stream.memory.8xlarge     * stream.graphics-design.large     * stream.graphics-design.xlarge     * stream.graphics-design.2xlarge     * stream.graphics-design.4xlarge     * stream.graphics-desktop.2xlarge     * stream.graphics-pro.4xlarge     * stream.graphics-pro.8xlarge     * stream.graphics-pro.16xlarge
-ufInstanceType :: Lens' UpdateFleet (Maybe Text)
-ufInstanceType = lens _ufInstanceType (\ s a -> s{_ufInstanceType = a})
-
--- | The VPC configuration for the fleet.
-ufVPCConfig :: Lens' UpdateFleet (Maybe VPCConfig)
-ufVPCConfig = lens _ufVPCConfig (\ s a -> s{_ufVPCConfig = a})
-
--- | The fleet name for display.
-ufDisplayName :: Lens' UpdateFleet (Maybe Text)
-ufDisplayName = lens _ufDisplayName (\ s a -> s{_ufDisplayName = a})
-
--- | Enables or disables default internet access for the fleet.
-ufEnableDefaultInternetAccess :: Lens' UpdateFleet (Maybe Bool)
-ufEnableDefaultInternetAccess = lens _ufEnableDefaultInternetAccess (\ s a -> s{_ufEnableDefaultInternetAccess = a})
-
--- | The name of the image used to create the fleet.
-ufImageName :: Lens' UpdateFleet (Maybe Text)
-ufImageName = lens _ufImageName (\ s a -> s{_ufImageName = a})
-
--- | The description for display.
-ufDescription :: Lens' UpdateFleet (Maybe Text)
-ufDescription = lens _ufDescription (\ s a -> s{_ufDescription = a})
-
--- | The desired capacity for the fleet.
-ufComputeCapacity :: Lens' UpdateFleet (Maybe ComputeCapacity)
-ufComputeCapacity = lens _ufComputeCapacity (\ s a -> s{_ufComputeCapacity = a})
-
--- | A unique name for the fleet.
-ufName :: Lens' UpdateFleet Text
-ufName = lens _ufName (\ s a -> s{_ufName = a})
-
-instance AWSRequest UpdateFleet where
-        type Rs UpdateFleet = UpdateFleetResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 UpdateFleetResponse' <$>
-                   (x .?> "Fleet") <*> (pure (fromEnum s)))
-
-instance Hashable UpdateFleet where
-
-instance NFData UpdateFleet where
-
-instance ToHeaders UpdateFleet where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.UpdateFleet" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateFleet where
-        toJSON UpdateFleet'{..}
-          = object
-              (catMaybes
-                 [("DomainJoinInfo" .=) <$> _ufDomainJoinInfo,
-                  ("DisconnectTimeoutInSeconds" .=) <$>
-                    _ufDisconnectTimeoutInSeconds,
-                  ("MaxUserDurationInSeconds" .=) <$>
-                    _ufMaxUserDurationInSeconds,
-                  ("AttributesToDelete" .=) <$> _ufAttributesToDelete,
-                  ("DeleteVpcConfig" .=) <$> _ufDeleteVPCConfig,
-                  ("InstanceType" .=) <$> _ufInstanceType,
-                  ("VpcConfig" .=) <$> _ufVPCConfig,
-                  ("DisplayName" .=) <$> _ufDisplayName,
-                  ("EnableDefaultInternetAccess" .=) <$>
-                    _ufEnableDefaultInternetAccess,
-                  ("ImageName" .=) <$> _ufImageName,
-                  ("Description" .=) <$> _ufDescription,
-                  ("ComputeCapacity" .=) <$> _ufComputeCapacity,
-                  Just ("Name" .= _ufName)])
-
-instance ToPath UpdateFleet where
-        toPath = const "/"
-
-instance ToQuery UpdateFleet where
-        toQuery = const mempty
-
--- | /See:/ 'updateFleetResponse' smart constructor.
-data UpdateFleetResponse = UpdateFleetResponse'
-  { _ufrsFleet          :: !(Maybe Fleet)
-  , _ufrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateFleetResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ufrsFleet' - Information about the fleet.
---
--- * 'ufrsResponseStatus' - -- | The response status code.
-updateFleetResponse
-    :: Int -- ^ 'ufrsResponseStatus'
-    -> UpdateFleetResponse
-updateFleetResponse pResponseStatus_ =
-  UpdateFleetResponse'
-    {_ufrsFleet = Nothing, _ufrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the fleet.
-ufrsFleet :: Lens' UpdateFleetResponse (Maybe Fleet)
-ufrsFleet = lens _ufrsFleet (\ s a -> s{_ufrsFleet = a})
-
--- | -- | The response status code.
-ufrsResponseStatus :: Lens' UpdateFleetResponse Int
-ufrsResponseStatus = lens _ufrsResponseStatus (\ s a -> s{_ufrsResponseStatus = a})
-
-instance NFData UpdateFleetResponse where
diff --git a/gen/Network/AWS/AppStream/UpdateStack.hs b/gen/Network/AWS/AppStream/UpdateStack.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/UpdateStack.hs
+++ /dev/null
@@ -1,207 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.UpdateStack
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Updates the specified stack.
---
---
-module Network.AWS.AppStream.UpdateStack
-    (
-    -- * Creating a Request
-      updateStack
-    , UpdateStack
-    -- * Request Lenses
-    , usFeedbackURL
-    , usAttributesToDelete
-    , usDeleteStorageConnectors
-    , usStorageConnectors
-    , usDisplayName
-    , usDescription
-    , usRedirectURL
-    , usName
-
-    -- * Destructuring the Response
-    , updateStackResponse
-    , UpdateStackResponse
-    -- * Response Lenses
-    , usrsStack
-    , usrsResponseStatus
-    ) where
-
-import Network.AWS.AppStream.Types
-import Network.AWS.AppStream.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateStack' smart constructor.
-data UpdateStack = UpdateStack'
-  { _usFeedbackURL             :: !(Maybe Text)
-  , _usAttributesToDelete      :: !(Maybe [StackAttribute])
-  , _usDeleteStorageConnectors :: !(Maybe Bool)
-  , _usStorageConnectors       :: !(Maybe [StorageConnector])
-  , _usDisplayName             :: !(Maybe Text)
-  , _usDescription             :: !(Maybe Text)
-  , _usRedirectURL             :: !(Maybe Text)
-  , _usName                    :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateStack' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'usFeedbackURL' - The URL that users are redirected to after they click the Send Feedback link. If no URL is specified, no Send Feedback link is displayed.
---
--- * 'usAttributesToDelete' - The stack attributes to delete.
---
--- * 'usDeleteStorageConnectors' - Deletes the storage connectors currently enabled for the stack.
---
--- * 'usStorageConnectors' - The storage connectors to enable.
---
--- * 'usDisplayName' - The stack name for display.
---
--- * 'usDescription' - The description for display.
---
--- * 'usRedirectURL' - The URL that users are redirected to after their streaming session ends.
---
--- * 'usName' - The name of the stack.
-updateStack
-    :: Text -- ^ 'usName'
-    -> UpdateStack
-updateStack pName_ =
-  UpdateStack'
-    { _usFeedbackURL = Nothing
-    , _usAttributesToDelete = Nothing
-    , _usDeleteStorageConnectors = Nothing
-    , _usStorageConnectors = Nothing
-    , _usDisplayName = Nothing
-    , _usDescription = Nothing
-    , _usRedirectURL = Nothing
-    , _usName = pName_
-    }
-
-
--- | The URL that users are redirected to after they click the Send Feedback link. If no URL is specified, no Send Feedback link is displayed.
-usFeedbackURL :: Lens' UpdateStack (Maybe Text)
-usFeedbackURL = lens _usFeedbackURL (\ s a -> s{_usFeedbackURL = a})
-
--- | The stack attributes to delete.
-usAttributesToDelete :: Lens' UpdateStack [StackAttribute]
-usAttributesToDelete = lens _usAttributesToDelete (\ s a -> s{_usAttributesToDelete = a}) . _Default . _Coerce
-
--- | Deletes the storage connectors currently enabled for the stack.
-usDeleteStorageConnectors :: Lens' UpdateStack (Maybe Bool)
-usDeleteStorageConnectors = lens _usDeleteStorageConnectors (\ s a -> s{_usDeleteStorageConnectors = a})
-
--- | The storage connectors to enable.
-usStorageConnectors :: Lens' UpdateStack [StorageConnector]
-usStorageConnectors = lens _usStorageConnectors (\ s a -> s{_usStorageConnectors = a}) . _Default . _Coerce
-
--- | The stack name for display.
-usDisplayName :: Lens' UpdateStack (Maybe Text)
-usDisplayName = lens _usDisplayName (\ s a -> s{_usDisplayName = a})
-
--- | The description for display.
-usDescription :: Lens' UpdateStack (Maybe Text)
-usDescription = lens _usDescription (\ s a -> s{_usDescription = a})
-
--- | The URL that users are redirected to after their streaming session ends.
-usRedirectURL :: Lens' UpdateStack (Maybe Text)
-usRedirectURL = lens _usRedirectURL (\ s a -> s{_usRedirectURL = a})
-
--- | The name of the stack.
-usName :: Lens' UpdateStack Text
-usName = lens _usName (\ s a -> s{_usName = a})
-
-instance AWSRequest UpdateStack where
-        type Rs UpdateStack = UpdateStackResponse
-        request = postJSON appStream
-        response
-          = receiveJSON
-              (\ s h x ->
-                 UpdateStackResponse' <$>
-                   (x .?> "Stack") <*> (pure (fromEnum s)))
-
-instance Hashable UpdateStack where
-
-instance NFData UpdateStack where
-
-instance ToHeaders UpdateStack where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("PhotonAdminProxyService.UpdateStack" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateStack where
-        toJSON UpdateStack'{..}
-          = object
-              (catMaybes
-                 [("FeedbackURL" .=) <$> _usFeedbackURL,
-                  ("AttributesToDelete" .=) <$> _usAttributesToDelete,
-                  ("DeleteStorageConnectors" .=) <$>
-                    _usDeleteStorageConnectors,
-                  ("StorageConnectors" .=) <$> _usStorageConnectors,
-                  ("DisplayName" .=) <$> _usDisplayName,
-                  ("Description" .=) <$> _usDescription,
-                  ("RedirectURL" .=) <$> _usRedirectURL,
-                  Just ("Name" .= _usName)])
-
-instance ToPath UpdateStack where
-        toPath = const "/"
-
-instance ToQuery UpdateStack where
-        toQuery = const mempty
-
--- | /See:/ 'updateStackResponse' smart constructor.
-data UpdateStackResponse = UpdateStackResponse'
-  { _usrsStack          :: !(Maybe Stack)
-  , _usrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateStackResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'usrsStack' - Information about the stack.
---
--- * 'usrsResponseStatus' - -- | The response status code.
-updateStackResponse
-    :: Int -- ^ 'usrsResponseStatus'
-    -> UpdateStackResponse
-updateStackResponse pResponseStatus_ =
-  UpdateStackResponse'
-    {_usrsStack = Nothing, _usrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the stack.
-usrsStack :: Lens' UpdateStackResponse (Maybe Stack)
-usrsStack = lens _usrsStack (\ s a -> s{_usrsStack = a})
-
--- | -- | The response status code.
-usrsResponseStatus :: Lens' UpdateStackResponse Int
-usrsResponseStatus = lens _usrsResponseStatus (\ s a -> s{_usrsResponseStatus = a})
-
-instance NFData UpdateStackResponse where
diff --git a/gen/Network/AWS/AppStream/Waiters.hs b/gen/Network/AWS/AppStream/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/AppStream/Waiters.hs
+++ /dev/null
@@ -1,71 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE TypeFamilies      #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.AppStream.Waiters
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Network.AWS.AppStream.Waiters where
-
-import Network.AWS.AppStream.DescribeFleets
-import Network.AWS.AppStream.DescribeFleets
-import Network.AWS.AppStream.Types
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Waiter
-
--- | Polls 'Network.AWS.AppStream.DescribeFleets' every 30 seconds until a successful state is reached. An error is returned after 40 failed checks.
-fleetStopped :: Wait DescribeFleets
-fleetStopped =
-  Wait
-    { _waitName = "FleetStopped"
-    , _waitAttempts = 40
-    , _waitDelay = 30
-    , _waitAcceptors =
-        [ matchAll
-            "INACTIVE"
-            AcceptSuccess
-            (folding (concatOf dfsrsFleets) . fState . to toTextCI)
-        , matchAny
-            "PENDING_ACTIVATE"
-            AcceptFailure
-            (folding (concatOf dfsrsFleets) . fState . to toTextCI)
-        , matchAny
-            "ACTIVE"
-            AcceptFailure
-            (folding (concatOf dfsrsFleets) . fState . to toTextCI)
-        ]
-    }
-
-
--- | Polls 'Network.AWS.AppStream.DescribeFleets' every 30 seconds until a successful state is reached. An error is returned after 40 failed checks.
-fleetStarted :: Wait DescribeFleets
-fleetStarted =
-  Wait
-    { _waitName = "FleetStarted"
-    , _waitAttempts = 40
-    , _waitDelay = 30
-    , _waitAcceptors =
-        [ matchAll
-            "ACTIVE"
-            AcceptSuccess
-            (folding (concatOf dfsrsFleets) . fState . to toTextCI)
-        , matchAny
-            "PENDING_DEACTIVATE"
-            AcceptFailure
-            (folding (concatOf dfsrsFleets) . fState . to toTextCI)
-        , matchAny
-            "INACTIVE"
-            AcceptFailure
-            (folding (concatOf dfsrsFleets) . fState . to toTextCI)
-        ]
-    }
-
diff --git a/test/Main.hs b/test/Main.hs
--- a/test/Main.hs
+++ b/test/Main.hs
@@ -2,20 +2,22 @@
 
 -- |
 -- Module      : Main
--- Copyright   : (c) 2013-2018 Brendan Hay
+-- Copyright   : (c) 2013-2023 Brendan Hay
 -- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Maintainer  : Brendan Hay
 -- Stability   : auto-generated
 -- Portability : non-portable (GHC extensions)
---
 module Main (main) where
 
+import Test.Amazonka.AppStream
+import Test.Amazonka.AppStream.Internal
 import Test.Tasty
-import Test.AWS.AppStream
-import Test.AWS.AppStream.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "AppStream"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "AppStream"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/AppStream.hs b/test/Test/AWS/AppStream.hs
deleted file mode 100644
--- a/test/Test/AWS/AppStream.hs
+++ /dev/null
@@ -1,20 +0,0 @@
--- |
--- Module      : Test.AWS.AppStream
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.AppStream
-    ( tests
-    , fixtures
-    ) where
-
-import Test.Tasty (TestTree)
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/AppStream/Internal.hs b/test/Test/AWS/AppStream/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/AppStream/Internal.hs
+++ /dev/null
@@ -1,9 +0,0 @@
--- |
--- Module      : Test.AWS.AppStream.Internal
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.AppStream.Internal where
diff --git a/test/Test/AWS/Gen/AppStream.hs b/test/Test/AWS/Gen/AppStream.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/AppStream.hs
+++ /dev/null
@@ -1,633 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-orphans        #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Test.AWS.Gen.AppStream
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.Gen.AppStream where
-
-import Data.Proxy
-import Network.AWS.AppStream
-import Test.AWS.AppStream.Internal
-import Test.AWS.Fixture
-import Test.AWS.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"
---         [ requestDisassociateFleet $
---             disassociateFleet
---
---         , requestListAssociatedFleets $
---             listAssociatedFleets
---
---         , requestDeleteStack $
---             deleteStack
---
---         , requestUpdateStack $
---             updateStack
---
---         , requestCreateDirectoryConfig $
---             createDirectoryConfig
---
---         , requestListAssociatedStacks $
---             listAssociatedStacks
---
---         , requestDeleteFleet $
---             deleteFleet
---
---         , requestUpdateFleet $
---             updateFleet
---
---         , requestDeleteImageBuilder $
---             deleteImageBuilder
---
---         , requestAssociateFleet $
---             associateFleet
---
---         , requestCreateImageBuilder $
---             createImageBuilder
---
---         , requestListTagsForResource $
---             listTagsForResource
---
---         , requestDescribeDirectoryConfigs $
---             describeDirectoryConfigs
---
---         , requestCreateImageBuilderStreamingURL $
---             createImageBuilderStreamingURL
---
---         , requestDescribeSessions $
---             describeSessions
---
---         , requestDescribeStacks $
---             describeStacks
---
---         , requestDescribeFleets $
---             describeFleets
---
---         , requestDescribeImageBuilders $
---             describeImageBuilders
---
---         , requestStopFleet $
---             stopFleet
---
---         , requestStartImageBuilder $
---             startImageBuilder
---
---         , requestDeleteDirectoryConfig $
---             deleteDirectoryConfig
---
---         , requestUpdateDirectoryConfig $
---             updateDirectoryConfig
---
---         , requestCreateFleet $
---             createFleet
---
---         , requestCreateStack $
---             createStack
---
---         , requestCopyImage $
---             copyImage
---
---         , requestExpireSession $
---             expireSession
---
---         , requestTagResource $
---             tagResource
---
---         , requestCreateStreamingURL $
---             createStreamingURL
---
---         , requestUntagResource $
---             untagResource
---
---         , requestStartFleet $
---             startFleet
---
---         , requestStopImageBuilder $
---             stopImageBuilder
---
---         , requestDeleteImage $
---             deleteImage
---
---         , requestDescribeImages $
---             describeImages
---
---           ]
-
---     , testGroup "response"
---         [ responseDisassociateFleet $
---             disassociateFleetResponse
---
---         , responseListAssociatedFleets $
---             listAssociatedFleetsResponse
---
---         , responseDeleteStack $
---             deleteStackResponse
---
---         , responseUpdateStack $
---             updateStackResponse
---
---         , responseCreateDirectoryConfig $
---             createDirectoryConfigResponse
---
---         , responseListAssociatedStacks $
---             listAssociatedStacksResponse
---
---         , responseDeleteFleet $
---             deleteFleetResponse
---
---         , responseUpdateFleet $
---             updateFleetResponse
---
---         , responseDeleteImageBuilder $
---             deleteImageBuilderResponse
---
---         , responseAssociateFleet $
---             associateFleetResponse
---
---         , responseCreateImageBuilder $
---             createImageBuilderResponse
---
---         , responseListTagsForResource $
---             listTagsForResourceResponse
---
---         , responseDescribeDirectoryConfigs $
---             describeDirectoryConfigsResponse
---
---         , responseCreateImageBuilderStreamingURL $
---             createImageBuilderStreamingURLResponse
---
---         , responseDescribeSessions $
---             describeSessionsResponse
---
---         , responseDescribeStacks $
---             describeStacksResponse
---
---         , responseDescribeFleets $
---             describeFleetsResponse
---
---         , responseDescribeImageBuilders $
---             describeImageBuildersResponse
---
---         , responseStopFleet $
---             stopFleetResponse
---
---         , responseStartImageBuilder $
---             startImageBuilderResponse
---
---         , responseDeleteDirectoryConfig $
---             deleteDirectoryConfigResponse
---
---         , responseUpdateDirectoryConfig $
---             updateDirectoryConfigResponse
---
---         , responseCreateFleet $
---             createFleetResponse
---
---         , responseCreateStack $
---             createStackResponse
---
---         , responseCopyImage $
---             copyImageResponse
---
---         , responseExpireSession $
---             expireSessionResponse
---
---         , responseTagResource $
---             tagResourceResponse
---
---         , responseCreateStreamingURL $
---             createStreamingURLResponse
---
---         , responseUntagResource $
---             untagResourceResponse
---
---         , responseStartFleet $
---             startFleetResponse
---
---         , responseStopImageBuilder $
---             stopImageBuilderResponse
---
---         , responseDeleteImage $
---             deleteImageResponse
---
---         , responseDescribeImages $
---             describeImagesResponse
---
---           ]
---     ]
-
--- Requests
-
-requestDisassociateFleet :: DisassociateFleet -> TestTree
-requestDisassociateFleet = req
-    "DisassociateFleet"
-    "fixture/DisassociateFleet.yaml"
-
-requestListAssociatedFleets :: ListAssociatedFleets -> TestTree
-requestListAssociatedFleets = req
-    "ListAssociatedFleets"
-    "fixture/ListAssociatedFleets.yaml"
-
-requestDeleteStack :: DeleteStack -> TestTree
-requestDeleteStack = req
-    "DeleteStack"
-    "fixture/DeleteStack.yaml"
-
-requestUpdateStack :: UpdateStack -> TestTree
-requestUpdateStack = req
-    "UpdateStack"
-    "fixture/UpdateStack.yaml"
-
-requestCreateDirectoryConfig :: CreateDirectoryConfig -> TestTree
-requestCreateDirectoryConfig = req
-    "CreateDirectoryConfig"
-    "fixture/CreateDirectoryConfig.yaml"
-
-requestListAssociatedStacks :: ListAssociatedStacks -> TestTree
-requestListAssociatedStacks = req
-    "ListAssociatedStacks"
-    "fixture/ListAssociatedStacks.yaml"
-
-requestDeleteFleet :: DeleteFleet -> TestTree
-requestDeleteFleet = req
-    "DeleteFleet"
-    "fixture/DeleteFleet.yaml"
-
-requestUpdateFleet :: UpdateFleet -> TestTree
-requestUpdateFleet = req
-    "UpdateFleet"
-    "fixture/UpdateFleet.yaml"
-
-requestDeleteImageBuilder :: DeleteImageBuilder -> TestTree
-requestDeleteImageBuilder = req
-    "DeleteImageBuilder"
-    "fixture/DeleteImageBuilder.yaml"
-
-requestAssociateFleet :: AssociateFleet -> TestTree
-requestAssociateFleet = req
-    "AssociateFleet"
-    "fixture/AssociateFleet.yaml"
-
-requestCreateImageBuilder :: CreateImageBuilder -> TestTree
-requestCreateImageBuilder = req
-    "CreateImageBuilder"
-    "fixture/CreateImageBuilder.yaml"
-
-requestListTagsForResource :: ListTagsForResource -> TestTree
-requestListTagsForResource = req
-    "ListTagsForResource"
-    "fixture/ListTagsForResource.yaml"
-
-requestDescribeDirectoryConfigs :: DescribeDirectoryConfigs -> TestTree
-requestDescribeDirectoryConfigs = req
-    "DescribeDirectoryConfigs"
-    "fixture/DescribeDirectoryConfigs.yaml"
-
-requestCreateImageBuilderStreamingURL :: CreateImageBuilderStreamingURL -> TestTree
-requestCreateImageBuilderStreamingURL = req
-    "CreateImageBuilderStreamingURL"
-    "fixture/CreateImageBuilderStreamingURL.yaml"
-
-requestDescribeSessions :: DescribeSessions -> TestTree
-requestDescribeSessions = req
-    "DescribeSessions"
-    "fixture/DescribeSessions.yaml"
-
-requestDescribeStacks :: DescribeStacks -> TestTree
-requestDescribeStacks = req
-    "DescribeStacks"
-    "fixture/DescribeStacks.yaml"
-
-requestDescribeFleets :: DescribeFleets -> TestTree
-requestDescribeFleets = req
-    "DescribeFleets"
-    "fixture/DescribeFleets.yaml"
-
-requestDescribeImageBuilders :: DescribeImageBuilders -> TestTree
-requestDescribeImageBuilders = req
-    "DescribeImageBuilders"
-    "fixture/DescribeImageBuilders.yaml"
-
-requestStopFleet :: StopFleet -> TestTree
-requestStopFleet = req
-    "StopFleet"
-    "fixture/StopFleet.yaml"
-
-requestStartImageBuilder :: StartImageBuilder -> TestTree
-requestStartImageBuilder = req
-    "StartImageBuilder"
-    "fixture/StartImageBuilder.yaml"
-
-requestDeleteDirectoryConfig :: DeleteDirectoryConfig -> TestTree
-requestDeleteDirectoryConfig = req
-    "DeleteDirectoryConfig"
-    "fixture/DeleteDirectoryConfig.yaml"
-
-requestUpdateDirectoryConfig :: UpdateDirectoryConfig -> TestTree
-requestUpdateDirectoryConfig = req
-    "UpdateDirectoryConfig"
-    "fixture/UpdateDirectoryConfig.yaml"
-
-requestCreateFleet :: CreateFleet -> TestTree
-requestCreateFleet = req
-    "CreateFleet"
-    "fixture/CreateFleet.yaml"
-
-requestCreateStack :: CreateStack -> TestTree
-requestCreateStack = req
-    "CreateStack"
-    "fixture/CreateStack.yaml"
-
-requestCopyImage :: CopyImage -> TestTree
-requestCopyImage = req
-    "CopyImage"
-    "fixture/CopyImage.yaml"
-
-requestExpireSession :: ExpireSession -> TestTree
-requestExpireSession = req
-    "ExpireSession"
-    "fixture/ExpireSession.yaml"
-
-requestTagResource :: TagResource -> TestTree
-requestTagResource = req
-    "TagResource"
-    "fixture/TagResource.yaml"
-
-requestCreateStreamingURL :: CreateStreamingURL -> TestTree
-requestCreateStreamingURL = req
-    "CreateStreamingURL"
-    "fixture/CreateStreamingURL.yaml"
-
-requestUntagResource :: UntagResource -> TestTree
-requestUntagResource = req
-    "UntagResource"
-    "fixture/UntagResource.yaml"
-
-requestStartFleet :: StartFleet -> TestTree
-requestStartFleet = req
-    "StartFleet"
-    "fixture/StartFleet.yaml"
-
-requestStopImageBuilder :: StopImageBuilder -> TestTree
-requestStopImageBuilder = req
-    "StopImageBuilder"
-    "fixture/StopImageBuilder.yaml"
-
-requestDeleteImage :: DeleteImage -> TestTree
-requestDeleteImage = req
-    "DeleteImage"
-    "fixture/DeleteImage.yaml"
-
-requestDescribeImages :: DescribeImages -> TestTree
-requestDescribeImages = req
-    "DescribeImages"
-    "fixture/DescribeImages.yaml"
-
--- Responses
-
-responseDisassociateFleet :: DisassociateFleetResponse -> TestTree
-responseDisassociateFleet = res
-    "DisassociateFleetResponse"
-    "fixture/DisassociateFleetResponse.proto"
-    appStream
-    (Proxy :: Proxy DisassociateFleet)
-
-responseListAssociatedFleets :: ListAssociatedFleetsResponse -> TestTree
-responseListAssociatedFleets = res
-    "ListAssociatedFleetsResponse"
-    "fixture/ListAssociatedFleetsResponse.proto"
-    appStream
-    (Proxy :: Proxy ListAssociatedFleets)
-
-responseDeleteStack :: DeleteStackResponse -> TestTree
-responseDeleteStack = res
-    "DeleteStackResponse"
-    "fixture/DeleteStackResponse.proto"
-    appStream
-    (Proxy :: Proxy DeleteStack)
-
-responseUpdateStack :: UpdateStackResponse -> TestTree
-responseUpdateStack = res
-    "UpdateStackResponse"
-    "fixture/UpdateStackResponse.proto"
-    appStream
-    (Proxy :: Proxy UpdateStack)
-
-responseCreateDirectoryConfig :: CreateDirectoryConfigResponse -> TestTree
-responseCreateDirectoryConfig = res
-    "CreateDirectoryConfigResponse"
-    "fixture/CreateDirectoryConfigResponse.proto"
-    appStream
-    (Proxy :: Proxy CreateDirectoryConfig)
-
-responseListAssociatedStacks :: ListAssociatedStacksResponse -> TestTree
-responseListAssociatedStacks = res
-    "ListAssociatedStacksResponse"
-    "fixture/ListAssociatedStacksResponse.proto"
-    appStream
-    (Proxy :: Proxy ListAssociatedStacks)
-
-responseDeleteFleet :: DeleteFleetResponse -> TestTree
-responseDeleteFleet = res
-    "DeleteFleetResponse"
-    "fixture/DeleteFleetResponse.proto"
-    appStream
-    (Proxy :: Proxy DeleteFleet)
-
-responseUpdateFleet :: UpdateFleetResponse -> TestTree
-responseUpdateFleet = res
-    "UpdateFleetResponse"
-    "fixture/UpdateFleetResponse.proto"
-    appStream
-    (Proxy :: Proxy UpdateFleet)
-
-responseDeleteImageBuilder :: DeleteImageBuilderResponse -> TestTree
-responseDeleteImageBuilder = res
-    "DeleteImageBuilderResponse"
-    "fixture/DeleteImageBuilderResponse.proto"
-    appStream
-    (Proxy :: Proxy DeleteImageBuilder)
-
-responseAssociateFleet :: AssociateFleetResponse -> TestTree
-responseAssociateFleet = res
-    "AssociateFleetResponse"
-    "fixture/AssociateFleetResponse.proto"
-    appStream
-    (Proxy :: Proxy AssociateFleet)
-
-responseCreateImageBuilder :: CreateImageBuilderResponse -> TestTree
-responseCreateImageBuilder = res
-    "CreateImageBuilderResponse"
-    "fixture/CreateImageBuilderResponse.proto"
-    appStream
-    (Proxy :: Proxy CreateImageBuilder)
-
-responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
-responseListTagsForResource = res
-    "ListTagsForResourceResponse"
-    "fixture/ListTagsForResourceResponse.proto"
-    appStream
-    (Proxy :: Proxy ListTagsForResource)
-
-responseDescribeDirectoryConfigs :: DescribeDirectoryConfigsResponse -> TestTree
-responseDescribeDirectoryConfigs = res
-    "DescribeDirectoryConfigsResponse"
-    "fixture/DescribeDirectoryConfigsResponse.proto"
-    appStream
-    (Proxy :: Proxy DescribeDirectoryConfigs)
-
-responseCreateImageBuilderStreamingURL :: CreateImageBuilderStreamingURLResponse -> TestTree
-responseCreateImageBuilderStreamingURL = res
-    "CreateImageBuilderStreamingURLResponse"
-    "fixture/CreateImageBuilderStreamingURLResponse.proto"
-    appStream
-    (Proxy :: Proxy CreateImageBuilderStreamingURL)
-
-responseDescribeSessions :: DescribeSessionsResponse -> TestTree
-responseDescribeSessions = res
-    "DescribeSessionsResponse"
-    "fixture/DescribeSessionsResponse.proto"
-    appStream
-    (Proxy :: Proxy DescribeSessions)
-
-responseDescribeStacks :: DescribeStacksResponse -> TestTree
-responseDescribeStacks = res
-    "DescribeStacksResponse"
-    "fixture/DescribeStacksResponse.proto"
-    appStream
-    (Proxy :: Proxy DescribeStacks)
-
-responseDescribeFleets :: DescribeFleetsResponse -> TestTree
-responseDescribeFleets = res
-    "DescribeFleetsResponse"
-    "fixture/DescribeFleetsResponse.proto"
-    appStream
-    (Proxy :: Proxy DescribeFleets)
-
-responseDescribeImageBuilders :: DescribeImageBuildersResponse -> TestTree
-responseDescribeImageBuilders = res
-    "DescribeImageBuildersResponse"
-    "fixture/DescribeImageBuildersResponse.proto"
-    appStream
-    (Proxy :: Proxy DescribeImageBuilders)
-
-responseStopFleet :: StopFleetResponse -> TestTree
-responseStopFleet = res
-    "StopFleetResponse"
-    "fixture/StopFleetResponse.proto"
-    appStream
-    (Proxy :: Proxy StopFleet)
-
-responseStartImageBuilder :: StartImageBuilderResponse -> TestTree
-responseStartImageBuilder = res
-    "StartImageBuilderResponse"
-    "fixture/StartImageBuilderResponse.proto"
-    appStream
-    (Proxy :: Proxy StartImageBuilder)
-
-responseDeleteDirectoryConfig :: DeleteDirectoryConfigResponse -> TestTree
-responseDeleteDirectoryConfig = res
-    "DeleteDirectoryConfigResponse"
-    "fixture/DeleteDirectoryConfigResponse.proto"
-    appStream
-    (Proxy :: Proxy DeleteDirectoryConfig)
-
-responseUpdateDirectoryConfig :: UpdateDirectoryConfigResponse -> TestTree
-responseUpdateDirectoryConfig = res
-    "UpdateDirectoryConfigResponse"
-    "fixture/UpdateDirectoryConfigResponse.proto"
-    appStream
-    (Proxy :: Proxy UpdateDirectoryConfig)
-
-responseCreateFleet :: CreateFleetResponse -> TestTree
-responseCreateFleet = res
-    "CreateFleetResponse"
-    "fixture/CreateFleetResponse.proto"
-    appStream
-    (Proxy :: Proxy CreateFleet)
-
-responseCreateStack :: CreateStackResponse -> TestTree
-responseCreateStack = res
-    "CreateStackResponse"
-    "fixture/CreateStackResponse.proto"
-    appStream
-    (Proxy :: Proxy CreateStack)
-
-responseCopyImage :: CopyImageResponse -> TestTree
-responseCopyImage = res
-    "CopyImageResponse"
-    "fixture/CopyImageResponse.proto"
-    appStream
-    (Proxy :: Proxy CopyImage)
-
-responseExpireSession :: ExpireSessionResponse -> TestTree
-responseExpireSession = res
-    "ExpireSessionResponse"
-    "fixture/ExpireSessionResponse.proto"
-    appStream
-    (Proxy :: Proxy ExpireSession)
-
-responseTagResource :: TagResourceResponse -> TestTree
-responseTagResource = res
-    "TagResourceResponse"
-    "fixture/TagResourceResponse.proto"
-    appStream
-    (Proxy :: Proxy TagResource)
-
-responseCreateStreamingURL :: CreateStreamingURLResponse -> TestTree
-responseCreateStreamingURL = res
-    "CreateStreamingURLResponse"
-    "fixture/CreateStreamingURLResponse.proto"
-    appStream
-    (Proxy :: Proxy CreateStreamingURL)
-
-responseUntagResource :: UntagResourceResponse -> TestTree
-responseUntagResource = res
-    "UntagResourceResponse"
-    "fixture/UntagResourceResponse.proto"
-    appStream
-    (Proxy :: Proxy UntagResource)
-
-responseStartFleet :: StartFleetResponse -> TestTree
-responseStartFleet = res
-    "StartFleetResponse"
-    "fixture/StartFleetResponse.proto"
-    appStream
-    (Proxy :: Proxy StartFleet)
-
-responseStopImageBuilder :: StopImageBuilderResponse -> TestTree
-responseStopImageBuilder = res
-    "StopImageBuilderResponse"
-    "fixture/StopImageBuilderResponse.proto"
-    appStream
-    (Proxy :: Proxy StopImageBuilder)
-
-responseDeleteImage :: DeleteImageResponse -> TestTree
-responseDeleteImage = res
-    "DeleteImageResponse"
-    "fixture/DeleteImageResponse.proto"
-    appStream
-    (Proxy :: Proxy DeleteImage)
-
-responseDescribeImages :: DescribeImagesResponse -> TestTree
-responseDescribeImages = res
-    "DescribeImagesResponse"
-    "fixture/DescribeImagesResponse.proto"
-    appStream
-    (Proxy :: Proxy DescribeImages)
diff --git a/test/Test/Amazonka/AppStream.hs b/test/Test/Amazonka/AppStream.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AppStream.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.AppStream
+-- Copyright   : (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.AppStream
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/AppStream/Internal.hs b/test/Test/Amazonka/AppStream/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/AppStream/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.AppStream.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.AppStream.Internal where
diff --git a/test/Test/Amazonka/Gen/AppStream.hs b/test/Test/Amazonka/Gen/AppStream.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/AppStream.hs
@@ -0,0 +1,1338 @@
+{-# 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.AppStream
+-- Copyright   : (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.AppStream where
+
+import Amazonka.AppStream
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.AppStream.Internal
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestAssociateApplicationFleet $
+--             newAssociateApplicationFleet
+--
+--         , requestAssociateApplicationToEntitlement $
+--             newAssociateApplicationToEntitlement
+--
+--         , requestAssociateFleet $
+--             newAssociateFleet
+--
+--         , requestBatchAssociateUserStack $
+--             newBatchAssociateUserStack
+--
+--         , requestBatchDisassociateUserStack $
+--             newBatchDisassociateUserStack
+--
+--         , requestCopyImage $
+--             newCopyImage
+--
+--         , requestCreateAppBlock $
+--             newCreateAppBlock
+--
+--         , requestCreateApplication $
+--             newCreateApplication
+--
+--         , requestCreateDirectoryConfig $
+--             newCreateDirectoryConfig
+--
+--         , requestCreateEntitlement $
+--             newCreateEntitlement
+--
+--         , requestCreateFleet $
+--             newCreateFleet
+--
+--         , requestCreateImageBuilder $
+--             newCreateImageBuilder
+--
+--         , requestCreateImageBuilderStreamingURL $
+--             newCreateImageBuilderStreamingURL
+--
+--         , requestCreateStack $
+--             newCreateStack
+--
+--         , requestCreateStreamingURL $
+--             newCreateStreamingURL
+--
+--         , requestCreateUpdatedImage $
+--             newCreateUpdatedImage
+--
+--         , requestCreateUsageReportSubscription $
+--             newCreateUsageReportSubscription
+--
+--         , requestCreateUser $
+--             newCreateUser
+--
+--         , requestDeleteAppBlock $
+--             newDeleteAppBlock
+--
+--         , requestDeleteApplication $
+--             newDeleteApplication
+--
+--         , requestDeleteDirectoryConfig $
+--             newDeleteDirectoryConfig
+--
+--         , requestDeleteEntitlement $
+--             newDeleteEntitlement
+--
+--         , requestDeleteFleet $
+--             newDeleteFleet
+--
+--         , requestDeleteImage $
+--             newDeleteImage
+--
+--         , requestDeleteImageBuilder $
+--             newDeleteImageBuilder
+--
+--         , requestDeleteImagePermissions $
+--             newDeleteImagePermissions
+--
+--         , requestDeleteStack $
+--             newDeleteStack
+--
+--         , requestDeleteUsageReportSubscription $
+--             newDeleteUsageReportSubscription
+--
+--         , requestDeleteUser $
+--             newDeleteUser
+--
+--         , requestDescribeAppBlocks $
+--             newDescribeAppBlocks
+--
+--         , requestDescribeApplicationFleetAssociations $
+--             newDescribeApplicationFleetAssociations
+--
+--         , requestDescribeApplications $
+--             newDescribeApplications
+--
+--         , requestDescribeDirectoryConfigs $
+--             newDescribeDirectoryConfigs
+--
+--         , requestDescribeEntitlements $
+--             newDescribeEntitlements
+--
+--         , requestDescribeFleets $
+--             newDescribeFleets
+--
+--         , requestDescribeImageBuilders $
+--             newDescribeImageBuilders
+--
+--         , requestDescribeImagePermissions $
+--             newDescribeImagePermissions
+--
+--         , requestDescribeImages $
+--             newDescribeImages
+--
+--         , requestDescribeSessions $
+--             newDescribeSessions
+--
+--         , requestDescribeStacks $
+--             newDescribeStacks
+--
+--         , requestDescribeUsageReportSubscriptions $
+--             newDescribeUsageReportSubscriptions
+--
+--         , requestDescribeUserStackAssociations $
+--             newDescribeUserStackAssociations
+--
+--         , requestDescribeUsers $
+--             newDescribeUsers
+--
+--         , requestDisableUser $
+--             newDisableUser
+--
+--         , requestDisassociateApplicationFleet $
+--             newDisassociateApplicationFleet
+--
+--         , requestDisassociateApplicationFromEntitlement $
+--             newDisassociateApplicationFromEntitlement
+--
+--         , requestDisassociateFleet $
+--             newDisassociateFleet
+--
+--         , requestEnableUser $
+--             newEnableUser
+--
+--         , requestExpireSession $
+--             newExpireSession
+--
+--         , requestListAssociatedFleets $
+--             newListAssociatedFleets
+--
+--         , requestListAssociatedStacks $
+--             newListAssociatedStacks
+--
+--         , requestListEntitledApplications $
+--             newListEntitledApplications
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestStartFleet $
+--             newStartFleet
+--
+--         , requestStartImageBuilder $
+--             newStartImageBuilder
+--
+--         , requestStopFleet $
+--             newStopFleet
+--
+--         , requestStopImageBuilder $
+--             newStopImageBuilder
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateApplication $
+--             newUpdateApplication
+--
+--         , requestUpdateDirectoryConfig $
+--             newUpdateDirectoryConfig
+--
+--         , requestUpdateEntitlement $
+--             newUpdateEntitlement
+--
+--         , requestUpdateFleet $
+--             newUpdateFleet
+--
+--         , requestUpdateImagePermissions $
+--             newUpdateImagePermissions
+--
+--         , requestUpdateStack $
+--             newUpdateStack
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseAssociateApplicationFleet $
+--             newAssociateApplicationFleetResponse
+--
+--         , responseAssociateApplicationToEntitlement $
+--             newAssociateApplicationToEntitlementResponse
+--
+--         , responseAssociateFleet $
+--             newAssociateFleetResponse
+--
+--         , responseBatchAssociateUserStack $
+--             newBatchAssociateUserStackResponse
+--
+--         , responseBatchDisassociateUserStack $
+--             newBatchDisassociateUserStackResponse
+--
+--         , responseCopyImage $
+--             newCopyImageResponse
+--
+--         , responseCreateAppBlock $
+--             newCreateAppBlockResponse
+--
+--         , responseCreateApplication $
+--             newCreateApplicationResponse
+--
+--         , responseCreateDirectoryConfig $
+--             newCreateDirectoryConfigResponse
+--
+--         , responseCreateEntitlement $
+--             newCreateEntitlementResponse
+--
+--         , responseCreateFleet $
+--             newCreateFleetResponse
+--
+--         , responseCreateImageBuilder $
+--             newCreateImageBuilderResponse
+--
+--         , responseCreateImageBuilderStreamingURL $
+--             newCreateImageBuilderStreamingURLResponse
+--
+--         , responseCreateStack $
+--             newCreateStackResponse
+--
+--         , responseCreateStreamingURL $
+--             newCreateStreamingURLResponse
+--
+--         , responseCreateUpdatedImage $
+--             newCreateUpdatedImageResponse
+--
+--         , responseCreateUsageReportSubscription $
+--             newCreateUsageReportSubscriptionResponse
+--
+--         , responseCreateUser $
+--             newCreateUserResponse
+--
+--         , responseDeleteAppBlock $
+--             newDeleteAppBlockResponse
+--
+--         , responseDeleteApplication $
+--             newDeleteApplicationResponse
+--
+--         , responseDeleteDirectoryConfig $
+--             newDeleteDirectoryConfigResponse
+--
+--         , responseDeleteEntitlement $
+--             newDeleteEntitlementResponse
+--
+--         , responseDeleteFleet $
+--             newDeleteFleetResponse
+--
+--         , responseDeleteImage $
+--             newDeleteImageResponse
+--
+--         , responseDeleteImageBuilder $
+--             newDeleteImageBuilderResponse
+--
+--         , responseDeleteImagePermissions $
+--             newDeleteImagePermissionsResponse
+--
+--         , responseDeleteStack $
+--             newDeleteStackResponse
+--
+--         , responseDeleteUsageReportSubscription $
+--             newDeleteUsageReportSubscriptionResponse
+--
+--         , responseDeleteUser $
+--             newDeleteUserResponse
+--
+--         , responseDescribeAppBlocks $
+--             newDescribeAppBlocksResponse
+--
+--         , responseDescribeApplicationFleetAssociations $
+--             newDescribeApplicationFleetAssociationsResponse
+--
+--         , responseDescribeApplications $
+--             newDescribeApplicationsResponse
+--
+--         , responseDescribeDirectoryConfigs $
+--             newDescribeDirectoryConfigsResponse
+--
+--         , responseDescribeEntitlements $
+--             newDescribeEntitlementsResponse
+--
+--         , responseDescribeFleets $
+--             newDescribeFleetsResponse
+--
+--         , responseDescribeImageBuilders $
+--             newDescribeImageBuildersResponse
+--
+--         , responseDescribeImagePermissions $
+--             newDescribeImagePermissionsResponse
+--
+--         , responseDescribeImages $
+--             newDescribeImagesResponse
+--
+--         , responseDescribeSessions $
+--             newDescribeSessionsResponse
+--
+--         , responseDescribeStacks $
+--             newDescribeStacksResponse
+--
+--         , responseDescribeUsageReportSubscriptions $
+--             newDescribeUsageReportSubscriptionsResponse
+--
+--         , responseDescribeUserStackAssociations $
+--             newDescribeUserStackAssociationsResponse
+--
+--         , responseDescribeUsers $
+--             newDescribeUsersResponse
+--
+--         , responseDisableUser $
+--             newDisableUserResponse
+--
+--         , responseDisassociateApplicationFleet $
+--             newDisassociateApplicationFleetResponse
+--
+--         , responseDisassociateApplicationFromEntitlement $
+--             newDisassociateApplicationFromEntitlementResponse
+--
+--         , responseDisassociateFleet $
+--             newDisassociateFleetResponse
+--
+--         , responseEnableUser $
+--             newEnableUserResponse
+--
+--         , responseExpireSession $
+--             newExpireSessionResponse
+--
+--         , responseListAssociatedFleets $
+--             newListAssociatedFleetsResponse
+--
+--         , responseListAssociatedStacks $
+--             newListAssociatedStacksResponse
+--
+--         , responseListEntitledApplications $
+--             newListEntitledApplicationsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseStartFleet $
+--             newStartFleetResponse
+--
+--         , responseStartImageBuilder $
+--             newStartImageBuilderResponse
+--
+--         , responseStopFleet $
+--             newStopFleetResponse
+--
+--         , responseStopImageBuilder $
+--             newStopImageBuilderResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateApplication $
+--             newUpdateApplicationResponse
+--
+--         , responseUpdateDirectoryConfig $
+--             newUpdateDirectoryConfigResponse
+--
+--         , responseUpdateEntitlement $
+--             newUpdateEntitlementResponse
+--
+--         , responseUpdateFleet $
+--             newUpdateFleetResponse
+--
+--         , responseUpdateImagePermissions $
+--             newUpdateImagePermissionsResponse
+--
+--         , responseUpdateStack $
+--             newUpdateStackResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestAssociateApplicationFleet :: AssociateApplicationFleet -> TestTree
+requestAssociateApplicationFleet =
+  req
+    "AssociateApplicationFleet"
+    "fixture/AssociateApplicationFleet.yaml"
+
+requestAssociateApplicationToEntitlement :: AssociateApplicationToEntitlement -> TestTree
+requestAssociateApplicationToEntitlement =
+  req
+    "AssociateApplicationToEntitlement"
+    "fixture/AssociateApplicationToEntitlement.yaml"
+
+requestAssociateFleet :: AssociateFleet -> TestTree
+requestAssociateFleet =
+  req
+    "AssociateFleet"
+    "fixture/AssociateFleet.yaml"
+
+requestBatchAssociateUserStack :: BatchAssociateUserStack -> TestTree
+requestBatchAssociateUserStack =
+  req
+    "BatchAssociateUserStack"
+    "fixture/BatchAssociateUserStack.yaml"
+
+requestBatchDisassociateUserStack :: BatchDisassociateUserStack -> TestTree
+requestBatchDisassociateUserStack =
+  req
+    "BatchDisassociateUserStack"
+    "fixture/BatchDisassociateUserStack.yaml"
+
+requestCopyImage :: CopyImage -> TestTree
+requestCopyImage =
+  req
+    "CopyImage"
+    "fixture/CopyImage.yaml"
+
+requestCreateAppBlock :: CreateAppBlock -> TestTree
+requestCreateAppBlock =
+  req
+    "CreateAppBlock"
+    "fixture/CreateAppBlock.yaml"
+
+requestCreateApplication :: CreateApplication -> TestTree
+requestCreateApplication =
+  req
+    "CreateApplication"
+    "fixture/CreateApplication.yaml"
+
+requestCreateDirectoryConfig :: CreateDirectoryConfig -> TestTree
+requestCreateDirectoryConfig =
+  req
+    "CreateDirectoryConfig"
+    "fixture/CreateDirectoryConfig.yaml"
+
+requestCreateEntitlement :: CreateEntitlement -> TestTree
+requestCreateEntitlement =
+  req
+    "CreateEntitlement"
+    "fixture/CreateEntitlement.yaml"
+
+requestCreateFleet :: CreateFleet -> TestTree
+requestCreateFleet =
+  req
+    "CreateFleet"
+    "fixture/CreateFleet.yaml"
+
+requestCreateImageBuilder :: CreateImageBuilder -> TestTree
+requestCreateImageBuilder =
+  req
+    "CreateImageBuilder"
+    "fixture/CreateImageBuilder.yaml"
+
+requestCreateImageBuilderStreamingURL :: CreateImageBuilderStreamingURL -> TestTree
+requestCreateImageBuilderStreamingURL =
+  req
+    "CreateImageBuilderStreamingURL"
+    "fixture/CreateImageBuilderStreamingURL.yaml"
+
+requestCreateStack :: CreateStack -> TestTree
+requestCreateStack =
+  req
+    "CreateStack"
+    "fixture/CreateStack.yaml"
+
+requestCreateStreamingURL :: CreateStreamingURL -> TestTree
+requestCreateStreamingURL =
+  req
+    "CreateStreamingURL"
+    "fixture/CreateStreamingURL.yaml"
+
+requestCreateUpdatedImage :: CreateUpdatedImage -> TestTree
+requestCreateUpdatedImage =
+  req
+    "CreateUpdatedImage"
+    "fixture/CreateUpdatedImage.yaml"
+
+requestCreateUsageReportSubscription :: CreateUsageReportSubscription -> TestTree
+requestCreateUsageReportSubscription =
+  req
+    "CreateUsageReportSubscription"
+    "fixture/CreateUsageReportSubscription.yaml"
+
+requestCreateUser :: CreateUser -> TestTree
+requestCreateUser =
+  req
+    "CreateUser"
+    "fixture/CreateUser.yaml"
+
+requestDeleteAppBlock :: DeleteAppBlock -> TestTree
+requestDeleteAppBlock =
+  req
+    "DeleteAppBlock"
+    "fixture/DeleteAppBlock.yaml"
+
+requestDeleteApplication :: DeleteApplication -> TestTree
+requestDeleteApplication =
+  req
+    "DeleteApplication"
+    "fixture/DeleteApplication.yaml"
+
+requestDeleteDirectoryConfig :: DeleteDirectoryConfig -> TestTree
+requestDeleteDirectoryConfig =
+  req
+    "DeleteDirectoryConfig"
+    "fixture/DeleteDirectoryConfig.yaml"
+
+requestDeleteEntitlement :: DeleteEntitlement -> TestTree
+requestDeleteEntitlement =
+  req
+    "DeleteEntitlement"
+    "fixture/DeleteEntitlement.yaml"
+
+requestDeleteFleet :: DeleteFleet -> TestTree
+requestDeleteFleet =
+  req
+    "DeleteFleet"
+    "fixture/DeleteFleet.yaml"
+
+requestDeleteImage :: DeleteImage -> TestTree
+requestDeleteImage =
+  req
+    "DeleteImage"
+    "fixture/DeleteImage.yaml"
+
+requestDeleteImageBuilder :: DeleteImageBuilder -> TestTree
+requestDeleteImageBuilder =
+  req
+    "DeleteImageBuilder"
+    "fixture/DeleteImageBuilder.yaml"
+
+requestDeleteImagePermissions :: DeleteImagePermissions -> TestTree
+requestDeleteImagePermissions =
+  req
+    "DeleteImagePermissions"
+    "fixture/DeleteImagePermissions.yaml"
+
+requestDeleteStack :: DeleteStack -> TestTree
+requestDeleteStack =
+  req
+    "DeleteStack"
+    "fixture/DeleteStack.yaml"
+
+requestDeleteUsageReportSubscription :: DeleteUsageReportSubscription -> TestTree
+requestDeleteUsageReportSubscription =
+  req
+    "DeleteUsageReportSubscription"
+    "fixture/DeleteUsageReportSubscription.yaml"
+
+requestDeleteUser :: DeleteUser -> TestTree
+requestDeleteUser =
+  req
+    "DeleteUser"
+    "fixture/DeleteUser.yaml"
+
+requestDescribeAppBlocks :: DescribeAppBlocks -> TestTree
+requestDescribeAppBlocks =
+  req
+    "DescribeAppBlocks"
+    "fixture/DescribeAppBlocks.yaml"
+
+requestDescribeApplicationFleetAssociations :: DescribeApplicationFleetAssociations -> TestTree
+requestDescribeApplicationFleetAssociations =
+  req
+    "DescribeApplicationFleetAssociations"
+    "fixture/DescribeApplicationFleetAssociations.yaml"
+
+requestDescribeApplications :: DescribeApplications -> TestTree
+requestDescribeApplications =
+  req
+    "DescribeApplications"
+    "fixture/DescribeApplications.yaml"
+
+requestDescribeDirectoryConfigs :: DescribeDirectoryConfigs -> TestTree
+requestDescribeDirectoryConfigs =
+  req
+    "DescribeDirectoryConfigs"
+    "fixture/DescribeDirectoryConfigs.yaml"
+
+requestDescribeEntitlements :: DescribeEntitlements -> TestTree
+requestDescribeEntitlements =
+  req
+    "DescribeEntitlements"
+    "fixture/DescribeEntitlements.yaml"
+
+requestDescribeFleets :: DescribeFleets -> TestTree
+requestDescribeFleets =
+  req
+    "DescribeFleets"
+    "fixture/DescribeFleets.yaml"
+
+requestDescribeImageBuilders :: DescribeImageBuilders -> TestTree
+requestDescribeImageBuilders =
+  req
+    "DescribeImageBuilders"
+    "fixture/DescribeImageBuilders.yaml"
+
+requestDescribeImagePermissions :: DescribeImagePermissions -> TestTree
+requestDescribeImagePermissions =
+  req
+    "DescribeImagePermissions"
+    "fixture/DescribeImagePermissions.yaml"
+
+requestDescribeImages :: DescribeImages -> TestTree
+requestDescribeImages =
+  req
+    "DescribeImages"
+    "fixture/DescribeImages.yaml"
+
+requestDescribeSessions :: DescribeSessions -> TestTree
+requestDescribeSessions =
+  req
+    "DescribeSessions"
+    "fixture/DescribeSessions.yaml"
+
+requestDescribeStacks :: DescribeStacks -> TestTree
+requestDescribeStacks =
+  req
+    "DescribeStacks"
+    "fixture/DescribeStacks.yaml"
+
+requestDescribeUsageReportSubscriptions :: DescribeUsageReportSubscriptions -> TestTree
+requestDescribeUsageReportSubscriptions =
+  req
+    "DescribeUsageReportSubscriptions"
+    "fixture/DescribeUsageReportSubscriptions.yaml"
+
+requestDescribeUserStackAssociations :: DescribeUserStackAssociations -> TestTree
+requestDescribeUserStackAssociations =
+  req
+    "DescribeUserStackAssociations"
+    "fixture/DescribeUserStackAssociations.yaml"
+
+requestDescribeUsers :: DescribeUsers -> TestTree
+requestDescribeUsers =
+  req
+    "DescribeUsers"
+    "fixture/DescribeUsers.yaml"
+
+requestDisableUser :: DisableUser -> TestTree
+requestDisableUser =
+  req
+    "DisableUser"
+    "fixture/DisableUser.yaml"
+
+requestDisassociateApplicationFleet :: DisassociateApplicationFleet -> TestTree
+requestDisassociateApplicationFleet =
+  req
+    "DisassociateApplicationFleet"
+    "fixture/DisassociateApplicationFleet.yaml"
+
+requestDisassociateApplicationFromEntitlement :: DisassociateApplicationFromEntitlement -> TestTree
+requestDisassociateApplicationFromEntitlement =
+  req
+    "DisassociateApplicationFromEntitlement"
+    "fixture/DisassociateApplicationFromEntitlement.yaml"
+
+requestDisassociateFleet :: DisassociateFleet -> TestTree
+requestDisassociateFleet =
+  req
+    "DisassociateFleet"
+    "fixture/DisassociateFleet.yaml"
+
+requestEnableUser :: EnableUser -> TestTree
+requestEnableUser =
+  req
+    "EnableUser"
+    "fixture/EnableUser.yaml"
+
+requestExpireSession :: ExpireSession -> TestTree
+requestExpireSession =
+  req
+    "ExpireSession"
+    "fixture/ExpireSession.yaml"
+
+requestListAssociatedFleets :: ListAssociatedFleets -> TestTree
+requestListAssociatedFleets =
+  req
+    "ListAssociatedFleets"
+    "fixture/ListAssociatedFleets.yaml"
+
+requestListAssociatedStacks :: ListAssociatedStacks -> TestTree
+requestListAssociatedStacks =
+  req
+    "ListAssociatedStacks"
+    "fixture/ListAssociatedStacks.yaml"
+
+requestListEntitledApplications :: ListEntitledApplications -> TestTree
+requestListEntitledApplications =
+  req
+    "ListEntitledApplications"
+    "fixture/ListEntitledApplications.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestStartFleet :: StartFleet -> TestTree
+requestStartFleet =
+  req
+    "StartFleet"
+    "fixture/StartFleet.yaml"
+
+requestStartImageBuilder :: StartImageBuilder -> TestTree
+requestStartImageBuilder =
+  req
+    "StartImageBuilder"
+    "fixture/StartImageBuilder.yaml"
+
+requestStopFleet :: StopFleet -> TestTree
+requestStopFleet =
+  req
+    "StopFleet"
+    "fixture/StopFleet.yaml"
+
+requestStopImageBuilder :: StopImageBuilder -> TestTree
+requestStopImageBuilder =
+  req
+    "StopImageBuilder"
+    "fixture/StopImageBuilder.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateApplication :: UpdateApplication -> TestTree
+requestUpdateApplication =
+  req
+    "UpdateApplication"
+    "fixture/UpdateApplication.yaml"
+
+requestUpdateDirectoryConfig :: UpdateDirectoryConfig -> TestTree
+requestUpdateDirectoryConfig =
+  req
+    "UpdateDirectoryConfig"
+    "fixture/UpdateDirectoryConfig.yaml"
+
+requestUpdateEntitlement :: UpdateEntitlement -> TestTree
+requestUpdateEntitlement =
+  req
+    "UpdateEntitlement"
+    "fixture/UpdateEntitlement.yaml"
+
+requestUpdateFleet :: UpdateFleet -> TestTree
+requestUpdateFleet =
+  req
+    "UpdateFleet"
+    "fixture/UpdateFleet.yaml"
+
+requestUpdateImagePermissions :: UpdateImagePermissions -> TestTree
+requestUpdateImagePermissions =
+  req
+    "UpdateImagePermissions"
+    "fixture/UpdateImagePermissions.yaml"
+
+requestUpdateStack :: UpdateStack -> TestTree
+requestUpdateStack =
+  req
+    "UpdateStack"
+    "fixture/UpdateStack.yaml"
+
+-- Responses
+
+responseAssociateApplicationFleet :: AssociateApplicationFleetResponse -> TestTree
+responseAssociateApplicationFleet =
+  res
+    "AssociateApplicationFleetResponse"
+    "fixture/AssociateApplicationFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateApplicationFleet)
+
+responseAssociateApplicationToEntitlement :: AssociateApplicationToEntitlementResponse -> TestTree
+responseAssociateApplicationToEntitlement =
+  res
+    "AssociateApplicationToEntitlementResponse"
+    "fixture/AssociateApplicationToEntitlementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateApplicationToEntitlement)
+
+responseAssociateFleet :: AssociateFleetResponse -> TestTree
+responseAssociateFleet =
+  res
+    "AssociateFleetResponse"
+    "fixture/AssociateFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy AssociateFleet)
+
+responseBatchAssociateUserStack :: BatchAssociateUserStackResponse -> TestTree
+responseBatchAssociateUserStack =
+  res
+    "BatchAssociateUserStackResponse"
+    "fixture/BatchAssociateUserStackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchAssociateUserStack)
+
+responseBatchDisassociateUserStack :: BatchDisassociateUserStackResponse -> TestTree
+responseBatchDisassociateUserStack =
+  res
+    "BatchDisassociateUserStackResponse"
+    "fixture/BatchDisassociateUserStackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchDisassociateUserStack)
+
+responseCopyImage :: CopyImageResponse -> TestTree
+responseCopyImage =
+  res
+    "CopyImageResponse"
+    "fixture/CopyImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CopyImage)
+
+responseCreateAppBlock :: CreateAppBlockResponse -> TestTree
+responseCreateAppBlock =
+  res
+    "CreateAppBlockResponse"
+    "fixture/CreateAppBlockResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAppBlock)
+
+responseCreateApplication :: CreateApplicationResponse -> TestTree
+responseCreateApplication =
+  res
+    "CreateApplicationResponse"
+    "fixture/CreateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApplication)
+
+responseCreateDirectoryConfig :: CreateDirectoryConfigResponse -> TestTree
+responseCreateDirectoryConfig =
+  res
+    "CreateDirectoryConfigResponse"
+    "fixture/CreateDirectoryConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDirectoryConfig)
+
+responseCreateEntitlement :: CreateEntitlementResponse -> TestTree
+responseCreateEntitlement =
+  res
+    "CreateEntitlementResponse"
+    "fixture/CreateEntitlementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEntitlement)
+
+responseCreateFleet :: CreateFleetResponse -> TestTree
+responseCreateFleet =
+  res
+    "CreateFleetResponse"
+    "fixture/CreateFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateFleet)
+
+responseCreateImageBuilder :: CreateImageBuilderResponse -> TestTree
+responseCreateImageBuilder =
+  res
+    "CreateImageBuilderResponse"
+    "fixture/CreateImageBuilderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateImageBuilder)
+
+responseCreateImageBuilderStreamingURL :: CreateImageBuilderStreamingURLResponse -> TestTree
+responseCreateImageBuilderStreamingURL =
+  res
+    "CreateImageBuilderStreamingURLResponse"
+    "fixture/CreateImageBuilderStreamingURLResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateImageBuilderStreamingURL)
+
+responseCreateStack :: CreateStackResponse -> TestTree
+responseCreateStack =
+  res
+    "CreateStackResponse"
+    "fixture/CreateStackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStack)
+
+responseCreateStreamingURL :: CreateStreamingURLResponse -> TestTree
+responseCreateStreamingURL =
+  res
+    "CreateStreamingURLResponse"
+    "fixture/CreateStreamingURLResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateStreamingURL)
+
+responseCreateUpdatedImage :: CreateUpdatedImageResponse -> TestTree
+responseCreateUpdatedImage =
+  res
+    "CreateUpdatedImageResponse"
+    "fixture/CreateUpdatedImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateUpdatedImage)
+
+responseCreateUsageReportSubscription :: CreateUsageReportSubscriptionResponse -> TestTree
+responseCreateUsageReportSubscription =
+  res
+    "CreateUsageReportSubscriptionResponse"
+    "fixture/CreateUsageReportSubscriptionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateUsageReportSubscription)
+
+responseCreateUser :: CreateUserResponse -> TestTree
+responseCreateUser =
+  res
+    "CreateUserResponse"
+    "fixture/CreateUserResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateUser)
+
+responseDeleteAppBlock :: DeleteAppBlockResponse -> TestTree
+responseDeleteAppBlock =
+  res
+    "DeleteAppBlockResponse"
+    "fixture/DeleteAppBlockResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAppBlock)
+
+responseDeleteApplication :: DeleteApplicationResponse -> TestTree
+responseDeleteApplication =
+  res
+    "DeleteApplicationResponse"
+    "fixture/DeleteApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApplication)
+
+responseDeleteDirectoryConfig :: DeleteDirectoryConfigResponse -> TestTree
+responseDeleteDirectoryConfig =
+  res
+    "DeleteDirectoryConfigResponse"
+    "fixture/DeleteDirectoryConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDirectoryConfig)
+
+responseDeleteEntitlement :: DeleteEntitlementResponse -> TestTree
+responseDeleteEntitlement =
+  res
+    "DeleteEntitlementResponse"
+    "fixture/DeleteEntitlementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEntitlement)
+
+responseDeleteFleet :: DeleteFleetResponse -> TestTree
+responseDeleteFleet =
+  res
+    "DeleteFleetResponse"
+    "fixture/DeleteFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteFleet)
+
+responseDeleteImage :: DeleteImageResponse -> TestTree
+responseDeleteImage =
+  res
+    "DeleteImageResponse"
+    "fixture/DeleteImageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteImage)
+
+responseDeleteImageBuilder :: DeleteImageBuilderResponse -> TestTree
+responseDeleteImageBuilder =
+  res
+    "DeleteImageBuilderResponse"
+    "fixture/DeleteImageBuilderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteImageBuilder)
+
+responseDeleteImagePermissions :: DeleteImagePermissionsResponse -> TestTree
+responseDeleteImagePermissions =
+  res
+    "DeleteImagePermissionsResponse"
+    "fixture/DeleteImagePermissionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteImagePermissions)
+
+responseDeleteStack :: DeleteStackResponse -> TestTree
+responseDeleteStack =
+  res
+    "DeleteStackResponse"
+    "fixture/DeleteStackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteStack)
+
+responseDeleteUsageReportSubscription :: DeleteUsageReportSubscriptionResponse -> TestTree
+responseDeleteUsageReportSubscription =
+  res
+    "DeleteUsageReportSubscriptionResponse"
+    "fixture/DeleteUsageReportSubscriptionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteUsageReportSubscription)
+
+responseDeleteUser :: DeleteUserResponse -> TestTree
+responseDeleteUser =
+  res
+    "DeleteUserResponse"
+    "fixture/DeleteUserResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteUser)
+
+responseDescribeAppBlocks :: DescribeAppBlocksResponse -> TestTree
+responseDescribeAppBlocks =
+  res
+    "DescribeAppBlocksResponse"
+    "fixture/DescribeAppBlocksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAppBlocks)
+
+responseDescribeApplicationFleetAssociations :: DescribeApplicationFleetAssociationsResponse -> TestTree
+responseDescribeApplicationFleetAssociations =
+  res
+    "DescribeApplicationFleetAssociationsResponse"
+    "fixture/DescribeApplicationFleetAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeApplicationFleetAssociations)
+
+responseDescribeApplications :: DescribeApplicationsResponse -> TestTree
+responseDescribeApplications =
+  res
+    "DescribeApplicationsResponse"
+    "fixture/DescribeApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeApplications)
+
+responseDescribeDirectoryConfigs :: DescribeDirectoryConfigsResponse -> TestTree
+responseDescribeDirectoryConfigs =
+  res
+    "DescribeDirectoryConfigsResponse"
+    "fixture/DescribeDirectoryConfigsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeDirectoryConfigs)
+
+responseDescribeEntitlements :: DescribeEntitlementsResponse -> TestTree
+responseDescribeEntitlements =
+  res
+    "DescribeEntitlementsResponse"
+    "fixture/DescribeEntitlementsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeEntitlements)
+
+responseDescribeFleets :: DescribeFleetsResponse -> TestTree
+responseDescribeFleets =
+  res
+    "DescribeFleetsResponse"
+    "fixture/DescribeFleetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeFleets)
+
+responseDescribeImageBuilders :: DescribeImageBuildersResponse -> TestTree
+responseDescribeImageBuilders =
+  res
+    "DescribeImageBuildersResponse"
+    "fixture/DescribeImageBuildersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeImageBuilders)
+
+responseDescribeImagePermissions :: DescribeImagePermissionsResponse -> TestTree
+responseDescribeImagePermissions =
+  res
+    "DescribeImagePermissionsResponse"
+    "fixture/DescribeImagePermissionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeImagePermissions)
+
+responseDescribeImages :: DescribeImagesResponse -> TestTree
+responseDescribeImages =
+  res
+    "DescribeImagesResponse"
+    "fixture/DescribeImagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeImages)
+
+responseDescribeSessions :: DescribeSessionsResponse -> TestTree
+responseDescribeSessions =
+  res
+    "DescribeSessionsResponse"
+    "fixture/DescribeSessionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeSessions)
+
+responseDescribeStacks :: DescribeStacksResponse -> TestTree
+responseDescribeStacks =
+  res
+    "DescribeStacksResponse"
+    "fixture/DescribeStacksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeStacks)
+
+responseDescribeUsageReportSubscriptions :: DescribeUsageReportSubscriptionsResponse -> TestTree
+responseDescribeUsageReportSubscriptions =
+  res
+    "DescribeUsageReportSubscriptionsResponse"
+    "fixture/DescribeUsageReportSubscriptionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeUsageReportSubscriptions)
+
+responseDescribeUserStackAssociations :: DescribeUserStackAssociationsResponse -> TestTree
+responseDescribeUserStackAssociations =
+  res
+    "DescribeUserStackAssociationsResponse"
+    "fixture/DescribeUserStackAssociationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeUserStackAssociations)
+
+responseDescribeUsers :: DescribeUsersResponse -> TestTree
+responseDescribeUsers =
+  res
+    "DescribeUsersResponse"
+    "fixture/DescribeUsersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeUsers)
+
+responseDisableUser :: DisableUserResponse -> TestTree
+responseDisableUser =
+  res
+    "DisableUserResponse"
+    "fixture/DisableUserResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisableUser)
+
+responseDisassociateApplicationFleet :: DisassociateApplicationFleetResponse -> TestTree
+responseDisassociateApplicationFleet =
+  res
+    "DisassociateApplicationFleetResponse"
+    "fixture/DisassociateApplicationFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateApplicationFleet)
+
+responseDisassociateApplicationFromEntitlement :: DisassociateApplicationFromEntitlementResponse -> TestTree
+responseDisassociateApplicationFromEntitlement =
+  res
+    "DisassociateApplicationFromEntitlementResponse"
+    "fixture/DisassociateApplicationFromEntitlementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateApplicationFromEntitlement)
+
+responseDisassociateFleet :: DisassociateFleetResponse -> TestTree
+responseDisassociateFleet =
+  res
+    "DisassociateFleetResponse"
+    "fixture/DisassociateFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateFleet)
+
+responseEnableUser :: EnableUserResponse -> TestTree
+responseEnableUser =
+  res
+    "EnableUserResponse"
+    "fixture/EnableUserResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy EnableUser)
+
+responseExpireSession :: ExpireSessionResponse -> TestTree
+responseExpireSession =
+  res
+    "ExpireSessionResponse"
+    "fixture/ExpireSessionResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ExpireSession)
+
+responseListAssociatedFleets :: ListAssociatedFleetsResponse -> TestTree
+responseListAssociatedFleets =
+  res
+    "ListAssociatedFleetsResponse"
+    "fixture/ListAssociatedFleetsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAssociatedFleets)
+
+responseListAssociatedStacks :: ListAssociatedStacksResponse -> TestTree
+responseListAssociatedStacks =
+  res
+    "ListAssociatedStacksResponse"
+    "fixture/ListAssociatedStacksResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListAssociatedStacks)
+
+responseListEntitledApplications :: ListEntitledApplicationsResponse -> TestTree
+responseListEntitledApplications =
+  res
+    "ListEntitledApplicationsResponse"
+    "fixture/ListEntitledApplicationsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEntitledApplications)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+responseStartFleet :: StartFleetResponse -> TestTree
+responseStartFleet =
+  res
+    "StartFleetResponse"
+    "fixture/StartFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartFleet)
+
+responseStartImageBuilder :: StartImageBuilderResponse -> TestTree
+responseStartImageBuilder =
+  res
+    "StartImageBuilderResponse"
+    "fixture/StartImageBuilderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartImageBuilder)
+
+responseStopFleet :: StopFleetResponse -> TestTree
+responseStopFleet =
+  res
+    "StopFleetResponse"
+    "fixture/StopFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopFleet)
+
+responseStopImageBuilder :: StopImageBuilderResponse -> TestTree
+responseStopImageBuilder =
+  res
+    "StopImageBuilderResponse"
+    "fixture/StopImageBuilderResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopImageBuilder)
+
+responseTagResource :: TagResourceResponse -> TestTree
+responseTagResource =
+  res
+    "TagResourceResponse"
+    "fixture/TagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TagResource)
+
+responseUntagResource :: UntagResourceResponse -> TestTree
+responseUntagResource =
+  res
+    "UntagResourceResponse"
+    "fixture/UntagResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UntagResource)
+
+responseUpdateApplication :: UpdateApplicationResponse -> TestTree
+responseUpdateApplication =
+  res
+    "UpdateApplicationResponse"
+    "fixture/UpdateApplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateApplication)
+
+responseUpdateDirectoryConfig :: UpdateDirectoryConfigResponse -> TestTree
+responseUpdateDirectoryConfig =
+  res
+    "UpdateDirectoryConfigResponse"
+    "fixture/UpdateDirectoryConfigResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateDirectoryConfig)
+
+responseUpdateEntitlement :: UpdateEntitlementResponse -> TestTree
+responseUpdateEntitlement =
+  res
+    "UpdateEntitlementResponse"
+    "fixture/UpdateEntitlementResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEntitlement)
+
+responseUpdateFleet :: UpdateFleetResponse -> TestTree
+responseUpdateFleet =
+  res
+    "UpdateFleetResponse"
+    "fixture/UpdateFleetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateFleet)
+
+responseUpdateImagePermissions :: UpdateImagePermissionsResponse -> TestTree
+responseUpdateImagePermissions =
+  res
+    "UpdateImagePermissionsResponse"
+    "fixture/UpdateImagePermissionsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateImagePermissions)
+
+responseUpdateStack :: UpdateStackResponse -> TestTree
+responseUpdateStack =
+  res
+    "UpdateStackResponse"
+    "fixture/UpdateStackResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateStack)
