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 @2017-09-23@ 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.Cloud9](http://hackage.haskell.org/package/amazonka-cloud9/docs/Network-AWS-Cloud9.html)
+See [Amazonka.Cloud9](http://hackage.haskell.org/package/amazonka-cloud9/docs/Amazonka-Cloud9.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-cloud9.cabal b/amazonka-cloud9.cabal
--- a/amazonka-cloud9.cabal
+++ b/amazonka-cloud9.cabal
@@ -1,95 +1,108 @@
-name:                  amazonka-cloud9
-version:               1.6.1
-synopsis:              Amazon Cloud9 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-cloud9
+version:            2.0
+synopsis:           Amazon Cloud9 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.Cloud9" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2017-09-23@ 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.Cloud9.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.Cloud9" 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-cloud9
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-cloud9
 
 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.Cloud9
-        , Network.AWS.Cloud9.CreateEnvironmentEC
-        , Network.AWS.Cloud9.CreateEnvironmentMembership
-        , Network.AWS.Cloud9.DeleteEnvironment
-        , Network.AWS.Cloud9.DeleteEnvironmentMembership
-        , Network.AWS.Cloud9.DescribeEnvironmentMemberships
-        , Network.AWS.Cloud9.DescribeEnvironmentStatus
-        , Network.AWS.Cloud9.DescribeEnvironments
-        , Network.AWS.Cloud9.ListEnvironments
-        , Network.AWS.Cloud9.Types
-        , Network.AWS.Cloud9.UpdateEnvironment
-        , Network.AWS.Cloud9.UpdateEnvironmentMembership
-        , Network.AWS.Cloud9.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.Cloud9.Types.Product
-        , Network.AWS.Cloud9.Types.Sum
+  exposed-modules:
+    Amazonka.Cloud9
+    Amazonka.Cloud9.CreateEnvironmentEC2
+    Amazonka.Cloud9.CreateEnvironmentMembership
+    Amazonka.Cloud9.DeleteEnvironment
+    Amazonka.Cloud9.DeleteEnvironmentMembership
+    Amazonka.Cloud9.DescribeEnvironmentMemberships
+    Amazonka.Cloud9.DescribeEnvironments
+    Amazonka.Cloud9.DescribeEnvironmentStatus
+    Amazonka.Cloud9.Lens
+    Amazonka.Cloud9.ListEnvironments
+    Amazonka.Cloud9.ListTagsForResource
+    Amazonka.Cloud9.TagResource
+    Amazonka.Cloud9.Types
+    Amazonka.Cloud9.Types.ConnectionType
+    Amazonka.Cloud9.Types.Environment
+    Amazonka.Cloud9.Types.EnvironmentLifecycle
+    Amazonka.Cloud9.Types.EnvironmentLifecycleStatus
+    Amazonka.Cloud9.Types.EnvironmentMember
+    Amazonka.Cloud9.Types.EnvironmentStatus
+    Amazonka.Cloud9.Types.EnvironmentType
+    Amazonka.Cloud9.Types.ManagedCredentialsAction
+    Amazonka.Cloud9.Types.ManagedCredentialsStatus
+    Amazonka.Cloud9.Types.MemberPermissions
+    Amazonka.Cloud9.Types.Permissions
+    Amazonka.Cloud9.Types.Tag
+    Amazonka.Cloud9.UntagResource
+    Amazonka.Cloud9.UpdateEnvironment
+    Amazonka.Cloud9.UpdateEnvironmentMembership
+    Amazonka.Cloud9.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-cloud9-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.Cloud9
-        , Test.AWS.Gen.Cloud9
-        , Test.AWS.Cloud9.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.Cloud9
+    Test.Amazonka.Cloud9.Internal
+    Test.Amazonka.Gen.Cloud9
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-cloud9
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-cloud9
+    , 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/CreateEnvironmentEC2.yaml b/fixture/CreateEnvironmentEC2.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEnvironmentEC2.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cloud9/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cloud9.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/CreateEnvironmentEC2Response.proto b/fixture/CreateEnvironmentEC2Response.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEnvironmentEC2Response.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cloud9/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cloud9.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/TagResource.yaml b/fixture/TagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cloud9/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cloud9.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/TagResourceResponse.proto b/fixture/TagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TagResourceResponse.proto
diff --git a/fixture/UntagResource.yaml b/fixture/UntagResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResource.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/cloud9/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  cloud9.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UntagResourceResponse.proto b/fixture/UntagResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UntagResourceResponse.proto
diff --git a/gen/Amazonka/Cloud9.hs b/gen/Amazonka/Cloud9.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9.hs
@@ -0,0 +1,260 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Cloud9
+-- 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 @2017-09-23@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Cloud9
+--
+-- Cloud9 is a collection of tools that you can use to code, build, run,
+-- test, debug, and release software in the cloud.
+--
+-- For more information about Cloud9, see the
+-- <https://docs.aws.amazon.com/cloud9/latest/user-guide Cloud9 User Guide>.
+--
+-- Cloud9 supports these operations:
+--
+-- -   @CreateEnvironmentEC2@: Creates an Cloud9 development environment,
+--     launches an Amazon EC2 instance, and then connects from the instance
+--     to the environment.
+--
+-- -   @CreateEnvironmentMembership@: Adds an environment member to an
+--     environment.
+--
+-- -   @DeleteEnvironment@: Deletes an environment. If an Amazon EC2
+--     instance is connected to the environment, also terminates the
+--     instance.
+--
+-- -   @DeleteEnvironmentMembership@: Deletes an environment member from an
+--     environment.
+--
+-- -   @DescribeEnvironmentMemberships@: Gets information about environment
+--     members for an environment.
+--
+-- -   @DescribeEnvironments@: Gets information about environments.
+--
+-- -   @DescribeEnvironmentStatus@: Gets status information for an
+--     environment.
+--
+-- -   @ListEnvironments@: Gets a list of environment identifiers.
+--
+-- -   @ListTagsForResource@: Gets the tags for an environment.
+--
+-- -   @TagResource@: Adds tags to an environment.
+--
+-- -   @UntagResource@: Removes tags from an environment.
+--
+-- -   @UpdateEnvironment@: Changes the settings of an existing
+--     environment.
+--
+-- -   @UpdateEnvironmentMembership@: Changes the settings of an existing
+--     environment member for an environment.
+module Amazonka.Cloud9
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** BadRequestException
+    _BadRequestException,
+
+    -- ** ConcurrentAccessException
+    _ConcurrentAccessException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** ForbiddenException
+    _ForbiddenException,
+
+    -- ** InternalServerErrorException
+    _InternalServerErrorException,
+
+    -- ** LimitExceededException
+    _LimitExceededException,
+
+    -- ** NotFoundException
+    _NotFoundException,
+
+    -- ** TooManyRequestsException
+    _TooManyRequestsException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateEnvironmentEC2
+    CreateEnvironmentEC2 (CreateEnvironmentEC2'),
+    newCreateEnvironmentEC2,
+    CreateEnvironmentEC2Response (CreateEnvironmentEC2Response'),
+    newCreateEnvironmentEC2Response,
+
+    -- ** CreateEnvironmentMembership
+    CreateEnvironmentMembership (CreateEnvironmentMembership'),
+    newCreateEnvironmentMembership,
+    CreateEnvironmentMembershipResponse (CreateEnvironmentMembershipResponse'),
+    newCreateEnvironmentMembershipResponse,
+
+    -- ** DeleteEnvironment
+    DeleteEnvironment (DeleteEnvironment'),
+    newDeleteEnvironment,
+    DeleteEnvironmentResponse (DeleteEnvironmentResponse'),
+    newDeleteEnvironmentResponse,
+
+    -- ** DeleteEnvironmentMembership
+    DeleteEnvironmentMembership (DeleteEnvironmentMembership'),
+    newDeleteEnvironmentMembership,
+    DeleteEnvironmentMembershipResponse (DeleteEnvironmentMembershipResponse'),
+    newDeleteEnvironmentMembershipResponse,
+
+    -- ** DescribeEnvironmentMemberships (Paginated)
+    DescribeEnvironmentMemberships (DescribeEnvironmentMemberships'),
+    newDescribeEnvironmentMemberships,
+    DescribeEnvironmentMembershipsResponse (DescribeEnvironmentMembershipsResponse'),
+    newDescribeEnvironmentMembershipsResponse,
+
+    -- ** DescribeEnvironmentStatus
+    DescribeEnvironmentStatus (DescribeEnvironmentStatus'),
+    newDescribeEnvironmentStatus,
+    DescribeEnvironmentStatusResponse (DescribeEnvironmentStatusResponse'),
+    newDescribeEnvironmentStatusResponse,
+
+    -- ** DescribeEnvironments
+    DescribeEnvironments (DescribeEnvironments'),
+    newDescribeEnvironments,
+    DescribeEnvironmentsResponse (DescribeEnvironmentsResponse'),
+    newDescribeEnvironmentsResponse,
+
+    -- ** ListEnvironments (Paginated)
+    ListEnvironments (ListEnvironments'),
+    newListEnvironments,
+    ListEnvironmentsResponse (ListEnvironmentsResponse'),
+    newListEnvironmentsResponse,
+
+    -- ** ListTagsForResource
+    ListTagsForResource (ListTagsForResource'),
+    newListTagsForResource,
+    ListTagsForResourceResponse (ListTagsForResourceResponse'),
+    newListTagsForResourceResponse,
+
+    -- ** TagResource
+    TagResource (TagResource'),
+    newTagResource,
+    TagResourceResponse (TagResourceResponse'),
+    newTagResourceResponse,
+
+    -- ** UntagResource
+    UntagResource (UntagResource'),
+    newUntagResource,
+    UntagResourceResponse (UntagResourceResponse'),
+    newUntagResourceResponse,
+
+    -- ** UpdateEnvironment
+    UpdateEnvironment (UpdateEnvironment'),
+    newUpdateEnvironment,
+    UpdateEnvironmentResponse (UpdateEnvironmentResponse'),
+    newUpdateEnvironmentResponse,
+
+    -- ** UpdateEnvironmentMembership
+    UpdateEnvironmentMembership (UpdateEnvironmentMembership'),
+    newUpdateEnvironmentMembership,
+    UpdateEnvironmentMembershipResponse (UpdateEnvironmentMembershipResponse'),
+    newUpdateEnvironmentMembershipResponse,
+
+    -- * Types
+
+    -- ** ConnectionType
+    ConnectionType (..),
+
+    -- ** EnvironmentLifecycleStatus
+    EnvironmentLifecycleStatus (..),
+
+    -- ** EnvironmentStatus
+    EnvironmentStatus (..),
+
+    -- ** EnvironmentType
+    EnvironmentType (..),
+
+    -- ** ManagedCredentialsAction
+    ManagedCredentialsAction (..),
+
+    -- ** ManagedCredentialsStatus
+    ManagedCredentialsStatus (..),
+
+    -- ** MemberPermissions
+    MemberPermissions (..),
+
+    -- ** Permissions
+    Permissions (..),
+
+    -- ** Environment
+    Environment (Environment'),
+    newEnvironment,
+
+    -- ** EnvironmentLifecycle
+    EnvironmentLifecycle (EnvironmentLifecycle'),
+    newEnvironmentLifecycle,
+
+    -- ** EnvironmentMember
+    EnvironmentMember (EnvironmentMember'),
+    newEnvironmentMember,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+  )
+where
+
+import Amazonka.Cloud9.CreateEnvironmentEC2
+import Amazonka.Cloud9.CreateEnvironmentMembership
+import Amazonka.Cloud9.DeleteEnvironment
+import Amazonka.Cloud9.DeleteEnvironmentMembership
+import Amazonka.Cloud9.DescribeEnvironmentMemberships
+import Amazonka.Cloud9.DescribeEnvironmentStatus
+import Amazonka.Cloud9.DescribeEnvironments
+import Amazonka.Cloud9.Lens
+import Amazonka.Cloud9.ListEnvironments
+import Amazonka.Cloud9.ListTagsForResource
+import Amazonka.Cloud9.TagResource
+import Amazonka.Cloud9.Types
+import Amazonka.Cloud9.UntagResource
+import Amazonka.Cloud9.UpdateEnvironment
+import Amazonka.Cloud9.UpdateEnvironmentMembership
+import Amazonka.Cloud9.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 'Cloud9'.
+
+-- $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/Cloud9/CreateEnvironmentEC2.hs b/gen/Amazonka/Cloud9/CreateEnvironmentEC2.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/CreateEnvironmentEC2.hs
@@ -0,0 +1,467 @@
+{-# 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.Cloud9.CreateEnvironmentEC2
+-- 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 Cloud9 development environment, launches an Amazon Elastic
+-- Compute Cloud (Amazon EC2) instance, and then connects from the instance
+-- to the environment.
+module Amazonka.Cloud9.CreateEnvironmentEC2
+  ( -- * Creating a Request
+    CreateEnvironmentEC2 (..),
+    newCreateEnvironmentEC2,
+
+    -- * Request Lenses
+    createEnvironmentEC2_automaticStopTimeMinutes,
+    createEnvironmentEC2_clientRequestToken,
+    createEnvironmentEC2_connectionType,
+    createEnvironmentEC2_description,
+    createEnvironmentEC2_dryRun,
+    createEnvironmentEC2_imageId,
+    createEnvironmentEC2_ownerArn,
+    createEnvironmentEC2_subnetId,
+    createEnvironmentEC2_tags,
+    createEnvironmentEC2_name,
+    createEnvironmentEC2_instanceType,
+
+    -- * Destructuring the Response
+    CreateEnvironmentEC2Response (..),
+    newCreateEnvironmentEC2Response,
+
+    -- * Response Lenses
+    createEnvironmentEC2Response_environmentId,
+    createEnvironmentEC2Response_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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:/ 'newCreateEnvironmentEC2' smart constructor.
+data CreateEnvironmentEC2 = CreateEnvironmentEC2'
+  { -- | The number of minutes until the running instance is shut down after the
+    -- environment has last been used.
+    automaticStopTimeMinutes :: Prelude.Maybe Prelude.Int,
+    -- | A unique, case-sensitive string that helps Cloud9 to ensure this
+    -- operation completes no more than one time.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Client Tokens>
+    -- in the /Amazon EC2 API Reference/.
+    clientRequestToken :: Prelude.Maybe Prelude.Text,
+    -- | The connection type used for connecting to an Amazon EC2 environment.
+    -- Valid values are @CONNECT_SSH@ (default) and @CONNECT_SSM@ (connected
+    -- through Amazon EC2 Systems Manager).
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/cloud9/latest/user-guide/ec2-ssm.html Accessing no-ingress EC2 instances with Amazon EC2 Systems Manager>
+    -- in the /Cloud9 User Guide/.
+    connectionType :: Prelude.Maybe ConnectionType,
+    -- | The description of the environment to create.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Checks whether you have the required permissions for the action, without
+    -- actually making the request, and provides an error response. If you have
+    -- the required permissions, the error response is @DryRunOperation@.
+    -- Otherwise, it is @UnauthorizedOperation@.
+    dryRun :: Prelude.Maybe Prelude.Bool,
+    -- | The identifier for the Amazon Machine Image (AMI) that\'s used to create
+    -- the EC2 instance. To choose an AMI for the instance, you must specify a
+    -- valid AMI alias or a valid Amazon EC2 Systems Manager (SSM) path.
+    --
+    -- The default Amazon Linux AMI is currently used if the parameter isn\'t
+    -- explicitly assigned a value in the request.
+    --
+    -- In the future the parameter for Amazon Linux will no longer be available
+    -- when you specify an AMI for your instance. Amazon Linux 2 will then
+    -- become the default AMI, which is used to launch your instance if no
+    -- parameter is explicitly defined.
+    --
+    -- __AMI aliases__
+    --
+    -- -   __Amazon Linux (default): @amazonlinux-1-x86_64@__
+    --
+    -- -   Amazon Linux 2: @amazonlinux-2-x86_64@
+    --
+    -- -   Ubuntu 18.04: @ubuntu-18.04-x86_64@
+    --
+    -- __SSM paths__
+    --
+    -- -   __Amazon Linux (default):
+    --     @resolve:ssm:\/aws\/service\/cloud9\/amis\/amazonlinux-1-x86_64@__
+    --
+    -- -   Amazon Linux 2:
+    --     @resolve:ssm:\/aws\/service\/cloud9\/amis\/amazonlinux-2-x86_64@
+    --
+    -- -   Ubuntu 18.04:
+    --     @resolve:ssm:\/aws\/service\/cloud9\/amis\/ubuntu-18.04-x86_64@
+    imageId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the environment owner. This ARN can be
+    -- the ARN of any IAM principal. If this value is not specified, the ARN
+    -- defaults to this environment\'s creator.
+    ownerArn :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the subnet in Amazon VPC that Cloud9 will use to communicate
+    -- with the Amazon EC2 instance.
+    subnetId :: Prelude.Maybe Prelude.Text,
+    -- | An array of key-value pairs that will be associated with the new Cloud9
+    -- development environment.
+    tags :: Prelude.Maybe (Data.Sensitive [Data.Sensitive Tag]),
+    -- | The name of the environment to create.
+    --
+    -- This name is visible to other IAM users in the same Amazon Web Services
+    -- account.
+    name :: Prelude.Text,
+    -- | The type of instance to connect to the environment (for example,
+    -- @t2.micro@).
+    instanceType :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEnvironmentEC2' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'automaticStopTimeMinutes', 'createEnvironmentEC2_automaticStopTimeMinutes' - The number of minutes until the running instance is shut down after the
+-- environment has last been used.
+--
+-- 'clientRequestToken', 'createEnvironmentEC2_clientRequestToken' - A unique, case-sensitive string that helps Cloud9 to ensure this
+-- operation completes no more than one time.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Client Tokens>
+-- in the /Amazon EC2 API Reference/.
+--
+-- 'connectionType', 'createEnvironmentEC2_connectionType' - The connection type used for connecting to an Amazon EC2 environment.
+-- Valid values are @CONNECT_SSH@ (default) and @CONNECT_SSM@ (connected
+-- through Amazon EC2 Systems Manager).
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/cloud9/latest/user-guide/ec2-ssm.html Accessing no-ingress EC2 instances with Amazon EC2 Systems Manager>
+-- in the /Cloud9 User Guide/.
+--
+-- 'description', 'createEnvironmentEC2_description' - The description of the environment to create.
+--
+-- 'dryRun', 'createEnvironmentEC2_dryRun' - Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+--
+-- 'imageId', 'createEnvironmentEC2_imageId' - The identifier for the Amazon Machine Image (AMI) that\'s used to create
+-- the EC2 instance. To choose an AMI for the instance, you must specify a
+-- valid AMI alias or a valid Amazon EC2 Systems Manager (SSM) path.
+--
+-- The default Amazon Linux AMI is currently used if the parameter isn\'t
+-- explicitly assigned a value in the request.
+--
+-- In the future the parameter for Amazon Linux will no longer be available
+-- when you specify an AMI for your instance. Amazon Linux 2 will then
+-- become the default AMI, which is used to launch your instance if no
+-- parameter is explicitly defined.
+--
+-- __AMI aliases__
+--
+-- -   __Amazon Linux (default): @amazonlinux-1-x86_64@__
+--
+-- -   Amazon Linux 2: @amazonlinux-2-x86_64@
+--
+-- -   Ubuntu 18.04: @ubuntu-18.04-x86_64@
+--
+-- __SSM paths__
+--
+-- -   __Amazon Linux (default):
+--     @resolve:ssm:\/aws\/service\/cloud9\/amis\/amazonlinux-1-x86_64@__
+--
+-- -   Amazon Linux 2:
+--     @resolve:ssm:\/aws\/service\/cloud9\/amis\/amazonlinux-2-x86_64@
+--
+-- -   Ubuntu 18.04:
+--     @resolve:ssm:\/aws\/service\/cloud9\/amis\/ubuntu-18.04-x86_64@
+--
+-- 'ownerArn', 'createEnvironmentEC2_ownerArn' - The Amazon Resource Name (ARN) of the environment owner. This ARN can be
+-- the ARN of any IAM principal. If this value is not specified, the ARN
+-- defaults to this environment\'s creator.
+--
+-- 'subnetId', 'createEnvironmentEC2_subnetId' - The ID of the subnet in Amazon VPC that Cloud9 will use to communicate
+-- with the Amazon EC2 instance.
+--
+-- 'tags', 'createEnvironmentEC2_tags' - An array of key-value pairs that will be associated with the new Cloud9
+-- development environment.
+--
+-- 'name', 'createEnvironmentEC2_name' - The name of the environment to create.
+--
+-- This name is visible to other IAM users in the same Amazon Web Services
+-- account.
+--
+-- 'instanceType', 'createEnvironmentEC2_instanceType' - The type of instance to connect to the environment (for example,
+-- @t2.micro@).
+newCreateEnvironmentEC2 ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'instanceType'
+  Prelude.Text ->
+  CreateEnvironmentEC2
+newCreateEnvironmentEC2 pName_ pInstanceType_ =
+  CreateEnvironmentEC2'
+    { automaticStopTimeMinutes =
+        Prelude.Nothing,
+      clientRequestToken = Prelude.Nothing,
+      connectionType = Prelude.Nothing,
+      description = Prelude.Nothing,
+      dryRun = Prelude.Nothing,
+      imageId = Prelude.Nothing,
+      ownerArn = Prelude.Nothing,
+      subnetId = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      name = pName_,
+      instanceType = pInstanceType_
+    }
+
+-- | The number of minutes until the running instance is shut down after the
+-- environment has last been used.
+createEnvironmentEC2_automaticStopTimeMinutes :: Lens.Lens' CreateEnvironmentEC2 (Prelude.Maybe Prelude.Int)
+createEnvironmentEC2_automaticStopTimeMinutes = Lens.lens (\CreateEnvironmentEC2' {automaticStopTimeMinutes} -> automaticStopTimeMinutes) (\s@CreateEnvironmentEC2' {} a -> s {automaticStopTimeMinutes = a} :: CreateEnvironmentEC2)
+
+-- | A unique, case-sensitive string that helps Cloud9 to ensure this
+-- operation completes no more than one time.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Client Tokens>
+-- in the /Amazon EC2 API Reference/.
+createEnvironmentEC2_clientRequestToken :: Lens.Lens' CreateEnvironmentEC2 (Prelude.Maybe Prelude.Text)
+createEnvironmentEC2_clientRequestToken = Lens.lens (\CreateEnvironmentEC2' {clientRequestToken} -> clientRequestToken) (\s@CreateEnvironmentEC2' {} a -> s {clientRequestToken = a} :: CreateEnvironmentEC2)
+
+-- | The connection type used for connecting to an Amazon EC2 environment.
+-- Valid values are @CONNECT_SSH@ (default) and @CONNECT_SSM@ (connected
+-- through Amazon EC2 Systems Manager).
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/cloud9/latest/user-guide/ec2-ssm.html Accessing no-ingress EC2 instances with Amazon EC2 Systems Manager>
+-- in the /Cloud9 User Guide/.
+createEnvironmentEC2_connectionType :: Lens.Lens' CreateEnvironmentEC2 (Prelude.Maybe ConnectionType)
+createEnvironmentEC2_connectionType = Lens.lens (\CreateEnvironmentEC2' {connectionType} -> connectionType) (\s@CreateEnvironmentEC2' {} a -> s {connectionType = a} :: CreateEnvironmentEC2)
+
+-- | The description of the environment to create.
+createEnvironmentEC2_description :: Lens.Lens' CreateEnvironmentEC2 (Prelude.Maybe Prelude.Text)
+createEnvironmentEC2_description = Lens.lens (\CreateEnvironmentEC2' {description} -> description) (\s@CreateEnvironmentEC2' {} a -> s {description = a} :: CreateEnvironmentEC2) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Checks whether you have the required permissions for the action, without
+-- actually making the request, and provides an error response. If you have
+-- the required permissions, the error response is @DryRunOperation@.
+-- Otherwise, it is @UnauthorizedOperation@.
+createEnvironmentEC2_dryRun :: Lens.Lens' CreateEnvironmentEC2 (Prelude.Maybe Prelude.Bool)
+createEnvironmentEC2_dryRun = Lens.lens (\CreateEnvironmentEC2' {dryRun} -> dryRun) (\s@CreateEnvironmentEC2' {} a -> s {dryRun = a} :: CreateEnvironmentEC2)
+
+-- | The identifier for the Amazon Machine Image (AMI) that\'s used to create
+-- the EC2 instance. To choose an AMI for the instance, you must specify a
+-- valid AMI alias or a valid Amazon EC2 Systems Manager (SSM) path.
+--
+-- The default Amazon Linux AMI is currently used if the parameter isn\'t
+-- explicitly assigned a value in the request.
+--
+-- In the future the parameter for Amazon Linux will no longer be available
+-- when you specify an AMI for your instance. Amazon Linux 2 will then
+-- become the default AMI, which is used to launch your instance if no
+-- parameter is explicitly defined.
+--
+-- __AMI aliases__
+--
+-- -   __Amazon Linux (default): @amazonlinux-1-x86_64@__
+--
+-- -   Amazon Linux 2: @amazonlinux-2-x86_64@
+--
+-- -   Ubuntu 18.04: @ubuntu-18.04-x86_64@
+--
+-- __SSM paths__
+--
+-- -   __Amazon Linux (default):
+--     @resolve:ssm:\/aws\/service\/cloud9\/amis\/amazonlinux-1-x86_64@__
+--
+-- -   Amazon Linux 2:
+--     @resolve:ssm:\/aws\/service\/cloud9\/amis\/amazonlinux-2-x86_64@
+--
+-- -   Ubuntu 18.04:
+--     @resolve:ssm:\/aws\/service\/cloud9\/amis\/ubuntu-18.04-x86_64@
+createEnvironmentEC2_imageId :: Lens.Lens' CreateEnvironmentEC2 (Prelude.Maybe Prelude.Text)
+createEnvironmentEC2_imageId = Lens.lens (\CreateEnvironmentEC2' {imageId} -> imageId) (\s@CreateEnvironmentEC2' {} a -> s {imageId = a} :: CreateEnvironmentEC2)
+
+-- | The Amazon Resource Name (ARN) of the environment owner. This ARN can be
+-- the ARN of any IAM principal. If this value is not specified, the ARN
+-- defaults to this environment\'s creator.
+createEnvironmentEC2_ownerArn :: Lens.Lens' CreateEnvironmentEC2 (Prelude.Maybe Prelude.Text)
+createEnvironmentEC2_ownerArn = Lens.lens (\CreateEnvironmentEC2' {ownerArn} -> ownerArn) (\s@CreateEnvironmentEC2' {} a -> s {ownerArn = a} :: CreateEnvironmentEC2)
+
+-- | The ID of the subnet in Amazon VPC that Cloud9 will use to communicate
+-- with the Amazon EC2 instance.
+createEnvironmentEC2_subnetId :: Lens.Lens' CreateEnvironmentEC2 (Prelude.Maybe Prelude.Text)
+createEnvironmentEC2_subnetId = Lens.lens (\CreateEnvironmentEC2' {subnetId} -> subnetId) (\s@CreateEnvironmentEC2' {} a -> s {subnetId = a} :: CreateEnvironmentEC2)
+
+-- | An array of key-value pairs that will be associated with the new Cloud9
+-- development environment.
+createEnvironmentEC2_tags :: Lens.Lens' CreateEnvironmentEC2 (Prelude.Maybe [Tag])
+createEnvironmentEC2_tags = Lens.lens (\CreateEnvironmentEC2' {tags} -> tags) (\s@CreateEnvironmentEC2' {} a -> s {tags = a} :: CreateEnvironmentEC2) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The name of the environment to create.
+--
+-- This name is visible to other IAM users in the same Amazon Web Services
+-- account.
+createEnvironmentEC2_name :: Lens.Lens' CreateEnvironmentEC2 Prelude.Text
+createEnvironmentEC2_name = Lens.lens (\CreateEnvironmentEC2' {name} -> name) (\s@CreateEnvironmentEC2' {} a -> s {name = a} :: CreateEnvironmentEC2)
+
+-- | The type of instance to connect to the environment (for example,
+-- @t2.micro@).
+createEnvironmentEC2_instanceType :: Lens.Lens' CreateEnvironmentEC2 Prelude.Text
+createEnvironmentEC2_instanceType = Lens.lens (\CreateEnvironmentEC2' {instanceType} -> instanceType) (\s@CreateEnvironmentEC2' {} a -> s {instanceType = a} :: CreateEnvironmentEC2)
+
+instance Core.AWSRequest CreateEnvironmentEC2 where
+  type
+    AWSResponse CreateEnvironmentEC2 =
+      CreateEnvironmentEC2Response
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateEnvironmentEC2Response'
+            Prelude.<$> (x Data..?> "environmentId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateEnvironmentEC2 where
+  hashWithSalt _salt CreateEnvironmentEC2' {..} =
+    _salt
+      `Prelude.hashWithSalt` automaticStopTimeMinutes
+      `Prelude.hashWithSalt` clientRequestToken
+      `Prelude.hashWithSalt` connectionType
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` dryRun
+      `Prelude.hashWithSalt` imageId
+      `Prelude.hashWithSalt` ownerArn
+      `Prelude.hashWithSalt` subnetId
+      `Prelude.hashWithSalt` tags
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` instanceType
+
+instance Prelude.NFData CreateEnvironmentEC2 where
+  rnf CreateEnvironmentEC2' {..} =
+    Prelude.rnf automaticStopTimeMinutes
+      `Prelude.seq` Prelude.rnf clientRequestToken
+      `Prelude.seq` Prelude.rnf connectionType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf dryRun
+      `Prelude.seq` Prelude.rnf imageId
+      `Prelude.seq` Prelude.rnf ownerArn
+      `Prelude.seq` Prelude.rnf subnetId
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf instanceType
+
+instance Data.ToHeaders CreateEnvironmentEC2 where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSCloud9WorkspaceManagementService.CreateEnvironmentEC2" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEnvironmentEC2 where
+  toJSON CreateEnvironmentEC2' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("automaticStopTimeMinutes" Data..=)
+              Prelude.<$> automaticStopTimeMinutes,
+            ("clientRequestToken" Data..=)
+              Prelude.<$> clientRequestToken,
+            ("connectionType" Data..=)
+              Prelude.<$> connectionType,
+            ("description" Data..=) Prelude.<$> description,
+            ("dryRun" Data..=) Prelude.<$> dryRun,
+            ("imageId" Data..=) Prelude.<$> imageId,
+            ("ownerArn" Data..=) Prelude.<$> ownerArn,
+            ("subnetId" Data..=) Prelude.<$> subnetId,
+            ("tags" Data..=) Prelude.<$> tags,
+            Prelude.Just ("name" Data..= name),
+            Prelude.Just ("instanceType" Data..= instanceType)
+          ]
+      )
+
+instance Data.ToPath CreateEnvironmentEC2 where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateEnvironmentEC2 where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateEnvironmentEC2Response' smart constructor.
+data CreateEnvironmentEC2Response = CreateEnvironmentEC2Response'
+  { -- | The ID of the environment that was created.
+    environmentId :: 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 'CreateEnvironmentEC2Response' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentId', 'createEnvironmentEC2Response_environmentId' - The ID of the environment that was created.
+--
+-- 'httpStatus', 'createEnvironmentEC2Response_httpStatus' - The response's http status code.
+newCreateEnvironmentEC2Response ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateEnvironmentEC2Response
+newCreateEnvironmentEC2Response pHttpStatus_ =
+  CreateEnvironmentEC2Response'
+    { environmentId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the environment that was created.
+createEnvironmentEC2Response_environmentId :: Lens.Lens' CreateEnvironmentEC2Response (Prelude.Maybe Prelude.Text)
+createEnvironmentEC2Response_environmentId = Lens.lens (\CreateEnvironmentEC2Response' {environmentId} -> environmentId) (\s@CreateEnvironmentEC2Response' {} a -> s {environmentId = a} :: CreateEnvironmentEC2Response)
+
+-- | The response's http status code.
+createEnvironmentEC2Response_httpStatus :: Lens.Lens' CreateEnvironmentEC2Response Prelude.Int
+createEnvironmentEC2Response_httpStatus = Lens.lens (\CreateEnvironmentEC2Response' {httpStatus} -> httpStatus) (\s@CreateEnvironmentEC2Response' {} a -> s {httpStatus = a} :: CreateEnvironmentEC2Response)
+
+instance Prelude.NFData CreateEnvironmentEC2Response where
+  rnf CreateEnvironmentEC2Response' {..} =
+    Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Cloud9/CreateEnvironmentMembership.hs b/gen/Amazonka/Cloud9/CreateEnvironmentMembership.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/CreateEnvironmentMembership.hs
@@ -0,0 +1,236 @@
+{-# 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.Cloud9.CreateEnvironmentMembership
+-- 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 an environment member to an Cloud9 development environment.
+module Amazonka.Cloud9.CreateEnvironmentMembership
+  ( -- * Creating a Request
+    CreateEnvironmentMembership (..),
+    newCreateEnvironmentMembership,
+
+    -- * Request Lenses
+    createEnvironmentMembership_environmentId,
+    createEnvironmentMembership_userArn,
+    createEnvironmentMembership_permissions,
+
+    -- * Destructuring the Response
+    CreateEnvironmentMembershipResponse (..),
+    newCreateEnvironmentMembershipResponse,
+
+    -- * Response Lenses
+    createEnvironmentMembershipResponse_httpStatus,
+    createEnvironmentMembershipResponse_membership,
+  )
+where
+
+import Amazonka.Cloud9.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:/ 'newCreateEnvironmentMembership' smart constructor.
+data CreateEnvironmentMembership = CreateEnvironmentMembership'
+  { -- | The ID of the environment that contains the environment member you want
+    -- to add.
+    environmentId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the environment member you want to
+    -- add.
+    userArn :: Prelude.Text,
+    -- | The type of environment member permissions you want to associate with
+    -- this environment member. Available values include:
+    --
+    -- -   @read-only@: Has read-only access to the environment.
+    --
+    -- -   @read-write@: Has read-write access to the environment.
+    permissions :: MemberPermissions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEnvironmentMembership' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentId', 'createEnvironmentMembership_environmentId' - The ID of the environment that contains the environment member you want
+-- to add.
+--
+-- 'userArn', 'createEnvironmentMembership_userArn' - The Amazon Resource Name (ARN) of the environment member you want to
+-- add.
+--
+-- 'permissions', 'createEnvironmentMembership_permissions' - The type of environment member permissions you want to associate with
+-- this environment member. Available values include:
+--
+-- -   @read-only@: Has read-only access to the environment.
+--
+-- -   @read-write@: Has read-write access to the environment.
+newCreateEnvironmentMembership ::
+  -- | 'environmentId'
+  Prelude.Text ->
+  -- | 'userArn'
+  Prelude.Text ->
+  -- | 'permissions'
+  MemberPermissions ->
+  CreateEnvironmentMembership
+newCreateEnvironmentMembership
+  pEnvironmentId_
+  pUserArn_
+  pPermissions_ =
+    CreateEnvironmentMembership'
+      { environmentId =
+          pEnvironmentId_,
+        userArn = pUserArn_,
+        permissions = pPermissions_
+      }
+
+-- | The ID of the environment that contains the environment member you want
+-- to add.
+createEnvironmentMembership_environmentId :: Lens.Lens' CreateEnvironmentMembership Prelude.Text
+createEnvironmentMembership_environmentId = Lens.lens (\CreateEnvironmentMembership' {environmentId} -> environmentId) (\s@CreateEnvironmentMembership' {} a -> s {environmentId = a} :: CreateEnvironmentMembership)
+
+-- | The Amazon Resource Name (ARN) of the environment member you want to
+-- add.
+createEnvironmentMembership_userArn :: Lens.Lens' CreateEnvironmentMembership Prelude.Text
+createEnvironmentMembership_userArn = Lens.lens (\CreateEnvironmentMembership' {userArn} -> userArn) (\s@CreateEnvironmentMembership' {} a -> s {userArn = a} :: CreateEnvironmentMembership)
+
+-- | The type of environment member permissions you want to associate with
+-- this environment member. Available values include:
+--
+-- -   @read-only@: Has read-only access to the environment.
+--
+-- -   @read-write@: Has read-write access to the environment.
+createEnvironmentMembership_permissions :: Lens.Lens' CreateEnvironmentMembership MemberPermissions
+createEnvironmentMembership_permissions = Lens.lens (\CreateEnvironmentMembership' {permissions} -> permissions) (\s@CreateEnvironmentMembership' {} a -> s {permissions = a} :: CreateEnvironmentMembership)
+
+instance Core.AWSRequest CreateEnvironmentMembership where
+  type
+    AWSResponse CreateEnvironmentMembership =
+      CreateEnvironmentMembershipResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateEnvironmentMembershipResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "membership")
+      )
+
+instance Prelude.Hashable CreateEnvironmentMembership where
+  hashWithSalt _salt CreateEnvironmentMembership' {..} =
+    _salt
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` userArn
+      `Prelude.hashWithSalt` permissions
+
+instance Prelude.NFData CreateEnvironmentMembership where
+  rnf CreateEnvironmentMembership' {..} =
+    Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf userArn
+      `Prelude.seq` Prelude.rnf permissions
+
+instance Data.ToHeaders CreateEnvironmentMembership where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSCloud9WorkspaceManagementService.CreateEnvironmentMembership" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateEnvironmentMembership where
+  toJSON CreateEnvironmentMembership' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("environmentId" Data..= environmentId),
+            Prelude.Just ("userArn" Data..= userArn),
+            Prelude.Just ("permissions" Data..= permissions)
+          ]
+      )
+
+instance Data.ToPath CreateEnvironmentMembership where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateEnvironmentMembership where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateEnvironmentMembershipResponse' smart constructor.
+data CreateEnvironmentMembershipResponse = CreateEnvironmentMembershipResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | Information about the environment member that was added.
+    membership :: EnvironmentMember
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateEnvironmentMembershipResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createEnvironmentMembershipResponse_httpStatus' - The response's http status code.
+--
+-- 'membership', 'createEnvironmentMembershipResponse_membership' - Information about the environment member that was added.
+newCreateEnvironmentMembershipResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'membership'
+  EnvironmentMember ->
+  CreateEnvironmentMembershipResponse
+newCreateEnvironmentMembershipResponse
+  pHttpStatus_
+  pMembership_ =
+    CreateEnvironmentMembershipResponse'
+      { httpStatus =
+          pHttpStatus_,
+        membership = pMembership_
+      }
+
+-- | The response's http status code.
+createEnvironmentMembershipResponse_httpStatus :: Lens.Lens' CreateEnvironmentMembershipResponse Prelude.Int
+createEnvironmentMembershipResponse_httpStatus = Lens.lens (\CreateEnvironmentMembershipResponse' {httpStatus} -> httpStatus) (\s@CreateEnvironmentMembershipResponse' {} a -> s {httpStatus = a} :: CreateEnvironmentMembershipResponse)
+
+-- | Information about the environment member that was added.
+createEnvironmentMembershipResponse_membership :: Lens.Lens' CreateEnvironmentMembershipResponse EnvironmentMember
+createEnvironmentMembershipResponse_membership = Lens.lens (\CreateEnvironmentMembershipResponse' {membership} -> membership) (\s@CreateEnvironmentMembershipResponse' {} a -> s {membership = a} :: CreateEnvironmentMembershipResponse)
+
+instance
+  Prelude.NFData
+    CreateEnvironmentMembershipResponse
+  where
+  rnf CreateEnvironmentMembershipResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf membership
diff --git a/gen/Amazonka/Cloud9/DeleteEnvironment.hs b/gen/Amazonka/Cloud9/DeleteEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/DeleteEnvironment.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.DeleteEnvironment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an Cloud9 development environment. If an Amazon EC2 instance is
+-- connected to the environment, also terminates the instance.
+module Amazonka.Cloud9.DeleteEnvironment
+  ( -- * Creating a Request
+    DeleteEnvironment (..),
+    newDeleteEnvironment,
+
+    -- * Request Lenses
+    deleteEnvironment_environmentId,
+
+    -- * Destructuring the Response
+    DeleteEnvironmentResponse (..),
+    newDeleteEnvironmentResponse,
+
+    -- * Response Lenses
+    deleteEnvironmentResponse_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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:/ 'newDeleteEnvironment' smart constructor.
+data DeleteEnvironment = DeleteEnvironment'
+  { -- | The ID of the environment to delete.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentId', 'deleteEnvironment_environmentId' - The ID of the environment to delete.
+newDeleteEnvironment ::
+  -- | 'environmentId'
+  Prelude.Text ->
+  DeleteEnvironment
+newDeleteEnvironment pEnvironmentId_ =
+  DeleteEnvironment' {environmentId = pEnvironmentId_}
+
+-- | The ID of the environment to delete.
+deleteEnvironment_environmentId :: Lens.Lens' DeleteEnvironment Prelude.Text
+deleteEnvironment_environmentId = Lens.lens (\DeleteEnvironment' {environmentId} -> environmentId) (\s@DeleteEnvironment' {} a -> s {environmentId = a} :: DeleteEnvironment)
+
+instance Core.AWSRequest DeleteEnvironment where
+  type
+    AWSResponse DeleteEnvironment =
+      DeleteEnvironmentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEnvironmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEnvironment where
+  hashWithSalt _salt DeleteEnvironment' {..} =
+    _salt `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData DeleteEnvironment where
+  rnf DeleteEnvironment' {..} =
+    Prelude.rnf environmentId
+
+instance Data.ToHeaders DeleteEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSCloud9WorkspaceManagementService.DeleteEnvironment" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteEnvironment where
+  toJSON DeleteEnvironment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("environmentId" Data..= environmentId)
+          ]
+      )
+
+instance Data.ToPath DeleteEnvironment where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteEnvironment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEnvironmentResponse' smart constructor.
+data DeleteEnvironmentResponse = DeleteEnvironmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'deleteEnvironmentResponse_httpStatus' - The response's http status code.
+newDeleteEnvironmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEnvironmentResponse
+newDeleteEnvironmentResponse pHttpStatus_ =
+  DeleteEnvironmentResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteEnvironmentResponse_httpStatus :: Lens.Lens' DeleteEnvironmentResponse Prelude.Int
+deleteEnvironmentResponse_httpStatus = Lens.lens (\DeleteEnvironmentResponse' {httpStatus} -> httpStatus) (\s@DeleteEnvironmentResponse' {} a -> s {httpStatus = a} :: DeleteEnvironmentResponse)
+
+instance Prelude.NFData DeleteEnvironmentResponse where
+  rnf DeleteEnvironmentResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Cloud9/DeleteEnvironmentMembership.hs b/gen/Amazonka/Cloud9/DeleteEnvironmentMembership.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/DeleteEnvironmentMembership.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.Cloud9.DeleteEnvironmentMembership
+-- 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 environment member from a development environment.
+module Amazonka.Cloud9.DeleteEnvironmentMembership
+  ( -- * Creating a Request
+    DeleteEnvironmentMembership (..),
+    newDeleteEnvironmentMembership,
+
+    -- * Request Lenses
+    deleteEnvironmentMembership_environmentId,
+    deleteEnvironmentMembership_userArn,
+
+    -- * Destructuring the Response
+    DeleteEnvironmentMembershipResponse (..),
+    newDeleteEnvironmentMembershipResponse,
+
+    -- * Response Lenses
+    deleteEnvironmentMembershipResponse_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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:/ 'newDeleteEnvironmentMembership' smart constructor.
+data DeleteEnvironmentMembership = DeleteEnvironmentMembership'
+  { -- | The ID of the environment to delete the environment member from.
+    environmentId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the environment member to delete from
+    -- the environment.
+    userArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEnvironmentMembership' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentId', 'deleteEnvironmentMembership_environmentId' - The ID of the environment to delete the environment member from.
+--
+-- 'userArn', 'deleteEnvironmentMembership_userArn' - The Amazon Resource Name (ARN) of the environment member to delete from
+-- the environment.
+newDeleteEnvironmentMembership ::
+  -- | 'environmentId'
+  Prelude.Text ->
+  -- | 'userArn'
+  Prelude.Text ->
+  DeleteEnvironmentMembership
+newDeleteEnvironmentMembership
+  pEnvironmentId_
+  pUserArn_ =
+    DeleteEnvironmentMembership'
+      { environmentId =
+          pEnvironmentId_,
+        userArn = pUserArn_
+      }
+
+-- | The ID of the environment to delete the environment member from.
+deleteEnvironmentMembership_environmentId :: Lens.Lens' DeleteEnvironmentMembership Prelude.Text
+deleteEnvironmentMembership_environmentId = Lens.lens (\DeleteEnvironmentMembership' {environmentId} -> environmentId) (\s@DeleteEnvironmentMembership' {} a -> s {environmentId = a} :: DeleteEnvironmentMembership)
+
+-- | The Amazon Resource Name (ARN) of the environment member to delete from
+-- the environment.
+deleteEnvironmentMembership_userArn :: Lens.Lens' DeleteEnvironmentMembership Prelude.Text
+deleteEnvironmentMembership_userArn = Lens.lens (\DeleteEnvironmentMembership' {userArn} -> userArn) (\s@DeleteEnvironmentMembership' {} a -> s {userArn = a} :: DeleteEnvironmentMembership)
+
+instance Core.AWSRequest DeleteEnvironmentMembership where
+  type
+    AWSResponse DeleteEnvironmentMembership =
+      DeleteEnvironmentMembershipResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteEnvironmentMembershipResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteEnvironmentMembership where
+  hashWithSalt _salt DeleteEnvironmentMembership' {..} =
+    _salt
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` userArn
+
+instance Prelude.NFData DeleteEnvironmentMembership where
+  rnf DeleteEnvironmentMembership' {..} =
+    Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf userArn
+
+instance Data.ToHeaders DeleteEnvironmentMembership where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSCloud9WorkspaceManagementService.DeleteEnvironmentMembership" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteEnvironmentMembership where
+  toJSON DeleteEnvironmentMembership' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("environmentId" Data..= environmentId),
+            Prelude.Just ("userArn" Data..= userArn)
+          ]
+      )
+
+instance Data.ToPath DeleteEnvironmentMembership where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteEnvironmentMembership where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteEnvironmentMembershipResponse' smart constructor.
+data DeleteEnvironmentMembershipResponse = DeleteEnvironmentMembershipResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteEnvironmentMembershipResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteEnvironmentMembershipResponse_httpStatus' - The response's http status code.
+newDeleteEnvironmentMembershipResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteEnvironmentMembershipResponse
+newDeleteEnvironmentMembershipResponse pHttpStatus_ =
+  DeleteEnvironmentMembershipResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteEnvironmentMembershipResponse_httpStatus :: Lens.Lens' DeleteEnvironmentMembershipResponse Prelude.Int
+deleteEnvironmentMembershipResponse_httpStatus = Lens.lens (\DeleteEnvironmentMembershipResponse' {httpStatus} -> httpStatus) (\s@DeleteEnvironmentMembershipResponse' {} a -> s {httpStatus = a} :: DeleteEnvironmentMembershipResponse)
+
+instance
+  Prelude.NFData
+    DeleteEnvironmentMembershipResponse
+  where
+  rnf DeleteEnvironmentMembershipResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Cloud9/DescribeEnvironmentMemberships.hs b/gen/Amazonka/Cloud9/DescribeEnvironmentMemberships.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/DescribeEnvironmentMemberships.hs
@@ -0,0 +1,339 @@
+{-# 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.Cloud9.DescribeEnvironmentMemberships
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about environment members for an Cloud9 development
+-- environment.
+--
+-- This operation returns paginated results.
+module Amazonka.Cloud9.DescribeEnvironmentMemberships
+  ( -- * Creating a Request
+    DescribeEnvironmentMemberships (..),
+    newDescribeEnvironmentMemberships,
+
+    -- * Request Lenses
+    describeEnvironmentMemberships_environmentId,
+    describeEnvironmentMemberships_maxResults,
+    describeEnvironmentMemberships_nextToken,
+    describeEnvironmentMemberships_permissions,
+    describeEnvironmentMemberships_userArn,
+
+    -- * Destructuring the Response
+    DescribeEnvironmentMembershipsResponse (..),
+    newDescribeEnvironmentMembershipsResponse,
+
+    -- * Response Lenses
+    describeEnvironmentMembershipsResponse_memberships,
+    describeEnvironmentMembershipsResponse_nextToken,
+    describeEnvironmentMembershipsResponse_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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:/ 'newDescribeEnvironmentMemberships' smart constructor.
+data DescribeEnvironmentMemberships = DescribeEnvironmentMemberships'
+  { -- | The ID of the environment to get environment member information about.
+    environmentId :: Prelude.Maybe Prelude.Text,
+    -- | The maximum number of environment members to get information about.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | During a previous call, if there are more than 25 items in the list,
+    -- only the first 25 items are returned, along with a unique string called
+    -- a /next token/. To get the next batch of items in the list, call this
+    -- operation again, adding the next token to the call. To get all of the
+    -- items in the list, keep calling this operation with each subsequent next
+    -- token that is returned, until no more next tokens are returned.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The type of environment member permissions to get information about.
+    -- Available values include:
+    --
+    -- -   @owner@: Owns the environment.
+    --
+    -- -   @read-only@: Has read-only access to the environment.
+    --
+    -- -   @read-write@: Has read-write access to the environment.
+    --
+    -- If no value is specified, information about all environment members are
+    -- returned.
+    permissions :: Prelude.Maybe [Permissions],
+    -- | The Amazon Resource Name (ARN) of an individual environment member to
+    -- get information about. If no value is specified, information about all
+    -- environment members are returned.
+    userArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEnvironmentMemberships' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentId', 'describeEnvironmentMemberships_environmentId' - The ID of the environment to get environment member information about.
+--
+-- 'maxResults', 'describeEnvironmentMemberships_maxResults' - The maximum number of environment members to get information about.
+--
+-- 'nextToken', 'describeEnvironmentMemberships_nextToken' - During a previous call, if there are more than 25 items in the list,
+-- only the first 25 items are returned, along with a unique string called
+-- a /next token/. To get the next batch of items in the list, call this
+-- operation again, adding the next token to the call. To get all of the
+-- items in the list, keep calling this operation with each subsequent next
+-- token that is returned, until no more next tokens are returned.
+--
+-- 'permissions', 'describeEnvironmentMemberships_permissions' - The type of environment member permissions to get information about.
+-- Available values include:
+--
+-- -   @owner@: Owns the environment.
+--
+-- -   @read-only@: Has read-only access to the environment.
+--
+-- -   @read-write@: Has read-write access to the environment.
+--
+-- If no value is specified, information about all environment members are
+-- returned.
+--
+-- 'userArn', 'describeEnvironmentMemberships_userArn' - The Amazon Resource Name (ARN) of an individual environment member to
+-- get information about. If no value is specified, information about all
+-- environment members are returned.
+newDescribeEnvironmentMemberships ::
+  DescribeEnvironmentMemberships
+newDescribeEnvironmentMemberships =
+  DescribeEnvironmentMemberships'
+    { environmentId =
+        Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      permissions = Prelude.Nothing,
+      userArn = Prelude.Nothing
+    }
+
+-- | The ID of the environment to get environment member information about.
+describeEnvironmentMemberships_environmentId :: Lens.Lens' DescribeEnvironmentMemberships (Prelude.Maybe Prelude.Text)
+describeEnvironmentMemberships_environmentId = Lens.lens (\DescribeEnvironmentMemberships' {environmentId} -> environmentId) (\s@DescribeEnvironmentMemberships' {} a -> s {environmentId = a} :: DescribeEnvironmentMemberships)
+
+-- | The maximum number of environment members to get information about.
+describeEnvironmentMemberships_maxResults :: Lens.Lens' DescribeEnvironmentMemberships (Prelude.Maybe Prelude.Natural)
+describeEnvironmentMemberships_maxResults = Lens.lens (\DescribeEnvironmentMemberships' {maxResults} -> maxResults) (\s@DescribeEnvironmentMemberships' {} a -> s {maxResults = a} :: DescribeEnvironmentMemberships)
+
+-- | During a previous call, if there are more than 25 items in the list,
+-- only the first 25 items are returned, along with a unique string called
+-- a /next token/. To get the next batch of items in the list, call this
+-- operation again, adding the next token to the call. To get all of the
+-- items in the list, keep calling this operation with each subsequent next
+-- token that is returned, until no more next tokens are returned.
+describeEnvironmentMemberships_nextToken :: Lens.Lens' DescribeEnvironmentMemberships (Prelude.Maybe Prelude.Text)
+describeEnvironmentMemberships_nextToken = Lens.lens (\DescribeEnvironmentMemberships' {nextToken} -> nextToken) (\s@DescribeEnvironmentMemberships' {} a -> s {nextToken = a} :: DescribeEnvironmentMemberships)
+
+-- | The type of environment member permissions to get information about.
+-- Available values include:
+--
+-- -   @owner@: Owns the environment.
+--
+-- -   @read-only@: Has read-only access to the environment.
+--
+-- -   @read-write@: Has read-write access to the environment.
+--
+-- If no value is specified, information about all environment members are
+-- returned.
+describeEnvironmentMemberships_permissions :: Lens.Lens' DescribeEnvironmentMemberships (Prelude.Maybe [Permissions])
+describeEnvironmentMemberships_permissions = Lens.lens (\DescribeEnvironmentMemberships' {permissions} -> permissions) (\s@DescribeEnvironmentMemberships' {} a -> s {permissions = a} :: DescribeEnvironmentMemberships) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Amazon Resource Name (ARN) of an individual environment member to
+-- get information about. If no value is specified, information about all
+-- environment members are returned.
+describeEnvironmentMemberships_userArn :: Lens.Lens' DescribeEnvironmentMemberships (Prelude.Maybe Prelude.Text)
+describeEnvironmentMemberships_userArn = Lens.lens (\DescribeEnvironmentMemberships' {userArn} -> userArn) (\s@DescribeEnvironmentMemberships' {} a -> s {userArn = a} :: DescribeEnvironmentMemberships)
+
+instance Core.AWSPager DescribeEnvironmentMemberships where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeEnvironmentMembershipsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeEnvironmentMembershipsResponse_memberships
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeEnvironmentMemberships_nextToken
+          Lens..~ rs
+          Lens.^? describeEnvironmentMembershipsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance
+  Core.AWSRequest
+    DescribeEnvironmentMemberships
+  where
+  type
+    AWSResponse DescribeEnvironmentMemberships =
+      DescribeEnvironmentMembershipsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeEnvironmentMembershipsResponse'
+            Prelude.<$> (x Data..?> "memberships" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DescribeEnvironmentMemberships
+  where
+  hashWithSalt
+    _salt
+    DescribeEnvironmentMemberships' {..} =
+      _salt
+        `Prelude.hashWithSalt` environmentId
+        `Prelude.hashWithSalt` maxResults
+        `Prelude.hashWithSalt` nextToken
+        `Prelude.hashWithSalt` permissions
+        `Prelude.hashWithSalt` userArn
+
+instance
+  Prelude.NFData
+    DescribeEnvironmentMemberships
+  where
+  rnf DescribeEnvironmentMemberships' {..} =
+    Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf permissions
+      `Prelude.seq` Prelude.rnf userArn
+
+instance
+  Data.ToHeaders
+    DescribeEnvironmentMemberships
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSCloud9WorkspaceManagementService.DescribeEnvironmentMemberships" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeEnvironmentMemberships where
+  toJSON DescribeEnvironmentMemberships' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("environmentId" Data..=) Prelude.<$> environmentId,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("permissions" Data..=) Prelude.<$> permissions,
+            ("userArn" Data..=) Prelude.<$> userArn
+          ]
+      )
+
+instance Data.ToPath DescribeEnvironmentMemberships where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeEnvironmentMemberships where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeEnvironmentMembershipsResponse' smart constructor.
+data DescribeEnvironmentMembershipsResponse = DescribeEnvironmentMembershipsResponse'
+  { -- | Information about the environment members for the environment.
+    memberships :: Prelude.Maybe [EnvironmentMember],
+    -- | If there are more than 25 items in the list, only the first 25 items are
+    -- returned, along with a unique string called a /next token/. To get the
+    -- next batch of items in the list, call this operation again, adding the
+    -- next token to the call.
+    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 'DescribeEnvironmentMembershipsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'memberships', 'describeEnvironmentMembershipsResponse_memberships' - Information about the environment members for the environment.
+--
+-- 'nextToken', 'describeEnvironmentMembershipsResponse_nextToken' - If there are more than 25 items in the list, only the first 25 items are
+-- returned, along with a unique string called a /next token/. To get the
+-- next batch of items in the list, call this operation again, adding the
+-- next token to the call.
+--
+-- 'httpStatus', 'describeEnvironmentMembershipsResponse_httpStatus' - The response's http status code.
+newDescribeEnvironmentMembershipsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeEnvironmentMembershipsResponse
+newDescribeEnvironmentMembershipsResponse
+  pHttpStatus_ =
+    DescribeEnvironmentMembershipsResponse'
+      { memberships =
+          Prelude.Nothing,
+        nextToken = Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | Information about the environment members for the environment.
+describeEnvironmentMembershipsResponse_memberships :: Lens.Lens' DescribeEnvironmentMembershipsResponse (Prelude.Maybe [EnvironmentMember])
+describeEnvironmentMembershipsResponse_memberships = Lens.lens (\DescribeEnvironmentMembershipsResponse' {memberships} -> memberships) (\s@DescribeEnvironmentMembershipsResponse' {} a -> s {memberships = a} :: DescribeEnvironmentMembershipsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If there are more than 25 items in the list, only the first 25 items are
+-- returned, along with a unique string called a /next token/. To get the
+-- next batch of items in the list, call this operation again, adding the
+-- next token to the call.
+describeEnvironmentMembershipsResponse_nextToken :: Lens.Lens' DescribeEnvironmentMembershipsResponse (Prelude.Maybe Prelude.Text)
+describeEnvironmentMembershipsResponse_nextToken = Lens.lens (\DescribeEnvironmentMembershipsResponse' {nextToken} -> nextToken) (\s@DescribeEnvironmentMembershipsResponse' {} a -> s {nextToken = a} :: DescribeEnvironmentMembershipsResponse)
+
+-- | The response's http status code.
+describeEnvironmentMembershipsResponse_httpStatus :: Lens.Lens' DescribeEnvironmentMembershipsResponse Prelude.Int
+describeEnvironmentMembershipsResponse_httpStatus = Lens.lens (\DescribeEnvironmentMembershipsResponse' {httpStatus} -> httpStatus) (\s@DescribeEnvironmentMembershipsResponse' {} a -> s {httpStatus = a} :: DescribeEnvironmentMembershipsResponse)
+
+instance
+  Prelude.NFData
+    DescribeEnvironmentMembershipsResponse
+  where
+  rnf DescribeEnvironmentMembershipsResponse' {..} =
+    Prelude.rnf memberships
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Cloud9/DescribeEnvironmentStatus.hs b/gen/Amazonka/Cloud9/DescribeEnvironmentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/DescribeEnvironmentStatus.hs
@@ -0,0 +1,238 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.DescribeEnvironmentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets status information for an Cloud9 development environment.
+module Amazonka.Cloud9.DescribeEnvironmentStatus
+  ( -- * Creating a Request
+    DescribeEnvironmentStatus (..),
+    newDescribeEnvironmentStatus,
+
+    -- * Request Lenses
+    describeEnvironmentStatus_environmentId,
+
+    -- * Destructuring the Response
+    DescribeEnvironmentStatusResponse (..),
+    newDescribeEnvironmentStatusResponse,
+
+    -- * Response Lenses
+    describeEnvironmentStatusResponse_httpStatus,
+    describeEnvironmentStatusResponse_status,
+    describeEnvironmentStatusResponse_message,
+  )
+where
+
+import Amazonka.Cloud9.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:/ 'newDescribeEnvironmentStatus' smart constructor.
+data DescribeEnvironmentStatus = DescribeEnvironmentStatus'
+  { -- | The ID of the environment to get status information about.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEnvironmentStatus' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentId', 'describeEnvironmentStatus_environmentId' - The ID of the environment to get status information about.
+newDescribeEnvironmentStatus ::
+  -- | 'environmentId'
+  Prelude.Text ->
+  DescribeEnvironmentStatus
+newDescribeEnvironmentStatus pEnvironmentId_ =
+  DescribeEnvironmentStatus'
+    { environmentId =
+        pEnvironmentId_
+    }
+
+-- | The ID of the environment to get status information about.
+describeEnvironmentStatus_environmentId :: Lens.Lens' DescribeEnvironmentStatus Prelude.Text
+describeEnvironmentStatus_environmentId = Lens.lens (\DescribeEnvironmentStatus' {environmentId} -> environmentId) (\s@DescribeEnvironmentStatus' {} a -> s {environmentId = a} :: DescribeEnvironmentStatus)
+
+instance Core.AWSRequest DescribeEnvironmentStatus where
+  type
+    AWSResponse DescribeEnvironmentStatus =
+      DescribeEnvironmentStatusResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeEnvironmentStatusResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+            Prelude.<*> (x Data..:> "status")
+            Prelude.<*> (x Data..:> "message")
+      )
+
+instance Prelude.Hashable DescribeEnvironmentStatus where
+  hashWithSalt _salt DescribeEnvironmentStatus' {..} =
+    _salt `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData DescribeEnvironmentStatus where
+  rnf DescribeEnvironmentStatus' {..} =
+    Prelude.rnf environmentId
+
+instance Data.ToHeaders DescribeEnvironmentStatus where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSCloud9WorkspaceManagementService.DescribeEnvironmentStatus" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeEnvironmentStatus where
+  toJSON DescribeEnvironmentStatus' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("environmentId" Data..= environmentId)
+          ]
+      )
+
+instance Data.ToPath DescribeEnvironmentStatus where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeEnvironmentStatus where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeEnvironmentStatusResponse' smart constructor.
+data DescribeEnvironmentStatusResponse = DescribeEnvironmentStatusResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int,
+    -- | The status of the environment. Available values include:
+    --
+    -- -   @connecting@: The environment is connecting.
+    --
+    -- -   @creating@: The environment is being created.
+    --
+    -- -   @deleting@: The environment is being deleted.
+    --
+    -- -   @error@: The environment is in an error state.
+    --
+    -- -   @ready@: The environment is ready.
+    --
+    -- -   @stopped@: The environment is stopped.
+    --
+    -- -   @stopping@: The environment is stopping.
+    status :: EnvironmentStatus,
+    -- | Any informational message about the status of the environment.
+    message :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEnvironmentStatusResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'describeEnvironmentStatusResponse_httpStatus' - The response's http status code.
+--
+-- 'status', 'describeEnvironmentStatusResponse_status' - The status of the environment. Available values include:
+--
+-- -   @connecting@: The environment is connecting.
+--
+-- -   @creating@: The environment is being created.
+--
+-- -   @deleting@: The environment is being deleted.
+--
+-- -   @error@: The environment is in an error state.
+--
+-- -   @ready@: The environment is ready.
+--
+-- -   @stopped@: The environment is stopped.
+--
+-- -   @stopping@: The environment is stopping.
+--
+-- 'message', 'describeEnvironmentStatusResponse_message' - Any informational message about the status of the environment.
+newDescribeEnvironmentStatusResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  -- | 'status'
+  EnvironmentStatus ->
+  -- | 'message'
+  Prelude.Text ->
+  DescribeEnvironmentStatusResponse
+newDescribeEnvironmentStatusResponse
+  pHttpStatus_
+  pStatus_
+  pMessage_ =
+    DescribeEnvironmentStatusResponse'
+      { httpStatus =
+          pHttpStatus_,
+        status = pStatus_,
+        message = pMessage_
+      }
+
+-- | The response's http status code.
+describeEnvironmentStatusResponse_httpStatus :: Lens.Lens' DescribeEnvironmentStatusResponse Prelude.Int
+describeEnvironmentStatusResponse_httpStatus = Lens.lens (\DescribeEnvironmentStatusResponse' {httpStatus} -> httpStatus) (\s@DescribeEnvironmentStatusResponse' {} a -> s {httpStatus = a} :: DescribeEnvironmentStatusResponse)
+
+-- | The status of the environment. Available values include:
+--
+-- -   @connecting@: The environment is connecting.
+--
+-- -   @creating@: The environment is being created.
+--
+-- -   @deleting@: The environment is being deleted.
+--
+-- -   @error@: The environment is in an error state.
+--
+-- -   @ready@: The environment is ready.
+--
+-- -   @stopped@: The environment is stopped.
+--
+-- -   @stopping@: The environment is stopping.
+describeEnvironmentStatusResponse_status :: Lens.Lens' DescribeEnvironmentStatusResponse EnvironmentStatus
+describeEnvironmentStatusResponse_status = Lens.lens (\DescribeEnvironmentStatusResponse' {status} -> status) (\s@DescribeEnvironmentStatusResponse' {} a -> s {status = a} :: DescribeEnvironmentStatusResponse)
+
+-- | Any informational message about the status of the environment.
+describeEnvironmentStatusResponse_message :: Lens.Lens' DescribeEnvironmentStatusResponse Prelude.Text
+describeEnvironmentStatusResponse_message = Lens.lens (\DescribeEnvironmentStatusResponse' {message} -> message) (\s@DescribeEnvironmentStatusResponse' {} a -> s {message = a} :: DescribeEnvironmentStatusResponse)
+
+instance
+  Prelude.NFData
+    DescribeEnvironmentStatusResponse
+  where
+  rnf DescribeEnvironmentStatusResponse' {..} =
+    Prelude.rnf httpStatus
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf message
diff --git a/gen/Amazonka/Cloud9/DescribeEnvironments.hs b/gen/Amazonka/Cloud9/DescribeEnvironments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/DescribeEnvironments.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.Cloud9.DescribeEnvironments
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets information about Cloud9 development environments.
+module Amazonka.Cloud9.DescribeEnvironments
+  ( -- * Creating a Request
+    DescribeEnvironments (..),
+    newDescribeEnvironments,
+
+    -- * Request Lenses
+    describeEnvironments_environmentIds,
+
+    -- * Destructuring the Response
+    DescribeEnvironmentsResponse (..),
+    newDescribeEnvironmentsResponse,
+
+    -- * Response Lenses
+    describeEnvironmentsResponse_environments,
+    describeEnvironmentsResponse_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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:/ 'newDescribeEnvironments' smart constructor.
+data DescribeEnvironments = DescribeEnvironments'
+  { -- | The IDs of individual environments to get information about.
+    environmentIds :: Prelude.NonEmpty Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEnvironments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentIds', 'describeEnvironments_environmentIds' - The IDs of individual environments to get information about.
+newDescribeEnvironments ::
+  -- | 'environmentIds'
+  Prelude.NonEmpty Prelude.Text ->
+  DescribeEnvironments
+newDescribeEnvironments pEnvironmentIds_ =
+  DescribeEnvironments'
+    { environmentIds =
+        Lens.coerced Lens.# pEnvironmentIds_
+    }
+
+-- | The IDs of individual environments to get information about.
+describeEnvironments_environmentIds :: Lens.Lens' DescribeEnvironments (Prelude.NonEmpty Prelude.Text)
+describeEnvironments_environmentIds = Lens.lens (\DescribeEnvironments' {environmentIds} -> environmentIds) (\s@DescribeEnvironments' {} a -> s {environmentIds = a} :: DescribeEnvironments) Prelude.. Lens.coerced
+
+instance Core.AWSRequest DescribeEnvironments where
+  type
+    AWSResponse DescribeEnvironments =
+      DescribeEnvironmentsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeEnvironmentsResponse'
+            Prelude.<$> (x Data..?> "environments" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeEnvironments where
+  hashWithSalt _salt DescribeEnvironments' {..} =
+    _salt `Prelude.hashWithSalt` environmentIds
+
+instance Prelude.NFData DescribeEnvironments where
+  rnf DescribeEnvironments' {..} =
+    Prelude.rnf environmentIds
+
+instance Data.ToHeaders DescribeEnvironments where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSCloud9WorkspaceManagementService.DescribeEnvironments" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeEnvironments where
+  toJSON DescribeEnvironments' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("environmentIds" Data..= environmentIds)
+          ]
+      )
+
+instance Data.ToPath DescribeEnvironments where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeEnvironments where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeEnvironmentsResponse' smart constructor.
+data DescribeEnvironmentsResponse = DescribeEnvironmentsResponse'
+  { -- | Information about the environments that are returned.
+    environments :: Prelude.Maybe [Environment],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeEnvironmentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environments', 'describeEnvironmentsResponse_environments' - Information about the environments that are returned.
+--
+-- 'httpStatus', 'describeEnvironmentsResponse_httpStatus' - The response's http status code.
+newDescribeEnvironmentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeEnvironmentsResponse
+newDescribeEnvironmentsResponse pHttpStatus_ =
+  DescribeEnvironmentsResponse'
+    { environments =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the environments that are returned.
+describeEnvironmentsResponse_environments :: Lens.Lens' DescribeEnvironmentsResponse (Prelude.Maybe [Environment])
+describeEnvironmentsResponse_environments = Lens.lens (\DescribeEnvironmentsResponse' {environments} -> environments) (\s@DescribeEnvironmentsResponse' {} a -> s {environments = a} :: DescribeEnvironmentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeEnvironmentsResponse_httpStatus :: Lens.Lens' DescribeEnvironmentsResponse Prelude.Int
+describeEnvironmentsResponse_httpStatus = Lens.lens (\DescribeEnvironmentsResponse' {httpStatus} -> httpStatus) (\s@DescribeEnvironmentsResponse' {} a -> s {httpStatus = a} :: DescribeEnvironmentsResponse)
+
+instance Prelude.NFData DescribeEnvironmentsResponse where
+  rnf DescribeEnvironmentsResponse' {..} =
+    Prelude.rnf environments
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Cloud9/Lens.hs b/gen/Amazonka/Cloud9/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Lens.hs
@@ -0,0 +1,152 @@
+{-# 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.Cloud9.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.Cloud9.Lens
+  ( -- * Operations
+
+    -- ** CreateEnvironmentEC2
+    createEnvironmentEC2_automaticStopTimeMinutes,
+    createEnvironmentEC2_clientRequestToken,
+    createEnvironmentEC2_connectionType,
+    createEnvironmentEC2_description,
+    createEnvironmentEC2_dryRun,
+    createEnvironmentEC2_imageId,
+    createEnvironmentEC2_ownerArn,
+    createEnvironmentEC2_subnetId,
+    createEnvironmentEC2_tags,
+    createEnvironmentEC2_name,
+    createEnvironmentEC2_instanceType,
+    createEnvironmentEC2Response_environmentId,
+    createEnvironmentEC2Response_httpStatus,
+
+    -- ** CreateEnvironmentMembership
+    createEnvironmentMembership_environmentId,
+    createEnvironmentMembership_userArn,
+    createEnvironmentMembership_permissions,
+    createEnvironmentMembershipResponse_httpStatus,
+    createEnvironmentMembershipResponse_membership,
+
+    -- ** DeleteEnvironment
+    deleteEnvironment_environmentId,
+    deleteEnvironmentResponse_httpStatus,
+
+    -- ** DeleteEnvironmentMembership
+    deleteEnvironmentMembership_environmentId,
+    deleteEnvironmentMembership_userArn,
+    deleteEnvironmentMembershipResponse_httpStatus,
+
+    -- ** DescribeEnvironmentMemberships
+    describeEnvironmentMemberships_environmentId,
+    describeEnvironmentMemberships_maxResults,
+    describeEnvironmentMemberships_nextToken,
+    describeEnvironmentMemberships_permissions,
+    describeEnvironmentMemberships_userArn,
+    describeEnvironmentMembershipsResponse_memberships,
+    describeEnvironmentMembershipsResponse_nextToken,
+    describeEnvironmentMembershipsResponse_httpStatus,
+
+    -- ** DescribeEnvironmentStatus
+    describeEnvironmentStatus_environmentId,
+    describeEnvironmentStatusResponse_httpStatus,
+    describeEnvironmentStatusResponse_status,
+    describeEnvironmentStatusResponse_message,
+
+    -- ** DescribeEnvironments
+    describeEnvironments_environmentIds,
+    describeEnvironmentsResponse_environments,
+    describeEnvironmentsResponse_httpStatus,
+
+    -- ** ListEnvironments
+    listEnvironments_maxResults,
+    listEnvironments_nextToken,
+    listEnvironmentsResponse_environmentIds,
+    listEnvironmentsResponse_nextToken,
+    listEnvironmentsResponse_httpStatus,
+
+    -- ** ListTagsForResource
+    listTagsForResource_resourceARN,
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+
+    -- ** TagResource
+    tagResource_resourceARN,
+    tagResource_tags,
+    tagResourceResponse_httpStatus,
+
+    -- ** UntagResource
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+    untagResourceResponse_httpStatus,
+
+    -- ** UpdateEnvironment
+    updateEnvironment_description,
+    updateEnvironment_managedCredentialsAction,
+    updateEnvironment_name,
+    updateEnvironment_environmentId,
+    updateEnvironmentResponse_httpStatus,
+
+    -- ** UpdateEnvironmentMembership
+    updateEnvironmentMembership_environmentId,
+    updateEnvironmentMembership_userArn,
+    updateEnvironmentMembership_permissions,
+    updateEnvironmentMembershipResponse_membership,
+    updateEnvironmentMembershipResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Environment
+    environment_connectionType,
+    environment_description,
+    environment_id,
+    environment_lifecycle,
+    environment_managedCredentialsStatus,
+    environment_name,
+    environment_type,
+    environment_arn,
+    environment_ownerArn,
+
+    -- ** EnvironmentLifecycle
+    environmentLifecycle_failureResource,
+    environmentLifecycle_reason,
+    environmentLifecycle_status,
+
+    -- ** EnvironmentMember
+    environmentMember_lastAccess,
+    environmentMember_permissions,
+    environmentMember_userId,
+    environmentMember_userArn,
+    environmentMember_environmentId,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+  )
+where
+
+import Amazonka.Cloud9.CreateEnvironmentEC2
+import Amazonka.Cloud9.CreateEnvironmentMembership
+import Amazonka.Cloud9.DeleteEnvironment
+import Amazonka.Cloud9.DeleteEnvironmentMembership
+import Amazonka.Cloud9.DescribeEnvironmentMemberships
+import Amazonka.Cloud9.DescribeEnvironmentStatus
+import Amazonka.Cloud9.DescribeEnvironments
+import Amazonka.Cloud9.ListEnvironments
+import Amazonka.Cloud9.ListTagsForResource
+import Amazonka.Cloud9.TagResource
+import Amazonka.Cloud9.Types.Environment
+import Amazonka.Cloud9.Types.EnvironmentLifecycle
+import Amazonka.Cloud9.Types.EnvironmentMember
+import Amazonka.Cloud9.Types.Tag
+import Amazonka.Cloud9.UntagResource
+import Amazonka.Cloud9.UpdateEnvironment
+import Amazonka.Cloud9.UpdateEnvironmentMembership
diff --git a/gen/Amazonka/Cloud9/ListEnvironments.hs b/gen/Amazonka/Cloud9/ListEnvironments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/ListEnvironments.hs
@@ -0,0 +1,244 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.ListEnvironments
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a list of Cloud9 development environment identifiers.
+--
+-- This operation returns paginated results.
+module Amazonka.Cloud9.ListEnvironments
+  ( -- * Creating a Request
+    ListEnvironments (..),
+    newListEnvironments,
+
+    -- * Request Lenses
+    listEnvironments_maxResults,
+    listEnvironments_nextToken,
+
+    -- * Destructuring the Response
+    ListEnvironmentsResponse (..),
+    newListEnvironmentsResponse,
+
+    -- * Response Lenses
+    listEnvironmentsResponse_environmentIds,
+    listEnvironmentsResponse_nextToken,
+    listEnvironmentsResponse_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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:/ 'newListEnvironments' smart constructor.
+data ListEnvironments = ListEnvironments'
+  { -- | The maximum number of environments to get identifiers for.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | During a previous call, if there are more than 25 items in the list,
+    -- only the first 25 items are returned, along with a unique string called
+    -- a /next token/. To get the next batch of items in the list, call this
+    -- operation again, adding the next token to the call. To get all of the
+    -- items in the list, keep calling this operation with each subsequent next
+    -- token that is returned, until no more next tokens are returned.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListEnvironments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listEnvironments_maxResults' - The maximum number of environments to get identifiers for.
+--
+-- 'nextToken', 'listEnvironments_nextToken' - During a previous call, if there are more than 25 items in the list,
+-- only the first 25 items are returned, along with a unique string called
+-- a /next token/. To get the next batch of items in the list, call this
+-- operation again, adding the next token to the call. To get all of the
+-- items in the list, keep calling this operation with each subsequent next
+-- token that is returned, until no more next tokens are returned.
+newListEnvironments ::
+  ListEnvironments
+newListEnvironments =
+  ListEnvironments'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of environments to get identifiers for.
+listEnvironments_maxResults :: Lens.Lens' ListEnvironments (Prelude.Maybe Prelude.Natural)
+listEnvironments_maxResults = Lens.lens (\ListEnvironments' {maxResults} -> maxResults) (\s@ListEnvironments' {} a -> s {maxResults = a} :: ListEnvironments)
+
+-- | During a previous call, if there are more than 25 items in the list,
+-- only the first 25 items are returned, along with a unique string called
+-- a /next token/. To get the next batch of items in the list, call this
+-- operation again, adding the next token to the call. To get all of the
+-- items in the list, keep calling this operation with each subsequent next
+-- token that is returned, until no more next tokens are returned.
+listEnvironments_nextToken :: Lens.Lens' ListEnvironments (Prelude.Maybe Prelude.Text)
+listEnvironments_nextToken = Lens.lens (\ListEnvironments' {nextToken} -> nextToken) (\s@ListEnvironments' {} a -> s {nextToken = a} :: ListEnvironments)
+
+instance Core.AWSPager ListEnvironments where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listEnvironmentsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listEnvironmentsResponse_environmentIds
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listEnvironments_nextToken
+          Lens..~ rs
+          Lens.^? listEnvironmentsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListEnvironments where
+  type
+    AWSResponse ListEnvironments =
+      ListEnvironmentsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListEnvironmentsResponse'
+            Prelude.<$> (x Data..?> "environmentIds" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListEnvironments where
+  hashWithSalt _salt ListEnvironments' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListEnvironments where
+  rnf ListEnvironments' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListEnvironments where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSCloud9WorkspaceManagementService.ListEnvironments" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListEnvironments where
+  toJSON ListEnvironments' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListEnvironments where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListEnvironments where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListEnvironmentsResponse' smart constructor.
+data ListEnvironmentsResponse = ListEnvironmentsResponse'
+  { -- | The list of environment identifiers.
+    environmentIds :: Prelude.Maybe [Prelude.Text],
+    -- | If there are more than 25 items in the list, only the first 25 items are
+    -- returned, along with a unique string called a /next token/. To get the
+    -- next batch of items in the list, call this operation again, adding the
+    -- next token to the call.
+    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 'ListEnvironmentsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentIds', 'listEnvironmentsResponse_environmentIds' - The list of environment identifiers.
+--
+-- 'nextToken', 'listEnvironmentsResponse_nextToken' - If there are more than 25 items in the list, only the first 25 items are
+-- returned, along with a unique string called a /next token/. To get the
+-- next batch of items in the list, call this operation again, adding the
+-- next token to the call.
+--
+-- 'httpStatus', 'listEnvironmentsResponse_httpStatus' - The response's http status code.
+newListEnvironmentsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListEnvironmentsResponse
+newListEnvironmentsResponse pHttpStatus_ =
+  ListEnvironmentsResponse'
+    { environmentIds =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of environment identifiers.
+listEnvironmentsResponse_environmentIds :: Lens.Lens' ListEnvironmentsResponse (Prelude.Maybe [Prelude.Text])
+listEnvironmentsResponse_environmentIds = Lens.lens (\ListEnvironmentsResponse' {environmentIds} -> environmentIds) (\s@ListEnvironmentsResponse' {} a -> s {environmentIds = a} :: ListEnvironmentsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | If there are more than 25 items in the list, only the first 25 items are
+-- returned, along with a unique string called a /next token/. To get the
+-- next batch of items in the list, call this operation again, adding the
+-- next token to the call.
+listEnvironmentsResponse_nextToken :: Lens.Lens' ListEnvironmentsResponse (Prelude.Maybe Prelude.Text)
+listEnvironmentsResponse_nextToken = Lens.lens (\ListEnvironmentsResponse' {nextToken} -> nextToken) (\s@ListEnvironmentsResponse' {} a -> s {nextToken = a} :: ListEnvironmentsResponse)
+
+-- | The response's http status code.
+listEnvironmentsResponse_httpStatus :: Lens.Lens' ListEnvironmentsResponse Prelude.Int
+listEnvironmentsResponse_httpStatus = Lens.lens (\ListEnvironmentsResponse' {httpStatus} -> httpStatus) (\s@ListEnvironmentsResponse' {} a -> s {httpStatus = a} :: ListEnvironmentsResponse)
+
+instance Prelude.NFData ListEnvironmentsResponse where
+  rnf ListEnvironmentsResponse' {..} =
+    Prelude.rnf environmentIds
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Cloud9/ListTagsForResource.hs b/gen/Amazonka/Cloud9/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/ListTagsForResource.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.Cloud9.ListTagsForResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a list of the tags associated with an Cloud9 development
+-- environment.
+module Amazonka.Cloud9.ListTagsForResource
+  ( -- * Creating a Request
+    ListTagsForResource (..),
+    newListTagsForResource,
+
+    -- * Request Lenses
+    listTagsForResource_resourceARN,
+
+    -- * Destructuring the Response
+    ListTagsForResourceResponse (..),
+    newListTagsForResourceResponse,
+
+    -- * Response Lenses
+    listTagsForResourceResponse_tags,
+    listTagsForResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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 Cloud9 development environment to
+    -- get the tags for.
+    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 Cloud9 development environment to
+-- get the tags for.
+newListTagsForResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  ListTagsForResource
+newListTagsForResource pResourceARN_ =
+  ListTagsForResource' {resourceARN = pResourceARN_}
+
+-- | The Amazon Resource Name (ARN) of the Cloud9 development environment to
+-- get the tags for.
+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.=# ( "AWSCloud9WorkspaceManagementService.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 list of tags associated with the Cloud9 development environment.
+    tags :: Prelude.Maybe (Data.Sensitive [Data.Sensitive Tag]),
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListTagsForResourceResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'tags', 'listTagsForResourceResponse_tags' - The list of tags associated with the Cloud9 development environment.
+--
+-- 'httpStatus', 'listTagsForResourceResponse_httpStatus' - The response's http status code.
+newListTagsForResourceResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListTagsForResourceResponse
+newListTagsForResourceResponse pHttpStatus_ =
+  ListTagsForResourceResponse'
+    { tags =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of tags associated with the Cloud9 development environment.
+listTagsForResourceResponse_tags :: Lens.Lens' ListTagsForResourceResponse (Prelude.Maybe [Tag])
+listTagsForResourceResponse_tags = Lens.lens (\ListTagsForResourceResponse' {tags} -> tags) (\s@ListTagsForResourceResponse' {} a -> s {tags = a} :: ListTagsForResourceResponse) Prelude.. Lens.mapping (Data._Sensitive Prelude.. Lens.coerced)
+
+-- | The response's http status code.
+listTagsForResourceResponse_httpStatus :: Lens.Lens' ListTagsForResourceResponse Prelude.Int
+listTagsForResourceResponse_httpStatus = Lens.lens (\ListTagsForResourceResponse' {httpStatus} -> httpStatus) (\s@ListTagsForResourceResponse' {} a -> s {httpStatus = a} :: ListTagsForResourceResponse)
+
+instance Prelude.NFData ListTagsForResourceResponse where
+  rnf ListTagsForResourceResponse' {..} =
+    Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Cloud9/TagResource.hs b/gen/Amazonka/Cloud9/TagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/TagResource.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.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 tags to an Cloud9 development environment.
+--
+-- Tags that you add to an Cloud9 environment by using this method will NOT
+-- be automatically propagated to underlying resources.
+module Amazonka.Cloud9.TagResource
+  ( -- * Creating a Request
+    TagResource (..),
+    newTagResource,
+
+    -- * Request Lenses
+    tagResource_resourceARN,
+    tagResource_tags,
+
+    -- * Destructuring the Response
+    TagResourceResponse (..),
+    newTagResourceResponse,
+
+    -- * Response Lenses
+    tagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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 Cloud9 development environment to
+    -- add tags to.
+    resourceARN :: Prelude.Text,
+    -- | The list of tags to add to the given Cloud9 development environment.
+    tags :: Data.Sensitive [Data.Sensitive Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARN', 'tagResource_resourceARN' - The Amazon Resource Name (ARN) of the Cloud9 development environment to
+-- add tags to.
+--
+-- 'tags', 'tagResource_tags' - The list of tags to add to the given Cloud9 development environment.
+newTagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  TagResource
+newTagResource pResourceARN_ =
+  TagResource'
+    { resourceARN = pResourceARN_,
+      tags = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the Cloud9 development environment to
+-- add tags to.
+tagResource_resourceARN :: Lens.Lens' TagResource Prelude.Text
+tagResource_resourceARN = Lens.lens (\TagResource' {resourceARN} -> resourceARN) (\s@TagResource' {} a -> s {resourceARN = a} :: TagResource)
+
+-- | The list of tags to add to the given Cloud9 development environment.
+tagResource_tags :: Lens.Lens' TagResource [Tag]
+tagResource_tags = Lens.lens (\TagResource' {tags} -> tags) (\s@TagResource' {} a -> s {tags = a} :: TagResource) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Core.AWSRequest TagResource where
+  type AWSResponse TagResource = TagResourceResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.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.=# ( "AWSCloud9WorkspaceManagementService.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/Cloud9/Types.hs b/gen/Amazonka/Cloud9/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types.hs
@@ -0,0 +1,232 @@
+{-# 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.Cloud9.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.Cloud9.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _BadRequestException,
+    _ConcurrentAccessException,
+    _ConflictException,
+    _ForbiddenException,
+    _InternalServerErrorException,
+    _LimitExceededException,
+    _NotFoundException,
+    _TooManyRequestsException,
+
+    -- * ConnectionType
+    ConnectionType (..),
+
+    -- * EnvironmentLifecycleStatus
+    EnvironmentLifecycleStatus (..),
+
+    -- * EnvironmentStatus
+    EnvironmentStatus (..),
+
+    -- * EnvironmentType
+    EnvironmentType (..),
+
+    -- * ManagedCredentialsAction
+    ManagedCredentialsAction (..),
+
+    -- * ManagedCredentialsStatus
+    ManagedCredentialsStatus (..),
+
+    -- * MemberPermissions
+    MemberPermissions (..),
+
+    -- * Permissions
+    Permissions (..),
+
+    -- * Environment
+    Environment (..),
+    newEnvironment,
+    environment_connectionType,
+    environment_description,
+    environment_id,
+    environment_lifecycle,
+    environment_managedCredentialsStatus,
+    environment_name,
+    environment_type,
+    environment_arn,
+    environment_ownerArn,
+
+    -- * EnvironmentLifecycle
+    EnvironmentLifecycle (..),
+    newEnvironmentLifecycle,
+    environmentLifecycle_failureResource,
+    environmentLifecycle_reason,
+    environmentLifecycle_status,
+
+    -- * EnvironmentMember
+    EnvironmentMember (..),
+    newEnvironmentMember,
+    environmentMember_lastAccess,
+    environmentMember_permissions,
+    environmentMember_userId,
+    environmentMember_userArn,
+    environmentMember_environmentId,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+  )
+where
+
+import Amazonka.Cloud9.Types.ConnectionType
+import Amazonka.Cloud9.Types.Environment
+import Amazonka.Cloud9.Types.EnvironmentLifecycle
+import Amazonka.Cloud9.Types.EnvironmentLifecycleStatus
+import Amazonka.Cloud9.Types.EnvironmentMember
+import Amazonka.Cloud9.Types.EnvironmentStatus
+import Amazonka.Cloud9.Types.EnvironmentType
+import Amazonka.Cloud9.Types.ManagedCredentialsAction
+import Amazonka.Cloud9.Types.ManagedCredentialsStatus
+import Amazonka.Cloud9.Types.MemberPermissions
+import Amazonka.Cloud9.Types.Permissions
+import Amazonka.Cloud9.Types.Tag
+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 @2017-09-23@ of the Amazon Cloud9 SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "Cloud9",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "cloud9",
+      Core.signingName = "cloud9",
+      Core.version = "2017-09-23",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "Cloud9",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The target request is invalid.
+_BadRequestException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_BadRequestException =
+  Core._MatchServiceError
+    defaultService
+    "BadRequestException"
+
+-- | A concurrent access issue occurred.
+_ConcurrentAccessException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConcurrentAccessException =
+  Core._MatchServiceError
+    defaultService
+    "ConcurrentAccessException"
+
+-- | A conflict occurred.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+
+-- | An access permissions issue occurred.
+_ForbiddenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ForbiddenException =
+  Core._MatchServiceError
+    defaultService
+    "ForbiddenException"
+
+-- | An internal server error occurred.
+_InternalServerErrorException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalServerErrorException =
+  Core._MatchServiceError
+    defaultService
+    "InternalServerErrorException"
+
+-- | A service limit was exceeded.
+_LimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_LimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "LimitExceededException"
+
+-- | The target resource cannot be found.
+_NotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "NotFoundException"
+
+-- | Too many service requests were made over the given time period.
+_TooManyRequestsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestsException =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestsException"
diff --git a/gen/Amazonka/Cloud9/Types/ConnectionType.hs b/gen/Amazonka/Cloud9/Types/ConnectionType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/ConnectionType.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.Cloud9.Types.ConnectionType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.ConnectionType
+  ( ConnectionType
+      ( ..,
+        ConnectionType_CONNECT_SSH,
+        ConnectionType_CONNECT_SSM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectionType = ConnectionType'
+  { fromConnectionType ::
+      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 ConnectionType_CONNECT_SSH :: ConnectionType
+pattern ConnectionType_CONNECT_SSH = ConnectionType' "CONNECT_SSH"
+
+pattern ConnectionType_CONNECT_SSM :: ConnectionType
+pattern ConnectionType_CONNECT_SSM = ConnectionType' "CONNECT_SSM"
+
+{-# COMPLETE
+  ConnectionType_CONNECT_SSH,
+  ConnectionType_CONNECT_SSM,
+  ConnectionType'
+  #-}
diff --git a/gen/Amazonka/Cloud9/Types/Environment.hs b/gen/Amazonka/Cloud9/Types/Environment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/Environment.hs
@@ -0,0 +1,259 @@
+{-# 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.Cloud9.Types.Environment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.Environment where
+
+import Amazonka.Cloud9.Types.ConnectionType
+import Amazonka.Cloud9.Types.EnvironmentLifecycle
+import Amazonka.Cloud9.Types.EnvironmentType
+import Amazonka.Cloud9.Types.ManagedCredentialsStatus
+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
+
+-- | Information about an Cloud9 development environment.
+--
+-- /See:/ 'newEnvironment' smart constructor.
+data Environment = Environment'
+  { -- | The connection type used for connecting to an Amazon EC2 environment.
+    -- @CONNECT_SSH@ is selected by default.
+    connectionType :: Prelude.Maybe ConnectionType,
+    -- | The description for the environment.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | The ID of the environment.
+    id :: Prelude.Maybe Prelude.Text,
+    -- | The state of the environment in its creation or deletion lifecycle.
+    lifecycle :: Prelude.Maybe EnvironmentLifecycle,
+    -- | Describes the status of Amazon Web Services managed temporary
+    -- credentials for the Cloud9 environment. Available values are:
+    --
+    -- -   @ENABLED_ON_CREATE@
+    --
+    -- -   @ENABLED_BY_OWNER@
+    --
+    -- -   @DISABLED_BY_DEFAULT@
+    --
+    -- -   @DISABLED_BY_OWNER@
+    --
+    -- -   @DISABLED_BY_COLLABORATOR@
+    --
+    -- -   @PENDING_REMOVAL_BY_COLLABORATOR@
+    --
+    -- -   @PENDING_REMOVAL_BY_OWNER@
+    --
+    -- -   @FAILED_REMOVAL_BY_COLLABORATOR@
+    --
+    -- -   @ENABLED_BY_OWNER@
+    --
+    -- -   @DISABLED_BY_DEFAULT@
+    managedCredentialsStatus :: Prelude.Maybe ManagedCredentialsStatus,
+    -- | The name of the environment.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The type of environment. Valid values include the following:
+    --
+    -- -   @ec2@: An Amazon Elastic Compute Cloud (Amazon EC2) instance
+    --     connects to the environment.
+    --
+    -- -   @ssh@: Your own server connects to the environment.
+    type' :: EnvironmentType,
+    -- | The Amazon Resource Name (ARN) of the environment.
+    arn :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the environment owner.
+    ownerArn :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Environment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectionType', 'environment_connectionType' - The connection type used for connecting to an Amazon EC2 environment.
+-- @CONNECT_SSH@ is selected by default.
+--
+-- 'description', 'environment_description' - The description for the environment.
+--
+-- 'id', 'environment_id' - The ID of the environment.
+--
+-- 'lifecycle', 'environment_lifecycle' - The state of the environment in its creation or deletion lifecycle.
+--
+-- 'managedCredentialsStatus', 'environment_managedCredentialsStatus' - Describes the status of Amazon Web Services managed temporary
+-- credentials for the Cloud9 environment. Available values are:
+--
+-- -   @ENABLED_ON_CREATE@
+--
+-- -   @ENABLED_BY_OWNER@
+--
+-- -   @DISABLED_BY_DEFAULT@
+--
+-- -   @DISABLED_BY_OWNER@
+--
+-- -   @DISABLED_BY_COLLABORATOR@
+--
+-- -   @PENDING_REMOVAL_BY_COLLABORATOR@
+--
+-- -   @PENDING_REMOVAL_BY_OWNER@
+--
+-- -   @FAILED_REMOVAL_BY_COLLABORATOR@
+--
+-- -   @ENABLED_BY_OWNER@
+--
+-- -   @DISABLED_BY_DEFAULT@
+--
+-- 'name', 'environment_name' - The name of the environment.
+--
+-- 'type'', 'environment_type' - The type of environment. Valid values include the following:
+--
+-- -   @ec2@: An Amazon Elastic Compute Cloud (Amazon EC2) instance
+--     connects to the environment.
+--
+-- -   @ssh@: Your own server connects to the environment.
+--
+-- 'arn', 'environment_arn' - The Amazon Resource Name (ARN) of the environment.
+--
+-- 'ownerArn', 'environment_ownerArn' - The Amazon Resource Name (ARN) of the environment owner.
+newEnvironment ::
+  -- | 'type''
+  EnvironmentType ->
+  -- | 'arn'
+  Prelude.Text ->
+  -- | 'ownerArn'
+  Prelude.Text ->
+  Environment
+newEnvironment pType_ pArn_ pOwnerArn_ =
+  Environment'
+    { connectionType = Prelude.Nothing,
+      description = Prelude.Nothing,
+      id = Prelude.Nothing,
+      lifecycle = Prelude.Nothing,
+      managedCredentialsStatus = Prelude.Nothing,
+      name = Prelude.Nothing,
+      type' = pType_,
+      arn = pArn_,
+      ownerArn = pOwnerArn_
+    }
+
+-- | The connection type used for connecting to an Amazon EC2 environment.
+-- @CONNECT_SSH@ is selected by default.
+environment_connectionType :: Lens.Lens' Environment (Prelude.Maybe ConnectionType)
+environment_connectionType = Lens.lens (\Environment' {connectionType} -> connectionType) (\s@Environment' {} a -> s {connectionType = a} :: Environment)
+
+-- | The description for the environment.
+environment_description :: Lens.Lens' Environment (Prelude.Maybe Prelude.Text)
+environment_description = Lens.lens (\Environment' {description} -> description) (\s@Environment' {} a -> s {description = a} :: Environment) Prelude.. Lens.mapping Data._Sensitive
+
+-- | The ID of the environment.
+environment_id :: Lens.Lens' Environment (Prelude.Maybe Prelude.Text)
+environment_id = Lens.lens (\Environment' {id} -> id) (\s@Environment' {} a -> s {id = a} :: Environment)
+
+-- | The state of the environment in its creation or deletion lifecycle.
+environment_lifecycle :: Lens.Lens' Environment (Prelude.Maybe EnvironmentLifecycle)
+environment_lifecycle = Lens.lens (\Environment' {lifecycle} -> lifecycle) (\s@Environment' {} a -> s {lifecycle = a} :: Environment)
+
+-- | Describes the status of Amazon Web Services managed temporary
+-- credentials for the Cloud9 environment. Available values are:
+--
+-- -   @ENABLED_ON_CREATE@
+--
+-- -   @ENABLED_BY_OWNER@
+--
+-- -   @DISABLED_BY_DEFAULT@
+--
+-- -   @DISABLED_BY_OWNER@
+--
+-- -   @DISABLED_BY_COLLABORATOR@
+--
+-- -   @PENDING_REMOVAL_BY_COLLABORATOR@
+--
+-- -   @PENDING_REMOVAL_BY_OWNER@
+--
+-- -   @FAILED_REMOVAL_BY_COLLABORATOR@
+--
+-- -   @ENABLED_BY_OWNER@
+--
+-- -   @DISABLED_BY_DEFAULT@
+environment_managedCredentialsStatus :: Lens.Lens' Environment (Prelude.Maybe ManagedCredentialsStatus)
+environment_managedCredentialsStatus = Lens.lens (\Environment' {managedCredentialsStatus} -> managedCredentialsStatus) (\s@Environment' {} a -> s {managedCredentialsStatus = a} :: Environment)
+
+-- | The name of the environment.
+environment_name :: Lens.Lens' Environment (Prelude.Maybe Prelude.Text)
+environment_name = Lens.lens (\Environment' {name} -> name) (\s@Environment' {} a -> s {name = a} :: Environment)
+
+-- | The type of environment. Valid values include the following:
+--
+-- -   @ec2@: An Amazon Elastic Compute Cloud (Amazon EC2) instance
+--     connects to the environment.
+--
+-- -   @ssh@: Your own server connects to the environment.
+environment_type :: Lens.Lens' Environment EnvironmentType
+environment_type = Lens.lens (\Environment' {type'} -> type') (\s@Environment' {} a -> s {type' = a} :: Environment)
+
+-- | The Amazon Resource Name (ARN) of the environment.
+environment_arn :: Lens.Lens' Environment Prelude.Text
+environment_arn = Lens.lens (\Environment' {arn} -> arn) (\s@Environment' {} a -> s {arn = a} :: Environment)
+
+-- | The Amazon Resource Name (ARN) of the environment owner.
+environment_ownerArn :: Lens.Lens' Environment Prelude.Text
+environment_ownerArn = Lens.lens (\Environment' {ownerArn} -> ownerArn) (\s@Environment' {} a -> s {ownerArn = a} :: Environment)
+
+instance Data.FromJSON Environment where
+  parseJSON =
+    Data.withObject
+      "Environment"
+      ( \x ->
+          Environment'
+            Prelude.<$> (x Data..:? "connectionType")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "id")
+            Prelude.<*> (x Data..:? "lifecycle")
+            Prelude.<*> (x Data..:? "managedCredentialsStatus")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..: "type")
+            Prelude.<*> (x Data..: "arn")
+            Prelude.<*> (x Data..: "ownerArn")
+      )
+
+instance Prelude.Hashable Environment where
+  hashWithSalt _salt Environment' {..} =
+    _salt
+      `Prelude.hashWithSalt` connectionType
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` id
+      `Prelude.hashWithSalt` lifecycle
+      `Prelude.hashWithSalt` managedCredentialsStatus
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` type'
+      `Prelude.hashWithSalt` arn
+      `Prelude.hashWithSalt` ownerArn
+
+instance Prelude.NFData Environment where
+  rnf Environment' {..} =
+    Prelude.rnf connectionType
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf id
+      `Prelude.seq` Prelude.rnf lifecycle
+      `Prelude.seq` Prelude.rnf managedCredentialsStatus
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf type'
+      `Prelude.seq` Prelude.rnf arn
+      `Prelude.seq` Prelude.rnf ownerArn
diff --git a/gen/Amazonka/Cloud9/Types/EnvironmentLifecycle.hs b/gen/Amazonka/Cloud9/Types/EnvironmentLifecycle.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/EnvironmentLifecycle.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.Types.EnvironmentLifecycle
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.EnvironmentLifecycle where
+
+import Amazonka.Cloud9.Types.EnvironmentLifecycleStatus
+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
+
+-- | Information about the current creation or deletion lifecycle state of an
+-- Cloud9 development environment.
+--
+-- /See:/ 'newEnvironmentLifecycle' smart constructor.
+data EnvironmentLifecycle = EnvironmentLifecycle'
+  { -- | If the environment failed to delete, the Amazon Resource Name (ARN) of
+    -- the related Amazon Web Services resource.
+    failureResource :: Prelude.Maybe Prelude.Text,
+    -- | Any informational message about the lifecycle state of the environment.
+    reason :: Prelude.Maybe Prelude.Text,
+    -- | The current creation or deletion lifecycle state of the environment.
+    --
+    -- -   @CREATING@: The environment is in the process of being created.
+    --
+    -- -   @CREATED@: The environment was successfully created.
+    --
+    -- -   @CREATE_FAILED@: The environment failed to be created.
+    --
+    -- -   @DELETING@: The environment is in the process of being deleted.
+    --
+    -- -   @DELETE_FAILED@: The environment failed to delete.
+    status :: Prelude.Maybe EnvironmentLifecycleStatus
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnvironmentLifecycle' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'failureResource', 'environmentLifecycle_failureResource' - If the environment failed to delete, the Amazon Resource Name (ARN) of
+-- the related Amazon Web Services resource.
+--
+-- 'reason', 'environmentLifecycle_reason' - Any informational message about the lifecycle state of the environment.
+--
+-- 'status', 'environmentLifecycle_status' - The current creation or deletion lifecycle state of the environment.
+--
+-- -   @CREATING@: The environment is in the process of being created.
+--
+-- -   @CREATED@: The environment was successfully created.
+--
+-- -   @CREATE_FAILED@: The environment failed to be created.
+--
+-- -   @DELETING@: The environment is in the process of being deleted.
+--
+-- -   @DELETE_FAILED@: The environment failed to delete.
+newEnvironmentLifecycle ::
+  EnvironmentLifecycle
+newEnvironmentLifecycle =
+  EnvironmentLifecycle'
+    { failureResource =
+        Prelude.Nothing,
+      reason = Prelude.Nothing,
+      status = Prelude.Nothing
+    }
+
+-- | If the environment failed to delete, the Amazon Resource Name (ARN) of
+-- the related Amazon Web Services resource.
+environmentLifecycle_failureResource :: Lens.Lens' EnvironmentLifecycle (Prelude.Maybe Prelude.Text)
+environmentLifecycle_failureResource = Lens.lens (\EnvironmentLifecycle' {failureResource} -> failureResource) (\s@EnvironmentLifecycle' {} a -> s {failureResource = a} :: EnvironmentLifecycle)
+
+-- | Any informational message about the lifecycle state of the environment.
+environmentLifecycle_reason :: Lens.Lens' EnvironmentLifecycle (Prelude.Maybe Prelude.Text)
+environmentLifecycle_reason = Lens.lens (\EnvironmentLifecycle' {reason} -> reason) (\s@EnvironmentLifecycle' {} a -> s {reason = a} :: EnvironmentLifecycle)
+
+-- | The current creation or deletion lifecycle state of the environment.
+--
+-- -   @CREATING@: The environment is in the process of being created.
+--
+-- -   @CREATED@: The environment was successfully created.
+--
+-- -   @CREATE_FAILED@: The environment failed to be created.
+--
+-- -   @DELETING@: The environment is in the process of being deleted.
+--
+-- -   @DELETE_FAILED@: The environment failed to delete.
+environmentLifecycle_status :: Lens.Lens' EnvironmentLifecycle (Prelude.Maybe EnvironmentLifecycleStatus)
+environmentLifecycle_status = Lens.lens (\EnvironmentLifecycle' {status} -> status) (\s@EnvironmentLifecycle' {} a -> s {status = a} :: EnvironmentLifecycle)
+
+instance Data.FromJSON EnvironmentLifecycle where
+  parseJSON =
+    Data.withObject
+      "EnvironmentLifecycle"
+      ( \x ->
+          EnvironmentLifecycle'
+            Prelude.<$> (x Data..:? "failureResource")
+            Prelude.<*> (x Data..:? "reason")
+            Prelude.<*> (x Data..:? "status")
+      )
+
+instance Prelude.Hashable EnvironmentLifecycle where
+  hashWithSalt _salt EnvironmentLifecycle' {..} =
+    _salt
+      `Prelude.hashWithSalt` failureResource
+      `Prelude.hashWithSalt` reason
+      `Prelude.hashWithSalt` status
+
+instance Prelude.NFData EnvironmentLifecycle where
+  rnf EnvironmentLifecycle' {..} =
+    Prelude.rnf failureResource
+      `Prelude.seq` Prelude.rnf reason
+      `Prelude.seq` Prelude.rnf status
diff --git a/gen/Amazonka/Cloud9/Types/EnvironmentLifecycleStatus.hs b/gen/Amazonka/Cloud9/Types/EnvironmentLifecycleStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/EnvironmentLifecycleStatus.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.Types.EnvironmentLifecycleStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.EnvironmentLifecycleStatus
+  ( EnvironmentLifecycleStatus
+      ( ..,
+        EnvironmentLifecycleStatus_CREATED,
+        EnvironmentLifecycleStatus_CREATE_FAILED,
+        EnvironmentLifecycleStatus_CREATING,
+        EnvironmentLifecycleStatus_DELETE_FAILED,
+        EnvironmentLifecycleStatus_DELETING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EnvironmentLifecycleStatus = EnvironmentLifecycleStatus'
+  { fromEnvironmentLifecycleStatus ::
+      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 EnvironmentLifecycleStatus_CREATED :: EnvironmentLifecycleStatus
+pattern EnvironmentLifecycleStatus_CREATED = EnvironmentLifecycleStatus' "CREATED"
+
+pattern EnvironmentLifecycleStatus_CREATE_FAILED :: EnvironmentLifecycleStatus
+pattern EnvironmentLifecycleStatus_CREATE_FAILED = EnvironmentLifecycleStatus' "CREATE_FAILED"
+
+pattern EnvironmentLifecycleStatus_CREATING :: EnvironmentLifecycleStatus
+pattern EnvironmentLifecycleStatus_CREATING = EnvironmentLifecycleStatus' "CREATING"
+
+pattern EnvironmentLifecycleStatus_DELETE_FAILED :: EnvironmentLifecycleStatus
+pattern EnvironmentLifecycleStatus_DELETE_FAILED = EnvironmentLifecycleStatus' "DELETE_FAILED"
+
+pattern EnvironmentLifecycleStatus_DELETING :: EnvironmentLifecycleStatus
+pattern EnvironmentLifecycleStatus_DELETING = EnvironmentLifecycleStatus' "DELETING"
+
+{-# COMPLETE
+  EnvironmentLifecycleStatus_CREATED,
+  EnvironmentLifecycleStatus_CREATE_FAILED,
+  EnvironmentLifecycleStatus_CREATING,
+  EnvironmentLifecycleStatus_DELETE_FAILED,
+  EnvironmentLifecycleStatus_DELETING,
+  EnvironmentLifecycleStatus'
+  #-}
diff --git a/gen/Amazonka/Cloud9/Types/EnvironmentMember.hs b/gen/Amazonka/Cloud9/Types/EnvironmentMember.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/EnvironmentMember.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.Cloud9.Types.EnvironmentMember
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.EnvironmentMember where
+
+import Amazonka.Cloud9.Types.Permissions
+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
+
+-- | Information about an environment member for an Cloud9 development
+-- environment.
+--
+-- /See:/ 'newEnvironmentMember' smart constructor.
+data EnvironmentMember = EnvironmentMember'
+  { -- | The time, expressed in epoch time format, when the environment member
+    -- last opened the environment.
+    lastAccess :: Prelude.Maybe Data.POSIX,
+    -- | The type of environment member permissions associated with this
+    -- environment member. Available values include:
+    --
+    -- -   @owner@: Owns the environment.
+    --
+    -- -   @read-only@: Has read-only access to the environment.
+    --
+    -- -   @read-write@: Has read-write access to the environment.
+    permissions :: Permissions,
+    -- | The user ID in Identity and Access Management (IAM) of the environment
+    -- member.
+    userId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the environment member.
+    userArn :: Prelude.Text,
+    -- | The ID of the environment for the environment member.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EnvironmentMember' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastAccess', 'environmentMember_lastAccess' - The time, expressed in epoch time format, when the environment member
+-- last opened the environment.
+--
+-- 'permissions', 'environmentMember_permissions' - The type of environment member permissions associated with this
+-- environment member. Available values include:
+--
+-- -   @owner@: Owns the environment.
+--
+-- -   @read-only@: Has read-only access to the environment.
+--
+-- -   @read-write@: Has read-write access to the environment.
+--
+-- 'userId', 'environmentMember_userId' - The user ID in Identity and Access Management (IAM) of the environment
+-- member.
+--
+-- 'userArn', 'environmentMember_userArn' - The Amazon Resource Name (ARN) of the environment member.
+--
+-- 'environmentId', 'environmentMember_environmentId' - The ID of the environment for the environment member.
+newEnvironmentMember ::
+  -- | 'permissions'
+  Permissions ->
+  -- | 'userId'
+  Prelude.Text ->
+  -- | 'userArn'
+  Prelude.Text ->
+  -- | 'environmentId'
+  Prelude.Text ->
+  EnvironmentMember
+newEnvironmentMember
+  pPermissions_
+  pUserId_
+  pUserArn_
+  pEnvironmentId_ =
+    EnvironmentMember'
+      { lastAccess = Prelude.Nothing,
+        permissions = pPermissions_,
+        userId = pUserId_,
+        userArn = pUserArn_,
+        environmentId = pEnvironmentId_
+      }
+
+-- | The time, expressed in epoch time format, when the environment member
+-- last opened the environment.
+environmentMember_lastAccess :: Lens.Lens' EnvironmentMember (Prelude.Maybe Prelude.UTCTime)
+environmentMember_lastAccess = Lens.lens (\EnvironmentMember' {lastAccess} -> lastAccess) (\s@EnvironmentMember' {} a -> s {lastAccess = a} :: EnvironmentMember) Prelude.. Lens.mapping Data._Time
+
+-- | The type of environment member permissions associated with this
+-- environment member. Available values include:
+--
+-- -   @owner@: Owns the environment.
+--
+-- -   @read-only@: Has read-only access to the environment.
+--
+-- -   @read-write@: Has read-write access to the environment.
+environmentMember_permissions :: Lens.Lens' EnvironmentMember Permissions
+environmentMember_permissions = Lens.lens (\EnvironmentMember' {permissions} -> permissions) (\s@EnvironmentMember' {} a -> s {permissions = a} :: EnvironmentMember)
+
+-- | The user ID in Identity and Access Management (IAM) of the environment
+-- member.
+environmentMember_userId :: Lens.Lens' EnvironmentMember Prelude.Text
+environmentMember_userId = Lens.lens (\EnvironmentMember' {userId} -> userId) (\s@EnvironmentMember' {} a -> s {userId = a} :: EnvironmentMember)
+
+-- | The Amazon Resource Name (ARN) of the environment member.
+environmentMember_userArn :: Lens.Lens' EnvironmentMember Prelude.Text
+environmentMember_userArn = Lens.lens (\EnvironmentMember' {userArn} -> userArn) (\s@EnvironmentMember' {} a -> s {userArn = a} :: EnvironmentMember)
+
+-- | The ID of the environment for the environment member.
+environmentMember_environmentId :: Lens.Lens' EnvironmentMember Prelude.Text
+environmentMember_environmentId = Lens.lens (\EnvironmentMember' {environmentId} -> environmentId) (\s@EnvironmentMember' {} a -> s {environmentId = a} :: EnvironmentMember)
+
+instance Data.FromJSON EnvironmentMember where
+  parseJSON =
+    Data.withObject
+      "EnvironmentMember"
+      ( \x ->
+          EnvironmentMember'
+            Prelude.<$> (x Data..:? "lastAccess")
+            Prelude.<*> (x Data..: "permissions")
+            Prelude.<*> (x Data..: "userId")
+            Prelude.<*> (x Data..: "userArn")
+            Prelude.<*> (x Data..: "environmentId")
+      )
+
+instance Prelude.Hashable EnvironmentMember where
+  hashWithSalt _salt EnvironmentMember' {..} =
+    _salt
+      `Prelude.hashWithSalt` lastAccess
+      `Prelude.hashWithSalt` permissions
+      `Prelude.hashWithSalt` userId
+      `Prelude.hashWithSalt` userArn
+      `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData EnvironmentMember where
+  rnf EnvironmentMember' {..} =
+    Prelude.rnf lastAccess
+      `Prelude.seq` Prelude.rnf permissions
+      `Prelude.seq` Prelude.rnf userId
+      `Prelude.seq` Prelude.rnf userArn
+      `Prelude.seq` Prelude.rnf environmentId
diff --git a/gen/Amazonka/Cloud9/Types/EnvironmentStatus.hs b/gen/Amazonka/Cloud9/Types/EnvironmentStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/EnvironmentStatus.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.Cloud9.Types.EnvironmentStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.EnvironmentStatus
+  ( EnvironmentStatus
+      ( ..,
+        EnvironmentStatus_Connecting,
+        EnvironmentStatus_Creating,
+        EnvironmentStatus_Deleting,
+        EnvironmentStatus_Error,
+        EnvironmentStatus_Ready,
+        EnvironmentStatus_Stopped,
+        EnvironmentStatus_Stopping
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EnvironmentStatus = EnvironmentStatus'
+  { fromEnvironmentStatus ::
+      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 EnvironmentStatus_Connecting :: EnvironmentStatus
+pattern EnvironmentStatus_Connecting = EnvironmentStatus' "connecting"
+
+pattern EnvironmentStatus_Creating :: EnvironmentStatus
+pattern EnvironmentStatus_Creating = EnvironmentStatus' "creating"
+
+pattern EnvironmentStatus_Deleting :: EnvironmentStatus
+pattern EnvironmentStatus_Deleting = EnvironmentStatus' "deleting"
+
+pattern EnvironmentStatus_Error :: EnvironmentStatus
+pattern EnvironmentStatus_Error = EnvironmentStatus' "error"
+
+pattern EnvironmentStatus_Ready :: EnvironmentStatus
+pattern EnvironmentStatus_Ready = EnvironmentStatus' "ready"
+
+pattern EnvironmentStatus_Stopped :: EnvironmentStatus
+pattern EnvironmentStatus_Stopped = EnvironmentStatus' "stopped"
+
+pattern EnvironmentStatus_Stopping :: EnvironmentStatus
+pattern EnvironmentStatus_Stopping = EnvironmentStatus' "stopping"
+
+{-# COMPLETE
+  EnvironmentStatus_Connecting,
+  EnvironmentStatus_Creating,
+  EnvironmentStatus_Deleting,
+  EnvironmentStatus_Error,
+  EnvironmentStatus_Ready,
+  EnvironmentStatus_Stopped,
+  EnvironmentStatus_Stopping,
+  EnvironmentStatus'
+  #-}
diff --git a/gen/Amazonka/Cloud9/Types/EnvironmentType.hs b/gen/Amazonka/Cloud9/Types/EnvironmentType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/EnvironmentType.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.Cloud9.Types.EnvironmentType
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.EnvironmentType
+  ( EnvironmentType
+      ( ..,
+        EnvironmentType_Ec2,
+        EnvironmentType_Ssh
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype EnvironmentType = EnvironmentType'
+  { fromEnvironmentType ::
+      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 EnvironmentType_Ec2 :: EnvironmentType
+pattern EnvironmentType_Ec2 = EnvironmentType' "ec2"
+
+pattern EnvironmentType_Ssh :: EnvironmentType
+pattern EnvironmentType_Ssh = EnvironmentType' "ssh"
+
+{-# COMPLETE
+  EnvironmentType_Ec2,
+  EnvironmentType_Ssh,
+  EnvironmentType'
+  #-}
diff --git a/gen/Amazonka/Cloud9/Types/ManagedCredentialsAction.hs b/gen/Amazonka/Cloud9/Types/ManagedCredentialsAction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/ManagedCredentialsAction.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.Cloud9.Types.ManagedCredentialsAction
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.ManagedCredentialsAction
+  ( ManagedCredentialsAction
+      ( ..,
+        ManagedCredentialsAction_DISABLE,
+        ManagedCredentialsAction_ENABLE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ManagedCredentialsAction = ManagedCredentialsAction'
+  { fromManagedCredentialsAction ::
+      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 ManagedCredentialsAction_DISABLE :: ManagedCredentialsAction
+pattern ManagedCredentialsAction_DISABLE = ManagedCredentialsAction' "DISABLE"
+
+pattern ManagedCredentialsAction_ENABLE :: ManagedCredentialsAction
+pattern ManagedCredentialsAction_ENABLE = ManagedCredentialsAction' "ENABLE"
+
+{-# COMPLETE
+  ManagedCredentialsAction_DISABLE,
+  ManagedCredentialsAction_ENABLE,
+  ManagedCredentialsAction'
+  #-}
diff --git a/gen/Amazonka/Cloud9/Types/ManagedCredentialsStatus.hs b/gen/Amazonka/Cloud9/Types/ManagedCredentialsStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/ManagedCredentialsStatus.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.Cloud9.Types.ManagedCredentialsStatus
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.ManagedCredentialsStatus
+  ( ManagedCredentialsStatus
+      ( ..,
+        ManagedCredentialsStatus_DISABLED_BY_COLLABORATOR,
+        ManagedCredentialsStatus_DISABLED_BY_DEFAULT,
+        ManagedCredentialsStatus_DISABLED_BY_OWNER,
+        ManagedCredentialsStatus_ENABLED_BY_OWNER,
+        ManagedCredentialsStatus_ENABLED_ON_CREATE,
+        ManagedCredentialsStatus_FAILED_REMOVAL_BY_COLLABORATOR,
+        ManagedCredentialsStatus_FAILED_REMOVAL_BY_OWNER,
+        ManagedCredentialsStatus_PENDING_REMOVAL_BY_COLLABORATOR,
+        ManagedCredentialsStatus_PENDING_REMOVAL_BY_OWNER,
+        ManagedCredentialsStatus_PENDING_START_REMOVAL_BY_COLLABORATOR,
+        ManagedCredentialsStatus_PENDING_START_REMOVAL_BY_OWNER
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ManagedCredentialsStatus = ManagedCredentialsStatus'
+  { fromManagedCredentialsStatus ::
+      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 ManagedCredentialsStatus_DISABLED_BY_COLLABORATOR :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_DISABLED_BY_COLLABORATOR = ManagedCredentialsStatus' "DISABLED_BY_COLLABORATOR"
+
+pattern ManagedCredentialsStatus_DISABLED_BY_DEFAULT :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_DISABLED_BY_DEFAULT = ManagedCredentialsStatus' "DISABLED_BY_DEFAULT"
+
+pattern ManagedCredentialsStatus_DISABLED_BY_OWNER :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_DISABLED_BY_OWNER = ManagedCredentialsStatus' "DISABLED_BY_OWNER"
+
+pattern ManagedCredentialsStatus_ENABLED_BY_OWNER :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_ENABLED_BY_OWNER = ManagedCredentialsStatus' "ENABLED_BY_OWNER"
+
+pattern ManagedCredentialsStatus_ENABLED_ON_CREATE :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_ENABLED_ON_CREATE = ManagedCredentialsStatus' "ENABLED_ON_CREATE"
+
+pattern ManagedCredentialsStatus_FAILED_REMOVAL_BY_COLLABORATOR :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_FAILED_REMOVAL_BY_COLLABORATOR = ManagedCredentialsStatus' "FAILED_REMOVAL_BY_COLLABORATOR"
+
+pattern ManagedCredentialsStatus_FAILED_REMOVAL_BY_OWNER :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_FAILED_REMOVAL_BY_OWNER = ManagedCredentialsStatus' "FAILED_REMOVAL_BY_OWNER"
+
+pattern ManagedCredentialsStatus_PENDING_REMOVAL_BY_COLLABORATOR :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_PENDING_REMOVAL_BY_COLLABORATOR = ManagedCredentialsStatus' "PENDING_REMOVAL_BY_COLLABORATOR"
+
+pattern ManagedCredentialsStatus_PENDING_REMOVAL_BY_OWNER :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_PENDING_REMOVAL_BY_OWNER = ManagedCredentialsStatus' "PENDING_REMOVAL_BY_OWNER"
+
+pattern ManagedCredentialsStatus_PENDING_START_REMOVAL_BY_COLLABORATOR :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_PENDING_START_REMOVAL_BY_COLLABORATOR = ManagedCredentialsStatus' "PENDING_START_REMOVAL_BY_COLLABORATOR"
+
+pattern ManagedCredentialsStatus_PENDING_START_REMOVAL_BY_OWNER :: ManagedCredentialsStatus
+pattern ManagedCredentialsStatus_PENDING_START_REMOVAL_BY_OWNER = ManagedCredentialsStatus' "PENDING_START_REMOVAL_BY_OWNER"
+
+{-# COMPLETE
+  ManagedCredentialsStatus_DISABLED_BY_COLLABORATOR,
+  ManagedCredentialsStatus_DISABLED_BY_DEFAULT,
+  ManagedCredentialsStatus_DISABLED_BY_OWNER,
+  ManagedCredentialsStatus_ENABLED_BY_OWNER,
+  ManagedCredentialsStatus_ENABLED_ON_CREATE,
+  ManagedCredentialsStatus_FAILED_REMOVAL_BY_COLLABORATOR,
+  ManagedCredentialsStatus_FAILED_REMOVAL_BY_OWNER,
+  ManagedCredentialsStatus_PENDING_REMOVAL_BY_COLLABORATOR,
+  ManagedCredentialsStatus_PENDING_REMOVAL_BY_OWNER,
+  ManagedCredentialsStatus_PENDING_START_REMOVAL_BY_COLLABORATOR,
+  ManagedCredentialsStatus_PENDING_START_REMOVAL_BY_OWNER,
+  ManagedCredentialsStatus'
+  #-}
diff --git a/gen/Amazonka/Cloud9/Types/MemberPermissions.hs b/gen/Amazonka/Cloud9/Types/MemberPermissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/MemberPermissions.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.Cloud9.Types.MemberPermissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.MemberPermissions
+  ( MemberPermissions
+      ( ..,
+        MemberPermissions_Read_only,
+        MemberPermissions_Read_write
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype MemberPermissions = MemberPermissions'
+  { fromMemberPermissions ::
+      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 MemberPermissions_Read_only :: MemberPermissions
+pattern MemberPermissions_Read_only = MemberPermissions' "read-only"
+
+pattern MemberPermissions_Read_write :: MemberPermissions
+pattern MemberPermissions_Read_write = MemberPermissions' "read-write"
+
+{-# COMPLETE
+  MemberPermissions_Read_only,
+  MemberPermissions_Read_write,
+  MemberPermissions'
+  #-}
diff --git a/gen/Amazonka/Cloud9/Types/Permissions.hs b/gen/Amazonka/Cloud9/Types/Permissions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/Permissions.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.Cloud9.Types.Permissions
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.Permissions
+  ( Permissions
+      ( ..,
+        Permissions_Owner,
+        Permissions_Read_only,
+        Permissions_Read_write
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype Permissions = Permissions'
+  { fromPermissions ::
+      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 Permissions_Owner :: Permissions
+pattern Permissions_Owner = Permissions' "owner"
+
+pattern Permissions_Read_only :: Permissions
+pattern Permissions_Read_only = Permissions' "read-only"
+
+pattern Permissions_Read_write :: Permissions
+pattern Permissions_Read_write = Permissions' "read-write"
+
+{-# COMPLETE
+  Permissions_Owner,
+  Permissions_Read_only,
+  Permissions_Read_write,
+  Permissions'
+  #-}
diff --git a/gen/Amazonka/Cloud9/Types/Tag.hs b/gen/Amazonka/Cloud9/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Types/Tag.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.Cloud9.Types.Tag 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
+
+-- | Metadata that is associated with Amazon Web Services resources. In
+-- particular, a name-value pair that can be associated with an Cloud9
+-- development environment. There are two types of tags: /user tags/ and
+-- /system tags/. A user tag is created by the user. A system tag is
+-- automatically created by Amazon Web Services services. A system tag is
+-- prefixed with @\"aws:\"@ and cannot be modified by the user.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The __name__ part of a tag.
+    key :: Data.Sensitive Prelude.Text,
+    -- | The __value__ part of a tag.
+    value :: Data.Sensitive Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The __name__ part of a tag.
+--
+-- 'value', 'tag_value' - The __value__ part of a tag.
+newTag ::
+  -- | 'key'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Tag
+newTag pKey_ pValue_ =
+  Tag'
+    { key = Data._Sensitive Lens.# pKey_,
+      value = Data._Sensitive Lens.# pValue_
+    }
+
+-- | The __name__ part of a tag.
+tag_key :: Lens.Lens' Tag Prelude.Text
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag) Prelude.. Data._Sensitive
+
+-- | The __value__ part of a tag.
+tag_value :: Lens.Lens' Tag Prelude.Text
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag) Prelude.. Data._Sensitive
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..: "Key")
+            Prelude.<*> (x Data..: "Value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("Key" Data..= key),
+            Prelude.Just ("Value" Data..= value)
+          ]
+      )
diff --git a/gen/Amazonka/Cloud9/UntagResource.hs b/gen/Amazonka/Cloud9/UntagResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/UntagResource.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.UntagResource
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes tags from an Cloud9 development environment.
+module Amazonka.Cloud9.UntagResource
+  ( -- * Creating a Request
+    UntagResource (..),
+    newUntagResource,
+
+    -- * Request Lenses
+    untagResource_resourceARN,
+    untagResource_tagKeys,
+
+    -- * Destructuring the Response
+    UntagResourceResponse (..),
+    newUntagResourceResponse,
+
+    -- * Response Lenses
+    untagResourceResponse_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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 Cloud9 development environment to
+    -- remove tags from.
+    resourceARN :: Prelude.Text,
+    -- | The tag names of the tags to remove from the given Cloud9 development
+    -- environment.
+    tagKeys :: Data.Sensitive [Data.Sensitive Prelude.Text]
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UntagResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'resourceARN', 'untagResource_resourceARN' - The Amazon Resource Name (ARN) of the Cloud9 development environment to
+-- remove tags from.
+--
+-- 'tagKeys', 'untagResource_tagKeys' - The tag names of the tags to remove from the given Cloud9 development
+-- environment.
+newUntagResource ::
+  -- | 'resourceARN'
+  Prelude.Text ->
+  UntagResource
+newUntagResource pResourceARN_ =
+  UntagResource'
+    { resourceARN = pResourceARN_,
+      tagKeys = Prelude.mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the Cloud9 development environment to
+-- remove tags from.
+untagResource_resourceARN :: Lens.Lens' UntagResource Prelude.Text
+untagResource_resourceARN = Lens.lens (\UntagResource' {resourceARN} -> resourceARN) (\s@UntagResource' {} a -> s {resourceARN = a} :: UntagResource)
+
+-- | The tag names of the tags to remove from the given Cloud9 development
+-- environment.
+untagResource_tagKeys :: Lens.Lens' UntagResource [Prelude.Text]
+untagResource_tagKeys = Lens.lens (\UntagResource' {tagKeys} -> tagKeys) (\s@UntagResource' {} a -> s {tagKeys = a} :: UntagResource) Prelude.. Data._Sensitive Prelude.. Lens.coerced
+
+instance Core.AWSRequest UntagResource where
+  type
+    AWSResponse UntagResource =
+      UntagResourceResponse
+  request overrides =
+    Request.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.=# ( "AWSCloud9WorkspaceManagementService.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/Cloud9/UpdateEnvironment.hs b/gen/Amazonka/Cloud9/UpdateEnvironment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/UpdateEnvironment.hs
@@ -0,0 +1,235 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.UpdateEnvironment
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes the settings of an existing Cloud9 development environment.
+module Amazonka.Cloud9.UpdateEnvironment
+  ( -- * Creating a Request
+    UpdateEnvironment (..),
+    newUpdateEnvironment,
+
+    -- * Request Lenses
+    updateEnvironment_description,
+    updateEnvironment_managedCredentialsAction,
+    updateEnvironment_name,
+    updateEnvironment_environmentId,
+
+    -- * Destructuring the Response
+    UpdateEnvironmentResponse (..),
+    newUpdateEnvironmentResponse,
+
+    -- * Response Lenses
+    updateEnvironmentResponse_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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:/ 'newUpdateEnvironment' smart constructor.
+data UpdateEnvironment = UpdateEnvironment'
+  { -- | Any new or replacement description for the environment.
+    description :: Prelude.Maybe (Data.Sensitive Prelude.Text),
+    -- | Allows the environment owner to turn on or turn off the Amazon Web
+    -- Services managed temporary credentials for an Cloud9 environment by
+    -- using one of the following values:
+    --
+    -- -   @ENABLE@
+    --
+    -- -   @DISABLE@
+    --
+    -- Only the environment owner can change the status of managed temporary
+    -- credentials. An @AccessDeniedException@ is thrown if an attempt to turn
+    -- on or turn off managed temporary credentials is made by an account
+    -- that\'s not the environment owner.
+    managedCredentialsAction :: Prelude.Maybe ManagedCredentialsAction,
+    -- | A replacement name for the environment.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the environment to change settings.
+    environmentId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEnvironment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'updateEnvironment_description' - Any new or replacement description for the environment.
+--
+-- 'managedCredentialsAction', 'updateEnvironment_managedCredentialsAction' - Allows the environment owner to turn on or turn off the Amazon Web
+-- Services managed temporary credentials for an Cloud9 environment by
+-- using one of the following values:
+--
+-- -   @ENABLE@
+--
+-- -   @DISABLE@
+--
+-- Only the environment owner can change the status of managed temporary
+-- credentials. An @AccessDeniedException@ is thrown if an attempt to turn
+-- on or turn off managed temporary credentials is made by an account
+-- that\'s not the environment owner.
+--
+-- 'name', 'updateEnvironment_name' - A replacement name for the environment.
+--
+-- 'environmentId', 'updateEnvironment_environmentId' - The ID of the environment to change settings.
+newUpdateEnvironment ::
+  -- | 'environmentId'
+  Prelude.Text ->
+  UpdateEnvironment
+newUpdateEnvironment pEnvironmentId_ =
+  UpdateEnvironment'
+    { description = Prelude.Nothing,
+      managedCredentialsAction = Prelude.Nothing,
+      name = Prelude.Nothing,
+      environmentId = pEnvironmentId_
+    }
+
+-- | Any new or replacement description for the environment.
+updateEnvironment_description :: Lens.Lens' UpdateEnvironment (Prelude.Maybe Prelude.Text)
+updateEnvironment_description = Lens.lens (\UpdateEnvironment' {description} -> description) (\s@UpdateEnvironment' {} a -> s {description = a} :: UpdateEnvironment) Prelude.. Lens.mapping Data._Sensitive
+
+-- | Allows the environment owner to turn on or turn off the Amazon Web
+-- Services managed temporary credentials for an Cloud9 environment by
+-- using one of the following values:
+--
+-- -   @ENABLE@
+--
+-- -   @DISABLE@
+--
+-- Only the environment owner can change the status of managed temporary
+-- credentials. An @AccessDeniedException@ is thrown if an attempt to turn
+-- on or turn off managed temporary credentials is made by an account
+-- that\'s not the environment owner.
+updateEnvironment_managedCredentialsAction :: Lens.Lens' UpdateEnvironment (Prelude.Maybe ManagedCredentialsAction)
+updateEnvironment_managedCredentialsAction = Lens.lens (\UpdateEnvironment' {managedCredentialsAction} -> managedCredentialsAction) (\s@UpdateEnvironment' {} a -> s {managedCredentialsAction = a} :: UpdateEnvironment)
+
+-- | A replacement name for the environment.
+updateEnvironment_name :: Lens.Lens' UpdateEnvironment (Prelude.Maybe Prelude.Text)
+updateEnvironment_name = Lens.lens (\UpdateEnvironment' {name} -> name) (\s@UpdateEnvironment' {} a -> s {name = a} :: UpdateEnvironment)
+
+-- | The ID of the environment to change settings.
+updateEnvironment_environmentId :: Lens.Lens' UpdateEnvironment Prelude.Text
+updateEnvironment_environmentId = Lens.lens (\UpdateEnvironment' {environmentId} -> environmentId) (\s@UpdateEnvironment' {} a -> s {environmentId = a} :: UpdateEnvironment)
+
+instance Core.AWSRequest UpdateEnvironment where
+  type
+    AWSResponse UpdateEnvironment =
+      UpdateEnvironmentResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateEnvironmentResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateEnvironment where
+  hashWithSalt _salt UpdateEnvironment' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` managedCredentialsAction
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` environmentId
+
+instance Prelude.NFData UpdateEnvironment where
+  rnf UpdateEnvironment' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf managedCredentialsAction
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf environmentId
+
+instance Data.ToHeaders UpdateEnvironment where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSCloud9WorkspaceManagementService.UpdateEnvironment" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEnvironment where
+  toJSON UpdateEnvironment' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("managedCredentialsAction" Data..=)
+              Prelude.<$> managedCredentialsAction,
+            ("name" Data..=) Prelude.<$> name,
+            Prelude.Just
+              ("environmentId" Data..= environmentId)
+          ]
+      )
+
+instance Data.ToPath UpdateEnvironment where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateEnvironment where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateEnvironmentResponse' smart constructor.
+data UpdateEnvironmentResponse = UpdateEnvironmentResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEnvironmentResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateEnvironmentResponse_httpStatus' - The response's http status code.
+newUpdateEnvironmentResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEnvironmentResponse
+newUpdateEnvironmentResponse pHttpStatus_ =
+  UpdateEnvironmentResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateEnvironmentResponse_httpStatus :: Lens.Lens' UpdateEnvironmentResponse Prelude.Int
+updateEnvironmentResponse_httpStatus = Lens.lens (\UpdateEnvironmentResponse' {httpStatus} -> httpStatus) (\s@UpdateEnvironmentResponse' {} a -> s {httpStatus = a} :: UpdateEnvironmentResponse)
+
+instance Prelude.NFData UpdateEnvironmentResponse where
+  rnf UpdateEnvironmentResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Cloud9/UpdateEnvironmentMembership.hs b/gen/Amazonka/Cloud9/UpdateEnvironmentMembership.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/UpdateEnvironmentMembership.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.UpdateEnvironmentMembership
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes the settings of an existing environment member for an Cloud9
+-- development environment.
+module Amazonka.Cloud9.UpdateEnvironmentMembership
+  ( -- * Creating a Request
+    UpdateEnvironmentMembership (..),
+    newUpdateEnvironmentMembership,
+
+    -- * Request Lenses
+    updateEnvironmentMembership_environmentId,
+    updateEnvironmentMembership_userArn,
+    updateEnvironmentMembership_permissions,
+
+    -- * Destructuring the Response
+    UpdateEnvironmentMembershipResponse (..),
+    newUpdateEnvironmentMembershipResponse,
+
+    -- * Response Lenses
+    updateEnvironmentMembershipResponse_membership,
+    updateEnvironmentMembershipResponse_httpStatus,
+  )
+where
+
+import Amazonka.Cloud9.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:/ 'newUpdateEnvironmentMembership' smart constructor.
+data UpdateEnvironmentMembership = UpdateEnvironmentMembership'
+  { -- | The ID of the environment for the environment member whose settings you
+    -- want to change.
+    environmentId :: Prelude.Text,
+    -- | The Amazon Resource Name (ARN) of the environment member whose settings
+    -- you want to change.
+    userArn :: Prelude.Text,
+    -- | The replacement type of environment member permissions you want to
+    -- associate with this environment member. Available values include:
+    --
+    -- -   @read-only@: Has read-only access to the environment.
+    --
+    -- -   @read-write@: Has read-write access to the environment.
+    permissions :: MemberPermissions
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEnvironmentMembership' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'environmentId', 'updateEnvironmentMembership_environmentId' - The ID of the environment for the environment member whose settings you
+-- want to change.
+--
+-- 'userArn', 'updateEnvironmentMembership_userArn' - The Amazon Resource Name (ARN) of the environment member whose settings
+-- you want to change.
+--
+-- 'permissions', 'updateEnvironmentMembership_permissions' - The replacement type of environment member permissions you want to
+-- associate with this environment member. Available values include:
+--
+-- -   @read-only@: Has read-only access to the environment.
+--
+-- -   @read-write@: Has read-write access to the environment.
+newUpdateEnvironmentMembership ::
+  -- | 'environmentId'
+  Prelude.Text ->
+  -- | 'userArn'
+  Prelude.Text ->
+  -- | 'permissions'
+  MemberPermissions ->
+  UpdateEnvironmentMembership
+newUpdateEnvironmentMembership
+  pEnvironmentId_
+  pUserArn_
+  pPermissions_ =
+    UpdateEnvironmentMembership'
+      { environmentId =
+          pEnvironmentId_,
+        userArn = pUserArn_,
+        permissions = pPermissions_
+      }
+
+-- | The ID of the environment for the environment member whose settings you
+-- want to change.
+updateEnvironmentMembership_environmentId :: Lens.Lens' UpdateEnvironmentMembership Prelude.Text
+updateEnvironmentMembership_environmentId = Lens.lens (\UpdateEnvironmentMembership' {environmentId} -> environmentId) (\s@UpdateEnvironmentMembership' {} a -> s {environmentId = a} :: UpdateEnvironmentMembership)
+
+-- | The Amazon Resource Name (ARN) of the environment member whose settings
+-- you want to change.
+updateEnvironmentMembership_userArn :: Lens.Lens' UpdateEnvironmentMembership Prelude.Text
+updateEnvironmentMembership_userArn = Lens.lens (\UpdateEnvironmentMembership' {userArn} -> userArn) (\s@UpdateEnvironmentMembership' {} a -> s {userArn = a} :: UpdateEnvironmentMembership)
+
+-- | The replacement type of environment member permissions you want to
+-- associate with this environment member. Available values include:
+--
+-- -   @read-only@: Has read-only access to the environment.
+--
+-- -   @read-write@: Has read-write access to the environment.
+updateEnvironmentMembership_permissions :: Lens.Lens' UpdateEnvironmentMembership MemberPermissions
+updateEnvironmentMembership_permissions = Lens.lens (\UpdateEnvironmentMembership' {permissions} -> permissions) (\s@UpdateEnvironmentMembership' {} a -> s {permissions = a} :: UpdateEnvironmentMembership)
+
+instance Core.AWSRequest UpdateEnvironmentMembership where
+  type
+    AWSResponse UpdateEnvironmentMembership =
+      UpdateEnvironmentMembershipResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateEnvironmentMembershipResponse'
+            Prelude.<$> (x Data..?> "membership")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateEnvironmentMembership where
+  hashWithSalt _salt UpdateEnvironmentMembership' {..} =
+    _salt
+      `Prelude.hashWithSalt` environmentId
+      `Prelude.hashWithSalt` userArn
+      `Prelude.hashWithSalt` permissions
+
+instance Prelude.NFData UpdateEnvironmentMembership where
+  rnf UpdateEnvironmentMembership' {..} =
+    Prelude.rnf environmentId
+      `Prelude.seq` Prelude.rnf userArn
+      `Prelude.seq` Prelude.rnf permissions
+
+instance Data.ToHeaders UpdateEnvironmentMembership where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSCloud9WorkspaceManagementService.UpdateEnvironmentMembership" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateEnvironmentMembership where
+  toJSON UpdateEnvironmentMembership' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("environmentId" Data..= environmentId),
+            Prelude.Just ("userArn" Data..= userArn),
+            Prelude.Just ("permissions" Data..= permissions)
+          ]
+      )
+
+instance Data.ToPath UpdateEnvironmentMembership where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateEnvironmentMembership where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateEnvironmentMembershipResponse' smart constructor.
+data UpdateEnvironmentMembershipResponse = UpdateEnvironmentMembershipResponse'
+  { -- | Information about the environment member whose settings were changed.
+    membership :: Prelude.Maybe EnvironmentMember,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateEnvironmentMembershipResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'membership', 'updateEnvironmentMembershipResponse_membership' - Information about the environment member whose settings were changed.
+--
+-- 'httpStatus', 'updateEnvironmentMembershipResponse_httpStatus' - The response's http status code.
+newUpdateEnvironmentMembershipResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateEnvironmentMembershipResponse
+newUpdateEnvironmentMembershipResponse pHttpStatus_ =
+  UpdateEnvironmentMembershipResponse'
+    { membership =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the environment member whose settings were changed.
+updateEnvironmentMembershipResponse_membership :: Lens.Lens' UpdateEnvironmentMembershipResponse (Prelude.Maybe EnvironmentMember)
+updateEnvironmentMembershipResponse_membership = Lens.lens (\UpdateEnvironmentMembershipResponse' {membership} -> membership) (\s@UpdateEnvironmentMembershipResponse' {} a -> s {membership = a} :: UpdateEnvironmentMembershipResponse)
+
+-- | The response's http status code.
+updateEnvironmentMembershipResponse_httpStatus :: Lens.Lens' UpdateEnvironmentMembershipResponse Prelude.Int
+updateEnvironmentMembershipResponse_httpStatus = Lens.lens (\UpdateEnvironmentMembershipResponse' {httpStatus} -> httpStatus) (\s@UpdateEnvironmentMembershipResponse' {} a -> s {httpStatus = a} :: UpdateEnvironmentMembershipResponse)
+
+instance
+  Prelude.NFData
+    UpdateEnvironmentMembershipResponse
+  where
+  rnf UpdateEnvironmentMembershipResponse' {..} =
+    Prelude.rnf membership
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Cloud9/Waiters.hs b/gen/Amazonka/Cloud9/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Cloud9/Waiters.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE DisambiguateRecordFields #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Cloud9.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.Cloud9.Waiters where
+
+import Amazonka.Cloud9.Lens
+import Amazonka.Cloud9.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
diff --git a/gen/Network/AWS/Cloud9.hs b/gen/Network/AWS/Cloud9.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9.hs
+++ /dev/null
@@ -1,184 +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.Cloud9
--- 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)
---
--- __AWS Cloud9__
---
--- AWS Cloud9 is a collection of tools that you can use to code, build, run, test, debug, and release software in the cloud.
---
--- For more information about AWS Cloud9, see the <https://docs.aws.amazon.com/cloud9/latest/user-guide AWS Cloud9 User Guide> .
---
--- AWS Cloud9 supports these operations:
---
---     * @CreateEnvironmentEC2@ : Creates an AWS Cloud9 development environment, launches an Amazon EC2 instance, and then connects from the instance to the environment.
---
---     * @CreateEnvironmentMembership@ : Adds an environment member to an environment.
---
---     * @DeleteEnvironment@ : Deletes an environment. If an Amazon EC2 instance is connected to the environment, also terminates the instance.
---
---     * @DeleteEnvironmentMembership@ : Deletes an environment member from an environment.
---
---     * @DescribeEnvironmentMemberships@ : Gets information about environment members for an environment.
---
---     * @DescribeEnvironments@ : Gets information about environments.
---
---     * @DescribeEnvironmentStatus@ : Gets status information for an environment.
---
---     * @ListEnvironments@ : Gets a list of environment identifiers.
---
---     * @UpdateEnvironment@ : Changes the settings of an existing environment.
---
---     * @UpdateEnvironmentMembership@ : Changes the settings of an existing environment member for an environment.
---
---
---
-module Network.AWS.Cloud9
-    (
-    -- * Service Configuration
-      cloud9
-
-    -- * Errors
-    -- $errors
-
-    -- ** ConflictException
-    , _ConflictException
-
-    -- ** ForbiddenException
-    , _ForbiddenException
-
-    -- ** NotFoundException
-    , _NotFoundException
-
-    -- ** TooManyRequestsException
-    , _TooManyRequestsException
-
-    -- ** InternalServerErrorException
-    , _InternalServerErrorException
-
-    -- ** BadRequestException
-    , _BadRequestException
-
-    -- ** LimitExceededException
-    , _LimitExceededException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** ListEnvironments (Paginated)
-    , module Network.AWS.Cloud9.ListEnvironments
-
-    -- ** UpdateEnvironment
-    , module Network.AWS.Cloud9.UpdateEnvironment
-
-    -- ** DeleteEnvironment
-    , module Network.AWS.Cloud9.DeleteEnvironment
-
-    -- ** DescribeEnvironmentStatus
-    , module Network.AWS.Cloud9.DescribeEnvironmentStatus
-
-    -- ** CreateEnvironmentEC
-    , module Network.AWS.Cloud9.CreateEnvironmentEC
-
-    -- ** CreateEnvironmentMembership
-    , module Network.AWS.Cloud9.CreateEnvironmentMembership
-
-    -- ** DescribeEnvironments
-    , module Network.AWS.Cloud9.DescribeEnvironments
-
-    -- ** DeleteEnvironmentMembership
-    , module Network.AWS.Cloud9.DeleteEnvironmentMembership
-
-    -- ** UpdateEnvironmentMembership
-    , module Network.AWS.Cloud9.UpdateEnvironmentMembership
-
-    -- ** DescribeEnvironmentMemberships (Paginated)
-    , module Network.AWS.Cloud9.DescribeEnvironmentMemberships
-
-    -- * Types
-
-    -- ** EnvironmentStatus
-    , EnvironmentStatus (..)
-
-    -- ** EnvironmentType
-    , EnvironmentType (..)
-
-    -- ** MemberPermissions
-    , MemberPermissions (..)
-
-    -- ** Permissions
-    , Permissions (..)
-
-    -- ** Environment
-    , Environment
-    , environment
-    , eArn
-    , eOwnerARN
-    , eName
-    , eId
-    , eType
-    , eDescription
-
-    -- ** EnvironmentMember
-    , EnvironmentMember
-    , environmentMember
-    , emLastAccess
-    , emUserId
-    , emUserARN
-    , emPermissions
-    , emEnvironmentId
-    ) where
-
-import Network.AWS.Cloud9.CreateEnvironmentEC
-import Network.AWS.Cloud9.CreateEnvironmentMembership
-import Network.AWS.Cloud9.DeleteEnvironment
-import Network.AWS.Cloud9.DeleteEnvironmentMembership
-import Network.AWS.Cloud9.DescribeEnvironmentMemberships
-import Network.AWS.Cloud9.DescribeEnvironments
-import Network.AWS.Cloud9.DescribeEnvironmentStatus
-import Network.AWS.Cloud9.ListEnvironments
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.UpdateEnvironment
-import Network.AWS.Cloud9.UpdateEnvironmentMembership
-import Network.AWS.Cloud9.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 'Cloud9'.
--}
-
-{- $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/Cloud9/CreateEnvironmentEC.hs b/gen/Network/AWS/Cloud9/CreateEnvironmentEC.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/CreateEnvironmentEC.hs
+++ /dev/null
@@ -1,200 +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.Cloud9.CreateEnvironmentEC
--- 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 AWS Cloud9 development environment, launches an Amazon Elastic Compute Cloud (Amazon EC2) instance, and then connects from the instance to the environment.
---
---
-module Network.AWS.Cloud9.CreateEnvironmentEC
-    (
-    -- * Creating a Request
-      createEnvironmentEC
-    , CreateEnvironmentEC
-    -- * Request Lenses
-    , ceecAutomaticStopTimeMinutes
-    , ceecSubnetId
-    , ceecOwnerARN
-    , ceecClientRequestToken
-    , ceecDescription
-    , ceecName
-    , ceecInstanceType
-
-    -- * Destructuring the Response
-    , createEnvironmentECResponse
-    , CreateEnvironmentECResponse
-    -- * Response Lenses
-    , ceecrsEnvironmentId
-    , ceecrsResponseStatus
-    ) where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createEnvironmentEC' smart constructor.
-data CreateEnvironmentEC = CreateEnvironmentEC'
-  { _ceecAutomaticStopTimeMinutes :: !(Maybe Int)
-  , _ceecSubnetId                 :: !(Maybe Text)
-  , _ceecOwnerARN                 :: !(Maybe Text)
-  , _ceecClientRequestToken       :: !(Maybe Text)
-  , _ceecDescription              :: !(Maybe Text)
-  , _ceecName                     :: !Text
-  , _ceecInstanceType             :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateEnvironmentEC' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ceecAutomaticStopTimeMinutes' - The number of minutes until the running instance is shut down after the environment has last been used.
---
--- * 'ceecSubnetId' - The ID of the subnet in Amazon VPC that AWS Cloud9 will use to communicate with the Amazon EC2 instance.
---
--- * 'ceecOwnerARN' - The Amazon Resource Name (ARN) of the environment owner. This ARN can be the ARN of any AWS IAM principal. If this value is not specified, the ARN defaults to this environment's creator.
---
--- * 'ceecClientRequestToken' - A unique, case-sensitive string that helps AWS Cloud9 to ensure this operation completes no more than one time. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Client Tokens> in the /Amazon EC2 API Reference/ .
---
--- * 'ceecDescription' - The description of the environment to create.
---
--- * 'ceecName' - The name of the environment to create. This name is visible to other AWS IAM users in the same AWS account.
---
--- * 'ceecInstanceType' - The type of instance to connect to the environment (for example, @t2.micro@ ).
-createEnvironmentEC
-    :: Text -- ^ 'ceecName'
-    -> Text -- ^ 'ceecInstanceType'
-    -> CreateEnvironmentEC
-createEnvironmentEC pName_ pInstanceType_ =
-  CreateEnvironmentEC'
-    { _ceecAutomaticStopTimeMinutes = Nothing
-    , _ceecSubnetId = Nothing
-    , _ceecOwnerARN = Nothing
-    , _ceecClientRequestToken = Nothing
-    , _ceecDescription = Nothing
-    , _ceecName = pName_
-    , _ceecInstanceType = pInstanceType_
-    }
-
-
--- | The number of minutes until the running instance is shut down after the environment has last been used.
-ceecAutomaticStopTimeMinutes :: Lens' CreateEnvironmentEC (Maybe Int)
-ceecAutomaticStopTimeMinutes = lens _ceecAutomaticStopTimeMinutes (\ s a -> s{_ceecAutomaticStopTimeMinutes = a})
-
--- | The ID of the subnet in Amazon VPC that AWS Cloud9 will use to communicate with the Amazon EC2 instance.
-ceecSubnetId :: Lens' CreateEnvironmentEC (Maybe Text)
-ceecSubnetId = lens _ceecSubnetId (\ s a -> s{_ceecSubnetId = a})
-
--- | The Amazon Resource Name (ARN) of the environment owner. This ARN can be the ARN of any AWS IAM principal. If this value is not specified, the ARN defaults to this environment's creator.
-ceecOwnerARN :: Lens' CreateEnvironmentEC (Maybe Text)
-ceecOwnerARN = lens _ceecOwnerARN (\ s a -> s{_ceecOwnerARN = a})
-
--- | A unique, case-sensitive string that helps AWS Cloud9 to ensure this operation completes no more than one time. For more information, see <http://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Client Tokens> in the /Amazon EC2 API Reference/ .
-ceecClientRequestToken :: Lens' CreateEnvironmentEC (Maybe Text)
-ceecClientRequestToken = lens _ceecClientRequestToken (\ s a -> s{_ceecClientRequestToken = a})
-
--- | The description of the environment to create.
-ceecDescription :: Lens' CreateEnvironmentEC (Maybe Text)
-ceecDescription = lens _ceecDescription (\ s a -> s{_ceecDescription = a})
-
--- | The name of the environment to create. This name is visible to other AWS IAM users in the same AWS account.
-ceecName :: Lens' CreateEnvironmentEC Text
-ceecName = lens _ceecName (\ s a -> s{_ceecName = a})
-
--- | The type of instance to connect to the environment (for example, @t2.micro@ ).
-ceecInstanceType :: Lens' CreateEnvironmentEC Text
-ceecInstanceType = lens _ceecInstanceType (\ s a -> s{_ceecInstanceType = a})
-
-instance AWSRequest CreateEnvironmentEC where
-        type Rs CreateEnvironmentEC =
-             CreateEnvironmentECResponse
-        request = postJSON cloud9
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateEnvironmentECResponse' <$>
-                   (x .?> "environmentId") <*> (pure (fromEnum s)))
-
-instance Hashable CreateEnvironmentEC where
-
-instance NFData CreateEnvironmentEC where
-
-instance ToHeaders CreateEnvironmentEC where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSCloud9WorkspaceManagementService.CreateEnvironmentEC"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateEnvironmentEC where
-        toJSON CreateEnvironmentEC'{..}
-          = object
-              (catMaybes
-                 [("automaticStopTimeMinutes" .=) <$>
-                    _ceecAutomaticStopTimeMinutes,
-                  ("subnetId" .=) <$> _ceecSubnetId,
-                  ("ownerArn" .=) <$> _ceecOwnerARN,
-                  ("clientRequestToken" .=) <$>
-                    _ceecClientRequestToken,
-                  ("description" .=) <$> _ceecDescription,
-                  Just ("name" .= _ceecName),
-                  Just ("instanceType" .= _ceecInstanceType)])
-
-instance ToPath CreateEnvironmentEC where
-        toPath = const "/"
-
-instance ToQuery CreateEnvironmentEC where
-        toQuery = const mempty
-
--- | /See:/ 'createEnvironmentECResponse' smart constructor.
-data CreateEnvironmentECResponse = CreateEnvironmentECResponse'
-  { _ceecrsEnvironmentId  :: !(Maybe Text)
-  , _ceecrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateEnvironmentECResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ceecrsEnvironmentId' - The ID of the environment that was created.
---
--- * 'ceecrsResponseStatus' - -- | The response status code.
-createEnvironmentECResponse
-    :: Int -- ^ 'ceecrsResponseStatus'
-    -> CreateEnvironmentECResponse
-createEnvironmentECResponse pResponseStatus_ =
-  CreateEnvironmentECResponse'
-    {_ceecrsEnvironmentId = Nothing, _ceecrsResponseStatus = pResponseStatus_}
-
-
--- | The ID of the environment that was created.
-ceecrsEnvironmentId :: Lens' CreateEnvironmentECResponse (Maybe Text)
-ceecrsEnvironmentId = lens _ceecrsEnvironmentId (\ s a -> s{_ceecrsEnvironmentId = a})
-
--- | -- | The response status code.
-ceecrsResponseStatus :: Lens' CreateEnvironmentECResponse Int
-ceecrsResponseStatus = lens _ceecrsResponseStatus (\ s a -> s{_ceecrsResponseStatus = a})
-
-instance NFData CreateEnvironmentECResponse where
diff --git a/gen/Network/AWS/Cloud9/CreateEnvironmentMembership.hs b/gen/Network/AWS/Cloud9/CreateEnvironmentMembership.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/CreateEnvironmentMembership.hs
+++ /dev/null
@@ -1,160 +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.Cloud9.CreateEnvironmentMembership
--- 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 an environment member to an AWS Cloud9 development environment.
---
---
-module Network.AWS.Cloud9.CreateEnvironmentMembership
-    (
-    -- * Creating a Request
-      createEnvironmentMembership
-    , CreateEnvironmentMembership
-    -- * Request Lenses
-    , cemEnvironmentId
-    , cemUserARN
-    , cemPermissions
-
-    -- * Destructuring the Response
-    , createEnvironmentMembershipResponse
-    , CreateEnvironmentMembershipResponse
-    -- * Response Lenses
-    , cemrsMembership
-    , cemrsResponseStatus
-    ) where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'createEnvironmentMembership' smart constructor.
-data CreateEnvironmentMembership = CreateEnvironmentMembership'
-  { _cemEnvironmentId :: !Text
-  , _cemUserARN       :: !Text
-  , _cemPermissions   :: !MemberPermissions
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateEnvironmentMembership' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cemEnvironmentId' - The ID of the environment that contains the environment member you want to add.
---
--- * 'cemUserARN' - The Amazon Resource Name (ARN) of the environment member you want to add.
---
--- * 'cemPermissions' - The type of environment member permissions you want to associate with this environment member. Available values include:     * @read-only@ : Has read-only access to the environment.     * @read-write@ : Has read-write access to the environment.
-createEnvironmentMembership
-    :: Text -- ^ 'cemEnvironmentId'
-    -> Text -- ^ 'cemUserARN'
-    -> MemberPermissions -- ^ 'cemPermissions'
-    -> CreateEnvironmentMembership
-createEnvironmentMembership pEnvironmentId_ pUserARN_ pPermissions_ =
-  CreateEnvironmentMembership'
-    { _cemEnvironmentId = pEnvironmentId_
-    , _cemUserARN = pUserARN_
-    , _cemPermissions = pPermissions_
-    }
-
-
--- | The ID of the environment that contains the environment member you want to add.
-cemEnvironmentId :: Lens' CreateEnvironmentMembership Text
-cemEnvironmentId = lens _cemEnvironmentId (\ s a -> s{_cemEnvironmentId = a})
-
--- | The Amazon Resource Name (ARN) of the environment member you want to add.
-cemUserARN :: Lens' CreateEnvironmentMembership Text
-cemUserARN = lens _cemUserARN (\ s a -> s{_cemUserARN = a})
-
--- | The type of environment member permissions you want to associate with this environment member. Available values include:     * @read-only@ : Has read-only access to the environment.     * @read-write@ : Has read-write access to the environment.
-cemPermissions :: Lens' CreateEnvironmentMembership MemberPermissions
-cemPermissions = lens _cemPermissions (\ s a -> s{_cemPermissions = a})
-
-instance AWSRequest CreateEnvironmentMembership where
-        type Rs CreateEnvironmentMembership =
-             CreateEnvironmentMembershipResponse
-        request = postJSON cloud9
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateEnvironmentMembershipResponse' <$>
-                   (x .?> "membership") <*> (pure (fromEnum s)))
-
-instance Hashable CreateEnvironmentMembership where
-
-instance NFData CreateEnvironmentMembership where
-
-instance ToHeaders CreateEnvironmentMembership where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSCloud9WorkspaceManagementService.CreateEnvironmentMembership"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateEnvironmentMembership where
-        toJSON CreateEnvironmentMembership'{..}
-          = object
-              (catMaybes
-                 [Just ("environmentId" .= _cemEnvironmentId),
-                  Just ("userArn" .= _cemUserARN),
-                  Just ("permissions" .= _cemPermissions)])
-
-instance ToPath CreateEnvironmentMembership where
-        toPath = const "/"
-
-instance ToQuery CreateEnvironmentMembership where
-        toQuery = const mempty
-
--- | /See:/ 'createEnvironmentMembershipResponse' smart constructor.
-data CreateEnvironmentMembershipResponse = CreateEnvironmentMembershipResponse'
-  { _cemrsMembership     :: !(Maybe EnvironmentMember)
-  , _cemrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateEnvironmentMembershipResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cemrsMembership' - Information about the environment member that was added.
---
--- * 'cemrsResponseStatus' - -- | The response status code.
-createEnvironmentMembershipResponse
-    :: Int -- ^ 'cemrsResponseStatus'
-    -> CreateEnvironmentMembershipResponse
-createEnvironmentMembershipResponse pResponseStatus_ =
-  CreateEnvironmentMembershipResponse'
-    {_cemrsMembership = Nothing, _cemrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the environment member that was added.
-cemrsMembership :: Lens' CreateEnvironmentMembershipResponse (Maybe EnvironmentMember)
-cemrsMembership = lens _cemrsMembership (\ s a -> s{_cemrsMembership = a})
-
--- | -- | The response status code.
-cemrsResponseStatus :: Lens' CreateEnvironmentMembershipResponse Int
-cemrsResponseStatus = lens _cemrsResponseStatus (\ s a -> s{_cemrsResponseStatus = a})
-
-instance NFData CreateEnvironmentMembershipResponse
-         where
diff --git a/gen/Network/AWS/Cloud9/DeleteEnvironment.hs b/gen/Network/AWS/Cloud9/DeleteEnvironment.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/DeleteEnvironment.hs
+++ /dev/null
@@ -1,124 +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.Cloud9.DeleteEnvironment
--- 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 an AWS Cloud9 development environment. If an Amazon EC2 instance is connected to the environment, also terminates the instance.
---
---
-module Network.AWS.Cloud9.DeleteEnvironment
-    (
-    -- * Creating a Request
-      deleteEnvironment
-    , DeleteEnvironment
-    -- * Request Lenses
-    , deEnvironmentId
-
-    -- * Destructuring the Response
-    , deleteEnvironmentResponse
-    , DeleteEnvironmentResponse
-    -- * Response Lenses
-    , dersResponseStatus
-    ) where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteEnvironment' smart constructor.
-newtype DeleteEnvironment = DeleteEnvironment'
-  { _deEnvironmentId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteEnvironment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deEnvironmentId' - The ID of the environment to delete.
-deleteEnvironment
-    :: Text -- ^ 'deEnvironmentId'
-    -> DeleteEnvironment
-deleteEnvironment pEnvironmentId_ =
-  DeleteEnvironment' {_deEnvironmentId = pEnvironmentId_}
-
-
--- | The ID of the environment to delete.
-deEnvironmentId :: Lens' DeleteEnvironment Text
-deEnvironmentId = lens _deEnvironmentId (\ s a -> s{_deEnvironmentId = a})
-
-instance AWSRequest DeleteEnvironment where
-        type Rs DeleteEnvironment = DeleteEnvironmentResponse
-        request = postJSON cloud9
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteEnvironmentResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteEnvironment where
-
-instance NFData DeleteEnvironment where
-
-instance ToHeaders DeleteEnvironment where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSCloud9WorkspaceManagementService.DeleteEnvironment"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteEnvironment where
-        toJSON DeleteEnvironment'{..}
-          = object
-              (catMaybes
-                 [Just ("environmentId" .= _deEnvironmentId)])
-
-instance ToPath DeleteEnvironment where
-        toPath = const "/"
-
-instance ToQuery DeleteEnvironment where
-        toQuery = const mempty
-
--- | /See:/ 'deleteEnvironmentResponse' smart constructor.
-newtype DeleteEnvironmentResponse = DeleteEnvironmentResponse'
-  { _dersResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteEnvironmentResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dersResponseStatus' - -- | The response status code.
-deleteEnvironmentResponse
-    :: Int -- ^ 'dersResponseStatus'
-    -> DeleteEnvironmentResponse
-deleteEnvironmentResponse pResponseStatus_ =
-  DeleteEnvironmentResponse' {_dersResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dersResponseStatus :: Lens' DeleteEnvironmentResponse Int
-dersResponseStatus = lens _dersResponseStatus (\ s a -> s{_dersResponseStatus = a})
-
-instance NFData DeleteEnvironmentResponse where
diff --git a/gen/Network/AWS/Cloud9/DeleteEnvironmentMembership.hs b/gen/Network/AWS/Cloud9/DeleteEnvironmentMembership.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/DeleteEnvironmentMembership.hs
+++ /dev/null
@@ -1,138 +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.Cloud9.DeleteEnvironmentMembership
--- 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 an environment member from an AWS Cloud9 development environment.
---
---
-module Network.AWS.Cloud9.DeleteEnvironmentMembership
-    (
-    -- * Creating a Request
-      deleteEnvironmentMembership
-    , DeleteEnvironmentMembership
-    -- * Request Lenses
-    , demEnvironmentId
-    , demUserARN
-
-    -- * Destructuring the Response
-    , deleteEnvironmentMembershipResponse
-    , DeleteEnvironmentMembershipResponse
-    -- * Response Lenses
-    , demrsResponseStatus
-    ) where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'deleteEnvironmentMembership' smart constructor.
-data DeleteEnvironmentMembership = DeleteEnvironmentMembership'
-  { _demEnvironmentId :: !Text
-  , _demUserARN       :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteEnvironmentMembership' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'demEnvironmentId' - The ID of the environment to delete the environment member from.
---
--- * 'demUserARN' - The Amazon Resource Name (ARN) of the environment member to delete from the environment.
-deleteEnvironmentMembership
-    :: Text -- ^ 'demEnvironmentId'
-    -> Text -- ^ 'demUserARN'
-    -> DeleteEnvironmentMembership
-deleteEnvironmentMembership pEnvironmentId_ pUserARN_ =
-  DeleteEnvironmentMembership'
-    {_demEnvironmentId = pEnvironmentId_, _demUserARN = pUserARN_}
-
-
--- | The ID of the environment to delete the environment member from.
-demEnvironmentId :: Lens' DeleteEnvironmentMembership Text
-demEnvironmentId = lens _demEnvironmentId (\ s a -> s{_demEnvironmentId = a})
-
--- | The Amazon Resource Name (ARN) of the environment member to delete from the environment.
-demUserARN :: Lens' DeleteEnvironmentMembership Text
-demUserARN = lens _demUserARN (\ s a -> s{_demUserARN = a})
-
-instance AWSRequest DeleteEnvironmentMembership where
-        type Rs DeleteEnvironmentMembership =
-             DeleteEnvironmentMembershipResponse
-        request = postJSON cloud9
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteEnvironmentMembershipResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable DeleteEnvironmentMembership where
-
-instance NFData DeleteEnvironmentMembership where
-
-instance ToHeaders DeleteEnvironmentMembership where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSCloud9WorkspaceManagementService.DeleteEnvironmentMembership"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteEnvironmentMembership where
-        toJSON DeleteEnvironmentMembership'{..}
-          = object
-              (catMaybes
-                 [Just ("environmentId" .= _demEnvironmentId),
-                  Just ("userArn" .= _demUserARN)])
-
-instance ToPath DeleteEnvironmentMembership where
-        toPath = const "/"
-
-instance ToQuery DeleteEnvironmentMembership where
-        toQuery = const mempty
-
--- | /See:/ 'deleteEnvironmentMembershipResponse' smart constructor.
-newtype DeleteEnvironmentMembershipResponse = DeleteEnvironmentMembershipResponse'
-  { _demrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteEnvironmentMembershipResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'demrsResponseStatus' - -- | The response status code.
-deleteEnvironmentMembershipResponse
-    :: Int -- ^ 'demrsResponseStatus'
-    -> DeleteEnvironmentMembershipResponse
-deleteEnvironmentMembershipResponse pResponseStatus_ =
-  DeleteEnvironmentMembershipResponse' {_demrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-demrsResponseStatus :: Lens' DeleteEnvironmentMembershipResponse Int
-demrsResponseStatus = lens _demrsResponseStatus (\ s a -> s{_demrsResponseStatus = a})
-
-instance NFData DeleteEnvironmentMembershipResponse
-         where
diff --git a/gen/Network/AWS/Cloud9/DescribeEnvironmentMemberships.hs b/gen/Network/AWS/Cloud9/DescribeEnvironmentMemberships.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/DescribeEnvironmentMemberships.hs
+++ /dev/null
@@ -1,205 +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.Cloud9.DescribeEnvironmentMemberships
--- 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)
---
--- Gets information about environment members for an AWS Cloud9 development environment.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.Cloud9.DescribeEnvironmentMemberships
-    (
-    -- * Creating a Request
-      describeEnvironmentMemberships
-    , DescribeEnvironmentMemberships
-    -- * Request Lenses
-    , dUserARN
-    , dNextToken
-    , dPermissions
-    , dEnvironmentId
-    , dMaxResults
-
-    -- * Destructuring the Response
-    , describeEnvironmentMembershipsResponse
-    , DescribeEnvironmentMembershipsResponse
-    -- * Response Lenses
-    , drsNextToken
-    , drsMemberships
-    , drsResponseStatus
-    ) where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeEnvironmentMemberships' smart constructor.
-data DescribeEnvironmentMemberships = DescribeEnvironmentMemberships'
-  { _dUserARN       :: !(Maybe Text)
-  , _dNextToken     :: !(Maybe Text)
-  , _dPermissions   :: !(Maybe [Permissions])
-  , _dEnvironmentId :: !(Maybe Text)
-  , _dMaxResults    :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeEnvironmentMemberships' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dUserARN' - The Amazon Resource Name (ARN) of an individual environment member to get information about. If no value is specified, information about all environment members are returned.
---
--- * 'dNextToken' - During a previous call, if there are more than 25 items in the list, only the first 25 items are returned, along with a unique string called a /next token/ . To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned.
---
--- * 'dPermissions' - The type of environment member permissions to get information about. Available values include:     * @owner@ : Owns the environment.     * @read-only@ : Has read-only access to the environment.     * @read-write@ : Has read-write access to the environment. If no value is specified, information about all environment members are returned.
---
--- * 'dEnvironmentId' - The ID of the environment to get environment member information about.
---
--- * 'dMaxResults' - The maximum number of environment members to get information about.
-describeEnvironmentMemberships
-    :: DescribeEnvironmentMemberships
-describeEnvironmentMemberships =
-  DescribeEnvironmentMemberships'
-    { _dUserARN = Nothing
-    , _dNextToken = Nothing
-    , _dPermissions = Nothing
-    , _dEnvironmentId = Nothing
-    , _dMaxResults = Nothing
-    }
-
-
--- | The Amazon Resource Name (ARN) of an individual environment member to get information about. If no value is specified, information about all environment members are returned.
-dUserARN :: Lens' DescribeEnvironmentMemberships (Maybe Text)
-dUserARN = lens _dUserARN (\ s a -> s{_dUserARN = a})
-
--- | During a previous call, if there are more than 25 items in the list, only the first 25 items are returned, along with a unique string called a /next token/ . To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned.
-dNextToken :: Lens' DescribeEnvironmentMemberships (Maybe Text)
-dNextToken = lens _dNextToken (\ s a -> s{_dNextToken = a})
-
--- | The type of environment member permissions to get information about. Available values include:     * @owner@ : Owns the environment.     * @read-only@ : Has read-only access to the environment.     * @read-write@ : Has read-write access to the environment. If no value is specified, information about all environment members are returned.
-dPermissions :: Lens' DescribeEnvironmentMemberships [Permissions]
-dPermissions = lens _dPermissions (\ s a -> s{_dPermissions = a}) . _Default . _Coerce
-
--- | The ID of the environment to get environment member information about.
-dEnvironmentId :: Lens' DescribeEnvironmentMemberships (Maybe Text)
-dEnvironmentId = lens _dEnvironmentId (\ s a -> s{_dEnvironmentId = a})
-
--- | The maximum number of environment members to get information about.
-dMaxResults :: Lens' DescribeEnvironmentMemberships (Maybe Natural)
-dMaxResults = lens _dMaxResults (\ s a -> s{_dMaxResults = a}) . mapping _Nat
-
-instance AWSPager DescribeEnvironmentMemberships
-         where
-        page rq rs
-          | stop (rs ^. drsNextToken) = Nothing
-          | stop (rs ^. drsMemberships) = Nothing
-          | otherwise =
-            Just $ rq & dNextToken .~ rs ^. drsNextToken
-
-instance AWSRequest DescribeEnvironmentMemberships
-         where
-        type Rs DescribeEnvironmentMemberships =
-             DescribeEnvironmentMembershipsResponse
-        request = postJSON cloud9
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeEnvironmentMembershipsResponse' <$>
-                   (x .?> "nextToken") <*>
-                     (x .?> "memberships" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeEnvironmentMemberships
-         where
-
-instance NFData DescribeEnvironmentMemberships where
-
-instance ToHeaders DescribeEnvironmentMemberships
-         where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSCloud9WorkspaceManagementService.DescribeEnvironmentMemberships"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeEnvironmentMemberships where
-        toJSON DescribeEnvironmentMemberships'{..}
-          = object
-              (catMaybes
-                 [("userArn" .=) <$> _dUserARN,
-                  ("nextToken" .=) <$> _dNextToken,
-                  ("permissions" .=) <$> _dPermissions,
-                  ("environmentId" .=) <$> _dEnvironmentId,
-                  ("maxResults" .=) <$> _dMaxResults])
-
-instance ToPath DescribeEnvironmentMemberships where
-        toPath = const "/"
-
-instance ToQuery DescribeEnvironmentMemberships where
-        toQuery = const mempty
-
--- | /See:/ 'describeEnvironmentMembershipsResponse' smart constructor.
-data DescribeEnvironmentMembershipsResponse = DescribeEnvironmentMembershipsResponse'
-  { _drsNextToken      :: !(Maybe Text)
-  , _drsMemberships    :: !(Maybe [EnvironmentMember])
-  , _drsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeEnvironmentMembershipsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drsNextToken' - If there are more than 25 items in the list, only the first 25 items are returned, along with a unique string called a /next token/ . To get the next batch of items in the list, call this operation again, adding the next token to the call.
---
--- * 'drsMemberships' - Information about the environment members for the environment.
---
--- * 'drsResponseStatus' - -- | The response status code.
-describeEnvironmentMembershipsResponse
-    :: Int -- ^ 'drsResponseStatus'
-    -> DescribeEnvironmentMembershipsResponse
-describeEnvironmentMembershipsResponse pResponseStatus_ =
-  DescribeEnvironmentMembershipsResponse'
-    { _drsNextToken = Nothing
-    , _drsMemberships = Nothing
-    , _drsResponseStatus = pResponseStatus_
-    }
-
-
--- | If there are more than 25 items in the list, only the first 25 items are returned, along with a unique string called a /next token/ . To get the next batch of items in the list, call this operation again, adding the next token to the call.
-drsNextToken :: Lens' DescribeEnvironmentMembershipsResponse (Maybe Text)
-drsNextToken = lens _drsNextToken (\ s a -> s{_drsNextToken = a})
-
--- | Information about the environment members for the environment.
-drsMemberships :: Lens' DescribeEnvironmentMembershipsResponse [EnvironmentMember]
-drsMemberships = lens _drsMemberships (\ s a -> s{_drsMemberships = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-drsResponseStatus :: Lens' DescribeEnvironmentMembershipsResponse Int
-drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a})
-
-instance NFData
-           DescribeEnvironmentMembershipsResponse
-         where
diff --git a/gen/Network/AWS/Cloud9/DescribeEnvironmentStatus.hs b/gen/Network/AWS/Cloud9/DescribeEnvironmentStatus.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/DescribeEnvironmentStatus.hs
+++ /dev/null
@@ -1,148 +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.Cloud9.DescribeEnvironmentStatus
--- 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)
---
--- Gets status information for an AWS Cloud9 development environment.
---
---
-module Network.AWS.Cloud9.DescribeEnvironmentStatus
-    (
-    -- * Creating a Request
-      describeEnvironmentStatus
-    , DescribeEnvironmentStatus
-    -- * Request Lenses
-    , desEnvironmentId
-
-    -- * Destructuring the Response
-    , describeEnvironmentStatusResponse
-    , DescribeEnvironmentStatusResponse
-    -- * Response Lenses
-    , desrsStatus
-    , desrsMessage
-    , desrsResponseStatus
-    ) where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeEnvironmentStatus' smart constructor.
-newtype DescribeEnvironmentStatus = DescribeEnvironmentStatus'
-  { _desEnvironmentId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeEnvironmentStatus' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'desEnvironmentId' - The ID of the environment to get status information about.
-describeEnvironmentStatus
-    :: Text -- ^ 'desEnvironmentId'
-    -> DescribeEnvironmentStatus
-describeEnvironmentStatus pEnvironmentId_ =
-  DescribeEnvironmentStatus' {_desEnvironmentId = pEnvironmentId_}
-
-
--- | The ID of the environment to get status information about.
-desEnvironmentId :: Lens' DescribeEnvironmentStatus Text
-desEnvironmentId = lens _desEnvironmentId (\ s a -> s{_desEnvironmentId = a})
-
-instance AWSRequest DescribeEnvironmentStatus where
-        type Rs DescribeEnvironmentStatus =
-             DescribeEnvironmentStatusResponse
-        request = postJSON cloud9
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeEnvironmentStatusResponse' <$>
-                   (x .?> "status") <*> (x .?> "message") <*>
-                     (pure (fromEnum s)))
-
-instance Hashable DescribeEnvironmentStatus where
-
-instance NFData DescribeEnvironmentStatus where
-
-instance ToHeaders DescribeEnvironmentStatus where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSCloud9WorkspaceManagementService.DescribeEnvironmentStatus"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeEnvironmentStatus where
-        toJSON DescribeEnvironmentStatus'{..}
-          = object
-              (catMaybes
-                 [Just ("environmentId" .= _desEnvironmentId)])
-
-instance ToPath DescribeEnvironmentStatus where
-        toPath = const "/"
-
-instance ToQuery DescribeEnvironmentStatus where
-        toQuery = const mempty
-
--- | /See:/ 'describeEnvironmentStatusResponse' smart constructor.
-data DescribeEnvironmentStatusResponse = DescribeEnvironmentStatusResponse'
-  { _desrsStatus         :: !(Maybe EnvironmentStatus)
-  , _desrsMessage        :: !(Maybe Text)
-  , _desrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeEnvironmentStatusResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'desrsStatus' - The status of the environment. Available values include:     * @connecting@ : The environment is connecting.     * @creating@ : The environment is being created.     * @deleting@ : The environment is being deleted.     * @error@ : The environment is in an error state.     * @ready@ : The environment is ready.     * @stopped@ : The environment is stopped.     * @stopping@ : The environment is stopping.
---
--- * 'desrsMessage' - Any informational message about the status of the environment.
---
--- * 'desrsResponseStatus' - -- | The response status code.
-describeEnvironmentStatusResponse
-    :: Int -- ^ 'desrsResponseStatus'
-    -> DescribeEnvironmentStatusResponse
-describeEnvironmentStatusResponse pResponseStatus_ =
-  DescribeEnvironmentStatusResponse'
-    { _desrsStatus = Nothing
-    , _desrsMessage = Nothing
-    , _desrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The status of the environment. Available values include:     * @connecting@ : The environment is connecting.     * @creating@ : The environment is being created.     * @deleting@ : The environment is being deleted.     * @error@ : The environment is in an error state.     * @ready@ : The environment is ready.     * @stopped@ : The environment is stopped.     * @stopping@ : The environment is stopping.
-desrsStatus :: Lens' DescribeEnvironmentStatusResponse (Maybe EnvironmentStatus)
-desrsStatus = lens _desrsStatus (\ s a -> s{_desrsStatus = a})
-
--- | Any informational message about the status of the environment.
-desrsMessage :: Lens' DescribeEnvironmentStatusResponse (Maybe Text)
-desrsMessage = lens _desrsMessage (\ s a -> s{_desrsMessage = a})
-
--- | -- | The response status code.
-desrsResponseStatus :: Lens' DescribeEnvironmentStatusResponse Int
-desrsResponseStatus = lens _desrsResponseStatus (\ s a -> s{_desrsResponseStatus = a})
-
-instance NFData DescribeEnvironmentStatusResponse
-         where
diff --git a/gen/Network/AWS/Cloud9/DescribeEnvironments.hs b/gen/Network/AWS/Cloud9/DescribeEnvironments.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/DescribeEnvironments.hs
+++ /dev/null
@@ -1,136 +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.Cloud9.DescribeEnvironments
--- 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)
---
--- Gets information about AWS Cloud9 development environments.
---
---
-module Network.AWS.Cloud9.DescribeEnvironments
-    (
-    -- * Creating a Request
-      describeEnvironments
-    , DescribeEnvironments
-    -- * Request Lenses
-    , deEnvironmentIds
-
-    -- * Destructuring the Response
-    , describeEnvironmentsResponse
-    , DescribeEnvironmentsResponse
-    -- * Response Lenses
-    , deersEnvironments
-    , deersResponseStatus
-    ) where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'describeEnvironments' smart constructor.
-newtype DescribeEnvironments = DescribeEnvironments'
-  { _deEnvironmentIds :: List1 Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeEnvironments' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deEnvironmentIds' - The IDs of individual environments to get information about.
-describeEnvironments
-    :: NonEmpty Text -- ^ 'deEnvironmentIds'
-    -> DescribeEnvironments
-describeEnvironments pEnvironmentIds_ =
-  DescribeEnvironments' {_deEnvironmentIds = _List1 # pEnvironmentIds_}
-
-
--- | The IDs of individual environments to get information about.
-deEnvironmentIds :: Lens' DescribeEnvironments (NonEmpty Text)
-deEnvironmentIds = lens _deEnvironmentIds (\ s a -> s{_deEnvironmentIds = a}) . _List1
-
-instance AWSRequest DescribeEnvironments where
-        type Rs DescribeEnvironments =
-             DescribeEnvironmentsResponse
-        request = postJSON cloud9
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeEnvironmentsResponse' <$>
-                   (x .?> "environments" .!@ mempty) <*>
-                     (pure (fromEnum s)))
-
-instance Hashable DescribeEnvironments where
-
-instance NFData DescribeEnvironments where
-
-instance ToHeaders DescribeEnvironments where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSCloud9WorkspaceManagementService.DescribeEnvironments"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeEnvironments where
-        toJSON DescribeEnvironments'{..}
-          = object
-              (catMaybes
-                 [Just ("environmentIds" .= _deEnvironmentIds)])
-
-instance ToPath DescribeEnvironments where
-        toPath = const "/"
-
-instance ToQuery DescribeEnvironments where
-        toQuery = const mempty
-
--- | /See:/ 'describeEnvironmentsResponse' smart constructor.
-data DescribeEnvironmentsResponse = DescribeEnvironmentsResponse'
-  { _deersEnvironments   :: !(Maybe [Environment])
-  , _deersResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeEnvironmentsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'deersEnvironments' - Information about the environments that are returned.
---
--- * 'deersResponseStatus' - -- | The response status code.
-describeEnvironmentsResponse
-    :: Int -- ^ 'deersResponseStatus'
-    -> DescribeEnvironmentsResponse
-describeEnvironmentsResponse pResponseStatus_ =
-  DescribeEnvironmentsResponse'
-    {_deersEnvironments = Nothing, _deersResponseStatus = pResponseStatus_}
-
-
--- | Information about the environments that are returned.
-deersEnvironments :: Lens' DescribeEnvironmentsResponse [Environment]
-deersEnvironments = lens _deersEnvironments (\ s a -> s{_deersEnvironments = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-deersResponseStatus :: Lens' DescribeEnvironmentsResponse Int
-deersResponseStatus = lens _deersResponseStatus (\ s a -> s{_deersResponseStatus = a})
-
-instance NFData DescribeEnvironmentsResponse where
diff --git a/gen/Network/AWS/Cloud9/ListEnvironments.hs b/gen/Network/AWS/Cloud9/ListEnvironments.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/ListEnvironments.hs
+++ /dev/null
@@ -1,165 +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.Cloud9.ListEnvironments
--- 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)
---
--- Gets a list of AWS Cloud9 development environment identifiers.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.Cloud9.ListEnvironments
-    (
-    -- * Creating a Request
-      listEnvironments
-    , ListEnvironments
-    -- * Request Lenses
-    , leNextToken
-    , leMaxResults
-
-    -- * Destructuring the Response
-    , listEnvironmentsResponse
-    , ListEnvironmentsResponse
-    -- * Response Lenses
-    , lersEnvironmentIds
-    , lersNextToken
-    , lersResponseStatus
-    ) where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'listEnvironments' smart constructor.
-data ListEnvironments = ListEnvironments'
-  { _leNextToken  :: !(Maybe Text)
-  , _leMaxResults :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListEnvironments' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'leNextToken' - During a previous call, if there are more than 25 items in the list, only the first 25 items are returned, along with a unique string called a /next token/ . To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned.
---
--- * 'leMaxResults' - The maximum number of environments to get identifiers for.
-listEnvironments
-    :: ListEnvironments
-listEnvironments =
-  ListEnvironments' {_leNextToken = Nothing, _leMaxResults = Nothing}
-
-
--- | During a previous call, if there are more than 25 items in the list, only the first 25 items are returned, along with a unique string called a /next token/ . To get the next batch of items in the list, call this operation again, adding the next token to the call. To get all of the items in the list, keep calling this operation with each subsequent next token that is returned, until no more next tokens are returned.
-leNextToken :: Lens' ListEnvironments (Maybe Text)
-leNextToken = lens _leNextToken (\ s a -> s{_leNextToken = a})
-
--- | The maximum number of environments to get identifiers for.
-leMaxResults :: Lens' ListEnvironments (Maybe Natural)
-leMaxResults = lens _leMaxResults (\ s a -> s{_leMaxResults = a}) . mapping _Nat
-
-instance AWSPager ListEnvironments where
-        page rq rs
-          | stop (rs ^. lersNextToken) = Nothing
-          | stop (rs ^. lersEnvironmentIds) = Nothing
-          | otherwise =
-            Just $ rq & leNextToken .~ rs ^. lersNextToken
-
-instance AWSRequest ListEnvironments where
-        type Rs ListEnvironments = ListEnvironmentsResponse
-        request = postJSON cloud9
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListEnvironmentsResponse' <$>
-                   (x .?> "environmentIds" .!@ mempty) <*>
-                     (x .?> "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListEnvironments where
-
-instance NFData ListEnvironments where
-
-instance ToHeaders ListEnvironments where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSCloud9WorkspaceManagementService.ListEnvironments"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListEnvironments where
-        toJSON ListEnvironments'{..}
-          = object
-              (catMaybes
-                 [("nextToken" .=) <$> _leNextToken,
-                  ("maxResults" .=) <$> _leMaxResults])
-
-instance ToPath ListEnvironments where
-        toPath = const "/"
-
-instance ToQuery ListEnvironments where
-        toQuery = const mempty
-
--- | /See:/ 'listEnvironmentsResponse' smart constructor.
-data ListEnvironmentsResponse = ListEnvironmentsResponse'
-  { _lersEnvironmentIds :: !(Maybe [Text])
-  , _lersNextToken      :: !(Maybe Text)
-  , _lersResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListEnvironmentsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lersEnvironmentIds' - The list of environment identifiers.
---
--- * 'lersNextToken' - If there are more than 25 items in the list, only the first 25 items are returned, along with a unique string called a /next token/ . To get the next batch of items in the list, call this operation again, adding the next token to the call.
---
--- * 'lersResponseStatus' - -- | The response status code.
-listEnvironmentsResponse
-    :: Int -- ^ 'lersResponseStatus'
-    -> ListEnvironmentsResponse
-listEnvironmentsResponse pResponseStatus_ =
-  ListEnvironmentsResponse'
-    { _lersEnvironmentIds = Nothing
-    , _lersNextToken = Nothing
-    , _lersResponseStatus = pResponseStatus_
-    }
-
-
--- | The list of environment identifiers.
-lersEnvironmentIds :: Lens' ListEnvironmentsResponse [Text]
-lersEnvironmentIds = lens _lersEnvironmentIds (\ s a -> s{_lersEnvironmentIds = a}) . _Default . _Coerce
-
--- | If there are more than 25 items in the list, only the first 25 items are returned, along with a unique string called a /next token/ . To get the next batch of items in the list, call this operation again, adding the next token to the call.
-lersNextToken :: Lens' ListEnvironmentsResponse (Maybe Text)
-lersNextToken = lens _lersNextToken (\ s a -> s{_lersNextToken = a})
-
--- | -- | The response status code.
-lersResponseStatus :: Lens' ListEnvironmentsResponse Int
-lersResponseStatus = lens _lersResponseStatus (\ s a -> s{_lersResponseStatus = a})
-
-instance NFData ListEnvironmentsResponse where
diff --git a/gen/Network/AWS/Cloud9/Types.hs b/gen/Network/AWS/Cloud9/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/Types.hs
+++ /dev/null
@@ -1,152 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Cloud9.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.Cloud9.Types
-    (
-    -- * Service Configuration
-      cloud9
-
-    -- * Errors
-    , _ConflictException
-    , _ForbiddenException
-    , _NotFoundException
-    , _TooManyRequestsException
-    , _InternalServerErrorException
-    , _BadRequestException
-    , _LimitExceededException
-
-    -- * EnvironmentStatus
-    , EnvironmentStatus (..)
-
-    -- * EnvironmentType
-    , EnvironmentType (..)
-
-    -- * MemberPermissions
-    , MemberPermissions (..)
-
-    -- * Permissions
-    , Permissions (..)
-
-    -- * Environment
-    , Environment
-    , environment
-    , eArn
-    , eOwnerARN
-    , eName
-    , eId
-    , eType
-    , eDescription
-
-    -- * EnvironmentMember
-    , EnvironmentMember
-    , environmentMember
-    , emLastAccess
-    , emUserId
-    , emUserARN
-    , emPermissions
-    , emEnvironmentId
-    ) where
-
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Cloud9.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-
--- | API version @2017-09-23@ of the Amazon Cloud9 SDK configuration.
-cloud9 :: Service
-cloud9 =
-  Service
-    { _svcAbbrev = "Cloud9"
-    , _svcSigner = v4
-    , _svcPrefix = "cloud9"
-    , _svcVersion = "2017-09-23"
-    , _svcEndpoint = defaultEndpoint cloud9
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "Cloud9"
-    , _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
-
-
--- | A conflict occurred.
---
---
-_ConflictException :: AsError a => Getting (First ServiceError) a ServiceError
-_ConflictException = _MatchServiceError cloud9 "ConflictException"
-
-
--- | An access permissions issue occurred.
---
---
-_ForbiddenException :: AsError a => Getting (First ServiceError) a ServiceError
-_ForbiddenException = _MatchServiceError cloud9 "ForbiddenException"
-
-
--- | The target resource cannot be found.
---
---
-_NotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_NotFoundException = _MatchServiceError cloud9 "NotFoundException"
-
-
--- | Too many service requests were made over the given time period.
---
---
-_TooManyRequestsException :: AsError a => Getting (First ServiceError) a ServiceError
-_TooManyRequestsException = _MatchServiceError cloud9 "TooManyRequestsException"
-
-
--- | An internal server error occurred.
---
---
-_InternalServerErrorException :: AsError a => Getting (First ServiceError) a ServiceError
-_InternalServerErrorException =
-  _MatchServiceError cloud9 "InternalServerErrorException"
-
-
--- | The target request is invalid.
---
---
-_BadRequestException :: AsError a => Getting (First ServiceError) a ServiceError
-_BadRequestException = _MatchServiceError cloud9 "BadRequestException"
-
-
--- | A service limit was exceeded.
---
---
-_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
-_LimitExceededException = _MatchServiceError cloud9 "LimitExceededException"
-
diff --git a/gen/Network/AWS/Cloud9/Types/Product.hs b/gen/Network/AWS/Cloud9/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/Types/Product.hs
+++ /dev/null
@@ -1,177 +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.Cloud9.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.Cloud9.Types.Product where
-
-import Network.AWS.Cloud9.Types.Sum
-import Network.AWS.Lens
-import Network.AWS.Prelude
-
--- | Information about an AWS Cloud9 development environment.
---
---
---
--- /See:/ 'environment' smart constructor.
-data Environment = Environment'
-  { _eArn         :: !(Maybe Text)
-  , _eOwnerARN    :: !(Maybe Text)
-  , _eName        :: !(Maybe Text)
-  , _eId          :: !(Maybe Text)
-  , _eType        :: !(Maybe EnvironmentType)
-  , _eDescription :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Environment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'eArn' - The Amazon Resource Name (ARN) of the environment.
---
--- * 'eOwnerARN' - The Amazon Resource Name (ARN) of the environment owner.
---
--- * 'eName' - The name of the environment.
---
--- * 'eId' - The ID of the environment.
---
--- * 'eType' - The type of environment. Valid values include the following:     * @ec2@ : An Amazon Elastic Compute Cloud (Amazon EC2) instance connects to the environment.     * @ssh@ : Your own server connects to the environment.
---
--- * 'eDescription' - The description for the environment.
-environment
-    :: Environment
-environment =
-  Environment'
-    { _eArn = Nothing
-    , _eOwnerARN = Nothing
-    , _eName = Nothing
-    , _eId = Nothing
-    , _eType = Nothing
-    , _eDescription = Nothing
-    }
-
-
--- | The Amazon Resource Name (ARN) of the environment.
-eArn :: Lens' Environment (Maybe Text)
-eArn = lens _eArn (\ s a -> s{_eArn = a})
-
--- | The Amazon Resource Name (ARN) of the environment owner.
-eOwnerARN :: Lens' Environment (Maybe Text)
-eOwnerARN = lens _eOwnerARN (\ s a -> s{_eOwnerARN = a})
-
--- | The name of the environment.
-eName :: Lens' Environment (Maybe Text)
-eName = lens _eName (\ s a -> s{_eName = a})
-
--- | The ID of the environment.
-eId :: Lens' Environment (Maybe Text)
-eId = lens _eId (\ s a -> s{_eId = a})
-
--- | The type of environment. Valid values include the following:     * @ec2@ : An Amazon Elastic Compute Cloud (Amazon EC2) instance connects to the environment.     * @ssh@ : Your own server connects to the environment.
-eType :: Lens' Environment (Maybe EnvironmentType)
-eType = lens _eType (\ s a -> s{_eType = a})
-
--- | The description for the environment.
-eDescription :: Lens' Environment (Maybe Text)
-eDescription = lens _eDescription (\ s a -> s{_eDescription = a})
-
-instance FromJSON Environment where
-        parseJSON
-          = withObject "Environment"
-              (\ x ->
-                 Environment' <$>
-                   (x .:? "arn") <*> (x .:? "ownerArn") <*>
-                     (x .:? "name")
-                     <*> (x .:? "id")
-                     <*> (x .:? "type")
-                     <*> (x .:? "description"))
-
-instance Hashable Environment where
-
-instance NFData Environment where
-
--- | Information about an environment member for an AWS Cloud9 development environment.
---
---
---
--- /See:/ 'environmentMember' smart constructor.
-data EnvironmentMember = EnvironmentMember'
-  { _emLastAccess    :: !(Maybe POSIX)
-  , _emUserId        :: !(Maybe Text)
-  , _emUserARN       :: !(Maybe Text)
-  , _emPermissions   :: !(Maybe Permissions)
-  , _emEnvironmentId :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'EnvironmentMember' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'emLastAccess' - The time, expressed in epoch time format, when the environment member last opened the environment.
---
--- * 'emUserId' - The user ID in AWS Identity and Access Management (AWS IAM) of the environment member.
---
--- * 'emUserARN' - The Amazon Resource Name (ARN) of the environment member.
---
--- * 'emPermissions' - The type of environment member permissions associated with this environment member. Available values include:     * @owner@ : Owns the environment.     * @read-only@ : Has read-only access to the environment.     * @read-write@ : Has read-write access to the environment.
---
--- * 'emEnvironmentId' - The ID of the environment for the environment member.
-environmentMember
-    :: EnvironmentMember
-environmentMember =
-  EnvironmentMember'
-    { _emLastAccess = Nothing
-    , _emUserId = Nothing
-    , _emUserARN = Nothing
-    , _emPermissions = Nothing
-    , _emEnvironmentId = Nothing
-    }
-
-
--- | The time, expressed in epoch time format, when the environment member last opened the environment.
-emLastAccess :: Lens' EnvironmentMember (Maybe UTCTime)
-emLastAccess = lens _emLastAccess (\ s a -> s{_emLastAccess = a}) . mapping _Time
-
--- | The user ID in AWS Identity and Access Management (AWS IAM) of the environment member.
-emUserId :: Lens' EnvironmentMember (Maybe Text)
-emUserId = lens _emUserId (\ s a -> s{_emUserId = a})
-
--- | The Amazon Resource Name (ARN) of the environment member.
-emUserARN :: Lens' EnvironmentMember (Maybe Text)
-emUserARN = lens _emUserARN (\ s a -> s{_emUserARN = a})
-
--- | The type of environment member permissions associated with this environment member. Available values include:     * @owner@ : Owns the environment.     * @read-only@ : Has read-only access to the environment.     * @read-write@ : Has read-write access to the environment.
-emPermissions :: Lens' EnvironmentMember (Maybe Permissions)
-emPermissions = lens _emPermissions (\ s a -> s{_emPermissions = a})
-
--- | The ID of the environment for the environment member.
-emEnvironmentId :: Lens' EnvironmentMember (Maybe Text)
-emEnvironmentId = lens _emEnvironmentId (\ s a -> s{_emEnvironmentId = a})
-
-instance FromJSON EnvironmentMember where
-        parseJSON
-          = withObject "EnvironmentMember"
-              (\ x ->
-                 EnvironmentMember' <$>
-                   (x .:? "lastAccess") <*> (x .:? "userId") <*>
-                     (x .:? "userArn")
-                     <*> (x .:? "permissions")
-                     <*> (x .:? "environmentId"))
-
-instance Hashable EnvironmentMember where
-
-instance NFData EnvironmentMember where
diff --git a/gen/Network/AWS/Cloud9/Types/Sum.hs b/gen/Network/AWS/Cloud9/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/Types/Sum.hs
+++ /dev/null
@@ -1,149 +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.Cloud9.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.Cloud9.Types.Sum where
-
-import Network.AWS.Prelude
-
-data EnvironmentStatus
-  = Connecting
-  | Creating
-  | Deleting
-  | Error'
-  | Ready
-  | Stopped
-  | Stopping
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText EnvironmentStatus where
-    parser = takeLowerText >>= \case
-        "connecting" -> pure Connecting
-        "creating" -> pure Creating
-        "deleting" -> pure Deleting
-        "error" -> pure Error'
-        "ready" -> pure Ready
-        "stopped" -> pure Stopped
-        "stopping" -> pure Stopping
-        e -> fromTextError $ "Failure parsing EnvironmentStatus from value: '" <> e
-           <> "'. Accepted values: connecting, creating, deleting, error, ready, stopped, stopping"
-
-instance ToText EnvironmentStatus where
-    toText = \case
-        Connecting -> "connecting"
-        Creating -> "creating"
-        Deleting -> "deleting"
-        Error' -> "error"
-        Ready -> "ready"
-        Stopped -> "stopped"
-        Stopping -> "stopping"
-
-instance Hashable     EnvironmentStatus
-instance NFData       EnvironmentStatus
-instance ToByteString EnvironmentStatus
-instance ToQuery      EnvironmentStatus
-instance ToHeader     EnvironmentStatus
-
-instance FromJSON EnvironmentStatus where
-    parseJSON = parseJSONText "EnvironmentStatus"
-
-data EnvironmentType
-  = EC2
-  | SSH
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText EnvironmentType where
-    parser = takeLowerText >>= \case
-        "ec2" -> pure EC2
-        "ssh" -> pure SSH
-        e -> fromTextError $ "Failure parsing EnvironmentType from value: '" <> e
-           <> "'. Accepted values: ec2, ssh"
-
-instance ToText EnvironmentType where
-    toText = \case
-        EC2 -> "ec2"
-        SSH -> "ssh"
-
-instance Hashable     EnvironmentType
-instance NFData       EnvironmentType
-instance ToByteString EnvironmentType
-instance ToQuery      EnvironmentType
-instance ToHeader     EnvironmentType
-
-instance FromJSON EnvironmentType where
-    parseJSON = parseJSONText "EnvironmentType"
-
-data MemberPermissions
-  = MPReadOnly
-  | MPReadWrite
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText MemberPermissions where
-    parser = takeLowerText >>= \case
-        "read-only" -> pure MPReadOnly
-        "read-write" -> pure MPReadWrite
-        e -> fromTextError $ "Failure parsing MemberPermissions from value: '" <> e
-           <> "'. Accepted values: read-only, read-write"
-
-instance ToText MemberPermissions where
-    toText = \case
-        MPReadOnly -> "read-only"
-        MPReadWrite -> "read-write"
-
-instance Hashable     MemberPermissions
-instance NFData       MemberPermissions
-instance ToByteString MemberPermissions
-instance ToQuery      MemberPermissions
-instance ToHeader     MemberPermissions
-
-instance ToJSON MemberPermissions where
-    toJSON = toJSONText
-
-data Permissions
-  = Owner
-  | ReadOnly
-  | ReadWrite
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText Permissions where
-    parser = takeLowerText >>= \case
-        "owner" -> pure Owner
-        "read-only" -> pure ReadOnly
-        "read-write" -> pure ReadWrite
-        e -> fromTextError $ "Failure parsing Permissions from value: '" <> e
-           <> "'. Accepted values: owner, read-only, read-write"
-
-instance ToText Permissions where
-    toText = \case
-        Owner -> "owner"
-        ReadOnly -> "read-only"
-        ReadWrite -> "read-write"
-
-instance Hashable     Permissions
-instance NFData       Permissions
-instance ToByteString Permissions
-instance ToQuery      Permissions
-instance ToHeader     Permissions
-
-instance ToJSON Permissions where
-    toJSON = toJSONText
-
-instance FromJSON Permissions where
-    parseJSON = parseJSONText "Permissions"
diff --git a/gen/Network/AWS/Cloud9/UpdateEnvironment.hs b/gen/Network/AWS/Cloud9/UpdateEnvironment.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/UpdateEnvironment.hs
+++ /dev/null
@@ -1,146 +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.Cloud9.UpdateEnvironment
--- 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)
---
--- Changes the settings of an existing AWS Cloud9 development environment.
---
---
-module Network.AWS.Cloud9.UpdateEnvironment
-    (
-    -- * Creating a Request
-      updateEnvironment
-    , UpdateEnvironment
-    -- * Request Lenses
-    , ueName
-    , ueDescription
-    , ueEnvironmentId
-
-    -- * Destructuring the Response
-    , updateEnvironmentResponse
-    , UpdateEnvironmentResponse
-    -- * Response Lenses
-    , uersResponseStatus
-    ) where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateEnvironment' smart constructor.
-data UpdateEnvironment = UpdateEnvironment'
-  { _ueName          :: !(Maybe Text)
-  , _ueDescription   :: !(Maybe Text)
-  , _ueEnvironmentId :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateEnvironment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ueName' - A replacement name for the environment.
---
--- * 'ueDescription' - Any new or replacement description for the environment.
---
--- * 'ueEnvironmentId' - The ID of the environment to change settings.
-updateEnvironment
-    :: Text -- ^ 'ueEnvironmentId'
-    -> UpdateEnvironment
-updateEnvironment pEnvironmentId_ =
-  UpdateEnvironment'
-    { _ueName = Nothing
-    , _ueDescription = Nothing
-    , _ueEnvironmentId = pEnvironmentId_
-    }
-
-
--- | A replacement name for the environment.
-ueName :: Lens' UpdateEnvironment (Maybe Text)
-ueName = lens _ueName (\ s a -> s{_ueName = a})
-
--- | Any new or replacement description for the environment.
-ueDescription :: Lens' UpdateEnvironment (Maybe Text)
-ueDescription = lens _ueDescription (\ s a -> s{_ueDescription = a})
-
--- | The ID of the environment to change settings.
-ueEnvironmentId :: Lens' UpdateEnvironment Text
-ueEnvironmentId = lens _ueEnvironmentId (\ s a -> s{_ueEnvironmentId = a})
-
-instance AWSRequest UpdateEnvironment where
-        type Rs UpdateEnvironment = UpdateEnvironmentResponse
-        request = postJSON cloud9
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateEnvironmentResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UpdateEnvironment where
-
-instance NFData UpdateEnvironment where
-
-instance ToHeaders UpdateEnvironment where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSCloud9WorkspaceManagementService.UpdateEnvironment"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateEnvironment where
-        toJSON UpdateEnvironment'{..}
-          = object
-              (catMaybes
-                 [("name" .=) <$> _ueName,
-                  ("description" .=) <$> _ueDescription,
-                  Just ("environmentId" .= _ueEnvironmentId)])
-
-instance ToPath UpdateEnvironment where
-        toPath = const "/"
-
-instance ToQuery UpdateEnvironment where
-        toQuery = const mempty
-
--- | /See:/ 'updateEnvironmentResponse' smart constructor.
-newtype UpdateEnvironmentResponse = UpdateEnvironmentResponse'
-  { _uersResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateEnvironmentResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uersResponseStatus' - -- | The response status code.
-updateEnvironmentResponse
-    :: Int -- ^ 'uersResponseStatus'
-    -> UpdateEnvironmentResponse
-updateEnvironmentResponse pResponseStatus_ =
-  UpdateEnvironmentResponse' {_uersResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-uersResponseStatus :: Lens' UpdateEnvironmentResponse Int
-uersResponseStatus = lens _uersResponseStatus (\ s a -> s{_uersResponseStatus = a})
-
-instance NFData UpdateEnvironmentResponse where
diff --git a/gen/Network/AWS/Cloud9/UpdateEnvironmentMembership.hs b/gen/Network/AWS/Cloud9/UpdateEnvironmentMembership.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/UpdateEnvironmentMembership.hs
+++ /dev/null
@@ -1,160 +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.Cloud9.UpdateEnvironmentMembership
--- 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)
---
--- Changes the settings of an existing environment member for an AWS Cloud9 development environment.
---
---
-module Network.AWS.Cloud9.UpdateEnvironmentMembership
-    (
-    -- * Creating a Request
-      updateEnvironmentMembership
-    , UpdateEnvironmentMembership
-    -- * Request Lenses
-    , uemEnvironmentId
-    , uemUserARN
-    , uemPermissions
-
-    -- * Destructuring the Response
-    , updateEnvironmentMembershipResponse
-    , UpdateEnvironmentMembershipResponse
-    -- * Response Lenses
-    , uemrsMembership
-    , uemrsResponseStatus
-    ) where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Cloud9.Types.Product
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-
--- | /See:/ 'updateEnvironmentMembership' smart constructor.
-data UpdateEnvironmentMembership = UpdateEnvironmentMembership'
-  { _uemEnvironmentId :: !Text
-  , _uemUserARN       :: !Text
-  , _uemPermissions   :: !MemberPermissions
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateEnvironmentMembership' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uemEnvironmentId' - The ID of the environment for the environment member whose settings you want to change.
---
--- * 'uemUserARN' - The Amazon Resource Name (ARN) of the environment member whose settings you want to change.
---
--- * 'uemPermissions' - The replacement type of environment member permissions you want to associate with this environment member. Available values include:     * @read-only@ : Has read-only access to the environment.     * @read-write@ : Has read-write access to the environment.
-updateEnvironmentMembership
-    :: Text -- ^ 'uemEnvironmentId'
-    -> Text -- ^ 'uemUserARN'
-    -> MemberPermissions -- ^ 'uemPermissions'
-    -> UpdateEnvironmentMembership
-updateEnvironmentMembership pEnvironmentId_ pUserARN_ pPermissions_ =
-  UpdateEnvironmentMembership'
-    { _uemEnvironmentId = pEnvironmentId_
-    , _uemUserARN = pUserARN_
-    , _uemPermissions = pPermissions_
-    }
-
-
--- | The ID of the environment for the environment member whose settings you want to change.
-uemEnvironmentId :: Lens' UpdateEnvironmentMembership Text
-uemEnvironmentId = lens _uemEnvironmentId (\ s a -> s{_uemEnvironmentId = a})
-
--- | The Amazon Resource Name (ARN) of the environment member whose settings you want to change.
-uemUserARN :: Lens' UpdateEnvironmentMembership Text
-uemUserARN = lens _uemUserARN (\ s a -> s{_uemUserARN = a})
-
--- | The replacement type of environment member permissions you want to associate with this environment member. Available values include:     * @read-only@ : Has read-only access to the environment.     * @read-write@ : Has read-write access to the environment.
-uemPermissions :: Lens' UpdateEnvironmentMembership MemberPermissions
-uemPermissions = lens _uemPermissions (\ s a -> s{_uemPermissions = a})
-
-instance AWSRequest UpdateEnvironmentMembership where
-        type Rs UpdateEnvironmentMembership =
-             UpdateEnvironmentMembershipResponse
-        request = postJSON cloud9
-        response
-          = receiveJSON
-              (\ s h x ->
-                 UpdateEnvironmentMembershipResponse' <$>
-                   (x .?> "membership") <*> (pure (fromEnum s)))
-
-instance Hashable UpdateEnvironmentMembership where
-
-instance NFData UpdateEnvironmentMembership where
-
-instance ToHeaders UpdateEnvironmentMembership where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSCloud9WorkspaceManagementService.UpdateEnvironmentMembership"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateEnvironmentMembership where
-        toJSON UpdateEnvironmentMembership'{..}
-          = object
-              (catMaybes
-                 [Just ("environmentId" .= _uemEnvironmentId),
-                  Just ("userArn" .= _uemUserARN),
-                  Just ("permissions" .= _uemPermissions)])
-
-instance ToPath UpdateEnvironmentMembership where
-        toPath = const "/"
-
-instance ToQuery UpdateEnvironmentMembership where
-        toQuery = const mempty
-
--- | /See:/ 'updateEnvironmentMembershipResponse' smart constructor.
-data UpdateEnvironmentMembershipResponse = UpdateEnvironmentMembershipResponse'
-  { _uemrsMembership     :: !(Maybe EnvironmentMember)
-  , _uemrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateEnvironmentMembershipResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'uemrsMembership' - Information about the environment member whose settings were changed.
---
--- * 'uemrsResponseStatus' - -- | The response status code.
-updateEnvironmentMembershipResponse
-    :: Int -- ^ 'uemrsResponseStatus'
-    -> UpdateEnvironmentMembershipResponse
-updateEnvironmentMembershipResponse pResponseStatus_ =
-  UpdateEnvironmentMembershipResponse'
-    {_uemrsMembership = Nothing, _uemrsResponseStatus = pResponseStatus_}
-
-
--- | Information about the environment member whose settings were changed.
-uemrsMembership :: Lens' UpdateEnvironmentMembershipResponse (Maybe EnvironmentMember)
-uemrsMembership = lens _uemrsMembership (\ s a -> s{_uemrsMembership = a})
-
--- | -- | The response status code.
-uemrsResponseStatus :: Lens' UpdateEnvironmentMembershipResponse Int
-uemrsResponseStatus = lens _uemrsResponseStatus (\ s a -> s{_uemrsResponseStatus = a})
-
-instance NFData UpdateEnvironmentMembershipResponse
-         where
diff --git a/gen/Network/AWS/Cloud9/Waiters.hs b/gen/Network/AWS/Cloud9/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/Cloud9/Waiters.hs
+++ /dev/null
@@ -1,21 +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.Cloud9.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.Cloud9.Waiters where
-
-import Network.AWS.Cloud9.Types
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Waiter
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.Cloud9
+import Test.Amazonka.Cloud9.Internal
 import Test.Tasty
-import Test.AWS.Cloud9
-import Test.AWS.Cloud9.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "Cloud9"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "Cloud9"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/Cloud9.hs b/test/Test/AWS/Cloud9.hs
deleted file mode 100644
--- a/test/Test/AWS/Cloud9.hs
+++ /dev/null
@@ -1,20 +0,0 @@
--- |
--- Module      : Test.AWS.Cloud9
--- 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.Cloud9
-    ( tests
-    , fixtures
-    ) where
-
-import Test.Tasty (TestTree)
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/Cloud9/Internal.hs b/test/Test/AWS/Cloud9/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/Cloud9/Internal.hs
+++ /dev/null
@@ -1,9 +0,0 @@
--- |
--- Module      : Test.AWS.Cloud9.Internal
--- 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.Cloud9.Internal where
diff --git a/test/Test/AWS/Gen/Cloud9.hs b/test/Test/AWS/Gen/Cloud9.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/Cloud9.hs
+++ /dev/null
@@ -1,219 +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.Cloud9
--- 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.Cloud9 where
-
-import Data.Proxy
-import Network.AWS.Cloud9
-import Test.AWS.Cloud9.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"
---         [ requestListEnvironments $
---             listEnvironments
---
---         , requestUpdateEnvironment $
---             updateEnvironment
---
---         , requestDeleteEnvironment $
---             deleteEnvironment
---
---         , requestDescribeEnvironmentStatus $
---             describeEnvironmentStatus
---
---         , requestCreateEnvironmentEC $
---             createEnvironmentEC
---
---         , requestCreateEnvironmentMembership $
---             createEnvironmentMembership
---
---         , requestDescribeEnvironments $
---             describeEnvironments
---
---         , requestDeleteEnvironmentMembership $
---             deleteEnvironmentMembership
---
---         , requestUpdateEnvironmentMembership $
---             updateEnvironmentMembership
---
---         , requestDescribeEnvironmentMemberships $
---             describeEnvironmentMemberships
---
---           ]
-
---     , testGroup "response"
---         [ responseListEnvironments $
---             listEnvironmentsResponse
---
---         , responseUpdateEnvironment $
---             updateEnvironmentResponse
---
---         , responseDeleteEnvironment $
---             deleteEnvironmentResponse
---
---         , responseDescribeEnvironmentStatus $
---             describeEnvironmentStatusResponse
---
---         , responseCreateEnvironmentEC $
---             createEnvironmentECResponse
---
---         , responseCreateEnvironmentMembership $
---             createEnvironmentMembershipResponse
---
---         , responseDescribeEnvironments $
---             describeEnvironmentsResponse
---
---         , responseDeleteEnvironmentMembership $
---             deleteEnvironmentMembershipResponse
---
---         , responseUpdateEnvironmentMembership $
---             updateEnvironmentMembershipResponse
---
---         , responseDescribeEnvironmentMemberships $
---             describeEnvironmentMembershipsResponse
---
---           ]
---     ]
-
--- Requests
-
-requestListEnvironments :: ListEnvironments -> TestTree
-requestListEnvironments = req
-    "ListEnvironments"
-    "fixture/ListEnvironments.yaml"
-
-requestUpdateEnvironment :: UpdateEnvironment -> TestTree
-requestUpdateEnvironment = req
-    "UpdateEnvironment"
-    "fixture/UpdateEnvironment.yaml"
-
-requestDeleteEnvironment :: DeleteEnvironment -> TestTree
-requestDeleteEnvironment = req
-    "DeleteEnvironment"
-    "fixture/DeleteEnvironment.yaml"
-
-requestDescribeEnvironmentStatus :: DescribeEnvironmentStatus -> TestTree
-requestDescribeEnvironmentStatus = req
-    "DescribeEnvironmentStatus"
-    "fixture/DescribeEnvironmentStatus.yaml"
-
-requestCreateEnvironmentEC :: CreateEnvironmentEC -> TestTree
-requestCreateEnvironmentEC = req
-    "CreateEnvironmentEC"
-    "fixture/CreateEnvironmentEC.yaml"
-
-requestCreateEnvironmentMembership :: CreateEnvironmentMembership -> TestTree
-requestCreateEnvironmentMembership = req
-    "CreateEnvironmentMembership"
-    "fixture/CreateEnvironmentMembership.yaml"
-
-requestDescribeEnvironments :: DescribeEnvironments -> TestTree
-requestDescribeEnvironments = req
-    "DescribeEnvironments"
-    "fixture/DescribeEnvironments.yaml"
-
-requestDeleteEnvironmentMembership :: DeleteEnvironmentMembership -> TestTree
-requestDeleteEnvironmentMembership = req
-    "DeleteEnvironmentMembership"
-    "fixture/DeleteEnvironmentMembership.yaml"
-
-requestUpdateEnvironmentMembership :: UpdateEnvironmentMembership -> TestTree
-requestUpdateEnvironmentMembership = req
-    "UpdateEnvironmentMembership"
-    "fixture/UpdateEnvironmentMembership.yaml"
-
-requestDescribeEnvironmentMemberships :: DescribeEnvironmentMemberships -> TestTree
-requestDescribeEnvironmentMemberships = req
-    "DescribeEnvironmentMemberships"
-    "fixture/DescribeEnvironmentMemberships.yaml"
-
--- Responses
-
-responseListEnvironments :: ListEnvironmentsResponse -> TestTree
-responseListEnvironments = res
-    "ListEnvironmentsResponse"
-    "fixture/ListEnvironmentsResponse.proto"
-    cloud9
-    (Proxy :: Proxy ListEnvironments)
-
-responseUpdateEnvironment :: UpdateEnvironmentResponse -> TestTree
-responseUpdateEnvironment = res
-    "UpdateEnvironmentResponse"
-    "fixture/UpdateEnvironmentResponse.proto"
-    cloud9
-    (Proxy :: Proxy UpdateEnvironment)
-
-responseDeleteEnvironment :: DeleteEnvironmentResponse -> TestTree
-responseDeleteEnvironment = res
-    "DeleteEnvironmentResponse"
-    "fixture/DeleteEnvironmentResponse.proto"
-    cloud9
-    (Proxy :: Proxy DeleteEnvironment)
-
-responseDescribeEnvironmentStatus :: DescribeEnvironmentStatusResponse -> TestTree
-responseDescribeEnvironmentStatus = res
-    "DescribeEnvironmentStatusResponse"
-    "fixture/DescribeEnvironmentStatusResponse.proto"
-    cloud9
-    (Proxy :: Proxy DescribeEnvironmentStatus)
-
-responseCreateEnvironmentEC :: CreateEnvironmentECResponse -> TestTree
-responseCreateEnvironmentEC = res
-    "CreateEnvironmentECResponse"
-    "fixture/CreateEnvironmentECResponse.proto"
-    cloud9
-    (Proxy :: Proxy CreateEnvironmentEC)
-
-responseCreateEnvironmentMembership :: CreateEnvironmentMembershipResponse -> TestTree
-responseCreateEnvironmentMembership = res
-    "CreateEnvironmentMembershipResponse"
-    "fixture/CreateEnvironmentMembershipResponse.proto"
-    cloud9
-    (Proxy :: Proxy CreateEnvironmentMembership)
-
-responseDescribeEnvironments :: DescribeEnvironmentsResponse -> TestTree
-responseDescribeEnvironments = res
-    "DescribeEnvironmentsResponse"
-    "fixture/DescribeEnvironmentsResponse.proto"
-    cloud9
-    (Proxy :: Proxy DescribeEnvironments)
-
-responseDeleteEnvironmentMembership :: DeleteEnvironmentMembershipResponse -> TestTree
-responseDeleteEnvironmentMembership = res
-    "DeleteEnvironmentMembershipResponse"
-    "fixture/DeleteEnvironmentMembershipResponse.proto"
-    cloud9
-    (Proxy :: Proxy DeleteEnvironmentMembership)
-
-responseUpdateEnvironmentMembership :: UpdateEnvironmentMembershipResponse -> TestTree
-responseUpdateEnvironmentMembership = res
-    "UpdateEnvironmentMembershipResponse"
-    "fixture/UpdateEnvironmentMembershipResponse.proto"
-    cloud9
-    (Proxy :: Proxy UpdateEnvironmentMembership)
-
-responseDescribeEnvironmentMemberships :: DescribeEnvironmentMembershipsResponse -> TestTree
-responseDescribeEnvironmentMemberships = res
-    "DescribeEnvironmentMembershipsResponse"
-    "fixture/DescribeEnvironmentMembershipsResponse.proto"
-    cloud9
-    (Proxy :: Proxy DescribeEnvironmentMemberships)
diff --git a/test/Test/Amazonka/Cloud9.hs b/test/Test/Amazonka/Cloud9.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Cloud9.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Cloud9
+-- Copyright   : (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.Cloud9
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Cloud9/Internal.hs b/test/Test/Amazonka/Cloud9/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Cloud9/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Cloud9.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.Cloud9.Internal where
diff --git a/test/Test/Amazonka/Gen/Cloud9.hs b/test/Test/Amazonka/Gen/Cloud9.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Cloud9.hs
@@ -0,0 +1,298 @@
+{-# 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.Cloud9
+-- Copyright   : (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.Cloud9 where
+
+import Amazonka.Cloud9
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Cloud9.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"
+--         [ requestCreateEnvironmentEC2 $
+--             newCreateEnvironmentEC2
+--
+--         , requestCreateEnvironmentMembership $
+--             newCreateEnvironmentMembership
+--
+--         , requestDeleteEnvironment $
+--             newDeleteEnvironment
+--
+--         , requestDeleteEnvironmentMembership $
+--             newDeleteEnvironmentMembership
+--
+--         , requestDescribeEnvironmentMemberships $
+--             newDescribeEnvironmentMemberships
+--
+--         , requestDescribeEnvironmentStatus $
+--             newDescribeEnvironmentStatus
+--
+--         , requestDescribeEnvironments $
+--             newDescribeEnvironments
+--
+--         , requestListEnvironments $
+--             newListEnvironments
+--
+--         , requestListTagsForResource $
+--             newListTagsForResource
+--
+--         , requestTagResource $
+--             newTagResource
+--
+--         , requestUntagResource $
+--             newUntagResource
+--
+--         , requestUpdateEnvironment $
+--             newUpdateEnvironment
+--
+--         , requestUpdateEnvironmentMembership $
+--             newUpdateEnvironmentMembership
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateEnvironmentEC2 $
+--             newCreateEnvironmentEC2Response
+--
+--         , responseCreateEnvironmentMembership $
+--             newCreateEnvironmentMembershipResponse
+--
+--         , responseDeleteEnvironment $
+--             newDeleteEnvironmentResponse
+--
+--         , responseDeleteEnvironmentMembership $
+--             newDeleteEnvironmentMembershipResponse
+--
+--         , responseDescribeEnvironmentMemberships $
+--             newDescribeEnvironmentMembershipsResponse
+--
+--         , responseDescribeEnvironmentStatus $
+--             newDescribeEnvironmentStatusResponse
+--
+--         , responseDescribeEnvironments $
+--             newDescribeEnvironmentsResponse
+--
+--         , responseListEnvironments $
+--             newListEnvironmentsResponse
+--
+--         , responseListTagsForResource $
+--             newListTagsForResourceResponse
+--
+--         , responseTagResource $
+--             newTagResourceResponse
+--
+--         , responseUntagResource $
+--             newUntagResourceResponse
+--
+--         , responseUpdateEnvironment $
+--             newUpdateEnvironmentResponse
+--
+--         , responseUpdateEnvironmentMembership $
+--             newUpdateEnvironmentMembershipResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateEnvironmentEC2 :: CreateEnvironmentEC2 -> TestTree
+requestCreateEnvironmentEC2 =
+  req
+    "CreateEnvironmentEC2"
+    "fixture/CreateEnvironmentEC2.yaml"
+
+requestCreateEnvironmentMembership :: CreateEnvironmentMembership -> TestTree
+requestCreateEnvironmentMembership =
+  req
+    "CreateEnvironmentMembership"
+    "fixture/CreateEnvironmentMembership.yaml"
+
+requestDeleteEnvironment :: DeleteEnvironment -> TestTree
+requestDeleteEnvironment =
+  req
+    "DeleteEnvironment"
+    "fixture/DeleteEnvironment.yaml"
+
+requestDeleteEnvironmentMembership :: DeleteEnvironmentMembership -> TestTree
+requestDeleteEnvironmentMembership =
+  req
+    "DeleteEnvironmentMembership"
+    "fixture/DeleteEnvironmentMembership.yaml"
+
+requestDescribeEnvironmentMemberships :: DescribeEnvironmentMemberships -> TestTree
+requestDescribeEnvironmentMemberships =
+  req
+    "DescribeEnvironmentMemberships"
+    "fixture/DescribeEnvironmentMemberships.yaml"
+
+requestDescribeEnvironmentStatus :: DescribeEnvironmentStatus -> TestTree
+requestDescribeEnvironmentStatus =
+  req
+    "DescribeEnvironmentStatus"
+    "fixture/DescribeEnvironmentStatus.yaml"
+
+requestDescribeEnvironments :: DescribeEnvironments -> TestTree
+requestDescribeEnvironments =
+  req
+    "DescribeEnvironments"
+    "fixture/DescribeEnvironments.yaml"
+
+requestListEnvironments :: ListEnvironments -> TestTree
+requestListEnvironments =
+  req
+    "ListEnvironments"
+    "fixture/ListEnvironments.yaml"
+
+requestListTagsForResource :: ListTagsForResource -> TestTree
+requestListTagsForResource =
+  req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+requestTagResource :: TagResource -> TestTree
+requestTagResource =
+  req
+    "TagResource"
+    "fixture/TagResource.yaml"
+
+requestUntagResource :: UntagResource -> TestTree
+requestUntagResource =
+  req
+    "UntagResource"
+    "fixture/UntagResource.yaml"
+
+requestUpdateEnvironment :: UpdateEnvironment -> TestTree
+requestUpdateEnvironment =
+  req
+    "UpdateEnvironment"
+    "fixture/UpdateEnvironment.yaml"
+
+requestUpdateEnvironmentMembership :: UpdateEnvironmentMembership -> TestTree
+requestUpdateEnvironmentMembership =
+  req
+    "UpdateEnvironmentMembership"
+    "fixture/UpdateEnvironmentMembership.yaml"
+
+-- Responses
+
+responseCreateEnvironmentEC2 :: CreateEnvironmentEC2Response -> TestTree
+responseCreateEnvironmentEC2 =
+  res
+    "CreateEnvironmentEC2Response"
+    "fixture/CreateEnvironmentEC2Response.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEnvironmentEC2)
+
+responseCreateEnvironmentMembership :: CreateEnvironmentMembershipResponse -> TestTree
+responseCreateEnvironmentMembership =
+  res
+    "CreateEnvironmentMembershipResponse"
+    "fixture/CreateEnvironmentMembershipResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateEnvironmentMembership)
+
+responseDeleteEnvironment :: DeleteEnvironmentResponse -> TestTree
+responseDeleteEnvironment =
+  res
+    "DeleteEnvironmentResponse"
+    "fixture/DeleteEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEnvironment)
+
+responseDeleteEnvironmentMembership :: DeleteEnvironmentMembershipResponse -> TestTree
+responseDeleteEnvironmentMembership =
+  res
+    "DeleteEnvironmentMembershipResponse"
+    "fixture/DeleteEnvironmentMembershipResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteEnvironmentMembership)
+
+responseDescribeEnvironmentMemberships :: DescribeEnvironmentMembershipsResponse -> TestTree
+responseDescribeEnvironmentMemberships =
+  res
+    "DescribeEnvironmentMembershipsResponse"
+    "fixture/DescribeEnvironmentMembershipsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeEnvironmentMemberships)
+
+responseDescribeEnvironmentStatus :: DescribeEnvironmentStatusResponse -> TestTree
+responseDescribeEnvironmentStatus =
+  res
+    "DescribeEnvironmentStatusResponse"
+    "fixture/DescribeEnvironmentStatusResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeEnvironmentStatus)
+
+responseDescribeEnvironments :: DescribeEnvironmentsResponse -> TestTree
+responseDescribeEnvironments =
+  res
+    "DescribeEnvironmentsResponse"
+    "fixture/DescribeEnvironmentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeEnvironments)
+
+responseListEnvironments :: ListEnvironmentsResponse -> TestTree
+responseListEnvironments =
+  res
+    "ListEnvironmentsResponse"
+    "fixture/ListEnvironmentsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListEnvironments)
+
+responseListTagsForResource :: ListTagsForResourceResponse -> TestTree
+responseListTagsForResource =
+  res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListTagsForResource)
+
+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)
+
+responseUpdateEnvironment :: UpdateEnvironmentResponse -> TestTree
+responseUpdateEnvironment =
+  res
+    "UpdateEnvironmentResponse"
+    "fixture/UpdateEnvironmentResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEnvironment)
+
+responseUpdateEnvironmentMembership :: UpdateEnvironmentMembershipResponse -> TestTree
+responseUpdateEnvironmentMembership =
+  res
+    "UpdateEnvironmentMembershipResponse"
+    "fixture/UpdateEnvironmentMembershipResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateEnvironmentMembership)
