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 @2009-04-15@ 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.SDB](http://hackage.haskell.org/package/amazonka-sdb/docs/Network-AWS-SDB.html)
+See [Amazonka.SDB](http://hackage.haskell.org/package/amazonka-sdb/docs/Amazonka-SDB.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-sdb.cabal b/amazonka-sdb.cabal
--- a/amazonka-sdb.cabal
+++ b/amazonka-sdb.cabal
@@ -1,95 +1,99 @@
-name:                  amazonka-sdb
-version:               1.6.1
-synopsis:              Amazon SimpleDB 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-sdb
+version:            2.0
+synopsis:           Amazon SimpleDB 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.SDB" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2009-04-15@ 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.SDB.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.SDB" 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-sdb
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-sdb
 
 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.SDB
-        , Network.AWS.SDB.BatchDeleteAttributes
-        , Network.AWS.SDB.BatchPutAttributes
-        , Network.AWS.SDB.CreateDomain
-        , Network.AWS.SDB.DeleteAttributes
-        , Network.AWS.SDB.DeleteDomain
-        , Network.AWS.SDB.DomainMetadata
-        , Network.AWS.SDB.GetAttributes
-        , Network.AWS.SDB.ListDomains
-        , Network.AWS.SDB.PutAttributes
-        , Network.AWS.SDB.Select
-        , Network.AWS.SDB.Types
-        , Network.AWS.SDB.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.SDB.Types.Product
-        , Network.AWS.SDB.Types.Sum
+  exposed-modules:
+    Amazonka.SDB
+    Amazonka.SDB.BatchDeleteAttributes
+    Amazonka.SDB.BatchPutAttributes
+    Amazonka.SDB.CreateDomain
+    Amazonka.SDB.DeleteAttributes
+    Amazonka.SDB.DeleteDomain
+    Amazonka.SDB.DomainMetadata
+    Amazonka.SDB.GetAttributes
+    Amazonka.SDB.Lens
+    Amazonka.SDB.ListDomains
+    Amazonka.SDB.PutAttributes
+    Amazonka.SDB.Select
+    Amazonka.SDB.Types
+    Amazonka.SDB.Types.Attribute
+    Amazonka.SDB.Types.DeletableItem
+    Amazonka.SDB.Types.Item
+    Amazonka.SDB.Types.ReplaceableAttribute
+    Amazonka.SDB.Types.ReplaceableItem
+    Amazonka.SDB.Types.UpdateCondition
+    Amazonka.SDB.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-sdb-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.SDB
-        , Test.AWS.Gen.SDB
-        , Test.AWS.SDB.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.Gen.SDB
+    Test.Amazonka.SDB
+    Test.Amazonka.SDB.Internal
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-sdb
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-sdb
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/BatchDeleteAttributes.yaml b/fixture/BatchDeleteAttributes.yaml
--- a/fixture/BatchDeleteAttributes.yaml
+++ b/fixture/BatchDeleteAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sdb/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sdb.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/BatchPutAttributes.yaml b/fixture/BatchPutAttributes.yaml
--- a/fixture/BatchPutAttributes.yaml
+++ b/fixture/BatchPutAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sdb/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sdb.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/CreateDomain.yaml b/fixture/CreateDomain.yaml
--- a/fixture/CreateDomain.yaml
+++ b/fixture/CreateDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sdb/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sdb.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/DeleteAttributes.yaml b/fixture/DeleteAttributes.yaml
--- a/fixture/DeleteAttributes.yaml
+++ b/fixture/DeleteAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sdb/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sdb.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/DeleteDomain.yaml b/fixture/DeleteDomain.yaml
--- a/fixture/DeleteDomain.yaml
+++ b/fixture/DeleteDomain.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sdb/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sdb.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/DomainMetadata.yaml b/fixture/DomainMetadata.yaml
--- a/fixture/DomainMetadata.yaml
+++ b/fixture/DomainMetadata.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sdb/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sdb.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/GetAttributes.yaml b/fixture/GetAttributes.yaml
--- a/fixture/GetAttributes.yaml
+++ b/fixture/GetAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sdb/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sdb.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/ListDomains.yaml b/fixture/ListDomains.yaml
--- a/fixture/ListDomains.yaml
+++ b/fixture/ListDomains.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sdb/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sdb.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/PutAttributes.yaml b/fixture/PutAttributes.yaml
--- a/fixture/PutAttributes.yaml
+++ b/fixture/PutAttributes.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sdb/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sdb.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/Select.yaml b/fixture/Select.yaml
--- a/fixture/Select.yaml
+++ b/fixture/Select.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sdb/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sdb.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/gen/Amazonka/SDB.hs b/gen/Amazonka/SDB.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB.hs
@@ -0,0 +1,222 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.SDB
+-- 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 @2009-04-15@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- Amazon SimpleDB is a web service providing the core database functions
+-- of data indexing and querying in the cloud. By offloading the time and
+-- effort associated with building and operating a web-scale database,
+-- SimpleDB provides developers the freedom to focus on application
+-- development.
+--
+-- A traditional, clustered relational database requires a sizable upfront
+-- capital outlay, is complex to design, and often requires extensive and
+-- repetitive database administration. Amazon SimpleDB is dramatically
+-- simpler, requiring no schema, automatically indexing your data and
+-- providing a simple API for storage and access. This approach eliminates
+-- the administrative burden of data modeling, index maintenance, and
+-- performance tuning. Developers gain access to this functionality within
+-- Amazon\'s proven computing environment, are able to scale instantly, and
+-- pay only for what they use.
+--
+-- Visit <http://aws.amazon.com/simpledb/> for more information.
+module Amazonka.SDB
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** AttributeDoesNotExist
+    _AttributeDoesNotExist,
+
+    -- ** DuplicateItemName
+    _DuplicateItemName,
+
+    -- ** InvalidNextToken
+    _InvalidNextToken,
+
+    -- ** InvalidNumberPredicates
+    _InvalidNumberPredicates,
+
+    -- ** InvalidNumberValueTests
+    _InvalidNumberValueTests,
+
+    -- ** InvalidParameterValue
+    _InvalidParameterValue,
+
+    -- ** InvalidQueryExpression
+    _InvalidQueryExpression,
+
+    -- ** MissingParameter
+    _MissingParameter,
+
+    -- ** NoSuchDomain
+    _NoSuchDomain,
+
+    -- ** NumberDomainAttributesExceeded
+    _NumberDomainAttributesExceeded,
+
+    -- ** NumberDomainBytesExceeded
+    _NumberDomainBytesExceeded,
+
+    -- ** NumberDomainsExceeded
+    _NumberDomainsExceeded,
+
+    -- ** NumberItemAttributesExceeded
+    _NumberItemAttributesExceeded,
+
+    -- ** NumberSubmittedAttributesExceeded
+    _NumberSubmittedAttributesExceeded,
+
+    -- ** NumberSubmittedItemsExceeded
+    _NumberSubmittedItemsExceeded,
+
+    -- ** RequestTimeout
+    _RequestTimeout,
+
+    -- ** TooManyRequestedAttributes
+    _TooManyRequestedAttributes,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** BatchDeleteAttributes
+    BatchDeleteAttributes (BatchDeleteAttributes'),
+    newBatchDeleteAttributes,
+    BatchDeleteAttributesResponse (BatchDeleteAttributesResponse'),
+    newBatchDeleteAttributesResponse,
+
+    -- ** BatchPutAttributes
+    BatchPutAttributes (BatchPutAttributes'),
+    newBatchPutAttributes,
+    BatchPutAttributesResponse (BatchPutAttributesResponse'),
+    newBatchPutAttributesResponse,
+
+    -- ** CreateDomain
+    CreateDomain (CreateDomain'),
+    newCreateDomain,
+    CreateDomainResponse (CreateDomainResponse'),
+    newCreateDomainResponse,
+
+    -- ** DeleteAttributes
+    DeleteAttributes (DeleteAttributes'),
+    newDeleteAttributes,
+    DeleteAttributesResponse (DeleteAttributesResponse'),
+    newDeleteAttributesResponse,
+
+    -- ** DeleteDomain
+    DeleteDomain (DeleteDomain'),
+    newDeleteDomain,
+    DeleteDomainResponse (DeleteDomainResponse'),
+    newDeleteDomainResponse,
+
+    -- ** DomainMetadata
+    DomainMetadata (DomainMetadata'),
+    newDomainMetadata,
+    DomainMetadataResponse (DomainMetadataResponse'),
+    newDomainMetadataResponse,
+
+    -- ** GetAttributes
+    GetAttributes (GetAttributes'),
+    newGetAttributes,
+    GetAttributesResponse (GetAttributesResponse'),
+    newGetAttributesResponse,
+
+    -- ** ListDomains (Paginated)
+    ListDomains (ListDomains'),
+    newListDomains,
+    ListDomainsResponse (ListDomainsResponse'),
+    newListDomainsResponse,
+
+    -- ** PutAttributes
+    PutAttributes (PutAttributes'),
+    newPutAttributes,
+    PutAttributesResponse (PutAttributesResponse'),
+    newPutAttributesResponse,
+
+    -- ** Select (Paginated)
+    Select (Select'),
+    newSelect,
+    SelectResponse (SelectResponse'),
+    newSelectResponse,
+
+    -- * Types
+
+    -- ** Attribute
+    Attribute (Attribute'),
+    newAttribute,
+
+    -- ** DeletableItem
+    DeletableItem (DeletableItem'),
+    newDeletableItem,
+
+    -- ** Item
+    Item (Item'),
+    newItem,
+
+    -- ** ReplaceableAttribute
+    ReplaceableAttribute (ReplaceableAttribute'),
+    newReplaceableAttribute,
+
+    -- ** ReplaceableItem
+    ReplaceableItem (ReplaceableItem'),
+    newReplaceableItem,
+
+    -- ** UpdateCondition
+    UpdateCondition (UpdateCondition'),
+    newUpdateCondition,
+  )
+where
+
+import Amazonka.SDB.BatchDeleteAttributes
+import Amazonka.SDB.BatchPutAttributes
+import Amazonka.SDB.CreateDomain
+import Amazonka.SDB.DeleteAttributes
+import Amazonka.SDB.DeleteDomain
+import Amazonka.SDB.DomainMetadata
+import Amazonka.SDB.GetAttributes
+import Amazonka.SDB.Lens
+import Amazonka.SDB.ListDomains
+import Amazonka.SDB.PutAttributes
+import Amazonka.SDB.Select
+import Amazonka.SDB.Types
+import Amazonka.SDB.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 'SDB'.
+
+-- $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/SDB/BatchDeleteAttributes.hs b/gen/Amazonka/SDB/BatchDeleteAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/BatchDeleteAttributes.hs
@@ -0,0 +1,145 @@
+{-# 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.SDB.BatchDeleteAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Performs multiple DeleteAttributes operations in a single call, which
+-- reduces round trips and latencies. This enables Amazon SimpleDB to
+-- optimize requests, which generally yields better throughput.
+--
+-- The following limitations are enforced for this operation:
+--
+-- -   1 MB request size
+-- -   25 item limit per BatchDeleteAttributes operation
+module Amazonka.SDB.BatchDeleteAttributes
+  ( -- * Creating a Request
+    BatchDeleteAttributes (..),
+    newBatchDeleteAttributes,
+
+    -- * Request Lenses
+    batchDeleteAttributes_domainName,
+    batchDeleteAttributes_items,
+
+    -- * Destructuring the Response
+    BatchDeleteAttributesResponse (..),
+    newBatchDeleteAttributesResponse,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SDB.Types
+
+-- | /See:/ 'newBatchDeleteAttributes' smart constructor.
+data BatchDeleteAttributes = BatchDeleteAttributes'
+  { -- | The name of the domain in which the attributes are being deleted.
+    domainName :: Prelude.Text,
+    -- | A list of items on which to perform the operation.
+    items :: [DeletableItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'batchDeleteAttributes_domainName' - The name of the domain in which the attributes are being deleted.
+--
+-- 'items', 'batchDeleteAttributes_items' - A list of items on which to perform the operation.
+newBatchDeleteAttributes ::
+  -- | 'domainName'
+  Prelude.Text ->
+  BatchDeleteAttributes
+newBatchDeleteAttributes pDomainName_ =
+  BatchDeleteAttributes'
+    { domainName = pDomainName_,
+      items = Prelude.mempty
+    }
+
+-- | The name of the domain in which the attributes are being deleted.
+batchDeleteAttributes_domainName :: Lens.Lens' BatchDeleteAttributes Prelude.Text
+batchDeleteAttributes_domainName = Lens.lens (\BatchDeleteAttributes' {domainName} -> domainName) (\s@BatchDeleteAttributes' {} a -> s {domainName = a} :: BatchDeleteAttributes)
+
+-- | A list of items on which to perform the operation.
+batchDeleteAttributes_items :: Lens.Lens' BatchDeleteAttributes [DeletableItem]
+batchDeleteAttributes_items = Lens.lens (\BatchDeleteAttributes' {items} -> items) (\s@BatchDeleteAttributes' {} a -> s {items = a} :: BatchDeleteAttributes) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchDeleteAttributes where
+  type
+    AWSResponse BatchDeleteAttributes =
+      BatchDeleteAttributesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull BatchDeleteAttributesResponse'
+
+instance Prelude.Hashable BatchDeleteAttributes where
+  hashWithSalt _salt BatchDeleteAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` items
+
+instance Prelude.NFData BatchDeleteAttributes where
+  rnf BatchDeleteAttributes' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf items
+
+instance Data.ToHeaders BatchDeleteAttributes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath BatchDeleteAttributes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchDeleteAttributes where
+  toQuery BatchDeleteAttributes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("BatchDeleteAttributes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2009-04-15" :: Prelude.ByteString),
+        "DomainName" Data.=: domainName,
+        Data.toQueryList "Item" items
+      ]
+
+-- | /See:/ 'newBatchDeleteAttributesResponse' smart constructor.
+data BatchDeleteAttributesResponse = BatchDeleteAttributesResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchDeleteAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newBatchDeleteAttributesResponse ::
+  BatchDeleteAttributesResponse
+newBatchDeleteAttributesResponse =
+  BatchDeleteAttributesResponse'
+
+instance Prelude.NFData BatchDeleteAttributesResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/SDB/BatchPutAttributes.hs b/gen/Amazonka/SDB/BatchPutAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/BatchPutAttributes.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SDB.BatchPutAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The @BatchPutAttributes@ operation creates or replaces attributes within
+-- one or more items. By using this operation, the client can perform
+-- multiple PutAttribute operation with a single call. This helps yield
+-- savings in round trips and latencies, enabling Amazon SimpleDB to
+-- optimize requests and generally produce better throughput.
+--
+-- The client may specify the item name with the @Item.X.ItemName@
+-- parameter. The client may specify new attributes using a combination of
+-- the @Item.X.Attribute.Y.Name@ and @Item.X.Attribute.Y.Value@ parameters.
+-- The client may specify the first attribute for the first item using the
+-- parameters @Item.0.Attribute.0.Name@ and @Item.0.Attribute.0.Value@, and
+-- for the second attribute for the first item by the parameters
+-- @Item.0.Attribute.1.Name@ and @Item.0.Attribute.1.Value@, and so on.
+--
+-- Attributes are uniquely identified within an item by their name\/value
+-- combination. For example, a single item can have the attributes
+-- @{ \"first_name\", \"first_value\" }@ and
+-- @{ \"first_name\", \"second_value\" }@. However, it cannot have two
+-- attribute instances where both the @Item.X.Attribute.Y.Name@ and
+-- @Item.X.Attribute.Y.Value@ are the same.
+--
+-- Optionally, the requester can supply the @Replace@ parameter for each
+-- individual value. Setting this value to @true@ will cause the new
+-- attribute values to replace the existing attribute values. For example,
+-- if an item @I@ has the attributes @{ \'a\', \'1\' }, { \'b\', \'2\'}@
+-- and @{ \'b\', \'3\' }@ and the requester does a BatchPutAttributes of
+-- @{\'I\', \'b\', \'4\' }@ with the Replace parameter set to true, the
+-- final attributes of the item will be @{ \'a\', \'1\' }@ and
+-- @{ \'b\', \'4\' }@, replacing the previous values of the \'b\' attribute
+-- with the new value.
+--
+-- This operation is vulnerable to exceeding the maximum URL size when
+-- making a REST request using the HTTP GET method. This operation does not
+-- support conditions using @Expected.X.Name@, @Expected.X.Value@, or
+-- @Expected.X.Exists@.
+--
+-- You can execute multiple @BatchPutAttributes@ operations and other
+-- operations in parallel. However, large numbers of concurrent
+-- @BatchPutAttributes@ calls can result in Service Unavailable (503)
+-- responses.
+--
+-- The following limitations are enforced for this operation:
+--
+-- -   256 attribute name-value pairs per item
+-- -   1 MB request size
+-- -   1 billion attributes per domain
+-- -   10 GB of total user data storage per domain
+-- -   25 item limit per @BatchPutAttributes@ operation
+module Amazonka.SDB.BatchPutAttributes
+  ( -- * Creating a Request
+    BatchPutAttributes (..),
+    newBatchPutAttributes,
+
+    -- * Request Lenses
+    batchPutAttributes_domainName,
+    batchPutAttributes_items,
+
+    -- * Destructuring the Response
+    BatchPutAttributesResponse (..),
+    newBatchPutAttributesResponse,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SDB.Types
+
+-- | /See:/ 'newBatchPutAttributes' smart constructor.
+data BatchPutAttributes = BatchPutAttributes'
+  { -- | The name of the domain in which the attributes are being stored.
+    domainName :: Prelude.Text,
+    -- | A list of items on which to perform the operation.
+    items :: [ReplaceableItem]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'batchPutAttributes_domainName' - The name of the domain in which the attributes are being stored.
+--
+-- 'items', 'batchPutAttributes_items' - A list of items on which to perform the operation.
+newBatchPutAttributes ::
+  -- | 'domainName'
+  Prelude.Text ->
+  BatchPutAttributes
+newBatchPutAttributes pDomainName_ =
+  BatchPutAttributes'
+    { domainName = pDomainName_,
+      items = Prelude.mempty
+    }
+
+-- | The name of the domain in which the attributes are being stored.
+batchPutAttributes_domainName :: Lens.Lens' BatchPutAttributes Prelude.Text
+batchPutAttributes_domainName = Lens.lens (\BatchPutAttributes' {domainName} -> domainName) (\s@BatchPutAttributes' {} a -> s {domainName = a} :: BatchPutAttributes)
+
+-- | A list of items on which to perform the operation.
+batchPutAttributes_items :: Lens.Lens' BatchPutAttributes [ReplaceableItem]
+batchPutAttributes_items = Lens.lens (\BatchPutAttributes' {items} -> items) (\s@BatchPutAttributes' {} a -> s {items = a} :: BatchPutAttributes) Prelude.. Lens.coerced
+
+instance Core.AWSRequest BatchPutAttributes where
+  type
+    AWSResponse BatchPutAttributes =
+      BatchPutAttributesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull BatchPutAttributesResponse'
+
+instance Prelude.Hashable BatchPutAttributes where
+  hashWithSalt _salt BatchPutAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` items
+
+instance Prelude.NFData BatchPutAttributes where
+  rnf BatchPutAttributes' {..} =
+    Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf items
+
+instance Data.ToHeaders BatchPutAttributes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath BatchPutAttributes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery BatchPutAttributes where
+  toQuery BatchPutAttributes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("BatchPutAttributes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2009-04-15" :: Prelude.ByteString),
+        "DomainName" Data.=: domainName,
+        Data.toQueryList "Item" items
+      ]
+
+-- | /See:/ 'newBatchPutAttributesResponse' smart constructor.
+data BatchPutAttributesResponse = BatchPutAttributesResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'BatchPutAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newBatchPutAttributesResponse ::
+  BatchPutAttributesResponse
+newBatchPutAttributesResponse =
+  BatchPutAttributesResponse'
+
+instance Prelude.NFData BatchPutAttributesResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/SDB/CreateDomain.hs b/gen/Amazonka/SDB/CreateDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/CreateDomain.hs
@@ -0,0 +1,131 @@
+{-# 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.SDB.CreateDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The @CreateDomain@ operation creates a new domain. The domain name
+-- should be unique among the domains associated with the Access Key ID
+-- provided in the request. The @CreateDomain@ operation may take 10 or
+-- more seconds to complete.
+--
+-- The client can create up to 100 domains per account.
+--
+-- If the client requires additional domains, go to
+-- <http://aws.amazon.com/contact-us/simpledb-limit-request/>.
+module Amazonka.SDB.CreateDomain
+  ( -- * Creating a Request
+    CreateDomain (..),
+    newCreateDomain,
+
+    -- * Request Lenses
+    createDomain_domainName,
+
+    -- * Destructuring the Response
+    CreateDomainResponse (..),
+    newCreateDomainResponse,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SDB.Types
+
+-- | /See:/ 'newCreateDomain' smart constructor.
+data CreateDomain = CreateDomain'
+  { -- | The name of the domain to create. The name can range between 3 and 255
+    -- characters and can contain the following characters: a-z, A-Z, 0-9,
+    -- \'_\', \'-\', and \'.\'.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'createDomain_domainName' - The name of the domain to create. The name can range between 3 and 255
+-- characters and can contain the following characters: a-z, A-Z, 0-9,
+-- \'_\', \'-\', and \'.\'.
+newCreateDomain ::
+  -- | 'domainName'
+  Prelude.Text ->
+  CreateDomain
+newCreateDomain pDomainName_ =
+  CreateDomain' {domainName = pDomainName_}
+
+-- | The name of the domain to create. The name can range between 3 and 255
+-- characters and can contain the following characters: a-z, A-Z, 0-9,
+-- \'_\', \'-\', and \'.\'.
+createDomain_domainName :: Lens.Lens' CreateDomain Prelude.Text
+createDomain_domainName = Lens.lens (\CreateDomain' {domainName} -> domainName) (\s@CreateDomain' {} a -> s {domainName = a} :: CreateDomain)
+
+instance Core.AWSRequest CreateDomain where
+  type AWSResponse CreateDomain = CreateDomainResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response = Response.receiveNull CreateDomainResponse'
+
+instance Prelude.Hashable CreateDomain where
+  hashWithSalt _salt CreateDomain' {..} =
+    _salt `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData CreateDomain where
+  rnf CreateDomain' {..} = Prelude.rnf domainName
+
+instance Data.ToHeaders CreateDomain where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath CreateDomain where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateDomain where
+  toQuery CreateDomain' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("CreateDomain" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2009-04-15" :: Prelude.ByteString),
+        "DomainName" Data.=: domainName
+      ]
+
+-- | /See:/ 'newCreateDomainResponse' smart constructor.
+data CreateDomainResponse = CreateDomainResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newCreateDomainResponse ::
+  CreateDomainResponse
+newCreateDomainResponse = CreateDomainResponse'
+
+instance Prelude.NFData CreateDomainResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/SDB/DeleteAttributes.hs b/gen/Amazonka/SDB/DeleteAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/DeleteAttributes.hs
@@ -0,0 +1,193 @@
+{-# 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.SDB.DeleteAttributes
+-- 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 one or more attributes associated with an item. If all
+-- attributes of the item are deleted, the item is deleted.
+--
+-- @DeleteAttributes@ is an idempotent operation; running it multiple times
+-- on the same item or attribute does not result in an error response.
+--
+-- Because Amazon SimpleDB makes multiple copies of item data and uses an
+-- eventual consistency update model, performing a GetAttributes or Select
+-- operation (read) immediately after a @DeleteAttributes@ or PutAttributes
+-- operation (write) might not return updated item data.
+module Amazonka.SDB.DeleteAttributes
+  ( -- * Creating a Request
+    DeleteAttributes (..),
+    newDeleteAttributes,
+
+    -- * Request Lenses
+    deleteAttributes_attributes,
+    deleteAttributes_expected,
+    deleteAttributes_domainName,
+    deleteAttributes_itemName,
+
+    -- * Destructuring the Response
+    DeleteAttributesResponse (..),
+    newDeleteAttributesResponse,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SDB.Types
+
+-- | /See:/ 'newDeleteAttributes' smart constructor.
+data DeleteAttributes = DeleteAttributes'
+  { -- | A list of Attributes. Similar to columns on a spreadsheet, attributes
+    -- represent categories of data that can be assigned to items.
+    attributes :: Prelude.Maybe [Attribute],
+    -- | The update condition which, if specified, determines whether the
+    -- specified attributes will be deleted or not. The update condition must
+    -- be satisfied in order for this request to be processed and the
+    -- attributes to be deleted.
+    expected :: Prelude.Maybe UpdateCondition,
+    -- | The name of the domain in which to perform the operation.
+    domainName :: Prelude.Text,
+    -- | The name of the item. Similar to rows on a spreadsheet, items represent
+    -- individual objects that contain one or more value-attribute pairs.
+    itemName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'deleteAttributes_attributes' - A list of Attributes. Similar to columns on a spreadsheet, attributes
+-- represent categories of data that can be assigned to items.
+--
+-- 'expected', 'deleteAttributes_expected' - The update condition which, if specified, determines whether the
+-- specified attributes will be deleted or not. The update condition must
+-- be satisfied in order for this request to be processed and the
+-- attributes to be deleted.
+--
+-- 'domainName', 'deleteAttributes_domainName' - The name of the domain in which to perform the operation.
+--
+-- 'itemName', 'deleteAttributes_itemName' - The name of the item. Similar to rows on a spreadsheet, items represent
+-- individual objects that contain one or more value-attribute pairs.
+newDeleteAttributes ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'itemName'
+  Prelude.Text ->
+  DeleteAttributes
+newDeleteAttributes pDomainName_ pItemName_ =
+  DeleteAttributes'
+    { attributes = Prelude.Nothing,
+      expected = Prelude.Nothing,
+      domainName = pDomainName_,
+      itemName = pItemName_
+    }
+
+-- | A list of Attributes. Similar to columns on a spreadsheet, attributes
+-- represent categories of data that can be assigned to items.
+deleteAttributes_attributes :: Lens.Lens' DeleteAttributes (Prelude.Maybe [Attribute])
+deleteAttributes_attributes = Lens.lens (\DeleteAttributes' {attributes} -> attributes) (\s@DeleteAttributes' {} a -> s {attributes = a} :: DeleteAttributes) Prelude.. Lens.mapping Lens.coerced
+
+-- | The update condition which, if specified, determines whether the
+-- specified attributes will be deleted or not. The update condition must
+-- be satisfied in order for this request to be processed and the
+-- attributes to be deleted.
+deleteAttributes_expected :: Lens.Lens' DeleteAttributes (Prelude.Maybe UpdateCondition)
+deleteAttributes_expected = Lens.lens (\DeleteAttributes' {expected} -> expected) (\s@DeleteAttributes' {} a -> s {expected = a} :: DeleteAttributes)
+
+-- | The name of the domain in which to perform the operation.
+deleteAttributes_domainName :: Lens.Lens' DeleteAttributes Prelude.Text
+deleteAttributes_domainName = Lens.lens (\DeleteAttributes' {domainName} -> domainName) (\s@DeleteAttributes' {} a -> s {domainName = a} :: DeleteAttributes)
+
+-- | The name of the item. Similar to rows on a spreadsheet, items represent
+-- individual objects that contain one or more value-attribute pairs.
+deleteAttributes_itemName :: Lens.Lens' DeleteAttributes Prelude.Text
+deleteAttributes_itemName = Lens.lens (\DeleteAttributes' {itemName} -> itemName) (\s@DeleteAttributes' {} a -> s {itemName = a} :: DeleteAttributes)
+
+instance Core.AWSRequest DeleteAttributes where
+  type
+    AWSResponse DeleteAttributes =
+      DeleteAttributesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull DeleteAttributesResponse'
+
+instance Prelude.Hashable DeleteAttributes where
+  hashWithSalt _salt DeleteAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` expected
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` itemName
+
+instance Prelude.NFData DeleteAttributes where
+  rnf DeleteAttributes' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf expected
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf itemName
+
+instance Data.ToHeaders DeleteAttributes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteAttributes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteAttributes where
+  toQuery DeleteAttributes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteAttributes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2009-04-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "Attribute"
+              Prelude.<$> attributes
+          ),
+        "Expected" Data.=: expected,
+        "DomainName" Data.=: domainName,
+        "ItemName" Data.=: itemName
+      ]
+
+-- | /See:/ 'newDeleteAttributesResponse' smart constructor.
+data DeleteAttributesResponse = DeleteAttributesResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteAttributesResponse ::
+  DeleteAttributesResponse
+newDeleteAttributesResponse =
+  DeleteAttributesResponse'
+
+instance Prelude.NFData DeleteAttributesResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/SDB/DeleteDomain.hs b/gen/Amazonka/SDB/DeleteDomain.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/DeleteDomain.hs
@@ -0,0 +1,119 @@
+{-# 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.SDB.DeleteDomain
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The @DeleteDomain@ operation deletes a domain. Any items (and their
+-- attributes) in the domain are deleted as well. The @DeleteDomain@
+-- operation might take 10 or more seconds to complete.
+module Amazonka.SDB.DeleteDomain
+  ( -- * Creating a Request
+    DeleteDomain (..),
+    newDeleteDomain,
+
+    -- * Request Lenses
+    deleteDomain_domainName,
+
+    -- * Destructuring the Response
+    DeleteDomainResponse (..),
+    newDeleteDomainResponse,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SDB.Types
+
+-- | /See:/ 'newDeleteDomain' smart constructor.
+data DeleteDomain = DeleteDomain'
+  { -- | The name of the domain to delete.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomain' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'deleteDomain_domainName' - The name of the domain to delete.
+newDeleteDomain ::
+  -- | 'domainName'
+  Prelude.Text ->
+  DeleteDomain
+newDeleteDomain pDomainName_ =
+  DeleteDomain' {domainName = pDomainName_}
+
+-- | The name of the domain to delete.
+deleteDomain_domainName :: Lens.Lens' DeleteDomain Prelude.Text
+deleteDomain_domainName = Lens.lens (\DeleteDomain' {domainName} -> domainName) (\s@DeleteDomain' {} a -> s {domainName = a} :: DeleteDomain)
+
+instance Core.AWSRequest DeleteDomain where
+  type AWSResponse DeleteDomain = DeleteDomainResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response = Response.receiveNull DeleteDomainResponse'
+
+instance Prelude.Hashable DeleteDomain where
+  hashWithSalt _salt DeleteDomain' {..} =
+    _salt `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DeleteDomain where
+  rnf DeleteDomain' {..} = Prelude.rnf domainName
+
+instance Data.ToHeaders DeleteDomain where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DeleteDomain where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteDomain where
+  toQuery DeleteDomain' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DeleteDomain" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2009-04-15" :: Prelude.ByteString),
+        "DomainName" Data.=: domainName
+      ]
+
+-- | /See:/ 'newDeleteDomainResponse' smart constructor.
+data DeleteDomainResponse = DeleteDomainResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteDomainResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteDomainResponse ::
+  DeleteDomainResponse
+newDeleteDomainResponse = DeleteDomainResponse'
+
+instance Prelude.NFData DeleteDomainResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/SDB/DomainMetadata.hs b/gen/Amazonka/SDB/DomainMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/DomainMetadata.hs
@@ -0,0 +1,231 @@
+{-# 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.SDB.DomainMetadata
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns information about the domain, including when the domain was
+-- created, the number of items and attributes in the domain, and the size
+-- of the attribute names and values.
+module Amazonka.SDB.DomainMetadata
+  ( -- * Creating a Request
+    DomainMetadata (..),
+    newDomainMetadata,
+
+    -- * Request Lenses
+    domainMetadata_domainName,
+
+    -- * Destructuring the Response
+    DomainMetadataResponse (..),
+    newDomainMetadataResponse,
+
+    -- * Response Lenses
+    domainMetadataResponse_attributeNameCount,
+    domainMetadataResponse_attributeNamesSizeBytes,
+    domainMetadataResponse_attributeValueCount,
+    domainMetadataResponse_attributeValuesSizeBytes,
+    domainMetadataResponse_itemCount,
+    domainMetadataResponse_itemNamesSizeBytes,
+    domainMetadataResponse_timestamp,
+    domainMetadataResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SDB.Types
+
+-- | /See:/ 'newDomainMetadata' smart constructor.
+data DomainMetadata = DomainMetadata'
+  { -- | The name of the domain for which to display the metadata of.
+    domainName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainMetadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainName', 'domainMetadata_domainName' - The name of the domain for which to display the metadata of.
+newDomainMetadata ::
+  -- | 'domainName'
+  Prelude.Text ->
+  DomainMetadata
+newDomainMetadata pDomainName_ =
+  DomainMetadata' {domainName = pDomainName_}
+
+-- | The name of the domain for which to display the metadata of.
+domainMetadata_domainName :: Lens.Lens' DomainMetadata Prelude.Text
+domainMetadata_domainName = Lens.lens (\DomainMetadata' {domainName} -> domainName) (\s@DomainMetadata' {} a -> s {domainName = a} :: DomainMetadata)
+
+instance Core.AWSRequest DomainMetadata where
+  type
+    AWSResponse DomainMetadata =
+      DomainMetadataResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXMLWrapper
+      "DomainMetadataResult"
+      ( \s h x ->
+          DomainMetadataResponse'
+            Prelude.<$> (x Data..@? "AttributeNameCount")
+            Prelude.<*> (x Data..@? "AttributeNamesSizeBytes")
+            Prelude.<*> (x Data..@? "AttributeValueCount")
+            Prelude.<*> (x Data..@? "AttributeValuesSizeBytes")
+            Prelude.<*> (x Data..@? "ItemCount")
+            Prelude.<*> (x Data..@? "ItemNamesSizeBytes")
+            Prelude.<*> (x Data..@? "Timestamp")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DomainMetadata where
+  hashWithSalt _salt DomainMetadata' {..} =
+    _salt `Prelude.hashWithSalt` domainName
+
+instance Prelude.NFData DomainMetadata where
+  rnf DomainMetadata' {..} = Prelude.rnf domainName
+
+instance Data.ToHeaders DomainMetadata where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath DomainMetadata where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DomainMetadata where
+  toQuery DomainMetadata' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("DomainMetadata" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2009-04-15" :: Prelude.ByteString),
+        "DomainName" Data.=: domainName
+      ]
+
+-- | /See:/ 'newDomainMetadataResponse' smart constructor.
+data DomainMetadataResponse = DomainMetadataResponse'
+  { -- | The number of unique attribute names in the domain.
+    attributeNameCount :: Prelude.Maybe Prelude.Int,
+    -- | The total size of all unique attribute names in the domain, in bytes.
+    attributeNamesSizeBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The number of all attribute name\/value pairs in the domain.
+    attributeValueCount :: Prelude.Maybe Prelude.Int,
+    -- | The total size of all attribute values in the domain, in bytes.
+    attributeValuesSizeBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The number of all items in the domain.
+    itemCount :: Prelude.Maybe Prelude.Int,
+    -- | The total size of all item names in the domain, in bytes.
+    itemNamesSizeBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The data and time when metadata was calculated, in Epoch (UNIX) seconds.
+    timestamp :: Prelude.Maybe Prelude.Int,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DomainMetadataResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeNameCount', 'domainMetadataResponse_attributeNameCount' - The number of unique attribute names in the domain.
+--
+-- 'attributeNamesSizeBytes', 'domainMetadataResponse_attributeNamesSizeBytes' - The total size of all unique attribute names in the domain, in bytes.
+--
+-- 'attributeValueCount', 'domainMetadataResponse_attributeValueCount' - The number of all attribute name\/value pairs in the domain.
+--
+-- 'attributeValuesSizeBytes', 'domainMetadataResponse_attributeValuesSizeBytes' - The total size of all attribute values in the domain, in bytes.
+--
+-- 'itemCount', 'domainMetadataResponse_itemCount' - The number of all items in the domain.
+--
+-- 'itemNamesSizeBytes', 'domainMetadataResponse_itemNamesSizeBytes' - The total size of all item names in the domain, in bytes.
+--
+-- 'timestamp', 'domainMetadataResponse_timestamp' - The data and time when metadata was calculated, in Epoch (UNIX) seconds.
+--
+-- 'httpStatus', 'domainMetadataResponse_httpStatus' - The response's http status code.
+newDomainMetadataResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DomainMetadataResponse
+newDomainMetadataResponse pHttpStatus_ =
+  DomainMetadataResponse'
+    { attributeNameCount =
+        Prelude.Nothing,
+      attributeNamesSizeBytes = Prelude.Nothing,
+      attributeValueCount = Prelude.Nothing,
+      attributeValuesSizeBytes = Prelude.Nothing,
+      itemCount = Prelude.Nothing,
+      itemNamesSizeBytes = Prelude.Nothing,
+      timestamp = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The number of unique attribute names in the domain.
+domainMetadataResponse_attributeNameCount :: Lens.Lens' DomainMetadataResponse (Prelude.Maybe Prelude.Int)
+domainMetadataResponse_attributeNameCount = Lens.lens (\DomainMetadataResponse' {attributeNameCount} -> attributeNameCount) (\s@DomainMetadataResponse' {} a -> s {attributeNameCount = a} :: DomainMetadataResponse)
+
+-- | The total size of all unique attribute names in the domain, in bytes.
+domainMetadataResponse_attributeNamesSizeBytes :: Lens.Lens' DomainMetadataResponse (Prelude.Maybe Prelude.Integer)
+domainMetadataResponse_attributeNamesSizeBytes = Lens.lens (\DomainMetadataResponse' {attributeNamesSizeBytes} -> attributeNamesSizeBytes) (\s@DomainMetadataResponse' {} a -> s {attributeNamesSizeBytes = a} :: DomainMetadataResponse)
+
+-- | The number of all attribute name\/value pairs in the domain.
+domainMetadataResponse_attributeValueCount :: Lens.Lens' DomainMetadataResponse (Prelude.Maybe Prelude.Int)
+domainMetadataResponse_attributeValueCount = Lens.lens (\DomainMetadataResponse' {attributeValueCount} -> attributeValueCount) (\s@DomainMetadataResponse' {} a -> s {attributeValueCount = a} :: DomainMetadataResponse)
+
+-- | The total size of all attribute values in the domain, in bytes.
+domainMetadataResponse_attributeValuesSizeBytes :: Lens.Lens' DomainMetadataResponse (Prelude.Maybe Prelude.Integer)
+domainMetadataResponse_attributeValuesSizeBytes = Lens.lens (\DomainMetadataResponse' {attributeValuesSizeBytes} -> attributeValuesSizeBytes) (\s@DomainMetadataResponse' {} a -> s {attributeValuesSizeBytes = a} :: DomainMetadataResponse)
+
+-- | The number of all items in the domain.
+domainMetadataResponse_itemCount :: Lens.Lens' DomainMetadataResponse (Prelude.Maybe Prelude.Int)
+domainMetadataResponse_itemCount = Lens.lens (\DomainMetadataResponse' {itemCount} -> itemCount) (\s@DomainMetadataResponse' {} a -> s {itemCount = a} :: DomainMetadataResponse)
+
+-- | The total size of all item names in the domain, in bytes.
+domainMetadataResponse_itemNamesSizeBytes :: Lens.Lens' DomainMetadataResponse (Prelude.Maybe Prelude.Integer)
+domainMetadataResponse_itemNamesSizeBytes = Lens.lens (\DomainMetadataResponse' {itemNamesSizeBytes} -> itemNamesSizeBytes) (\s@DomainMetadataResponse' {} a -> s {itemNamesSizeBytes = a} :: DomainMetadataResponse)
+
+-- | The data and time when metadata was calculated, in Epoch (UNIX) seconds.
+domainMetadataResponse_timestamp :: Lens.Lens' DomainMetadataResponse (Prelude.Maybe Prelude.Int)
+domainMetadataResponse_timestamp = Lens.lens (\DomainMetadataResponse' {timestamp} -> timestamp) (\s@DomainMetadataResponse' {} a -> s {timestamp = a} :: DomainMetadataResponse)
+
+-- | The response's http status code.
+domainMetadataResponse_httpStatus :: Lens.Lens' DomainMetadataResponse Prelude.Int
+domainMetadataResponse_httpStatus = Lens.lens (\DomainMetadataResponse' {httpStatus} -> httpStatus) (\s@DomainMetadataResponse' {} a -> s {httpStatus = a} :: DomainMetadataResponse)
+
+instance Prelude.NFData DomainMetadataResponse where
+  rnf DomainMetadataResponse' {..} =
+    Prelude.rnf attributeNameCount
+      `Prelude.seq` Prelude.rnf attributeNamesSizeBytes
+      `Prelude.seq` Prelude.rnf attributeValueCount
+      `Prelude.seq` Prelude.rnf attributeValuesSizeBytes
+      `Prelude.seq` Prelude.rnf itemCount
+      `Prelude.seq` Prelude.rnf itemNamesSizeBytes
+      `Prelude.seq` Prelude.rnf timestamp
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SDB/GetAttributes.hs b/gen/Amazonka/SDB/GetAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/GetAttributes.hs
@@ -0,0 +1,223 @@
+{-# 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.SDB.GetAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns all of the attributes associated with the specified item.
+-- Optionally, the attributes returned can be limited to one or more
+-- attributes by specifying an attribute name parameter.
+--
+-- If the item does not exist on the replica that was accessed for this
+-- operation, an empty set is returned. The system does not return an error
+-- as it cannot guarantee the item does not exist on other replicas.
+module Amazonka.SDB.GetAttributes
+  ( -- * Creating a Request
+    GetAttributes (..),
+    newGetAttributes,
+
+    -- * Request Lenses
+    getAttributes_attributeNames,
+    getAttributes_consistentRead,
+    getAttributes_domainName,
+    getAttributes_itemName,
+
+    -- * Destructuring the Response
+    GetAttributesResponse (..),
+    newGetAttributesResponse,
+
+    -- * Response Lenses
+    getAttributesResponse_attributes,
+    getAttributesResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SDB.Types
+
+-- | /See:/ 'newGetAttributes' smart constructor.
+data GetAttributes = GetAttributes'
+  { -- | The names of the attributes.
+    attributeNames :: Prelude.Maybe [Prelude.Text],
+    -- | Determines whether or not strong consistency should be enforced when
+    -- data is read from SimpleDB. If @true@, any data previously written to
+    -- SimpleDB will be returned. Otherwise, results will be consistent
+    -- eventually, and the client may not see data that was written immediately
+    -- before your read.
+    consistentRead :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the domain in which to perform the operation.
+    domainName :: Prelude.Text,
+    -- | The name of the item.
+    itemName :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributeNames', 'getAttributes_attributeNames' - The names of the attributes.
+--
+-- 'consistentRead', 'getAttributes_consistentRead' - Determines whether or not strong consistency should be enforced when
+-- data is read from SimpleDB. If @true@, any data previously written to
+-- SimpleDB will be returned. Otherwise, results will be consistent
+-- eventually, and the client may not see data that was written immediately
+-- before your read.
+--
+-- 'domainName', 'getAttributes_domainName' - The name of the domain in which to perform the operation.
+--
+-- 'itemName', 'getAttributes_itemName' - The name of the item.
+newGetAttributes ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'itemName'
+  Prelude.Text ->
+  GetAttributes
+newGetAttributes pDomainName_ pItemName_ =
+  GetAttributes'
+    { attributeNames = Prelude.Nothing,
+      consistentRead = Prelude.Nothing,
+      domainName = pDomainName_,
+      itemName = pItemName_
+    }
+
+-- | The names of the attributes.
+getAttributes_attributeNames :: Lens.Lens' GetAttributes (Prelude.Maybe [Prelude.Text])
+getAttributes_attributeNames = Lens.lens (\GetAttributes' {attributeNames} -> attributeNames) (\s@GetAttributes' {} a -> s {attributeNames = a} :: GetAttributes) Prelude.. Lens.mapping Lens.coerced
+
+-- | Determines whether or not strong consistency should be enforced when
+-- data is read from SimpleDB. If @true@, any data previously written to
+-- SimpleDB will be returned. Otherwise, results will be consistent
+-- eventually, and the client may not see data that was written immediately
+-- before your read.
+getAttributes_consistentRead :: Lens.Lens' GetAttributes (Prelude.Maybe Prelude.Bool)
+getAttributes_consistentRead = Lens.lens (\GetAttributes' {consistentRead} -> consistentRead) (\s@GetAttributes' {} a -> s {consistentRead = a} :: GetAttributes)
+
+-- | The name of the domain in which to perform the operation.
+getAttributes_domainName :: Lens.Lens' GetAttributes Prelude.Text
+getAttributes_domainName = Lens.lens (\GetAttributes' {domainName} -> domainName) (\s@GetAttributes' {} a -> s {domainName = a} :: GetAttributes)
+
+-- | The name of the item.
+getAttributes_itemName :: Lens.Lens' GetAttributes Prelude.Text
+getAttributes_itemName = Lens.lens (\GetAttributes' {itemName} -> itemName) (\s@GetAttributes' {} a -> s {itemName = a} :: GetAttributes)
+
+instance Core.AWSRequest GetAttributes where
+  type
+    AWSResponse GetAttributes =
+      GetAttributesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXMLWrapper
+      "GetAttributesResult"
+      ( \s h x ->
+          GetAttributesResponse'
+            Prelude.<$> (Core.may (Data.parseXMLList "Attribute") x)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAttributes where
+  hashWithSalt _salt GetAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributeNames
+      `Prelude.hashWithSalt` consistentRead
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` itemName
+
+instance Prelude.NFData GetAttributes where
+  rnf GetAttributes' {..} =
+    Prelude.rnf attributeNames
+      `Prelude.seq` Prelude.rnf consistentRead
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf itemName
+
+instance Data.ToHeaders GetAttributes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath GetAttributes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAttributes where
+  toQuery GetAttributes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("GetAttributes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2009-04-15" :: Prelude.ByteString),
+        Data.toQuery
+          ( Data.toQueryList "AttributeName"
+              Prelude.<$> attributeNames
+          ),
+        "ConsistentRead" Data.=: consistentRead,
+        "DomainName" Data.=: domainName,
+        "ItemName" Data.=: itemName
+      ]
+
+-- | /See:/ 'newGetAttributesResponse' smart constructor.
+data GetAttributesResponse = GetAttributesResponse'
+  { -- | The list of attributes returned by the operation.
+    attributes :: Prelude.Maybe [Attribute],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'getAttributesResponse_attributes' - The list of attributes returned by the operation.
+--
+-- 'httpStatus', 'getAttributesResponse_httpStatus' - The response's http status code.
+newGetAttributesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAttributesResponse
+newGetAttributesResponse pHttpStatus_ =
+  GetAttributesResponse'
+    { attributes =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The list of attributes returned by the operation.
+getAttributesResponse_attributes :: Lens.Lens' GetAttributesResponse (Prelude.Maybe [Attribute])
+getAttributesResponse_attributes = Lens.lens (\GetAttributesResponse' {attributes} -> attributes) (\s@GetAttributesResponse' {} a -> s {attributes = a} :: GetAttributesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getAttributesResponse_httpStatus :: Lens.Lens' GetAttributesResponse Prelude.Int
+getAttributesResponse_httpStatus = Lens.lens (\GetAttributesResponse' {httpStatus} -> httpStatus) (\s@GetAttributesResponse' {} a -> s {httpStatus = a} :: GetAttributesResponse)
+
+instance Prelude.NFData GetAttributesResponse where
+  rnf GetAttributesResponse' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SDB/Lens.hs b/gen/Amazonka/SDB/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/Lens.hs
@@ -0,0 +1,125 @@
+{-# 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.SDB.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.SDB.Lens
+  ( -- * Operations
+
+    -- ** BatchDeleteAttributes
+    batchDeleteAttributes_domainName,
+    batchDeleteAttributes_items,
+
+    -- ** BatchPutAttributes
+    batchPutAttributes_domainName,
+    batchPutAttributes_items,
+
+    -- ** CreateDomain
+    createDomain_domainName,
+
+    -- ** DeleteAttributes
+    deleteAttributes_attributes,
+    deleteAttributes_expected,
+    deleteAttributes_domainName,
+    deleteAttributes_itemName,
+
+    -- ** DeleteDomain
+    deleteDomain_domainName,
+
+    -- ** DomainMetadata
+    domainMetadata_domainName,
+    domainMetadataResponse_attributeNameCount,
+    domainMetadataResponse_attributeNamesSizeBytes,
+    domainMetadataResponse_attributeValueCount,
+    domainMetadataResponse_attributeValuesSizeBytes,
+    domainMetadataResponse_itemCount,
+    domainMetadataResponse_itemNamesSizeBytes,
+    domainMetadataResponse_timestamp,
+    domainMetadataResponse_httpStatus,
+
+    -- ** GetAttributes
+    getAttributes_attributeNames,
+    getAttributes_consistentRead,
+    getAttributes_domainName,
+    getAttributes_itemName,
+    getAttributesResponse_attributes,
+    getAttributesResponse_httpStatus,
+
+    -- ** ListDomains
+    listDomains_maxNumberOfDomains,
+    listDomains_nextToken,
+    listDomainsResponse_domainNames,
+    listDomainsResponse_nextToken,
+    listDomainsResponse_httpStatus,
+
+    -- ** PutAttributes
+    putAttributes_expected,
+    putAttributes_domainName,
+    putAttributes_itemName,
+    putAttributes_attributes,
+
+    -- ** Select
+    select_consistentRead,
+    select_nextToken,
+    select_selectExpression,
+    selectResponse_items,
+    selectResponse_nextToken,
+    selectResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Attribute
+    attribute_alternateNameEncoding,
+    attribute_alternateValueEncoding,
+    attribute_name,
+    attribute_value,
+
+    -- ** DeletableItem
+    deletableItem_attributes,
+    deletableItem_name,
+
+    -- ** Item
+    item_alternateNameEncoding,
+    item_name,
+    item_attributes,
+
+    -- ** ReplaceableAttribute
+    replaceableAttribute_replace,
+    replaceableAttribute_name,
+    replaceableAttribute_value,
+
+    -- ** ReplaceableItem
+    replaceableItem_name,
+    replaceableItem_attributes,
+
+    -- ** UpdateCondition
+    updateCondition_exists,
+    updateCondition_name,
+    updateCondition_value,
+  )
+where
+
+import Amazonka.SDB.BatchDeleteAttributes
+import Amazonka.SDB.BatchPutAttributes
+import Amazonka.SDB.CreateDomain
+import Amazonka.SDB.DeleteAttributes
+import Amazonka.SDB.DeleteDomain
+import Amazonka.SDB.DomainMetadata
+import Amazonka.SDB.GetAttributes
+import Amazonka.SDB.ListDomains
+import Amazonka.SDB.PutAttributes
+import Amazonka.SDB.Select
+import Amazonka.SDB.Types.Attribute
+import Amazonka.SDB.Types.DeletableItem
+import Amazonka.SDB.Types.Item
+import Amazonka.SDB.Types.ReplaceableAttribute
+import Amazonka.SDB.Types.ReplaceableItem
+import Amazonka.SDB.Types.UpdateCondition
diff --git a/gen/Amazonka/SDB/ListDomains.hs b/gen/Amazonka/SDB/ListDomains.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/ListDomains.hs
@@ -0,0 +1,220 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SDB.ListDomains
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The @ListDomains@ operation lists all domains associated with the Access
+-- Key ID. It returns domain names up to the limit set by
+-- <#MaxNumberOfDomains MaxNumberOfDomains>. A <#NextToken NextToken> is
+-- returned if there are more than @MaxNumberOfDomains@ domains. Calling
+-- @ListDomains@ successive times with the @NextToken@ provided by the
+-- operation returns up to @MaxNumberOfDomains@ more domain names with each
+-- successive operation call.
+--
+-- This operation returns paginated results.
+module Amazonka.SDB.ListDomains
+  ( -- * Creating a Request
+    ListDomains (..),
+    newListDomains,
+
+    -- * Request Lenses
+    listDomains_maxNumberOfDomains,
+    listDomains_nextToken,
+
+    -- * Destructuring the Response
+    ListDomainsResponse (..),
+    newListDomainsResponse,
+
+    -- * Response Lenses
+    listDomainsResponse_domainNames,
+    listDomainsResponse_nextToken,
+    listDomainsResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SDB.Types
+
+-- | /See:/ 'newListDomains' smart constructor.
+data ListDomains = ListDomains'
+  { -- | The maximum number of domain names you want returned. The range is 1 to
+    -- 100. The default setting is 100.
+    maxNumberOfDomains :: Prelude.Maybe Prelude.Int,
+    -- | A string informing Amazon SimpleDB where to start the next list of
+    -- domain names.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListDomains' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxNumberOfDomains', 'listDomains_maxNumberOfDomains' - The maximum number of domain names you want returned. The range is 1 to
+-- 100. The default setting is 100.
+--
+-- 'nextToken', 'listDomains_nextToken' - A string informing Amazon SimpleDB where to start the next list of
+-- domain names.
+newListDomains ::
+  ListDomains
+newListDomains =
+  ListDomains'
+    { maxNumberOfDomains = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of domain names you want returned. The range is 1 to
+-- 100. The default setting is 100.
+listDomains_maxNumberOfDomains :: Lens.Lens' ListDomains (Prelude.Maybe Prelude.Int)
+listDomains_maxNumberOfDomains = Lens.lens (\ListDomains' {maxNumberOfDomains} -> maxNumberOfDomains) (\s@ListDomains' {} a -> s {maxNumberOfDomains = a} :: ListDomains)
+
+-- | A string informing Amazon SimpleDB where to start the next list of
+-- domain names.
+listDomains_nextToken :: Lens.Lens' ListDomains (Prelude.Maybe Prelude.Text)
+listDomains_nextToken = Lens.lens (\ListDomains' {nextToken} -> nextToken) (\s@ListDomains' {} a -> s {nextToken = a} :: ListDomains)
+
+instance Core.AWSPager ListDomains where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listDomainsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listDomainsResponse_domainNames
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listDomains_nextToken
+          Lens..~ rs
+          Lens.^? listDomainsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListDomains where
+  type AWSResponse ListDomains = ListDomainsResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXMLWrapper
+      "ListDomainsResult"
+      ( \s h x ->
+          ListDomainsResponse'
+            Prelude.<$> (Core.may (Data.parseXMLList "DomainName") x)
+            Prelude.<*> (x Data..@? "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListDomains where
+  hashWithSalt _salt ListDomains' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxNumberOfDomains
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListDomains where
+  rnf ListDomains' {..} =
+    Prelude.rnf maxNumberOfDomains
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListDomains where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath ListDomains where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListDomains where
+  toQuery ListDomains' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("ListDomains" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2009-04-15" :: Prelude.ByteString),
+        "MaxNumberOfDomains" Data.=: maxNumberOfDomains,
+        "NextToken" Data.=: nextToken
+      ]
+
+-- | /See:/ 'newListDomainsResponse' smart constructor.
+data ListDomainsResponse = ListDomainsResponse'
+  { -- | A list of domain names that match the expression.
+    domainNames :: Prelude.Maybe [Prelude.Text],
+    -- | An opaque token indicating that there are more domains than the
+    -- specified @MaxNumberOfDomains@ still available.
+    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 'ListDomainsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'domainNames', 'listDomainsResponse_domainNames' - A list of domain names that match the expression.
+--
+-- 'nextToken', 'listDomainsResponse_nextToken' - An opaque token indicating that there are more domains than the
+-- specified @MaxNumberOfDomains@ still available.
+--
+-- 'httpStatus', 'listDomainsResponse_httpStatus' - The response's http status code.
+newListDomainsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListDomainsResponse
+newListDomainsResponse pHttpStatus_ =
+  ListDomainsResponse'
+    { domainNames = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of domain names that match the expression.
+listDomainsResponse_domainNames :: Lens.Lens' ListDomainsResponse (Prelude.Maybe [Prelude.Text])
+listDomainsResponse_domainNames = Lens.lens (\ListDomainsResponse' {domainNames} -> domainNames) (\s@ListDomainsResponse' {} a -> s {domainNames = a} :: ListDomainsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An opaque token indicating that there are more domains than the
+-- specified @MaxNumberOfDomains@ still available.
+listDomainsResponse_nextToken :: Lens.Lens' ListDomainsResponse (Prelude.Maybe Prelude.Text)
+listDomainsResponse_nextToken = Lens.lens (\ListDomainsResponse' {nextToken} -> nextToken) (\s@ListDomainsResponse' {} a -> s {nextToken = a} :: ListDomainsResponse)
+
+-- | The response's http status code.
+listDomainsResponse_httpStatus :: Lens.Lens' ListDomainsResponse Prelude.Int
+listDomainsResponse_httpStatus = Lens.lens (\ListDomainsResponse' {httpStatus} -> httpStatus) (\s@ListDomainsResponse' {} a -> s {httpStatus = a} :: ListDomainsResponse)
+
+instance Prelude.NFData ListDomainsResponse where
+  rnf ListDomainsResponse' {..} =
+    Prelude.rnf domainNames
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SDB/PutAttributes.hs b/gen/Amazonka/SDB/PutAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/PutAttributes.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SDB.PutAttributes
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The PutAttributes operation creates or replaces attributes in an item.
+-- The client may specify new attributes using a combination of the
+-- @Attribute.X.Name@ and @Attribute.X.Value@ parameters. The client
+-- specifies the first attribute by the parameters @Attribute.0.Name@ and
+-- @Attribute.0.Value@, the second attribute by the parameters
+-- @Attribute.1.Name@ and @Attribute.1.Value@, and so on.
+--
+-- Attributes are uniquely identified in an item by their name\/value
+-- combination. For example, a single item can have the attributes
+-- @{ \"first_name\", \"first_value\" }@ and
+-- @{ \"first_name\", second_value\" }@. However, it cannot have two
+-- attribute instances where both the @Attribute.X.Name@ and
+-- @Attribute.X.Value@ are the same.
+--
+-- Optionally, the requestor can supply the @Replace@ parameter for each
+-- individual attribute. Setting this value to @true@ causes the new
+-- attribute value to replace the existing attribute value(s). For example,
+-- if an item has the attributes @{ \'a\', \'1\' }@, @{ \'b\', \'2\'}@ and
+-- @{ \'b\', \'3\' }@ and the requestor calls @PutAttributes@ using the
+-- attributes @{ \'b\', \'4\' }@ with the @Replace@ parameter set to true,
+-- the final attributes of the item are changed to @{ \'a\', \'1\' }@ and
+-- @{ \'b\', \'4\' }@, which replaces the previous values of the \'b\'
+-- attribute with the new value.
+--
+-- You cannot specify an empty string as an attribute name.
+--
+-- Because Amazon SimpleDB makes multiple copies of client data and uses an
+-- eventual consistency update model, an immediate GetAttributes or Select
+-- operation (read) immediately after a PutAttributes or DeleteAttributes
+-- operation (write) might not return the updated data.
+--
+-- The following limitations are enforced for this operation:
+--
+-- -   256 total attribute name-value pairs per item
+-- -   One billion attributes per domain
+-- -   10 GB of total user data storage per domain
+module Amazonka.SDB.PutAttributes
+  ( -- * Creating a Request
+    PutAttributes (..),
+    newPutAttributes,
+
+    -- * Request Lenses
+    putAttributes_expected,
+    putAttributes_domainName,
+    putAttributes_itemName,
+    putAttributes_attributes,
+
+    -- * Destructuring the Response
+    PutAttributesResponse (..),
+    newPutAttributesResponse,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SDB.Types
+
+-- | /See:/ 'newPutAttributes' smart constructor.
+data PutAttributes = PutAttributes'
+  { -- | The update condition which, if specified, determines whether the
+    -- specified attributes will be updated or not. The update condition must
+    -- be satisfied in order for this request to be processed and the
+    -- attributes to be updated.
+    expected :: Prelude.Maybe UpdateCondition,
+    -- | The name of the domain in which to perform the operation.
+    domainName :: Prelude.Text,
+    -- | The name of the item.
+    itemName :: Prelude.Text,
+    -- | The list of attributes.
+    attributes :: [ReplaceableAttribute]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAttributes' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'expected', 'putAttributes_expected' - The update condition which, if specified, determines whether the
+-- specified attributes will be updated or not. The update condition must
+-- be satisfied in order for this request to be processed and the
+-- attributes to be updated.
+--
+-- 'domainName', 'putAttributes_domainName' - The name of the domain in which to perform the operation.
+--
+-- 'itemName', 'putAttributes_itemName' - The name of the item.
+--
+-- 'attributes', 'putAttributes_attributes' - The list of attributes.
+newPutAttributes ::
+  -- | 'domainName'
+  Prelude.Text ->
+  -- | 'itemName'
+  Prelude.Text ->
+  PutAttributes
+newPutAttributes pDomainName_ pItemName_ =
+  PutAttributes'
+    { expected = Prelude.Nothing,
+      domainName = pDomainName_,
+      itemName = pItemName_,
+      attributes = Prelude.mempty
+    }
+
+-- | The update condition which, if specified, determines whether the
+-- specified attributes will be updated or not. The update condition must
+-- be satisfied in order for this request to be processed and the
+-- attributes to be updated.
+putAttributes_expected :: Lens.Lens' PutAttributes (Prelude.Maybe UpdateCondition)
+putAttributes_expected = Lens.lens (\PutAttributes' {expected} -> expected) (\s@PutAttributes' {} a -> s {expected = a} :: PutAttributes)
+
+-- | The name of the domain in which to perform the operation.
+putAttributes_domainName :: Lens.Lens' PutAttributes Prelude.Text
+putAttributes_domainName = Lens.lens (\PutAttributes' {domainName} -> domainName) (\s@PutAttributes' {} a -> s {domainName = a} :: PutAttributes)
+
+-- | The name of the item.
+putAttributes_itemName :: Lens.Lens' PutAttributes Prelude.Text
+putAttributes_itemName = Lens.lens (\PutAttributes' {itemName} -> itemName) (\s@PutAttributes' {} a -> s {itemName = a} :: PutAttributes)
+
+-- | The list of attributes.
+putAttributes_attributes :: Lens.Lens' PutAttributes [ReplaceableAttribute]
+putAttributes_attributes = Lens.lens (\PutAttributes' {attributes} -> attributes) (\s@PutAttributes' {} a -> s {attributes = a} :: PutAttributes) Prelude.. Lens.coerced
+
+instance Core.AWSRequest PutAttributes where
+  type
+    AWSResponse PutAttributes =
+      PutAttributesResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveNull PutAttributesResponse'
+
+instance Prelude.Hashable PutAttributes where
+  hashWithSalt _salt PutAttributes' {..} =
+    _salt
+      `Prelude.hashWithSalt` expected
+      `Prelude.hashWithSalt` domainName
+      `Prelude.hashWithSalt` itemName
+      `Prelude.hashWithSalt` attributes
+
+instance Prelude.NFData PutAttributes where
+  rnf PutAttributes' {..} =
+    Prelude.rnf expected
+      `Prelude.seq` Prelude.rnf domainName
+      `Prelude.seq` Prelude.rnf itemName
+      `Prelude.seq` Prelude.rnf attributes
+
+instance Data.ToHeaders PutAttributes where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath PutAttributes where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutAttributes where
+  toQuery PutAttributes' {..} =
+    Prelude.mconcat
+      [ "Action"
+          Data.=: ("PutAttributes" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2009-04-15" :: Prelude.ByteString),
+        "Expected" Data.=: expected,
+        "DomainName" Data.=: domainName,
+        "ItemName" Data.=: itemName,
+        Data.toQueryList "Attribute" attributes
+      ]
+
+-- | /See:/ 'newPutAttributesResponse' smart constructor.
+data PutAttributesResponse = PutAttributesResponse'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAttributesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newPutAttributesResponse ::
+  PutAttributesResponse
+newPutAttributesResponse = PutAttributesResponse'
+
+instance Prelude.NFData PutAttributesResponse where
+  rnf _ = ()
diff --git a/gen/Amazonka/SDB/Select.hs b/gen/Amazonka/SDB/Select.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/Select.hs
@@ -0,0 +1,252 @@
+{-# 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.SDB.Select
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- The @Select@ operation returns a set of attributes for @ItemNames@ that
+-- match the select expression. @Select@ is similar to the standard SQL
+-- SELECT statement.
+--
+-- The total size of the response cannot exceed 1 MB in total size. Amazon
+-- SimpleDB automatically adjusts the number of items returned per page to
+-- enforce this limit. For example, if the client asks to retrieve 2500
+-- items, but each individual item is 10 kB in size, the system returns 100
+-- items and an appropriate @NextToken@ so the client can access the next
+-- page of results.
+--
+-- For information on how to construct select expressions, see Using Select
+-- to Create Amazon SimpleDB Queries in the Developer Guide.
+--
+-- This operation returns paginated results.
+module Amazonka.SDB.Select
+  ( -- * Creating a Request
+    Select (..),
+    newSelect,
+
+    -- * Request Lenses
+    select_consistentRead,
+    select_nextToken,
+    select_selectExpression,
+
+    -- * Destructuring the Response
+    SelectResponse (..),
+    newSelectResponse,
+
+    -- * Response Lenses
+    selectResponse_items,
+    selectResponse_nextToken,
+    selectResponse_httpStatus,
+  )
+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
+import qualified Amazonka.Request as Request
+import qualified Amazonka.Response as Response
+import Amazonka.SDB.Types
+
+-- | /See:/ 'newSelect' smart constructor.
+data Select = Select'
+  { -- | Determines whether or not strong consistency should be enforced when
+    -- data is read from SimpleDB. If @true@, any data previously written to
+    -- SimpleDB will be returned. Otherwise, results will be consistent
+    -- eventually, and the client may not see data that was written immediately
+    -- before your read.
+    consistentRead :: Prelude.Maybe Prelude.Bool,
+    -- | A string informing Amazon SimpleDB where to start the next list of
+    -- @ItemNames@.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The expression used to query the domain.
+    selectExpression :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Select' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'consistentRead', 'select_consistentRead' - Determines whether or not strong consistency should be enforced when
+-- data is read from SimpleDB. If @true@, any data previously written to
+-- SimpleDB will be returned. Otherwise, results will be consistent
+-- eventually, and the client may not see data that was written immediately
+-- before your read.
+--
+-- 'nextToken', 'select_nextToken' - A string informing Amazon SimpleDB where to start the next list of
+-- @ItemNames@.
+--
+-- 'selectExpression', 'select_selectExpression' - The expression used to query the domain.
+newSelect ::
+  -- | 'selectExpression'
+  Prelude.Text ->
+  Select
+newSelect pSelectExpression_ =
+  Select'
+    { consistentRead = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      selectExpression = pSelectExpression_
+    }
+
+-- | Determines whether or not strong consistency should be enforced when
+-- data is read from SimpleDB. If @true@, any data previously written to
+-- SimpleDB will be returned. Otherwise, results will be consistent
+-- eventually, and the client may not see data that was written immediately
+-- before your read.
+select_consistentRead :: Lens.Lens' Select (Prelude.Maybe Prelude.Bool)
+select_consistentRead = Lens.lens (\Select' {consistentRead} -> consistentRead) (\s@Select' {} a -> s {consistentRead = a} :: Select)
+
+-- | A string informing Amazon SimpleDB where to start the next list of
+-- @ItemNames@.
+select_nextToken :: Lens.Lens' Select (Prelude.Maybe Prelude.Text)
+select_nextToken = Lens.lens (\Select' {nextToken} -> nextToken) (\s@Select' {} a -> s {nextToken = a} :: Select)
+
+-- | The expression used to query the domain.
+select_selectExpression :: Lens.Lens' Select Prelude.Text
+select_selectExpression = Lens.lens (\Select' {selectExpression} -> selectExpression) (\s@Select' {} a -> s {selectExpression = a} :: Select)
+
+instance Core.AWSPager Select where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? selectResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? selectResponse_items
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& select_nextToken
+          Lens..~ rs
+          Lens.^? selectResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest Select where
+  type AWSResponse Select = SelectResponse
+  request overrides =
+    Request.postQuery (overrides defaultService)
+  response =
+    Response.receiveXMLWrapper
+      "SelectResult"
+      ( \s h x ->
+          SelectResponse'
+            Prelude.<$> (Core.may (Data.parseXMLList "Item") x)
+            Prelude.<*> (x Data..@? "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable Select where
+  hashWithSalt _salt Select' {..} =
+    _salt
+      `Prelude.hashWithSalt` consistentRead
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` selectExpression
+
+instance Prelude.NFData Select where
+  rnf Select' {..} =
+    Prelude.rnf consistentRead
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf selectExpression
+
+instance Data.ToHeaders Select where
+  toHeaders = Prelude.const Prelude.mempty
+
+instance Data.ToPath Select where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery Select where
+  toQuery Select' {..} =
+    Prelude.mconcat
+      [ "Action" Data.=: ("Select" :: Prelude.ByteString),
+        "Version"
+          Data.=: ("2009-04-15" :: Prelude.ByteString),
+        "ConsistentRead" Data.=: consistentRead,
+        "NextToken" Data.=: nextToken,
+        "SelectExpression" Data.=: selectExpression
+      ]
+
+-- | /See:/ 'newSelectResponse' smart constructor.
+data SelectResponse = SelectResponse'
+  { -- | A list of items that match the select expression.
+    items :: Prelude.Maybe [Item],
+    -- | An opaque token indicating that more items than @MaxNumberOfItems@ were
+    -- matched, the response size exceeded 1 megabyte, or the execution time
+    -- exceeded 5 seconds.
+    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 'SelectResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'items', 'selectResponse_items' - A list of items that match the select expression.
+--
+-- 'nextToken', 'selectResponse_nextToken' - An opaque token indicating that more items than @MaxNumberOfItems@ were
+-- matched, the response size exceeded 1 megabyte, or the execution time
+-- exceeded 5 seconds.
+--
+-- 'httpStatus', 'selectResponse_httpStatus' - The response's http status code.
+newSelectResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  SelectResponse
+newSelectResponse pHttpStatus_ =
+  SelectResponse'
+    { items = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A list of items that match the select expression.
+selectResponse_items :: Lens.Lens' SelectResponse (Prelude.Maybe [Item])
+selectResponse_items = Lens.lens (\SelectResponse' {items} -> items) (\s@SelectResponse' {} a -> s {items = a} :: SelectResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | An opaque token indicating that more items than @MaxNumberOfItems@ were
+-- matched, the response size exceeded 1 megabyte, or the execution time
+-- exceeded 5 seconds.
+selectResponse_nextToken :: Lens.Lens' SelectResponse (Prelude.Maybe Prelude.Text)
+selectResponse_nextToken = Lens.lens (\SelectResponse' {nextToken} -> nextToken) (\s@SelectResponse' {} a -> s {nextToken = a} :: SelectResponse)
+
+-- | The response's http status code.
+selectResponse_httpStatus :: Lens.Lens' SelectResponse Prelude.Int
+selectResponse_httpStatus = Lens.lens (\SelectResponse' {httpStatus} -> httpStatus) (\s@SelectResponse' {} a -> s {httpStatus = a} :: SelectResponse)
+
+instance Prelude.NFData SelectResponse where
+  rnf SelectResponse' {..} =
+    Prelude.rnf items
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SDB/Types.hs b/gen/Amazonka/SDB/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/Types.hs
@@ -0,0 +1,298 @@
+{-# 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.SDB.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.SDB.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _AttributeDoesNotExist,
+    _DuplicateItemName,
+    _InvalidNextToken,
+    _InvalidNumberPredicates,
+    _InvalidNumberValueTests,
+    _InvalidParameterValue,
+    _InvalidQueryExpression,
+    _MissingParameter,
+    _NoSuchDomain,
+    _NumberDomainAttributesExceeded,
+    _NumberDomainBytesExceeded,
+    _NumberDomainsExceeded,
+    _NumberItemAttributesExceeded,
+    _NumberSubmittedAttributesExceeded,
+    _NumberSubmittedItemsExceeded,
+    _RequestTimeout,
+    _TooManyRequestedAttributes,
+
+    -- * Attribute
+    Attribute (..),
+    newAttribute,
+    attribute_alternateNameEncoding,
+    attribute_alternateValueEncoding,
+    attribute_name,
+    attribute_value,
+
+    -- * DeletableItem
+    DeletableItem (..),
+    newDeletableItem,
+    deletableItem_attributes,
+    deletableItem_name,
+
+    -- * Item
+    Item (..),
+    newItem,
+    item_alternateNameEncoding,
+    item_name,
+    item_attributes,
+
+    -- * ReplaceableAttribute
+    ReplaceableAttribute (..),
+    newReplaceableAttribute,
+    replaceableAttribute_replace,
+    replaceableAttribute_name,
+    replaceableAttribute_value,
+
+    -- * ReplaceableItem
+    ReplaceableItem (..),
+    newReplaceableItem,
+    replaceableItem_name,
+    replaceableItem_attributes,
+
+    -- * UpdateCondition
+    UpdateCondition (..),
+    newUpdateCondition,
+    updateCondition_exists,
+    updateCondition_name,
+    updateCondition_value,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.SDB.Types.Attribute
+import Amazonka.SDB.Types.DeletableItem
+import Amazonka.SDB.Types.Item
+import Amazonka.SDB.Types.ReplaceableAttribute
+import Amazonka.SDB.Types.ReplaceableItem
+import Amazonka.SDB.Types.UpdateCondition
+import qualified Amazonka.Sign.V2 as Sign
+
+-- | API version @2009-04-15@ of the Amazon SimpleDB SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "SDB",
+      Core.signer = Sign.v2,
+      Core.endpointPrefix = "sdb",
+      Core.signingName = "sdb",
+      Core.version = "2009-04-15",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseXMLError "SDB",
+      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 specified attribute does not exist.
+_AttributeDoesNotExist :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_AttributeDoesNotExist =
+  Core._MatchServiceError
+    defaultService
+    "AttributeDoesNotExist"
+    Prelude.. Core.hasStatus 404
+
+-- | The item name was specified more than once.
+_DuplicateItemName :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_DuplicateItemName =
+  Core._MatchServiceError
+    defaultService
+    "DuplicateItemName"
+    Prelude.. Core.hasStatus 400
+
+-- | The specified NextToken is not valid.
+_InvalidNextToken :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidNextToken =
+  Core._MatchServiceError
+    defaultService
+    "InvalidNextToken"
+    Prelude.. Core.hasStatus 400
+
+-- | Too many predicates exist in the query expression.
+_InvalidNumberPredicates :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidNumberPredicates =
+  Core._MatchServiceError
+    defaultService
+    "InvalidNumberPredicates"
+    Prelude.. Core.hasStatus 400
+
+-- | Too many predicates exist in the query expression.
+_InvalidNumberValueTests :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidNumberValueTests =
+  Core._MatchServiceError
+    defaultService
+    "InvalidNumberValueTests"
+    Prelude.. Core.hasStatus 400
+
+-- | The value for a parameter is invalid.
+_InvalidParameterValue :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterValue =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterValue"
+    Prelude.. Core.hasStatus 400
+
+-- | The specified query expression syntax is not valid.
+_InvalidQueryExpression :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidQueryExpression =
+  Core._MatchServiceError
+    defaultService
+    "InvalidQueryExpression"
+    Prelude.. Core.hasStatus 400
+
+-- | The request must contain the specified missing parameter.
+_MissingParameter :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_MissingParameter =
+  Core._MatchServiceError
+    defaultService
+    "MissingParameter"
+    Prelude.. Core.hasStatus 400
+
+-- | The specified domain does not exist.
+_NoSuchDomain :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NoSuchDomain =
+  Core._MatchServiceError
+    defaultService
+    "NoSuchDomain"
+    Prelude.. Core.hasStatus 400
+
+-- | Too many attributes in this domain.
+_NumberDomainAttributesExceeded :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NumberDomainAttributesExceeded =
+  Core._MatchServiceError
+    defaultService
+    "NumberDomainAttributesExceeded"
+    Prelude.. Core.hasStatus 409
+
+-- | Too many bytes in this domain.
+_NumberDomainBytesExceeded :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NumberDomainBytesExceeded =
+  Core._MatchServiceError
+    defaultService
+    "NumberDomainBytesExceeded"
+    Prelude.. Core.hasStatus 409
+
+-- | Too many domains exist per this account.
+_NumberDomainsExceeded :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NumberDomainsExceeded =
+  Core._MatchServiceError
+    defaultService
+    "NumberDomainsExceeded"
+    Prelude.. Core.hasStatus 409
+
+-- | Too many attributes in this item.
+_NumberItemAttributesExceeded :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NumberItemAttributesExceeded =
+  Core._MatchServiceError
+    defaultService
+    "NumberItemAttributesExceeded"
+    Prelude.. Core.hasStatus 409
+
+-- | Too many attributes exist in a single call.
+_NumberSubmittedAttributesExceeded :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NumberSubmittedAttributesExceeded =
+  Core._MatchServiceError
+    defaultService
+    "NumberSubmittedAttributesExceeded"
+    Prelude.. Core.hasStatus 409
+
+-- | Too many items exist in a single call.
+_NumberSubmittedItemsExceeded :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NumberSubmittedItemsExceeded =
+  Core._MatchServiceError
+    defaultService
+    "NumberSubmittedItemsExceeded"
+    Prelude.. Core.hasStatus 409
+
+-- | A timeout occurred when attempting to query the specified domain with
+-- specified query expression.
+_RequestTimeout :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_RequestTimeout =
+  Core._MatchServiceError
+    defaultService
+    "RequestTimeout"
+    Prelude.. Core.hasStatus 408
+
+-- | Too many attributes requested.
+_TooManyRequestedAttributes :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TooManyRequestedAttributes =
+  Core._MatchServiceError
+    defaultService
+    "TooManyRequestedAttributes"
+    Prelude.. Core.hasStatus 400
diff --git a/gen/Amazonka/SDB/Types/Attribute.hs b/gen/Amazonka/SDB/Types/Attribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/Types/Attribute.hs
@@ -0,0 +1,115 @@
+{-# 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.SDB.Types.Attribute
+-- 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.SDB.Types.Attribute 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
+
+-- |
+--
+-- /See:/ 'newAttribute' smart constructor.
+data Attribute = Attribute'
+  { alternateNameEncoding :: Prelude.Maybe Prelude.Text,
+    alternateValueEncoding :: Prelude.Maybe Prelude.Text,
+    -- | The name of the attribute.
+    name :: Prelude.Text,
+    -- | The value of the attribute.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Attribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alternateNameEncoding', 'attribute_alternateNameEncoding' -
+--
+-- 'alternateValueEncoding', 'attribute_alternateValueEncoding' -
+--
+-- 'name', 'attribute_name' - The name of the attribute.
+--
+-- 'value', 'attribute_value' - The value of the attribute.
+newAttribute ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  Attribute
+newAttribute pName_ pValue_ =
+  Attribute'
+    { alternateNameEncoding = Prelude.Nothing,
+      alternateValueEncoding = Prelude.Nothing,
+      name = pName_,
+      value = pValue_
+    }
+
+attribute_alternateNameEncoding :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Text)
+attribute_alternateNameEncoding = Lens.lens (\Attribute' {alternateNameEncoding} -> alternateNameEncoding) (\s@Attribute' {} a -> s {alternateNameEncoding = a} :: Attribute)
+
+attribute_alternateValueEncoding :: Lens.Lens' Attribute (Prelude.Maybe Prelude.Text)
+attribute_alternateValueEncoding = Lens.lens (\Attribute' {alternateValueEncoding} -> alternateValueEncoding) (\s@Attribute' {} a -> s {alternateValueEncoding = a} :: Attribute)
+
+-- | The name of the attribute.
+attribute_name :: Lens.Lens' Attribute Prelude.Text
+attribute_name = Lens.lens (\Attribute' {name} -> name) (\s@Attribute' {} a -> s {name = a} :: Attribute)
+
+-- | The value of the attribute.
+attribute_value :: Lens.Lens' Attribute Prelude.Text
+attribute_value = Lens.lens (\Attribute' {value} -> value) (\s@Attribute' {} a -> s {value = a} :: Attribute)
+
+instance Data.FromXML Attribute where
+  parseXML x =
+    Attribute'
+      Prelude.<$> (x Data..@? "AlternateNameEncoding")
+      Prelude.<*> (x Data..@? "AlternateValueEncoding")
+      Prelude.<*> (x Data..@ "Name")
+      Prelude.<*> (x Data..@ "Value")
+
+instance Prelude.Hashable Attribute where
+  hashWithSalt _salt Attribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` alternateNameEncoding
+      `Prelude.hashWithSalt` alternateValueEncoding
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Attribute where
+  rnf Attribute' {..} =
+    Prelude.rnf alternateNameEncoding
+      `Prelude.seq` Prelude.rnf alternateValueEncoding
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToQuery Attribute where
+  toQuery Attribute' {..} =
+    Prelude.mconcat
+      [ "AlternateNameEncoding"
+          Data.=: alternateNameEncoding,
+        "AlternateValueEncoding"
+          Data.=: alternateValueEncoding,
+        "Name" Data.=: name,
+        "Value" Data.=: value
+      ]
diff --git a/gen/Amazonka/SDB/Types/DeletableItem.hs b/gen/Amazonka/SDB/Types/DeletableItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/Types/DeletableItem.hs
@@ -0,0 +1,83 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SDB.Types.DeletableItem
+-- 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.SDB.Types.DeletableItem 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
+import Amazonka.SDB.Types.Attribute
+
+-- | /See:/ 'newDeletableItem' smart constructor.
+data DeletableItem = DeletableItem'
+  { attributes :: Prelude.Maybe [Attribute],
+    name :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeletableItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'attributes', 'deletableItem_attributes' - Undocumented member.
+--
+-- 'name', 'deletableItem_name' - Undocumented member.
+newDeletableItem ::
+  -- | 'name'
+  Prelude.Text ->
+  DeletableItem
+newDeletableItem pName_ =
+  DeletableItem'
+    { attributes = Prelude.Nothing,
+      name = pName_
+    }
+
+-- | Undocumented member.
+deletableItem_attributes :: Lens.Lens' DeletableItem (Prelude.Maybe [Attribute])
+deletableItem_attributes = Lens.lens (\DeletableItem' {attributes} -> attributes) (\s@DeletableItem' {} a -> s {attributes = a} :: DeletableItem) Prelude.. Lens.mapping Lens.coerced
+
+-- | Undocumented member.
+deletableItem_name :: Lens.Lens' DeletableItem Prelude.Text
+deletableItem_name = Lens.lens (\DeletableItem' {name} -> name) (\s@DeletableItem' {} a -> s {name = a} :: DeletableItem)
+
+instance Prelude.Hashable DeletableItem where
+  hashWithSalt _salt DeletableItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` attributes
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData DeletableItem where
+  rnf DeletableItem' {..} =
+    Prelude.rnf attributes
+      `Prelude.seq` Prelude.rnf name
+
+instance Data.ToQuery DeletableItem where
+  toQuery DeletableItem' {..} =
+    Prelude.mconcat
+      [ Data.toQuery
+          ( Data.toQueryList "Attribute"
+              Prelude.<$> attributes
+          ),
+        "ItemName" Data.=: name
+      ]
diff --git a/gen/Amazonka/SDB/Types/Item.hs b/gen/Amazonka/SDB/Types/Item.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/Types/Item.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SDB.Types.Item
+-- 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.SDB.Types.Item 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
+import Amazonka.SDB.Types.Attribute
+
+-- |
+--
+-- /See:/ 'newItem' smart constructor.
+data Item = Item'
+  { alternateNameEncoding :: Prelude.Maybe Prelude.Text,
+    -- | The name of the item.
+    name :: Prelude.Text,
+    -- | A list of attributes.
+    attributes :: [Attribute]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Item' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'alternateNameEncoding', 'item_alternateNameEncoding' -
+--
+-- 'name', 'item_name' - The name of the item.
+--
+-- 'attributes', 'item_attributes' - A list of attributes.
+newItem ::
+  -- | 'name'
+  Prelude.Text ->
+  Item
+newItem pName_ =
+  Item'
+    { alternateNameEncoding = Prelude.Nothing,
+      name = pName_,
+      attributes = Prelude.mempty
+    }
+
+item_alternateNameEncoding :: Lens.Lens' Item (Prelude.Maybe Prelude.Text)
+item_alternateNameEncoding = Lens.lens (\Item' {alternateNameEncoding} -> alternateNameEncoding) (\s@Item' {} a -> s {alternateNameEncoding = a} :: Item)
+
+-- | The name of the item.
+item_name :: Lens.Lens' Item Prelude.Text
+item_name = Lens.lens (\Item' {name} -> name) (\s@Item' {} a -> s {name = a} :: Item)
+
+-- | A list of attributes.
+item_attributes :: Lens.Lens' Item [Attribute]
+item_attributes = Lens.lens (\Item' {attributes} -> attributes) (\s@Item' {} a -> s {attributes = a} :: Item) Prelude.. Lens.coerced
+
+instance Data.FromXML Item where
+  parseXML x =
+    Item'
+      Prelude.<$> (x Data..@? "AlternateNameEncoding")
+      Prelude.<*> (x Data..@ "Name")
+      Prelude.<*> (Data.parseXMLList "Attribute" x)
+
+instance Prelude.Hashable Item where
+  hashWithSalt _salt Item' {..} =
+    _salt
+      `Prelude.hashWithSalt` alternateNameEncoding
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` attributes
+
+instance Prelude.NFData Item where
+  rnf Item' {..} =
+    Prelude.rnf alternateNameEncoding
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf attributes
diff --git a/gen/Amazonka/SDB/Types/ReplaceableAttribute.hs b/gen/Amazonka/SDB/Types/ReplaceableAttribute.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/Types/ReplaceableAttribute.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SDB.Types.ReplaceableAttribute
+-- 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.SDB.Types.ReplaceableAttribute 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
+
+-- |
+--
+-- /See:/ 'newReplaceableAttribute' smart constructor.
+data ReplaceableAttribute = ReplaceableAttribute'
+  { -- | A flag specifying whether or not to replace the attribute\/value pair or
+    -- to add a new attribute\/value pair. The default setting is @false@.
+    replace :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the replaceable attribute.
+    name :: Prelude.Text,
+    -- | The value of the replaceable attribute.
+    value :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceableAttribute' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replace', 'replaceableAttribute_replace' - A flag specifying whether or not to replace the attribute\/value pair or
+-- to add a new attribute\/value pair. The default setting is @false@.
+--
+-- 'name', 'replaceableAttribute_name' - The name of the replaceable attribute.
+--
+-- 'value', 'replaceableAttribute_value' - The value of the replaceable attribute.
+newReplaceableAttribute ::
+  -- | 'name'
+  Prelude.Text ->
+  -- | 'value'
+  Prelude.Text ->
+  ReplaceableAttribute
+newReplaceableAttribute pName_ pValue_ =
+  ReplaceableAttribute'
+    { replace = Prelude.Nothing,
+      name = pName_,
+      value = pValue_
+    }
+
+-- | A flag specifying whether or not to replace the attribute\/value pair or
+-- to add a new attribute\/value pair. The default setting is @false@.
+replaceableAttribute_replace :: Lens.Lens' ReplaceableAttribute (Prelude.Maybe Prelude.Bool)
+replaceableAttribute_replace = Lens.lens (\ReplaceableAttribute' {replace} -> replace) (\s@ReplaceableAttribute' {} a -> s {replace = a} :: ReplaceableAttribute)
+
+-- | The name of the replaceable attribute.
+replaceableAttribute_name :: Lens.Lens' ReplaceableAttribute Prelude.Text
+replaceableAttribute_name = Lens.lens (\ReplaceableAttribute' {name} -> name) (\s@ReplaceableAttribute' {} a -> s {name = a} :: ReplaceableAttribute)
+
+-- | The value of the replaceable attribute.
+replaceableAttribute_value :: Lens.Lens' ReplaceableAttribute Prelude.Text
+replaceableAttribute_value = Lens.lens (\ReplaceableAttribute' {value} -> value) (\s@ReplaceableAttribute' {} a -> s {value = a} :: ReplaceableAttribute)
+
+instance Prelude.Hashable ReplaceableAttribute where
+  hashWithSalt _salt ReplaceableAttribute' {..} =
+    _salt
+      `Prelude.hashWithSalt` replace
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData ReplaceableAttribute where
+  rnf ReplaceableAttribute' {..} =
+    Prelude.rnf replace
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToQuery ReplaceableAttribute where
+  toQuery ReplaceableAttribute' {..} =
+    Prelude.mconcat
+      [ "Replace" Data.=: replace,
+        "Name" Data.=: name,
+        "Value" Data.=: value
+      ]
diff --git a/gen/Amazonka/SDB/Types/ReplaceableItem.hs b/gen/Amazonka/SDB/Types/ReplaceableItem.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/Types/ReplaceableItem.hs
@@ -0,0 +1,84 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SDB.Types.ReplaceableItem
+-- 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.SDB.Types.ReplaceableItem 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
+import Amazonka.SDB.Types.ReplaceableAttribute
+
+-- |
+--
+-- /See:/ 'newReplaceableItem' smart constructor.
+data ReplaceableItem = ReplaceableItem'
+  { -- | The name of the replaceable item.
+    name :: Prelude.Text,
+    -- | The list of attributes for a replaceable item.
+    attributes :: [ReplaceableAttribute]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplaceableItem' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'replaceableItem_name' - The name of the replaceable item.
+--
+-- 'attributes', 'replaceableItem_attributes' - The list of attributes for a replaceable item.
+newReplaceableItem ::
+  -- | 'name'
+  Prelude.Text ->
+  ReplaceableItem
+newReplaceableItem pName_ =
+  ReplaceableItem'
+    { name = pName_,
+      attributes = Prelude.mempty
+    }
+
+-- | The name of the replaceable item.
+replaceableItem_name :: Lens.Lens' ReplaceableItem Prelude.Text
+replaceableItem_name = Lens.lens (\ReplaceableItem' {name} -> name) (\s@ReplaceableItem' {} a -> s {name = a} :: ReplaceableItem)
+
+-- | The list of attributes for a replaceable item.
+replaceableItem_attributes :: Lens.Lens' ReplaceableItem [ReplaceableAttribute]
+replaceableItem_attributes = Lens.lens (\ReplaceableItem' {attributes} -> attributes) (\s@ReplaceableItem' {} a -> s {attributes = a} :: ReplaceableItem) Prelude.. Lens.coerced
+
+instance Prelude.Hashable ReplaceableItem where
+  hashWithSalt _salt ReplaceableItem' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` attributes
+
+instance Prelude.NFData ReplaceableItem where
+  rnf ReplaceableItem' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf attributes
+
+instance Data.ToQuery ReplaceableItem where
+  toQuery ReplaceableItem' {..} =
+    Prelude.mconcat
+      [ "ItemName" Data.=: name,
+        Data.toQueryList "Attribute" attributes
+      ]
diff --git a/gen/Amazonka/SDB/Types/UpdateCondition.hs b/gen/Amazonka/SDB/Types/UpdateCondition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/Types/UpdateCondition.hs
@@ -0,0 +1,112 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SDB.Types.UpdateCondition
+-- 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.SDB.Types.UpdateCondition 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
+
+-- | Specifies the conditions under which data should be updated. If an
+-- update condition is specified for a request, the data will only be
+-- updated if the condition is satisfied. For example, if an attribute with
+-- a specific name and value exists, or if a specific attribute doesn\'t
+-- exist.
+--
+-- /See:/ 'newUpdateCondition' smart constructor.
+data UpdateCondition = UpdateCondition'
+  { -- | A value specifying whether or not the specified attribute must exist
+    -- with the specified value in order for the update condition to be
+    -- satisfied. Specify @true@ if the attribute must exist for the update
+    -- condition to be satisfied. Specify @false@ if the attribute should not
+    -- exist in order for the update condition to be satisfied.
+    exists :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the attribute involved in the condition.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The value of an attribute. This value can only be specified when the
+    -- @Exists@ parameter is equal to @true@.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCondition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'exists', 'updateCondition_exists' - A value specifying whether or not the specified attribute must exist
+-- with the specified value in order for the update condition to be
+-- satisfied. Specify @true@ if the attribute must exist for the update
+-- condition to be satisfied. Specify @false@ if the attribute should not
+-- exist in order for the update condition to be satisfied.
+--
+-- 'name', 'updateCondition_name' - The name of the attribute involved in the condition.
+--
+-- 'value', 'updateCondition_value' - The value of an attribute. This value can only be specified when the
+-- @Exists@ parameter is equal to @true@.
+newUpdateCondition ::
+  UpdateCondition
+newUpdateCondition =
+  UpdateCondition'
+    { exists = Prelude.Nothing,
+      name = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | A value specifying whether or not the specified attribute must exist
+-- with the specified value in order for the update condition to be
+-- satisfied. Specify @true@ if the attribute must exist for the update
+-- condition to be satisfied. Specify @false@ if the attribute should not
+-- exist in order for the update condition to be satisfied.
+updateCondition_exists :: Lens.Lens' UpdateCondition (Prelude.Maybe Prelude.Bool)
+updateCondition_exists = Lens.lens (\UpdateCondition' {exists} -> exists) (\s@UpdateCondition' {} a -> s {exists = a} :: UpdateCondition)
+
+-- | The name of the attribute involved in the condition.
+updateCondition_name :: Lens.Lens' UpdateCondition (Prelude.Maybe Prelude.Text)
+updateCondition_name = Lens.lens (\UpdateCondition' {name} -> name) (\s@UpdateCondition' {} a -> s {name = a} :: UpdateCondition)
+
+-- | The value of an attribute. This value can only be specified when the
+-- @Exists@ parameter is equal to @true@.
+updateCondition_value :: Lens.Lens' UpdateCondition (Prelude.Maybe Prelude.Text)
+updateCondition_value = Lens.lens (\UpdateCondition' {value} -> value) (\s@UpdateCondition' {} a -> s {value = a} :: UpdateCondition)
+
+instance Prelude.Hashable UpdateCondition where
+  hashWithSalt _salt UpdateCondition' {..} =
+    _salt
+      `Prelude.hashWithSalt` exists
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData UpdateCondition where
+  rnf UpdateCondition' {..} =
+    Prelude.rnf exists
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf value
+
+instance Data.ToQuery UpdateCondition where
+  toQuery UpdateCondition' {..} =
+    Prelude.mconcat
+      [ "Exists" Data.=: exists,
+        "Name" Data.=: name,
+        "Value" Data.=: value
+      ]
diff --git a/gen/Amazonka/SDB/Waiters.hs b/gen/Amazonka/SDB/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SDB/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.SDB.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.SDB.Waiters 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
+import Amazonka.SDB.Lens
+import Amazonka.SDB.Types
diff --git a/gen/Network/AWS/SDB.hs b/gen/Network/AWS/SDB.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB.hs
+++ /dev/null
@@ -1,199 +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.SDB
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Amazon SimpleDB is a web service providing the core database functions of data indexing and querying in the cloud. By offloading the time and effort associated with building and operating a web-scale database, SimpleDB provides developers the freedom to focus on application development. A traditional, clustered relational database requires a sizable upfront capital outlay, is complex to design, and often requires extensive and repetitive database administration. Amazon SimpleDB is dramatically simpler, requiring no schema, automatically indexing your data and providing a simple API for storage and access. This approach eliminates the administrative burden of data modeling, index maintenance, and performance tuning. Developers gain access to this functionality within Amazon's proven computing environment, are able to scale instantly, and pay only for what they use.
---
---
--- Visit <http://aws.amazon.com/simpledb/ http://aws.amazon.com/simpledb/> for more information.
---
-module Network.AWS.SDB
-    (
-    -- * Service Configuration
-      sdb
-
-    -- * Errors
-    -- $errors
-
-    -- ** InvalidNumberValueTests
-    , _InvalidNumberValueTests
-
-    -- ** NoSuchDomain
-    , _NoSuchDomain
-
-    -- ** NumberSubmittedItemsExceeded
-    , _NumberSubmittedItemsExceeded
-
-    -- ** AttributeDoesNotExist
-    , _AttributeDoesNotExist
-
-    -- ** NumberDomainAttributesExceeded
-    , _NumberDomainAttributesExceeded
-
-    -- ** DuplicateItemName
-    , _DuplicateItemName
-
-    -- ** MissingParameter
-    , _MissingParameter
-
-    -- ** InvalidNextToken
-    , _InvalidNextToken
-
-    -- ** InvalidParameterValue
-    , _InvalidParameterValue
-
-    -- ** NumberItemAttributesExceeded
-    , _NumberItemAttributesExceeded
-
-    -- ** RequestTimeout
-    , _RequestTimeout
-
-    -- ** TooManyRequestedAttributes
-    , _TooManyRequestedAttributes
-
-    -- ** InvalidNumberPredicates
-    , _InvalidNumberPredicates
-
-    -- ** NumberDomainsExceeded
-    , _NumberDomainsExceeded
-
-    -- ** NumberSubmittedAttributesExceeded
-    , _NumberSubmittedAttributesExceeded
-
-    -- ** NumberDomainBytesExceeded
-    , _NumberDomainBytesExceeded
-
-    -- ** InvalidQueryExpression
-    , _InvalidQueryExpression
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** BatchDeleteAttributes
-    , module Network.AWS.SDB.BatchDeleteAttributes
-
-    -- ** BatchPutAttributes
-    , module Network.AWS.SDB.BatchPutAttributes
-
-    -- ** GetAttributes
-    , module Network.AWS.SDB.GetAttributes
-
-    -- ** CreateDomain
-    , module Network.AWS.SDB.CreateDomain
-
-    -- ** DomainMetadata
-    , module Network.AWS.SDB.DomainMetadata
-
-    -- ** Select (Paginated)
-    , module Network.AWS.SDB.Select
-
-    -- ** DeleteAttributes
-    , module Network.AWS.SDB.DeleteAttributes
-
-    -- ** PutAttributes
-    , module Network.AWS.SDB.PutAttributes
-
-    -- ** DeleteDomain
-    , module Network.AWS.SDB.DeleteDomain
-
-    -- ** ListDomains (Paginated)
-    , module Network.AWS.SDB.ListDomains
-
-    -- * Types
-
-    -- ** Attribute
-    , Attribute
-    , attribute
-    , aAlternateValueEncoding
-    , aAlternateNameEncoding
-    , aName
-    , aValue
-
-    -- ** DeletableItem
-    , DeletableItem
-    , deletableItem
-    , diAttributes
-    , diName
-
-    -- ** Item
-    , Item
-    , item
-    , iAlternateNameEncoding
-    , iName
-    , iAttributes
-
-    -- ** ReplaceableAttribute
-    , ReplaceableAttribute
-    , replaceableAttribute
-    , raReplace
-    , raName
-    , raValue
-
-    -- ** ReplaceableItem
-    , ReplaceableItem
-    , replaceableItem
-    , riName
-    , riAttributes
-
-    -- ** UpdateCondition
-    , UpdateCondition
-    , updateCondition
-    , ucExists
-    , ucValue
-    , ucName
-    ) where
-
-import Network.AWS.SDB.BatchDeleteAttributes
-import Network.AWS.SDB.BatchPutAttributes
-import Network.AWS.SDB.CreateDomain
-import Network.AWS.SDB.DeleteAttributes
-import Network.AWS.SDB.DeleteDomain
-import Network.AWS.SDB.DomainMetadata
-import Network.AWS.SDB.GetAttributes
-import Network.AWS.SDB.ListDomains
-import Network.AWS.SDB.PutAttributes
-import Network.AWS.SDB.Select
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.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 'SDB'.
--}
-
-{- $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/SDB/BatchDeleteAttributes.hs b/gen/Network/AWS/SDB/BatchDeleteAttributes.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/BatchDeleteAttributes.hs
+++ /dev/null
@@ -1,115 +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.SDB.BatchDeleteAttributes
--- 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)
---
--- Performs multiple DeleteAttributes operations in a single call, which reduces round trips and latencies. This enables Amazon SimpleDB to optimize requests, which generally yields better throughput.
---
---
--- The following limitations are enforced for this operation:     * 1 MB request size    * 25 item limit per BatchDeleteAttributes operation
---
---
---
-module Network.AWS.SDB.BatchDeleteAttributes
-    (
-    -- * Creating a Request
-      batchDeleteAttributes
-    , BatchDeleteAttributes
-    -- * Request Lenses
-    , bdaDomainName
-    , bdaItems
-
-    -- * Destructuring the Response
-    , batchDeleteAttributesResponse
-    , BatchDeleteAttributesResponse
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.Types.Product
-
--- | /See:/ 'batchDeleteAttributes' smart constructor.
-data BatchDeleteAttributes = BatchDeleteAttributes'
-  { _bdaDomainName :: !Text
-  , _bdaItems      :: ![DeletableItem]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'BatchDeleteAttributes' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bdaDomainName' - The name of the domain in which the attributes are being deleted.
---
--- * 'bdaItems' - A list of items on which to perform the operation.
-batchDeleteAttributes
-    :: Text -- ^ 'bdaDomainName'
-    -> BatchDeleteAttributes
-batchDeleteAttributes pDomainName_ =
-  BatchDeleteAttributes' {_bdaDomainName = pDomainName_, _bdaItems = mempty}
-
-
--- | The name of the domain in which the attributes are being deleted.
-bdaDomainName :: Lens' BatchDeleteAttributes Text
-bdaDomainName = lens _bdaDomainName (\ s a -> s{_bdaDomainName = a})
-
--- | A list of items on which to perform the operation.
-bdaItems :: Lens' BatchDeleteAttributes [DeletableItem]
-bdaItems = lens _bdaItems (\ s a -> s{_bdaItems = a}) . _Coerce
-
-instance AWSRequest BatchDeleteAttributes where
-        type Rs BatchDeleteAttributes =
-             BatchDeleteAttributesResponse
-        request = postQuery sdb
-        response = receiveNull BatchDeleteAttributesResponse'
-
-instance Hashable BatchDeleteAttributes where
-
-instance NFData BatchDeleteAttributes where
-
-instance ToHeaders BatchDeleteAttributes where
-        toHeaders = const mempty
-
-instance ToPath BatchDeleteAttributes where
-        toPath = const "/"
-
-instance ToQuery BatchDeleteAttributes where
-        toQuery BatchDeleteAttributes'{..}
-          = mconcat
-              ["Action" =: ("BatchDeleteAttributes" :: ByteString),
-               "Version" =: ("2009-04-15" :: ByteString),
-               "DomainName" =: _bdaDomainName,
-               toQueryList "Item" _bdaItems]
-
--- | /See:/ 'batchDeleteAttributesResponse' smart constructor.
-data BatchDeleteAttributesResponse =
-  BatchDeleteAttributesResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'BatchDeleteAttributesResponse' with the minimum fields required to make a request.
---
-batchDeleteAttributesResponse
-    :: BatchDeleteAttributesResponse
-batchDeleteAttributesResponse = BatchDeleteAttributesResponse'
-
-
-instance NFData BatchDeleteAttributesResponse where
diff --git a/gen/Network/AWS/SDB/BatchPutAttributes.hs b/gen/Network/AWS/SDB/BatchPutAttributes.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/BatchPutAttributes.hs
+++ /dev/null
@@ -1,123 +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.SDB.BatchPutAttributes
--- 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)
---
--- The @BatchPutAttributes@ operation creates or replaces attributes within one or more items. By using this operation, the client can perform multiple 'PutAttribute' operation with a single call. This helps yield savings in round trips and latencies, enabling Amazon SimpleDB to optimize requests and generally produce better throughput.
---
---
--- The client may specify the item name with the @Item.X.ItemName@ parameter. The client may specify new attributes using a combination of the @Item.X.Attribute.Y.Name@ and @Item.X.Attribute.Y.Value@ parameters. The client may specify the first attribute for the first item using the parameters @Item.0.Attribute.0.Name@ and @Item.0.Attribute.0.Value@ , and for the second attribute for the first item by the parameters @Item.0.Attribute.1.Name@ and @Item.0.Attribute.1.Value@ , and so on.
---
--- Attributes are uniquely identified within an item by their name/value combination. For example, a single item can have the attributes @{ "first_name", "first_value" }@ and @{ "first_name", "second_value" }@ . However, it cannot have two attribute instances where both the @Item.X.Attribute.Y.Name@ and @Item.X.Attribute.Y.Value@ are the same.
---
--- Optionally, the requester can supply the @Replace@ parameter for each individual value. Setting this value to @true@ will cause the new attribute values to replace the existing attribute values. For example, if an item @I@ has the attributes @{ 'a', '1' }, { 'b', '2'}@ and @{ 'b', '3' }@ and the requester does a BatchPutAttributes of @{'I', 'b', '4' }@ with the Replace parameter set to true, the final attributes of the item will be @{ 'a', '1' }@ and @{ 'b', '4' }@ , replacing the previous values of the 'b' attribute with the new value.
---
--- /Important:/ This operation is vulnerable to exceeding the maximum URL size when making a REST request using the HTTP GET method. This operation does not support conditions using @Expected.X.Name@ , @Expected.X.Value@ , or @Expected.X.Exists@ . You can execute multiple @BatchPutAttributes@ operations and other operations in parallel. However, large numbers of concurrent @BatchPutAttributes@ calls can result in Service Unavailable (503) responses.
---
--- The following limitations are enforced for this operation:     * 256 attribute name-value pairs per item    * 1 MB request size    * 1 billion attributes per domain    * 10 GB of total user data storage per domain    * 25 item limit per @BatchPutAttributes@ operation
---
---
---
-module Network.AWS.SDB.BatchPutAttributes
-    (
-    -- * Creating a Request
-      batchPutAttributes
-    , BatchPutAttributes
-    -- * Request Lenses
-    , bpaDomainName
-    , bpaItems
-
-    -- * Destructuring the Response
-    , batchPutAttributesResponse
-    , BatchPutAttributesResponse
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.Types.Product
-
--- | /See:/ 'batchPutAttributes' smart constructor.
-data BatchPutAttributes = BatchPutAttributes'
-  { _bpaDomainName :: !Text
-  , _bpaItems      :: ![ReplaceableItem]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'BatchPutAttributes' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'bpaDomainName' - The name of the domain in which the attributes are being stored.
---
--- * 'bpaItems' - A list of items on which to perform the operation.
-batchPutAttributes
-    :: Text -- ^ 'bpaDomainName'
-    -> BatchPutAttributes
-batchPutAttributes pDomainName_ =
-  BatchPutAttributes' {_bpaDomainName = pDomainName_, _bpaItems = mempty}
-
-
--- | The name of the domain in which the attributes are being stored.
-bpaDomainName :: Lens' BatchPutAttributes Text
-bpaDomainName = lens _bpaDomainName (\ s a -> s{_bpaDomainName = a})
-
--- | A list of items on which to perform the operation.
-bpaItems :: Lens' BatchPutAttributes [ReplaceableItem]
-bpaItems = lens _bpaItems (\ s a -> s{_bpaItems = a}) . _Coerce
-
-instance AWSRequest BatchPutAttributes where
-        type Rs BatchPutAttributes =
-             BatchPutAttributesResponse
-        request = postQuery sdb
-        response = receiveNull BatchPutAttributesResponse'
-
-instance Hashable BatchPutAttributes where
-
-instance NFData BatchPutAttributes where
-
-instance ToHeaders BatchPutAttributes where
-        toHeaders = const mempty
-
-instance ToPath BatchPutAttributes where
-        toPath = const "/"
-
-instance ToQuery BatchPutAttributes where
-        toQuery BatchPutAttributes'{..}
-          = mconcat
-              ["Action" =: ("BatchPutAttributes" :: ByteString),
-               "Version" =: ("2009-04-15" :: ByteString),
-               "DomainName" =: _bpaDomainName,
-               toQueryList "Item" _bpaItems]
-
--- | /See:/ 'batchPutAttributesResponse' smart constructor.
-data BatchPutAttributesResponse =
-  BatchPutAttributesResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'BatchPutAttributesResponse' with the minimum fields required to make a request.
---
-batchPutAttributesResponse
-    :: BatchPutAttributesResponse
-batchPutAttributesResponse = BatchPutAttributesResponse'
-
-
-instance NFData BatchPutAttributesResponse where
diff --git a/gen/Network/AWS/SDB/CreateDomain.hs b/gen/Network/AWS/SDB/CreateDomain.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/CreateDomain.hs
+++ /dev/null
@@ -1,104 +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.SDB.CreateDomain
--- 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)
---
--- The @CreateDomain@ operation creates a new domain. The domain name should be unique among the domains associated with the Access Key ID provided in the request. The @CreateDomain@ operation may take 10 or more seconds to complete.
---
---
--- The client can create up to 100 domains per account.
---
--- If the client requires additional domains, go to <http://aws.amazon.com/contact-us/simpledb-limit-request/ http://aws.amazon.com/contact-us/simpledb-limit-request/> .
---
-module Network.AWS.SDB.CreateDomain
-    (
-    -- * Creating a Request
-      createDomain
-    , CreateDomain
-    -- * Request Lenses
-    , cdDomainName
-
-    -- * Destructuring the Response
-    , createDomainResponse
-    , CreateDomainResponse
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.Types.Product
-
--- | /See:/ 'createDomain' smart constructor.
-newtype CreateDomain = CreateDomain'
-  { _cdDomainName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateDomain' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cdDomainName' - The name of the domain to create. The name can range between 3 and 255 characters and can contain the following characters: a-z, A-Z, 0-9, '_', '-', and '.'.
-createDomain
-    :: Text -- ^ 'cdDomainName'
-    -> CreateDomain
-createDomain pDomainName_ = CreateDomain' {_cdDomainName = pDomainName_}
-
-
--- | The name of the domain to create. The name can range between 3 and 255 characters and can contain the following characters: a-z, A-Z, 0-9, '_', '-', and '.'.
-cdDomainName :: Lens' CreateDomain Text
-cdDomainName = lens _cdDomainName (\ s a -> s{_cdDomainName = a})
-
-instance AWSRequest CreateDomain where
-        type Rs CreateDomain = CreateDomainResponse
-        request = postQuery sdb
-        response = receiveNull CreateDomainResponse'
-
-instance Hashable CreateDomain where
-
-instance NFData CreateDomain where
-
-instance ToHeaders CreateDomain where
-        toHeaders = const mempty
-
-instance ToPath CreateDomain where
-        toPath = const "/"
-
-instance ToQuery CreateDomain where
-        toQuery CreateDomain'{..}
-          = mconcat
-              ["Action" =: ("CreateDomain" :: ByteString),
-               "Version" =: ("2009-04-15" :: ByteString),
-               "DomainName" =: _cdDomainName]
-
--- | /See:/ 'createDomainResponse' smart constructor.
-data CreateDomainResponse =
-  CreateDomainResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateDomainResponse' with the minimum fields required to make a request.
---
-createDomainResponse
-    :: CreateDomainResponse
-createDomainResponse = CreateDomainResponse'
-
-
-instance NFData CreateDomainResponse where
diff --git a/gen/Network/AWS/SDB/DeleteAttributes.hs b/gen/Network/AWS/SDB/DeleteAttributes.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/DeleteAttributes.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.SDB.DeleteAttributes
--- 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 one or more attributes associated with an item. If all attributes of the item are deleted, the item is deleted.
---
---
--- @DeleteAttributes@ is an idempotent operation; running it multiple times on the same item or attribute does not result in an error response.
---
--- Because Amazon SimpleDB makes multiple copies of item data and uses an eventual consistency update model, performing a 'GetAttributes' or 'Select' operation (read) immediately after a @DeleteAttributes@ or 'PutAttributes' operation (write) might not return updated item data.
---
-module Network.AWS.SDB.DeleteAttributes
-    (
-    -- * Creating a Request
-      deleteAttributes
-    , DeleteAttributes
-    -- * Request Lenses
-    , daAttributes
-    , daExpected
-    , daDomainName
-    , daItemName
-
-    -- * Destructuring the Response
-    , deleteAttributesResponse
-    , DeleteAttributesResponse
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.Types.Product
-
--- | /See:/ 'deleteAttributes' smart constructor.
-data DeleteAttributes = DeleteAttributes'
-  { _daAttributes :: !(Maybe [Attribute])
-  , _daExpected   :: !(Maybe UpdateCondition)
-  , _daDomainName :: !Text
-  , _daItemName   :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteAttributes' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'daAttributes' - A list of Attributes. Similar to columns on a spreadsheet, attributes represent categories of data that can be assigned to items.
---
--- * 'daExpected' - The update condition which, if specified, determines whether the specified attributes will be deleted or not. The update condition must be satisfied in order for this request to be processed and the attributes to be deleted.
---
--- * 'daDomainName' - The name of the domain in which to perform the operation.
---
--- * 'daItemName' - The name of the item. Similar to rows on a spreadsheet, items represent individual objects that contain one or more value-attribute pairs.
-deleteAttributes
-    :: Text -- ^ 'daDomainName'
-    -> Text -- ^ 'daItemName'
-    -> DeleteAttributes
-deleteAttributes pDomainName_ pItemName_ =
-  DeleteAttributes'
-    { _daAttributes = Nothing
-    , _daExpected = Nothing
-    , _daDomainName = pDomainName_
-    , _daItemName = pItemName_
-    }
-
-
--- | A list of Attributes. Similar to columns on a spreadsheet, attributes represent categories of data that can be assigned to items.
-daAttributes :: Lens' DeleteAttributes [Attribute]
-daAttributes = lens _daAttributes (\ s a -> s{_daAttributes = a}) . _Default . _Coerce
-
--- | The update condition which, if specified, determines whether the specified attributes will be deleted or not. The update condition must be satisfied in order for this request to be processed and the attributes to be deleted.
-daExpected :: Lens' DeleteAttributes (Maybe UpdateCondition)
-daExpected = lens _daExpected (\ s a -> s{_daExpected = a})
-
--- | The name of the domain in which to perform the operation.
-daDomainName :: Lens' DeleteAttributes Text
-daDomainName = lens _daDomainName (\ s a -> s{_daDomainName = a})
-
--- | The name of the item. Similar to rows on a spreadsheet, items represent individual objects that contain one or more value-attribute pairs.
-daItemName :: Lens' DeleteAttributes Text
-daItemName = lens _daItemName (\ s a -> s{_daItemName = a})
-
-instance AWSRequest DeleteAttributes where
-        type Rs DeleteAttributes = DeleteAttributesResponse
-        request = postQuery sdb
-        response = receiveNull DeleteAttributesResponse'
-
-instance Hashable DeleteAttributes where
-
-instance NFData DeleteAttributes where
-
-instance ToHeaders DeleteAttributes where
-        toHeaders = const mempty
-
-instance ToPath DeleteAttributes where
-        toPath = const "/"
-
-instance ToQuery DeleteAttributes where
-        toQuery DeleteAttributes'{..}
-          = mconcat
-              ["Action" =: ("DeleteAttributes" :: ByteString),
-               "Version" =: ("2009-04-15" :: ByteString),
-               toQuery (toQueryList "Attribute" <$> _daAttributes),
-               "Expected" =: _daExpected,
-               "DomainName" =: _daDomainName,
-               "ItemName" =: _daItemName]
-
--- | /See:/ 'deleteAttributesResponse' smart constructor.
-data DeleteAttributesResponse =
-  DeleteAttributesResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteAttributesResponse' with the minimum fields required to make a request.
---
-deleteAttributesResponse
-    :: DeleteAttributesResponse
-deleteAttributesResponse = DeleteAttributesResponse'
-
-
-instance NFData DeleteAttributesResponse where
diff --git a/gen/Network/AWS/SDB/DeleteDomain.hs b/gen/Network/AWS/SDB/DeleteDomain.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/DeleteDomain.hs
+++ /dev/null
@@ -1,100 +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.SDB.DeleteDomain
--- 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)
---
--- The @DeleteDomain@ operation deletes a domain. Any items (and their attributes) in the domain are deleted as well. The @DeleteDomain@ operation might take 10 or more seconds to complete.
---
---
-module Network.AWS.SDB.DeleteDomain
-    (
-    -- * Creating a Request
-      deleteDomain
-    , DeleteDomain
-    -- * Request Lenses
-    , ddDomainName
-
-    -- * Destructuring the Response
-    , deleteDomainResponse
-    , DeleteDomainResponse
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.Types.Product
-
--- | /See:/ 'deleteDomain' smart constructor.
-newtype DeleteDomain = DeleteDomain'
-  { _ddDomainName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteDomain' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ddDomainName' - The name of the domain to delete.
-deleteDomain
-    :: Text -- ^ 'ddDomainName'
-    -> DeleteDomain
-deleteDomain pDomainName_ = DeleteDomain' {_ddDomainName = pDomainName_}
-
-
--- | The name of the domain to delete.
-ddDomainName :: Lens' DeleteDomain Text
-ddDomainName = lens _ddDomainName (\ s a -> s{_ddDomainName = a})
-
-instance AWSRequest DeleteDomain where
-        type Rs DeleteDomain = DeleteDomainResponse
-        request = postQuery sdb
-        response = receiveNull DeleteDomainResponse'
-
-instance Hashable DeleteDomain where
-
-instance NFData DeleteDomain where
-
-instance ToHeaders DeleteDomain where
-        toHeaders = const mempty
-
-instance ToPath DeleteDomain where
-        toPath = const "/"
-
-instance ToQuery DeleteDomain where
-        toQuery DeleteDomain'{..}
-          = mconcat
-              ["Action" =: ("DeleteDomain" :: ByteString),
-               "Version" =: ("2009-04-15" :: ByteString),
-               "DomainName" =: _ddDomainName]
-
--- | /See:/ 'deleteDomainResponse' smart constructor.
-data DeleteDomainResponse =
-  DeleteDomainResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteDomainResponse' with the minimum fields required to make a request.
---
-deleteDomainResponse
-    :: DeleteDomainResponse
-deleteDomainResponse = DeleteDomainResponse'
-
-
-instance NFData DeleteDomainResponse where
diff --git a/gen/Network/AWS/SDB/DomainMetadata.hs b/gen/Network/AWS/SDB/DomainMetadata.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/DomainMetadata.hs
+++ /dev/null
@@ -1,187 +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.SDB.DomainMetadata
--- 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)
---
--- Returns information about the domain, including when the domain was created, the number of items and attributes in the domain, and the size of the attribute names and values.
---
---
-module Network.AWS.SDB.DomainMetadata
-    (
-    -- * Creating a Request
-      domainMetadata
-    , DomainMetadata
-    -- * Request Lenses
-    , dmDomainName
-
-    -- * Destructuring the Response
-    , domainMetadataResponse
-    , DomainMetadataResponse
-    -- * Response Lenses
-    , dmrsItemNamesSizeBytes
-    , dmrsAttributeValuesSizeBytes
-    , dmrsAttributeNameCount
-    , dmrsAttributeNamesSizeBytes
-    , dmrsAttributeValueCount
-    , dmrsItemCount
-    , dmrsTimestamp
-    , dmrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.Types.Product
-
--- | /See:/ 'domainMetadata' smart constructor.
-newtype DomainMetadata = DomainMetadata'
-  { _dmDomainName :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DomainMetadata' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dmDomainName' - The name of the domain for which to display the metadata of.
-domainMetadata
-    :: Text -- ^ 'dmDomainName'
-    -> DomainMetadata
-domainMetadata pDomainName_ = DomainMetadata' {_dmDomainName = pDomainName_}
-
-
--- | The name of the domain for which to display the metadata of.
-dmDomainName :: Lens' DomainMetadata Text
-dmDomainName = lens _dmDomainName (\ s a -> s{_dmDomainName = a})
-
-instance AWSRequest DomainMetadata where
-        type Rs DomainMetadata = DomainMetadataResponse
-        request = postQuery sdb
-        response
-          = receiveXMLWrapper "DomainMetadataResult"
-              (\ s h x ->
-                 DomainMetadataResponse' <$>
-                   (x .@? "ItemNamesSizeBytes") <*>
-                     (x .@? "AttributeValuesSizeBytes")
-                     <*> (x .@? "AttributeNameCount")
-                     <*> (x .@? "AttributeNamesSizeBytes")
-                     <*> (x .@? "AttributeValueCount")
-                     <*> (x .@? "ItemCount")
-                     <*> (x .@? "Timestamp")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DomainMetadata where
-
-instance NFData DomainMetadata where
-
-instance ToHeaders DomainMetadata where
-        toHeaders = const mempty
-
-instance ToPath DomainMetadata where
-        toPath = const "/"
-
-instance ToQuery DomainMetadata where
-        toQuery DomainMetadata'{..}
-          = mconcat
-              ["Action" =: ("DomainMetadata" :: ByteString),
-               "Version" =: ("2009-04-15" :: ByteString),
-               "DomainName" =: _dmDomainName]
-
--- | /See:/ 'domainMetadataResponse' smart constructor.
-data DomainMetadataResponse = DomainMetadataResponse'
-  { _dmrsItemNamesSizeBytes       :: !(Maybe Integer)
-  , _dmrsAttributeValuesSizeBytes :: !(Maybe Integer)
-  , _dmrsAttributeNameCount       :: !(Maybe Int)
-  , _dmrsAttributeNamesSizeBytes  :: !(Maybe Integer)
-  , _dmrsAttributeValueCount      :: !(Maybe Int)
-  , _dmrsItemCount                :: !(Maybe Int)
-  , _dmrsTimestamp                :: !(Maybe Int)
-  , _dmrsResponseStatus           :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DomainMetadataResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dmrsItemNamesSizeBytes' - The total size of all item names in the domain, in bytes.
---
--- * 'dmrsAttributeValuesSizeBytes' - The total size of all attribute values in the domain, in bytes.
---
--- * 'dmrsAttributeNameCount' - The number of unique attribute names in the domain.
---
--- * 'dmrsAttributeNamesSizeBytes' - The total size of all unique attribute names in the domain, in bytes.
---
--- * 'dmrsAttributeValueCount' - The number of all attribute name/value pairs in the domain.
---
--- * 'dmrsItemCount' - The number of all items in the domain.
---
--- * 'dmrsTimestamp' - The data and time when metadata was calculated, in Epoch (UNIX) seconds.
---
--- * 'dmrsResponseStatus' - -- | The response status code.
-domainMetadataResponse
-    :: Int -- ^ 'dmrsResponseStatus'
-    -> DomainMetadataResponse
-domainMetadataResponse pResponseStatus_ =
-  DomainMetadataResponse'
-    { _dmrsItemNamesSizeBytes = Nothing
-    , _dmrsAttributeValuesSizeBytes = Nothing
-    , _dmrsAttributeNameCount = Nothing
-    , _dmrsAttributeNamesSizeBytes = Nothing
-    , _dmrsAttributeValueCount = Nothing
-    , _dmrsItemCount = Nothing
-    , _dmrsTimestamp = Nothing
-    , _dmrsResponseStatus = pResponseStatus_
-    }
-
-
--- | The total size of all item names in the domain, in bytes.
-dmrsItemNamesSizeBytes :: Lens' DomainMetadataResponse (Maybe Integer)
-dmrsItemNamesSizeBytes = lens _dmrsItemNamesSizeBytes (\ s a -> s{_dmrsItemNamesSizeBytes = a})
-
--- | The total size of all attribute values in the domain, in bytes.
-dmrsAttributeValuesSizeBytes :: Lens' DomainMetadataResponse (Maybe Integer)
-dmrsAttributeValuesSizeBytes = lens _dmrsAttributeValuesSizeBytes (\ s a -> s{_dmrsAttributeValuesSizeBytes = a})
-
--- | The number of unique attribute names in the domain.
-dmrsAttributeNameCount :: Lens' DomainMetadataResponse (Maybe Int)
-dmrsAttributeNameCount = lens _dmrsAttributeNameCount (\ s a -> s{_dmrsAttributeNameCount = a})
-
--- | The total size of all unique attribute names in the domain, in bytes.
-dmrsAttributeNamesSizeBytes :: Lens' DomainMetadataResponse (Maybe Integer)
-dmrsAttributeNamesSizeBytes = lens _dmrsAttributeNamesSizeBytes (\ s a -> s{_dmrsAttributeNamesSizeBytes = a})
-
--- | The number of all attribute name/value pairs in the domain.
-dmrsAttributeValueCount :: Lens' DomainMetadataResponse (Maybe Int)
-dmrsAttributeValueCount = lens _dmrsAttributeValueCount (\ s a -> s{_dmrsAttributeValueCount = a})
-
--- | The number of all items in the domain.
-dmrsItemCount :: Lens' DomainMetadataResponse (Maybe Int)
-dmrsItemCount = lens _dmrsItemCount (\ s a -> s{_dmrsItemCount = a})
-
--- | The data and time when metadata was calculated, in Epoch (UNIX) seconds.
-dmrsTimestamp :: Lens' DomainMetadataResponse (Maybe Int)
-dmrsTimestamp = lens _dmrsTimestamp (\ s a -> s{_dmrsTimestamp = a})
-
--- | -- | The response status code.
-dmrsResponseStatus :: Lens' DomainMetadataResponse Int
-dmrsResponseStatus = lens _dmrsResponseStatus (\ s a -> s{_dmrsResponseStatus = a})
-
-instance NFData DomainMetadataResponse where
diff --git a/gen/Network/AWS/SDB/GetAttributes.hs b/gen/Network/AWS/SDB/GetAttributes.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/GetAttributes.hs
+++ /dev/null
@@ -1,162 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.SDB.GetAttributes
--- 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)
---
--- Returns all of the attributes associated with the specified item. Optionally, the attributes returned can be limited to one or more attributes by specifying an attribute name parameter.
---
---
--- If the item does not exist on the replica that was accessed for this operation, an empty set is returned. The system does not return an error as it cannot guarantee the item does not exist on other replicas.
---
-module Network.AWS.SDB.GetAttributes
-    (
-    -- * Creating a Request
-      getAttributes
-    , GetAttributes
-    -- * Request Lenses
-    , gaConsistentRead
-    , gaAttributeNames
-    , gaDomainName
-    , gaItemName
-
-    -- * Destructuring the Response
-    , getAttributesResponse
-    , GetAttributesResponse
-    -- * Response Lenses
-    , garsAttributes
-    , garsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.Types.Product
-
--- | /See:/ 'getAttributes' smart constructor.
-data GetAttributes = GetAttributes'
-  { _gaConsistentRead :: !(Maybe Bool)
-  , _gaAttributeNames :: !(Maybe [Text])
-  , _gaDomainName     :: !Text
-  , _gaItemName       :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetAttributes' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gaConsistentRead' - @true@
---
--- * 'gaAttributeNames' - The names of the attributes.
---
--- * 'gaDomainName' - The name of the domain in which to perform the operation.
---
--- * 'gaItemName' - The name of the item.
-getAttributes
-    :: Text -- ^ 'gaDomainName'
-    -> Text -- ^ 'gaItemName'
-    -> GetAttributes
-getAttributes pDomainName_ pItemName_ =
-  GetAttributes'
-    { _gaConsistentRead = Nothing
-    , _gaAttributeNames = Nothing
-    , _gaDomainName = pDomainName_
-    , _gaItemName = pItemName_
-    }
-
-
--- | @true@
-gaConsistentRead :: Lens' GetAttributes (Maybe Bool)
-gaConsistentRead = lens _gaConsistentRead (\ s a -> s{_gaConsistentRead = a})
-
--- | The names of the attributes.
-gaAttributeNames :: Lens' GetAttributes [Text]
-gaAttributeNames = lens _gaAttributeNames (\ s a -> s{_gaAttributeNames = a}) . _Default . _Coerce
-
--- | The name of the domain in which to perform the operation.
-gaDomainName :: Lens' GetAttributes Text
-gaDomainName = lens _gaDomainName (\ s a -> s{_gaDomainName = a})
-
--- | The name of the item.
-gaItemName :: Lens' GetAttributes Text
-gaItemName = lens _gaItemName (\ s a -> s{_gaItemName = a})
-
-instance AWSRequest GetAttributes where
-        type Rs GetAttributes = GetAttributesResponse
-        request = postQuery sdb
-        response
-          = receiveXMLWrapper "GetAttributesResult"
-              (\ s h x ->
-                 GetAttributesResponse' <$>
-                   (may (parseXMLList "Attribute") x) <*>
-                     (pure (fromEnum s)))
-
-instance Hashable GetAttributes where
-
-instance NFData GetAttributes where
-
-instance ToHeaders GetAttributes where
-        toHeaders = const mempty
-
-instance ToPath GetAttributes where
-        toPath = const "/"
-
-instance ToQuery GetAttributes where
-        toQuery GetAttributes'{..}
-          = mconcat
-              ["Action" =: ("GetAttributes" :: ByteString),
-               "Version" =: ("2009-04-15" :: ByteString),
-               "ConsistentRead" =: _gaConsistentRead,
-               toQuery
-                 (toQueryList "AttributeName" <$> _gaAttributeNames),
-               "DomainName" =: _gaDomainName,
-               "ItemName" =: _gaItemName]
-
--- | /See:/ 'getAttributesResponse' smart constructor.
-data GetAttributesResponse = GetAttributesResponse'
-  { _garsAttributes     :: !(Maybe [Attribute])
-  , _garsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetAttributesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'garsAttributes' - The list of attributes returned by the operation.
---
--- * 'garsResponseStatus' - -- | The response status code.
-getAttributesResponse
-    :: Int -- ^ 'garsResponseStatus'
-    -> GetAttributesResponse
-getAttributesResponse pResponseStatus_ =
-  GetAttributesResponse'
-    {_garsAttributes = Nothing, _garsResponseStatus = pResponseStatus_}
-
-
--- | The list of attributes returned by the operation.
-garsAttributes :: Lens' GetAttributesResponse [Attribute]
-garsAttributes = lens _garsAttributes (\ s a -> s{_garsAttributes = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-garsResponseStatus :: Lens' GetAttributesResponse Int
-garsResponseStatus = lens _garsResponseStatus (\ s a -> s{_garsResponseStatus = a})
-
-instance NFData GetAttributesResponse where
diff --git a/gen/Network/AWS/SDB/ListDomains.hs b/gen/Network/AWS/SDB/ListDomains.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/ListDomains.hs
+++ /dev/null
@@ -1,156 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.SDB.ListDomains
--- 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)
---
--- The @ListDomains@ operation lists all domains associated with the Access Key ID. It returns domain names up to the limit set by <#MaxNumberOfDomains MaxNumberOfDomains> . A <#NextToken NextToken> is returned if there are more than @MaxNumberOfDomains@ domains. Calling @ListDomains@ successive times with the @NextToken@ provided by the operation returns up to @MaxNumberOfDomains@ more domain names with each successive operation call.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.SDB.ListDomains
-    (
-    -- * Creating a Request
-      listDomains
-    , ListDomains
-    -- * Request Lenses
-    , ldMaxNumberOfDomains
-    , ldNextToken
-
-    -- * Destructuring the Response
-    , listDomainsResponse
-    , ListDomainsResponse
-    -- * Response Lenses
-    , ldrsDomainNames
-    , ldrsNextToken
-    , ldrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.Types.Product
-
--- | /See:/ 'listDomains' smart constructor.
-data ListDomains = ListDomains'
-  { _ldMaxNumberOfDomains :: !(Maybe Int)
-  , _ldNextToken          :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListDomains' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ldMaxNumberOfDomains' - The maximum number of domain names you want returned. The range is 1 to 100. The default setting is 100.
---
--- * 'ldNextToken' - A string informing Amazon SimpleDB where to start the next list of domain names.
-listDomains
-    :: ListDomains
-listDomains =
-  ListDomains' {_ldMaxNumberOfDomains = Nothing, _ldNextToken = Nothing}
-
-
--- | The maximum number of domain names you want returned. The range is 1 to 100. The default setting is 100.
-ldMaxNumberOfDomains :: Lens' ListDomains (Maybe Int)
-ldMaxNumberOfDomains = lens _ldMaxNumberOfDomains (\ s a -> s{_ldMaxNumberOfDomains = a})
-
--- | A string informing Amazon SimpleDB where to start the next list of domain names.
-ldNextToken :: Lens' ListDomains (Maybe Text)
-ldNextToken = lens _ldNextToken (\ s a -> s{_ldNextToken = a})
-
-instance AWSPager ListDomains where
-        page rq rs
-          | stop (rs ^. ldrsNextToken) = Nothing
-          | stop (rs ^. ldrsDomainNames) = Nothing
-          | otherwise =
-            Just $ rq & ldNextToken .~ rs ^. ldrsNextToken
-
-instance AWSRequest ListDomains where
-        type Rs ListDomains = ListDomainsResponse
-        request = postQuery sdb
-        response
-          = receiveXMLWrapper "ListDomainsResult"
-              (\ s h x ->
-                 ListDomainsResponse' <$>
-                   (may (parseXMLList "DomainName") x) <*>
-                     (x .@? "NextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListDomains where
-
-instance NFData ListDomains where
-
-instance ToHeaders ListDomains where
-        toHeaders = const mempty
-
-instance ToPath ListDomains where
-        toPath = const "/"
-
-instance ToQuery ListDomains where
-        toQuery ListDomains'{..}
-          = mconcat
-              ["Action" =: ("ListDomains" :: ByteString),
-               "Version" =: ("2009-04-15" :: ByteString),
-               "MaxNumberOfDomains" =: _ldMaxNumberOfDomains,
-               "NextToken" =: _ldNextToken]
-
--- | /See:/ 'listDomainsResponse' smart constructor.
-data ListDomainsResponse = ListDomainsResponse'
-  { _ldrsDomainNames    :: !(Maybe [Text])
-  , _ldrsNextToken      :: !(Maybe Text)
-  , _ldrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListDomainsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ldrsDomainNames' - A list of domain names that match the expression.
---
--- * 'ldrsNextToken' - @MaxNumberOfDomains@
---
--- * 'ldrsResponseStatus' - -- | The response status code.
-listDomainsResponse
-    :: Int -- ^ 'ldrsResponseStatus'
-    -> ListDomainsResponse
-listDomainsResponse pResponseStatus_ =
-  ListDomainsResponse'
-    { _ldrsDomainNames = Nothing
-    , _ldrsNextToken = Nothing
-    , _ldrsResponseStatus = pResponseStatus_
-    }
-
-
--- | A list of domain names that match the expression.
-ldrsDomainNames :: Lens' ListDomainsResponse [Text]
-ldrsDomainNames = lens _ldrsDomainNames (\ s a -> s{_ldrsDomainNames = a}) . _Default . _Coerce
-
--- | @MaxNumberOfDomains@
-ldrsNextToken :: Lens' ListDomainsResponse (Maybe Text)
-ldrsNextToken = lens _ldrsNextToken (\ s a -> s{_ldrsNextToken = a})
-
--- | -- | The response status code.
-ldrsResponseStatus :: Lens' ListDomainsResponse Int
-ldrsResponseStatus = lens _ldrsResponseStatus (\ s a -> s{_ldrsResponseStatus = a})
-
-instance NFData ListDomainsResponse where
diff --git a/gen/Network/AWS/SDB/PutAttributes.hs b/gen/Network/AWS/SDB/PutAttributes.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/PutAttributes.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.SDB.PutAttributes
--- 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)
---
--- The PutAttributes operation creates or replaces attributes in an item. The client may specify new attributes using a combination of the @Attribute.X.Name@ and @Attribute.X.Value@ parameters. The client specifies the first attribute by the parameters @Attribute.0.Name@ and @Attribute.0.Value@ , the second attribute by the parameters @Attribute.1.Name@ and @Attribute.1.Value@ , and so on.
---
---
--- Attributes are uniquely identified in an item by their name/value combination. For example, a single item can have the attributes @{ "first_name", "first_value" }@ and @{ "first_name", second_value" }@ . However, it cannot have two attribute instances where both the @Attribute.X.Name@ and @Attribute.X.Value@ are the same.
---
--- Optionally, the requestor can supply the @Replace@ parameter for each individual attribute. Setting this value to @true@ causes the new attribute value to replace the existing attribute value(s). For example, if an item has the attributes @{ 'a', '1' }@ , @{ 'b', '2'}@ and @{ 'b', '3' }@ and the requestor calls @PutAttributes@ using the attributes @{ 'b', '4' }@ with the @Replace@ parameter set to true, the final attributes of the item are changed to @{ 'a', '1' }@ and @{ 'b', '4' }@ , which replaces the previous values of the 'b' attribute with the new value.
---
--- You cannot specify an empty string as an attribute name.
---
--- Because Amazon SimpleDB makes multiple copies of client data and uses an eventual consistency update model, an immediate 'GetAttributes' or 'Select' operation (read) immediately after a 'PutAttributes' or 'DeleteAttributes' operation (write) might not return the updated data.
---
--- The following limitations are enforced for this operation:     * 256 total attribute name-value pairs per item    * One billion attributes per domain    * 10 GB of total user data storage per domain
---
---
---
-module Network.AWS.SDB.PutAttributes
-    (
-    -- * Creating a Request
-      putAttributes
-    , PutAttributes
-    -- * Request Lenses
-    , paExpected
-    , paDomainName
-    , paItemName
-    , paAttributes
-
-    -- * Destructuring the Response
-    , putAttributesResponse
-    , PutAttributesResponse
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.Types.Product
-
--- | /See:/ 'putAttributes' smart constructor.
-data PutAttributes = PutAttributes'
-  { _paExpected   :: !(Maybe UpdateCondition)
-  , _paDomainName :: !Text
-  , _paItemName   :: !Text
-  , _paAttributes :: ![ReplaceableAttribute]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutAttributes' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'paExpected' - The update condition which, if specified, determines whether the specified attributes will be updated or not. The update condition must be satisfied in order for this request to be processed and the attributes to be updated.
---
--- * 'paDomainName' - The name of the domain in which to perform the operation.
---
--- * 'paItemName' - The name of the item.
---
--- * 'paAttributes' - The list of attributes.
-putAttributes
-    :: Text -- ^ 'paDomainName'
-    -> Text -- ^ 'paItemName'
-    -> PutAttributes
-putAttributes pDomainName_ pItemName_ =
-  PutAttributes'
-    { _paExpected = Nothing
-    , _paDomainName = pDomainName_
-    , _paItemName = pItemName_
-    , _paAttributes = mempty
-    }
-
-
--- | The update condition which, if specified, determines whether the specified attributes will be updated or not. The update condition must be satisfied in order for this request to be processed and the attributes to be updated.
-paExpected :: Lens' PutAttributes (Maybe UpdateCondition)
-paExpected = lens _paExpected (\ s a -> s{_paExpected = a})
-
--- | The name of the domain in which to perform the operation.
-paDomainName :: Lens' PutAttributes Text
-paDomainName = lens _paDomainName (\ s a -> s{_paDomainName = a})
-
--- | The name of the item.
-paItemName :: Lens' PutAttributes Text
-paItemName = lens _paItemName (\ s a -> s{_paItemName = a})
-
--- | The list of attributes.
-paAttributes :: Lens' PutAttributes [ReplaceableAttribute]
-paAttributes = lens _paAttributes (\ s a -> s{_paAttributes = a}) . _Coerce
-
-instance AWSRequest PutAttributes where
-        type Rs PutAttributes = PutAttributesResponse
-        request = postQuery sdb
-        response = receiveNull PutAttributesResponse'
-
-instance Hashable PutAttributes where
-
-instance NFData PutAttributes where
-
-instance ToHeaders PutAttributes where
-        toHeaders = const mempty
-
-instance ToPath PutAttributes where
-        toPath = const "/"
-
-instance ToQuery PutAttributes where
-        toQuery PutAttributes'{..}
-          = mconcat
-              ["Action" =: ("PutAttributes" :: ByteString),
-               "Version" =: ("2009-04-15" :: ByteString),
-               "Expected" =: _paExpected,
-               "DomainName" =: _paDomainName,
-               "ItemName" =: _paItemName,
-               toQueryList "Attribute" _paAttributes]
-
--- | /See:/ 'putAttributesResponse' smart constructor.
-data PutAttributesResponse =
-  PutAttributesResponse'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'PutAttributesResponse' with the minimum fields required to make a request.
---
-putAttributesResponse
-    :: PutAttributesResponse
-putAttributesResponse = PutAttributesResponse'
-
-
-instance NFData PutAttributesResponse where
diff --git a/gen/Network/AWS/SDB/Select.hs b/gen/Network/AWS/SDB/Select.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/Select.hs
+++ /dev/null
@@ -1,173 +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.SDB.Select
--- 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)
---
--- The @Select@ operation returns a set of attributes for @ItemNames@ that match the select expression. @Select@ is similar to the standard SQL SELECT statement.
---
---
--- The total size of the response cannot exceed 1 MB in total size. Amazon SimpleDB automatically adjusts the number of items returned per page to enforce this limit. For example, if the client asks to retrieve 2500 items, but each individual item is 10 kB in size, the system returns 100 items and an appropriate @NextToken@ so the client can access the next page of results.
---
--- For information on how to construct select expressions, see Using Select to Create Amazon SimpleDB Queries in the Developer Guide.
---
---
--- This operation returns paginated results.
-module Network.AWS.SDB.Select
-    (
-    -- * Creating a Request
-      select
-    , Select
-    -- * Request Lenses
-    , sConsistentRead
-    , sNextToken
-    , sSelectExpression
-
-    -- * Destructuring the Response
-    , selectResponse
-    , SelectResponse
-    -- * Response Lenses
-    , srsItems
-    , srsNextToken
-    , srsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SDB.Types
-import Network.AWS.SDB.Types.Product
-
--- | /See:/ 'select' smart constructor.
-data Select = Select'
-  { _sConsistentRead   :: !(Maybe Bool)
-  , _sNextToken        :: !(Maybe Text)
-  , _sSelectExpression :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Select' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sConsistentRead' - @true@
---
--- * 'sNextToken' - @ItemNames@
---
--- * 'sSelectExpression' - The expression used to query the domain.
-select
-    :: Text -- ^ 'sSelectExpression'
-    -> Select
-select pSelectExpression_ =
-  Select'
-    { _sConsistentRead = Nothing
-    , _sNextToken = Nothing
-    , _sSelectExpression = pSelectExpression_
-    }
-
-
--- | @true@
-sConsistentRead :: Lens' Select (Maybe Bool)
-sConsistentRead = lens _sConsistentRead (\ s a -> s{_sConsistentRead = a})
-
--- | @ItemNames@
-sNextToken :: Lens' Select (Maybe Text)
-sNextToken = lens _sNextToken (\ s a -> s{_sNextToken = a})
-
--- | The expression used to query the domain.
-sSelectExpression :: Lens' Select Text
-sSelectExpression = lens _sSelectExpression (\ s a -> s{_sSelectExpression = a})
-
-instance AWSPager Select where
-        page rq rs
-          | stop (rs ^. srsNextToken) = Nothing
-          | stop (rs ^. srsItems) = Nothing
-          | otherwise =
-            Just $ rq & sNextToken .~ rs ^. srsNextToken
-
-instance AWSRequest Select where
-        type Rs Select = SelectResponse
-        request = postQuery sdb
-        response
-          = receiveXMLWrapper "SelectResult"
-              (\ s h x ->
-                 SelectResponse' <$>
-                   (may (parseXMLList "Item") x) <*> (x .@? "NextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable Select where
-
-instance NFData Select where
-
-instance ToHeaders Select where
-        toHeaders = const mempty
-
-instance ToPath Select where
-        toPath = const "/"
-
-instance ToQuery Select where
-        toQuery Select'{..}
-          = mconcat
-              ["Action" =: ("Select" :: ByteString),
-               "Version" =: ("2009-04-15" :: ByteString),
-               "ConsistentRead" =: _sConsistentRead,
-               "NextToken" =: _sNextToken,
-               "SelectExpression" =: _sSelectExpression]
-
--- | /See:/ 'selectResponse' smart constructor.
-data SelectResponse = SelectResponse'
-  { _srsItems          :: !(Maybe [Item])
-  , _srsNextToken      :: !(Maybe Text)
-  , _srsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'SelectResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srsItems' - A list of items that match the select expression.
---
--- * 'srsNextToken' - @MaxNumberOfItems@
---
--- * 'srsResponseStatus' - -- | The response status code.
-selectResponse
-    :: Int -- ^ 'srsResponseStatus'
-    -> SelectResponse
-selectResponse pResponseStatus_ =
-  SelectResponse'
-    { _srsItems = Nothing
-    , _srsNextToken = Nothing
-    , _srsResponseStatus = pResponseStatus_
-    }
-
-
--- | A list of items that match the select expression.
-srsItems :: Lens' SelectResponse [Item]
-srsItems = lens _srsItems (\ s a -> s{_srsItems = a}) . _Default . _Coerce
-
--- | @MaxNumberOfItems@
-srsNextToken :: Lens' SelectResponse (Maybe Text)
-srsNextToken = lens _srsNextToken (\ s a -> s{_srsNextToken = a})
-
--- | -- | The response status code.
-srsResponseStatus :: Lens' SelectResponse Int
-srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a})
-
-instance NFData SelectResponse where
diff --git a/gen/Network/AWS/SDB/Types.hs b/gen/Network/AWS/SDB/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/Types.hs
+++ /dev/null
@@ -1,253 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.SDB.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.SDB.Types
-    (
-    -- * Service Configuration
-      sdb
-
-    -- * Errors
-    , _InvalidNumberValueTests
-    , _NoSuchDomain
-    , _NumberSubmittedItemsExceeded
-    , _AttributeDoesNotExist
-    , _NumberDomainAttributesExceeded
-    , _DuplicateItemName
-    , _MissingParameter
-    , _InvalidNextToken
-    , _InvalidParameterValue
-    , _NumberItemAttributesExceeded
-    , _RequestTimeout
-    , _TooManyRequestedAttributes
-    , _InvalidNumberPredicates
-    , _NumberDomainsExceeded
-    , _NumberSubmittedAttributesExceeded
-    , _NumberDomainBytesExceeded
-    , _InvalidQueryExpression
-
-    -- * Attribute
-    , Attribute
-    , attribute
-    , aAlternateValueEncoding
-    , aAlternateNameEncoding
-    , aName
-    , aValue
-
-    -- * DeletableItem
-    , DeletableItem
-    , deletableItem
-    , diAttributes
-    , diName
-
-    -- * Item
-    , Item
-    , item
-    , iAlternateNameEncoding
-    , iName
-    , iAttributes
-
-    -- * ReplaceableAttribute
-    , ReplaceableAttribute
-    , replaceableAttribute
-    , raReplace
-    , raName
-    , raValue
-
-    -- * ReplaceableItem
-    , ReplaceableItem
-    , replaceableItem
-    , riName
-    , riAttributes
-
-    -- * UpdateCondition
-    , UpdateCondition
-    , updateCondition
-    , ucExists
-    , ucValue
-    , ucName
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.SDB.Types.Product
-import Network.AWS.SDB.Types.Sum
-import Network.AWS.Sign.V2
-
--- | API version @2009-04-15@ of the Amazon SimpleDB SDK configuration.
-sdb :: Service
-sdb =
-  Service
-    { _svcAbbrev = "SDB"
-    , _svcSigner = v2
-    , _svcPrefix = "sdb"
-    , _svcVersion = "2009-04-15"
-    , _svcEndpoint = defaultEndpoint sdb
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseXMLError "SDB"
-    , _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
-
-
--- | Too many predicates exist in the query expression.
---
---
-_InvalidNumberValueTests :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidNumberValueTests =
-  _MatchServiceError sdb "InvalidNumberValueTests" . hasStatus 400
-
-
--- | The specified domain does not exist.
---
---
-_NoSuchDomain :: AsError a => Getting (First ServiceError) a ServiceError
-_NoSuchDomain = _MatchServiceError sdb "NoSuchDomain" . hasStatus 400
-
-
--- | Too many items exist in a single call.
---
---
-_NumberSubmittedItemsExceeded :: AsError a => Getting (First ServiceError) a ServiceError
-_NumberSubmittedItemsExceeded =
-  _MatchServiceError sdb "NumberSubmittedItemsExceeded" . hasStatus 409
-
-
--- | The specified attribute does not exist.
---
---
-_AttributeDoesNotExist :: AsError a => Getting (First ServiceError) a ServiceError
-_AttributeDoesNotExist =
-  _MatchServiceError sdb "AttributeDoesNotExist" . hasStatus 404
-
-
--- | Too many attributes in this domain.
---
---
-_NumberDomainAttributesExceeded :: AsError a => Getting (First ServiceError) a ServiceError
-_NumberDomainAttributesExceeded =
-  _MatchServiceError sdb "NumberDomainAttributesExceeded" . hasStatus 409
-
-
--- | The item name was specified more than once.
---
---
-_DuplicateItemName :: AsError a => Getting (First ServiceError) a ServiceError
-_DuplicateItemName = _MatchServiceError sdb "DuplicateItemName" . hasStatus 400
-
-
--- | The request must contain the specified missing parameter.
---
---
-_MissingParameter :: AsError a => Getting (First ServiceError) a ServiceError
-_MissingParameter = _MatchServiceError sdb "MissingParameter" . hasStatus 400
-
-
--- | The specified NextToken is not valid.
---
---
-_InvalidNextToken :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidNextToken = _MatchServiceError sdb "InvalidNextToken" . hasStatus 400
-
-
--- | The value for a parameter is invalid.
---
---
-_InvalidParameterValue :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidParameterValue =
-  _MatchServiceError sdb "InvalidParameterValue" . hasStatus 400
-
-
--- | Too many attributes in this item.
---
---
-_NumberItemAttributesExceeded :: AsError a => Getting (First ServiceError) a ServiceError
-_NumberItemAttributesExceeded =
-  _MatchServiceError sdb "NumberItemAttributesExceeded" . hasStatus 409
-
-
--- | A timeout occurred when attempting to query the specified domain with specified query expression.
---
---
-_RequestTimeout :: AsError a => Getting (First ServiceError) a ServiceError
-_RequestTimeout = _MatchServiceError sdb "RequestTimeout" . hasStatus 408
-
-
--- | Too many attributes requested.
---
---
-_TooManyRequestedAttributes :: AsError a => Getting (First ServiceError) a ServiceError
-_TooManyRequestedAttributes =
-  _MatchServiceError sdb "TooManyRequestedAttributes" . hasStatus 400
-
-
--- | Too many predicates exist in the query expression.
---
---
-_InvalidNumberPredicates :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidNumberPredicates =
-  _MatchServiceError sdb "InvalidNumberPredicates" . hasStatus 400
-
-
--- | Too many domains exist per this account.
---
---
-_NumberDomainsExceeded :: AsError a => Getting (First ServiceError) a ServiceError
-_NumberDomainsExceeded =
-  _MatchServiceError sdb "NumberDomainsExceeded" . hasStatus 409
-
-
--- | Too many attributes exist in a single call.
---
---
-_NumberSubmittedAttributesExceeded :: AsError a => Getting (First ServiceError) a ServiceError
-_NumberSubmittedAttributesExceeded =
-  _MatchServiceError sdb "NumberSubmittedAttributesExceeded" . hasStatus 409
-
-
--- | Too many bytes in this domain.
---
---
-_NumberDomainBytesExceeded :: AsError a => Getting (First ServiceError) a ServiceError
-_NumberDomainBytesExceeded =
-  _MatchServiceError sdb "NumberDomainBytesExceeded" . hasStatus 409
-
-
--- | The specified query expression syntax is not valid.
---
---
-_InvalidQueryExpression :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidQueryExpression =
-  _MatchServiceError sdb "InvalidQueryExpression" . hasStatus 400
-
diff --git a/gen/Network/AWS/SDB/Types/Product.hs b/gen/Network/AWS/SDB/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/Types/Product.hs
+++ /dev/null
@@ -1,329 +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.SDB.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.SDB.Types.Product where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.SDB.Types.Sum
-
--- |
---
---
---
--- /See:/ 'attribute' smart constructor.
-data Attribute = Attribute'
-  { _aAlternateValueEncoding :: !(Maybe Text)
-  , _aAlternateNameEncoding  :: !(Maybe Text)
-  , _aName                   :: !Text
-  , _aValue                  :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Attribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aAlternateValueEncoding' -
---
--- * 'aAlternateNameEncoding' -
---
--- * 'aName' - The name of the attribute.
---
--- * 'aValue' - The value of the attribute.
-attribute
-    :: Text -- ^ 'aName'
-    -> Text -- ^ 'aValue'
-    -> Attribute
-attribute pName_ pValue_ =
-  Attribute'
-    { _aAlternateValueEncoding = Nothing
-    , _aAlternateNameEncoding = Nothing
-    , _aName = pName_
-    , _aValue = pValue_
-    }
-
-
--- |
-aAlternateValueEncoding :: Lens' Attribute (Maybe Text)
-aAlternateValueEncoding = lens _aAlternateValueEncoding (\ s a -> s{_aAlternateValueEncoding = a})
-
--- |
-aAlternateNameEncoding :: Lens' Attribute (Maybe Text)
-aAlternateNameEncoding = lens _aAlternateNameEncoding (\ s a -> s{_aAlternateNameEncoding = a})
-
--- | The name of the attribute.
-aName :: Lens' Attribute Text
-aName = lens _aName (\ s a -> s{_aName = a})
-
--- | The value of the attribute.
-aValue :: Lens' Attribute Text
-aValue = lens _aValue (\ s a -> s{_aValue = a})
-
-instance FromXML Attribute where
-        parseXML x
-          = Attribute' <$>
-              (x .@? "AlternateValueEncoding") <*>
-                (x .@? "AlternateNameEncoding")
-                <*> (x .@ "Name")
-                <*> (x .@ "Value")
-
-instance Hashable Attribute where
-
-instance NFData Attribute where
-
-instance ToQuery Attribute where
-        toQuery Attribute'{..}
-          = mconcat
-              ["AlternateValueEncoding" =:
-                 _aAlternateValueEncoding,
-               "AlternateNameEncoding" =: _aAlternateNameEncoding,
-               "Name" =: _aName, "Value" =: _aValue]
-
--- | /See:/ 'deletableItem' smart constructor.
-data DeletableItem = DeletableItem'
-  { _diAttributes :: !(Maybe [Attribute])
-  , _diName       :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeletableItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'diAttributes' - Undocumented member.
---
--- * 'diName' - Undocumented member.
-deletableItem
-    :: Text -- ^ 'diName'
-    -> DeletableItem
-deletableItem pName_ =
-  DeletableItem' {_diAttributes = Nothing, _diName = pName_}
-
-
--- | Undocumented member.
-diAttributes :: Lens' DeletableItem [Attribute]
-diAttributes = lens _diAttributes (\ s a -> s{_diAttributes = a}) . _Default . _Coerce
-
--- | Undocumented member.
-diName :: Lens' DeletableItem Text
-diName = lens _diName (\ s a -> s{_diName = a})
-
-instance Hashable DeletableItem where
-
-instance NFData DeletableItem where
-
-instance ToQuery DeletableItem where
-        toQuery DeletableItem'{..}
-          = mconcat
-              [toQuery (toQueryList "Attribute" <$> _diAttributes),
-               "ItemName" =: _diName]
-
--- |
---
---
---
--- /See:/ 'item' smart constructor.
-data Item = Item'
-  { _iAlternateNameEncoding :: !(Maybe Text)
-  , _iName                  :: !Text
-  , _iAttributes            :: ![Attribute]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Item' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iAlternateNameEncoding' -
---
--- * 'iName' - The name of the item.
---
--- * 'iAttributes' - A list of attributes.
-item
-    :: Text -- ^ 'iName'
-    -> Item
-item pName_ =
-  Item'
-    {_iAlternateNameEncoding = Nothing, _iName = pName_, _iAttributes = mempty}
-
-
--- |
-iAlternateNameEncoding :: Lens' Item (Maybe Text)
-iAlternateNameEncoding = lens _iAlternateNameEncoding (\ s a -> s{_iAlternateNameEncoding = a})
-
--- | The name of the item.
-iName :: Lens' Item Text
-iName = lens _iName (\ s a -> s{_iName = a})
-
--- | A list of attributes.
-iAttributes :: Lens' Item [Attribute]
-iAttributes = lens _iAttributes (\ s a -> s{_iAttributes = a}) . _Coerce
-
-instance FromXML Item where
-        parseXML x
-          = Item' <$>
-              (x .@? "AlternateNameEncoding") <*> (x .@ "Name") <*>
-                (parseXMLList "Attribute" x)
-
-instance Hashable Item where
-
-instance NFData Item where
-
--- |
---
---
---
--- /See:/ 'replaceableAttribute' smart constructor.
-data ReplaceableAttribute = ReplaceableAttribute'
-  { _raReplace :: !(Maybe Bool)
-  , _raName    :: !Text
-  , _raValue   :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ReplaceableAttribute' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'raReplace' - @false@
---
--- * 'raName' - The name of the replaceable attribute.
---
--- * 'raValue' - The value of the replaceable attribute.
-replaceableAttribute
-    :: Text -- ^ 'raName'
-    -> Text -- ^ 'raValue'
-    -> ReplaceableAttribute
-replaceableAttribute pName_ pValue_ =
-  ReplaceableAttribute'
-    {_raReplace = Nothing, _raName = pName_, _raValue = pValue_}
-
-
--- | @false@
-raReplace :: Lens' ReplaceableAttribute (Maybe Bool)
-raReplace = lens _raReplace (\ s a -> s{_raReplace = a})
-
--- | The name of the replaceable attribute.
-raName :: Lens' ReplaceableAttribute Text
-raName = lens _raName (\ s a -> s{_raName = a})
-
--- | The value of the replaceable attribute.
-raValue :: Lens' ReplaceableAttribute Text
-raValue = lens _raValue (\ s a -> s{_raValue = a})
-
-instance Hashable ReplaceableAttribute where
-
-instance NFData ReplaceableAttribute where
-
-instance ToQuery ReplaceableAttribute where
-        toQuery ReplaceableAttribute'{..}
-          = mconcat
-              ["Replace" =: _raReplace, "Name" =: _raName,
-               "Value" =: _raValue]
-
--- |
---
---
---
--- /See:/ 'replaceableItem' smart constructor.
-data ReplaceableItem = ReplaceableItem'
-  { _riName       :: !Text
-  , _riAttributes :: ![ReplaceableAttribute]
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ReplaceableItem' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'riName' - The name of the replaceable item.
---
--- * 'riAttributes' - The list of attributes for a replaceable item.
-replaceableItem
-    :: Text -- ^ 'riName'
-    -> ReplaceableItem
-replaceableItem pName_ =
-  ReplaceableItem' {_riName = pName_, _riAttributes = mempty}
-
-
--- | The name of the replaceable item.
-riName :: Lens' ReplaceableItem Text
-riName = lens _riName (\ s a -> s{_riName = a})
-
--- | The list of attributes for a replaceable item.
-riAttributes :: Lens' ReplaceableItem [ReplaceableAttribute]
-riAttributes = lens _riAttributes (\ s a -> s{_riAttributes = a}) . _Coerce
-
-instance Hashable ReplaceableItem where
-
-instance NFData ReplaceableItem where
-
-instance ToQuery ReplaceableItem where
-        toQuery ReplaceableItem'{..}
-          = mconcat
-              ["ItemName" =: _riName,
-               toQueryList "Attribute" _riAttributes]
-
--- | Specifies the conditions under which data should be updated. If an update condition is specified for a request, the data will only be updated if the condition is satisfied. For example, if an attribute with a specific name and value exists, or if a specific attribute doesn't exist.
---
---
---
--- /See:/ 'updateCondition' smart constructor.
-data UpdateCondition = UpdateCondition'
-  { _ucExists :: !(Maybe Bool)
-  , _ucValue  :: !(Maybe Text)
-  , _ucName   :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateCondition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ucExists' - A value specifying whether or not the specified attribute must exist with the specified value in order for the update condition to be satisfied. Specify @true@ if the attribute must exist for the update condition to be satisfied. Specify @false@ if the attribute should not exist in order for the update condition to be satisfied.
---
--- * 'ucValue' - The value of an attribute. This value can only be specified when the @Exists@ parameter is equal to @true@ .
---
--- * 'ucName' - The name of the attribute involved in the condition.
-updateCondition
-    :: UpdateCondition
-updateCondition =
-  UpdateCondition' {_ucExists = Nothing, _ucValue = Nothing, _ucName = Nothing}
-
-
--- | A value specifying whether or not the specified attribute must exist with the specified value in order for the update condition to be satisfied. Specify @true@ if the attribute must exist for the update condition to be satisfied. Specify @false@ if the attribute should not exist in order for the update condition to be satisfied.
-ucExists :: Lens' UpdateCondition (Maybe Bool)
-ucExists = lens _ucExists (\ s a -> s{_ucExists = a})
-
--- | The value of an attribute. This value can only be specified when the @Exists@ parameter is equal to @true@ .
-ucValue :: Lens' UpdateCondition (Maybe Text)
-ucValue = lens _ucValue (\ s a -> s{_ucValue = a})
-
--- | The name of the attribute involved in the condition.
-ucName :: Lens' UpdateCondition (Maybe Text)
-ucName = lens _ucName (\ s a -> s{_ucName = a})
-
-instance Hashable UpdateCondition where
-
-instance NFData UpdateCondition where
-
-instance ToQuery UpdateCondition where
-        toQuery UpdateCondition'{..}
-          = mconcat
-              ["Exists" =: _ucExists, "Value" =: _ucValue,
-               "Name" =: _ucName]
diff --git a/gen/Network/AWS/SDB/Types/Sum.hs b/gen/Network/AWS/SDB/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/Types/Sum.hs
+++ /dev/null
@@ -1,20 +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.SDB.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.SDB.Types.Sum where
-
-import Network.AWS.Prelude
diff --git a/gen/Network/AWS/SDB/Waiters.hs b/gen/Network/AWS/SDB/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/SDB/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.SDB.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.SDB.Waiters where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.SDB.Types
-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.SDB
+import Test.Amazonka.SDB.Internal
 import Test.Tasty
-import Test.AWS.SDB
-import Test.AWS.SDB.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "SDB"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "SDB"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/Gen/SDB.hs b/test/Test/AWS/Gen/SDB.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/SDB.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.SDB
--- 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.SDB where
-
-import Data.Proxy
-import Network.AWS.SDB
-import Test.AWS.Fixture
-import Test.AWS.Prelude
-import Test.AWS.SDB.Internal
-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"
---         [ requestBatchDeleteAttributes $
---             batchDeleteAttributes
---
---         , requestBatchPutAttributes $
---             batchPutAttributes
---
---         , requestGetAttributes $
---             getAttributes
---
---         , requestCreateDomain $
---             createDomain
---
---         , requestDomainMetadata $
---             domainMetadata
---
---         , requestSelect $
---             select
---
---         , requestDeleteAttributes $
---             deleteAttributes
---
---         , requestPutAttributes $
---             putAttributes
---
---         , requestDeleteDomain $
---             deleteDomain
---
---         , requestListDomains $
---             listDomains
---
---           ]
-
---     , testGroup "response"
---         [ responseBatchDeleteAttributes $
---             batchDeleteAttributesResponse
---
---         , responseBatchPutAttributes $
---             batchPutAttributesResponse
---
---         , responseGetAttributes $
---             getAttributesResponse
---
---         , responseCreateDomain $
---             createDomainResponse
---
---         , responseDomainMetadata $
---             domainMetadataResponse
---
---         , responseSelect $
---             selectResponse
---
---         , responseDeleteAttributes $
---             deleteAttributesResponse
---
---         , responsePutAttributes $
---             putAttributesResponse
---
---         , responseDeleteDomain $
---             deleteDomainResponse
---
---         , responseListDomains $
---             listDomainsResponse
---
---           ]
---     ]
-
--- Requests
-
-requestBatchDeleteAttributes :: BatchDeleteAttributes -> TestTree
-requestBatchDeleteAttributes = req
-    "BatchDeleteAttributes"
-    "fixture/BatchDeleteAttributes.yaml"
-
-requestBatchPutAttributes :: BatchPutAttributes -> TestTree
-requestBatchPutAttributes = req
-    "BatchPutAttributes"
-    "fixture/BatchPutAttributes.yaml"
-
-requestGetAttributes :: GetAttributes -> TestTree
-requestGetAttributes = req
-    "GetAttributes"
-    "fixture/GetAttributes.yaml"
-
-requestCreateDomain :: CreateDomain -> TestTree
-requestCreateDomain = req
-    "CreateDomain"
-    "fixture/CreateDomain.yaml"
-
-requestDomainMetadata :: DomainMetadata -> TestTree
-requestDomainMetadata = req
-    "DomainMetadata"
-    "fixture/DomainMetadata.yaml"
-
-requestSelect :: Select -> TestTree
-requestSelect = req
-    "Select"
-    "fixture/Select.yaml"
-
-requestDeleteAttributes :: DeleteAttributes -> TestTree
-requestDeleteAttributes = req
-    "DeleteAttributes"
-    "fixture/DeleteAttributes.yaml"
-
-requestPutAttributes :: PutAttributes -> TestTree
-requestPutAttributes = req
-    "PutAttributes"
-    "fixture/PutAttributes.yaml"
-
-requestDeleteDomain :: DeleteDomain -> TestTree
-requestDeleteDomain = req
-    "DeleteDomain"
-    "fixture/DeleteDomain.yaml"
-
-requestListDomains :: ListDomains -> TestTree
-requestListDomains = req
-    "ListDomains"
-    "fixture/ListDomains.yaml"
-
--- Responses
-
-responseBatchDeleteAttributes :: BatchDeleteAttributesResponse -> TestTree
-responseBatchDeleteAttributes = res
-    "BatchDeleteAttributesResponse"
-    "fixture/BatchDeleteAttributesResponse.proto"
-    sdb
-    (Proxy :: Proxy BatchDeleteAttributes)
-
-responseBatchPutAttributes :: BatchPutAttributesResponse -> TestTree
-responseBatchPutAttributes = res
-    "BatchPutAttributesResponse"
-    "fixture/BatchPutAttributesResponse.proto"
-    sdb
-    (Proxy :: Proxy BatchPutAttributes)
-
-responseGetAttributes :: GetAttributesResponse -> TestTree
-responseGetAttributes = res
-    "GetAttributesResponse"
-    "fixture/GetAttributesResponse.proto"
-    sdb
-    (Proxy :: Proxy GetAttributes)
-
-responseCreateDomain :: CreateDomainResponse -> TestTree
-responseCreateDomain = res
-    "CreateDomainResponse"
-    "fixture/CreateDomainResponse.proto"
-    sdb
-    (Proxy :: Proxy CreateDomain)
-
-responseDomainMetadata :: DomainMetadataResponse -> TestTree
-responseDomainMetadata = res
-    "DomainMetadataResponse"
-    "fixture/DomainMetadataResponse.proto"
-    sdb
-    (Proxy :: Proxy DomainMetadata)
-
-responseSelect :: SelectResponse -> TestTree
-responseSelect = res
-    "SelectResponse"
-    "fixture/SelectResponse.proto"
-    sdb
-    (Proxy :: Proxy Select)
-
-responseDeleteAttributes :: DeleteAttributesResponse -> TestTree
-responseDeleteAttributes = res
-    "DeleteAttributesResponse"
-    "fixture/DeleteAttributesResponse.proto"
-    sdb
-    (Proxy :: Proxy DeleteAttributes)
-
-responsePutAttributes :: PutAttributesResponse -> TestTree
-responsePutAttributes = res
-    "PutAttributesResponse"
-    "fixture/PutAttributesResponse.proto"
-    sdb
-    (Proxy :: Proxy PutAttributes)
-
-responseDeleteDomain :: DeleteDomainResponse -> TestTree
-responseDeleteDomain = res
-    "DeleteDomainResponse"
-    "fixture/DeleteDomainResponse.proto"
-    sdb
-    (Proxy :: Proxy DeleteDomain)
-
-responseListDomains :: ListDomainsResponse -> TestTree
-responseListDomains = res
-    "ListDomainsResponse"
-    "fixture/ListDomainsResponse.proto"
-    sdb
-    (Proxy :: Proxy ListDomains)
diff --git a/test/Test/AWS/SDB.hs b/test/Test/AWS/SDB.hs
deleted file mode 100644
--- a/test/Test/AWS/SDB.hs
+++ /dev/null
@@ -1,26 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Module      : Test.AWS.SDB
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
-
-module Test.AWS.SDB
-    ( tests
-    , fixtures
-    ) where
-
-import           Network.AWS.SDB
-import           Test.AWS.Gen.SDB
-import           Test.Tasty
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/SDB/Internal.hs b/test/Test/AWS/SDB/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/SDB/Internal.hs
+++ /dev/null
@@ -1,16 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Test.AWS.SDB.Internal
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
-
-module Test.AWS.SDB.Internal where
-
-import Test.AWS.Prelude
diff --git a/test/Test/Amazonka/Gen/SDB.hs b/test/Test/Amazonka/Gen/SDB.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/SDB.hs
@@ -0,0 +1,238 @@
+{-# 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.SDB
+-- 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.SDB where
+
+import Amazonka.SDB
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.SDB.Internal
+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"
+--         [ requestBatchDeleteAttributes $
+--             newBatchDeleteAttributes
+--
+--         , requestBatchPutAttributes $
+--             newBatchPutAttributes
+--
+--         , requestCreateDomain $
+--             newCreateDomain
+--
+--         , requestDeleteAttributes $
+--             newDeleteAttributes
+--
+--         , requestDeleteDomain $
+--             newDeleteDomain
+--
+--         , requestDomainMetadata $
+--             newDomainMetadata
+--
+--         , requestGetAttributes $
+--             newGetAttributes
+--
+--         , requestListDomains $
+--             newListDomains
+--
+--         , requestPutAttributes $
+--             newPutAttributes
+--
+--         , requestSelect $
+--             newSelect
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseBatchDeleteAttributes $
+--             newBatchDeleteAttributesResponse
+--
+--         , responseBatchPutAttributes $
+--             newBatchPutAttributesResponse
+--
+--         , responseCreateDomain $
+--             newCreateDomainResponse
+--
+--         , responseDeleteAttributes $
+--             newDeleteAttributesResponse
+--
+--         , responseDeleteDomain $
+--             newDeleteDomainResponse
+--
+--         , responseDomainMetadata $
+--             newDomainMetadataResponse
+--
+--         , responseGetAttributes $
+--             newGetAttributesResponse
+--
+--         , responseListDomains $
+--             newListDomainsResponse
+--
+--         , responsePutAttributes $
+--             newPutAttributesResponse
+--
+--         , responseSelect $
+--             newSelectResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestBatchDeleteAttributes :: BatchDeleteAttributes -> TestTree
+requestBatchDeleteAttributes =
+  req
+    "BatchDeleteAttributes"
+    "fixture/BatchDeleteAttributes.yaml"
+
+requestBatchPutAttributes :: BatchPutAttributes -> TestTree
+requestBatchPutAttributes =
+  req
+    "BatchPutAttributes"
+    "fixture/BatchPutAttributes.yaml"
+
+requestCreateDomain :: CreateDomain -> TestTree
+requestCreateDomain =
+  req
+    "CreateDomain"
+    "fixture/CreateDomain.yaml"
+
+requestDeleteAttributes :: DeleteAttributes -> TestTree
+requestDeleteAttributes =
+  req
+    "DeleteAttributes"
+    "fixture/DeleteAttributes.yaml"
+
+requestDeleteDomain :: DeleteDomain -> TestTree
+requestDeleteDomain =
+  req
+    "DeleteDomain"
+    "fixture/DeleteDomain.yaml"
+
+requestDomainMetadata :: DomainMetadata -> TestTree
+requestDomainMetadata =
+  req
+    "DomainMetadata"
+    "fixture/DomainMetadata.yaml"
+
+requestGetAttributes :: GetAttributes -> TestTree
+requestGetAttributes =
+  req
+    "GetAttributes"
+    "fixture/GetAttributes.yaml"
+
+requestListDomains :: ListDomains -> TestTree
+requestListDomains =
+  req
+    "ListDomains"
+    "fixture/ListDomains.yaml"
+
+requestPutAttributes :: PutAttributes -> TestTree
+requestPutAttributes =
+  req
+    "PutAttributes"
+    "fixture/PutAttributes.yaml"
+
+requestSelect :: Select -> TestTree
+requestSelect =
+  req
+    "Select"
+    "fixture/Select.yaml"
+
+-- Responses
+
+responseBatchDeleteAttributes :: BatchDeleteAttributesResponse -> TestTree
+responseBatchDeleteAttributes =
+  res
+    "BatchDeleteAttributesResponse"
+    "fixture/BatchDeleteAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchDeleteAttributes)
+
+responseBatchPutAttributes :: BatchPutAttributesResponse -> TestTree
+responseBatchPutAttributes =
+  res
+    "BatchPutAttributesResponse"
+    "fixture/BatchPutAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy BatchPutAttributes)
+
+responseCreateDomain :: CreateDomainResponse -> TestTree
+responseCreateDomain =
+  res
+    "CreateDomainResponse"
+    "fixture/CreateDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateDomain)
+
+responseDeleteAttributes :: DeleteAttributesResponse -> TestTree
+responseDeleteAttributes =
+  res
+    "DeleteAttributesResponse"
+    "fixture/DeleteAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAttributes)
+
+responseDeleteDomain :: DeleteDomainResponse -> TestTree
+responseDeleteDomain =
+  res
+    "DeleteDomainResponse"
+    "fixture/DeleteDomainResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteDomain)
+
+responseDomainMetadata :: DomainMetadataResponse -> TestTree
+responseDomainMetadata =
+  res
+    "DomainMetadataResponse"
+    "fixture/DomainMetadataResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DomainMetadata)
+
+responseGetAttributes :: GetAttributesResponse -> TestTree
+responseGetAttributes =
+  res
+    "GetAttributesResponse"
+    "fixture/GetAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAttributes)
+
+responseListDomains :: ListDomainsResponse -> TestTree
+responseListDomains =
+  res
+    "ListDomainsResponse"
+    "fixture/ListDomainsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListDomains)
+
+responsePutAttributes :: PutAttributesResponse -> TestTree
+responsePutAttributes =
+  res
+    "PutAttributesResponse"
+    "fixture/PutAttributesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAttributes)
+
+responseSelect :: SelectResponse -> TestTree
+responseSelect =
+  res
+    "SelectResponse"
+    "fixture/SelectResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy Select)
diff --git a/test/Test/Amazonka/SDB.hs b/test/Test/Amazonka/SDB.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/SDB.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.SDB
+-- 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.SDB
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/SDB/Internal.hs b/test/Test/Amazonka/SDB/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/SDB/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.SDB.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.SDB.Internal where
