diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -7,9 +7,8 @@
 
 
 ## Version
-
-`1.6.1`
-
+ 
+`2.0` - Derived from API version @2016-06-30@ 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.Snowball](http://hackage.haskell.org/package/amazonka-snowball/docs/Network-AWS-Snowball.html)
+See [Amazonka.Snowball](http://hackage.haskell.org/package/amazonka-snowball/docs/Amazonka-Snowball.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-snowball.cabal b/amazonka-snowball.cabal
--- a/amazonka-snowball.cabal
+++ b/amazonka-snowball.cabal
@@ -1,102 +1,148 @@
-name:                  amazonka-snowball
-version:               1.6.1
-synopsis:              Amazon Import/Export Snowball 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-snowball
+version:            2.0
+synopsis:           Amazon Import/Export Snowball 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.Snowball" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2016-06-30@ 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.Snowball.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.Snowball" 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-snowball
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-snowball
 
 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.Snowball
-        , Network.AWS.Snowball.CancelCluster
-        , Network.AWS.Snowball.CancelJob
-        , Network.AWS.Snowball.CreateAddress
-        , Network.AWS.Snowball.CreateCluster
-        , Network.AWS.Snowball.CreateJob
-        , Network.AWS.Snowball.DescribeAddress
-        , Network.AWS.Snowball.DescribeAddresses
-        , Network.AWS.Snowball.DescribeCluster
-        , Network.AWS.Snowball.DescribeJob
-        , Network.AWS.Snowball.GetJobManifest
-        , Network.AWS.Snowball.GetJobUnlockCode
-        , Network.AWS.Snowball.GetSnowballUsage
-        , Network.AWS.Snowball.ListClusterJobs
-        , Network.AWS.Snowball.ListClusters
-        , Network.AWS.Snowball.ListJobs
-        , Network.AWS.Snowball.Types
-        , Network.AWS.Snowball.UpdateCluster
-        , Network.AWS.Snowball.UpdateJob
-        , Network.AWS.Snowball.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.Snowball.Types.Product
-        , Network.AWS.Snowball.Types.Sum
+  exposed-modules:
+    Amazonka.Snowball
+    Amazonka.Snowball.CancelCluster
+    Amazonka.Snowball.CancelJob
+    Amazonka.Snowball.CreateAddress
+    Amazonka.Snowball.CreateCluster
+    Amazonka.Snowball.CreateJob
+    Amazonka.Snowball.CreateLongTermPricing
+    Amazonka.Snowball.CreateReturnShippingLabel
+    Amazonka.Snowball.DescribeAddress
+    Amazonka.Snowball.DescribeAddresses
+    Amazonka.Snowball.DescribeCluster
+    Amazonka.Snowball.DescribeJob
+    Amazonka.Snowball.DescribeReturnShippingLabel
+    Amazonka.Snowball.GetJobManifest
+    Amazonka.Snowball.GetJobUnlockCode
+    Amazonka.Snowball.GetSnowballUsage
+    Amazonka.Snowball.GetSoftwareUpdates
+    Amazonka.Snowball.Lens
+    Amazonka.Snowball.ListClusterJobs
+    Amazonka.Snowball.ListClusters
+    Amazonka.Snowball.ListCompatibleImages
+    Amazonka.Snowball.ListJobs
+    Amazonka.Snowball.ListLongTermPricing
+    Amazonka.Snowball.Types
+    Amazonka.Snowball.Types.Address
+    Amazonka.Snowball.Types.ClusterListEntry
+    Amazonka.Snowball.Types.ClusterMetadata
+    Amazonka.Snowball.Types.ClusterState
+    Amazonka.Snowball.Types.CompatibleImage
+    Amazonka.Snowball.Types.DataTransfer
+    Amazonka.Snowball.Types.DeviceConfiguration
+    Amazonka.Snowball.Types.DeviceServiceName
+    Amazonka.Snowball.Types.Ec2AmiResource
+    Amazonka.Snowball.Types.EventTriggerDefinition
+    Amazonka.Snowball.Types.INDTaxDocuments
+    Amazonka.Snowball.Types.JobListEntry
+    Amazonka.Snowball.Types.JobLogs
+    Amazonka.Snowball.Types.JobMetadata
+    Amazonka.Snowball.Types.JobResource
+    Amazonka.Snowball.Types.JobState
+    Amazonka.Snowball.Types.JobType
+    Amazonka.Snowball.Types.KeyRange
+    Amazonka.Snowball.Types.LambdaResource
+    Amazonka.Snowball.Types.LongTermPricingListEntry
+    Amazonka.Snowball.Types.LongTermPricingType
+    Amazonka.Snowball.Types.NFSOnDeviceServiceConfiguration
+    Amazonka.Snowball.Types.Notification
+    Amazonka.Snowball.Types.OnDeviceServiceConfiguration
+    Amazonka.Snowball.Types.RemoteManagement
+    Amazonka.Snowball.Types.S3Resource
+    Amazonka.Snowball.Types.Shipment
+    Amazonka.Snowball.Types.ShipmentState
+    Amazonka.Snowball.Types.ShippingDetails
+    Amazonka.Snowball.Types.ShippingLabelStatus
+    Amazonka.Snowball.Types.ShippingOption
+    Amazonka.Snowball.Types.SnowballCapacity
+    Amazonka.Snowball.Types.SnowballType
+    Amazonka.Snowball.Types.SnowconeDeviceConfiguration
+    Amazonka.Snowball.Types.StorageUnit
+    Amazonka.Snowball.Types.TargetOnDeviceService
+    Amazonka.Snowball.Types.TaxDocuments
+    Amazonka.Snowball.Types.TGWOnDeviceServiceConfiguration
+    Amazonka.Snowball.Types.TransferOption
+    Amazonka.Snowball.Types.WirelessConnection
+    Amazonka.Snowball.UpdateCluster
+    Amazonka.Snowball.UpdateJob
+    Amazonka.Snowball.UpdateJobShipmentState
+    Amazonka.Snowball.UpdateLongTermPricing
+    Amazonka.Snowball.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-snowball-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.Snowball
-        , Test.AWS.Gen.Snowball
-        , Test.AWS.Snowball.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.Snowball
+    Test.Amazonka.Snowball
+    Test.Amazonka.Snowball.Internal
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-snowball
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-snowball
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CancelJob.yaml b/fixture/CancelJob.yaml
--- a/fixture/CancelJob.yaml
+++ b/fixture/CancelJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/CreateAddress.yaml b/fixture/CreateAddress.yaml
--- a/fixture/CreateAddress.yaml
+++ b/fixture/CreateAddress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/CreateJob.yaml b/fixture/CreateJob.yaml
--- a/fixture/CreateJob.yaml
+++ b/fixture/CreateJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/CreateLongTermPricing.yaml b/fixture/CreateLongTermPricing.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLongTermPricing.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/CreateLongTermPricingResponse.proto b/fixture/CreateLongTermPricingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateLongTermPricingResponse.proto
diff --git a/fixture/CreateReturnShippingLabel.yaml b/fixture/CreateReturnShippingLabel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReturnShippingLabel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/CreateReturnShippingLabelResponse.proto b/fixture/CreateReturnShippingLabelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReturnShippingLabelResponse.proto
diff --git a/fixture/DescribeAddress.yaml b/fixture/DescribeAddress.yaml
--- a/fixture/DescribeAddress.yaml
+++ b/fixture/DescribeAddress.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/DescribeAddresses.yaml b/fixture/DescribeAddresses.yaml
--- a/fixture/DescribeAddresses.yaml
+++ b/fixture/DescribeAddresses.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/DescribeJob.yaml b/fixture/DescribeJob.yaml
--- a/fixture/DescribeJob.yaml
+++ b/fixture/DescribeJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/DescribeReturnShippingLabel.yaml b/fixture/DescribeReturnShippingLabel.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReturnShippingLabel.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/DescribeReturnShippingLabelResponse.proto b/fixture/DescribeReturnShippingLabelResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReturnShippingLabelResponse.proto
diff --git a/fixture/GetJobManifest.yaml b/fixture/GetJobManifest.yaml
--- a/fixture/GetJobManifest.yaml
+++ b/fixture/GetJobManifest.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/GetJobUnlockCode.yaml b/fixture/GetJobUnlockCode.yaml
--- a/fixture/GetJobUnlockCode.yaml
+++ b/fixture/GetJobUnlockCode.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/GetSnowballUsage.yaml b/fixture/GetSnowballUsage.yaml
--- a/fixture/GetSnowballUsage.yaml
+++ b/fixture/GetSnowballUsage.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/GetSoftwareUpdates.yaml b/fixture/GetSoftwareUpdates.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetSoftwareUpdates.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/GetSoftwareUpdatesResponse.proto b/fixture/GetSoftwareUpdatesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetSoftwareUpdatesResponse.proto
diff --git a/fixture/ListCompatibleImages.yaml b/fixture/ListCompatibleImages.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListCompatibleImages.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/ListCompatibleImagesResponse.proto b/fixture/ListCompatibleImagesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListCompatibleImagesResponse.proto
diff --git a/fixture/ListJobs.yaml b/fixture/ListJobs.yaml
--- a/fixture/ListJobs.yaml
+++ b/fixture/ListJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/ListLongTermPricing.yaml b/fixture/ListLongTermPricing.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListLongTermPricing.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/ListLongTermPricingResponse.proto b/fixture/ListLongTermPricingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListLongTermPricingResponse.proto
diff --git a/fixture/UpdateJob.yaml b/fixture/UpdateJob.yaml
--- a/fixture/UpdateJob.yaml
+++ b/fixture/UpdateJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/UpdateJobShipmentState.yaml b/fixture/UpdateJobShipmentState.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateJobShipmentState.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/UpdateJobShipmentStateResponse.proto b/fixture/UpdateJobShipmentStateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateJobShipmentStateResponse.proto
diff --git a/fixture/UpdateLongTermPricing.yaml b/fixture/UpdateLongTermPricing.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLongTermPricing.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/snowball/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  snowball.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/UpdateLongTermPricingResponse.proto b/fixture/UpdateLongTermPricingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateLongTermPricingResponse.proto
diff --git a/gen/Amazonka/Snowball.hs b/gen/Amazonka/Snowball.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball.hs
@@ -0,0 +1,426 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.Snowball
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from API version @2016-06-30@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- The Amazon Web Services Snow Family provides a petabyte-scale data
+-- transport solution that uses secure devices to transfer large amounts of
+-- data between your on-premises data centers and Amazon Simple Storage
+-- Service (Amazon S3). The Snow Family commands described here provide
+-- access to the same functionality that is available in the Amazon Web
+-- Services Snow Family Management Console, which enables you to create and
+-- manage jobs for a Snow Family device. To transfer data locally with a
+-- Snow Family device, you\'ll need to use the Snowball Edge client or the
+-- Amazon S3 API Interface for Snowball or OpsHub for Snow Family. For more
+-- information, see the
+-- <https://docs.aws.amazon.com/AWSImportExport/latest/ug/api-reference.html User Guide>.
+module Amazonka.Snowball
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** ClusterLimitExceededException
+    _ClusterLimitExceededException,
+
+    -- ** ConflictException
+    _ConflictException,
+
+    -- ** Ec2RequestFailedException
+    _Ec2RequestFailedException,
+
+    -- ** InvalidAddressException
+    _InvalidAddressException,
+
+    -- ** InvalidInputCombinationException
+    _InvalidInputCombinationException,
+
+    -- ** InvalidJobStateException
+    _InvalidJobStateException,
+
+    -- ** InvalidNextTokenException
+    _InvalidNextTokenException,
+
+    -- ** InvalidResourceException
+    _InvalidResourceException,
+
+    -- ** KMSRequestFailedException
+    _KMSRequestFailedException,
+
+    -- ** ReturnShippingLabelAlreadyExistsException
+    _ReturnShippingLabelAlreadyExistsException,
+
+    -- ** UnsupportedAddressException
+    _UnsupportedAddressException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CancelCluster
+    CancelCluster (CancelCluster'),
+    newCancelCluster,
+    CancelClusterResponse (CancelClusterResponse'),
+    newCancelClusterResponse,
+
+    -- ** CancelJob
+    CancelJob (CancelJob'),
+    newCancelJob,
+    CancelJobResponse (CancelJobResponse'),
+    newCancelJobResponse,
+
+    -- ** CreateAddress
+    CreateAddress (CreateAddress'),
+    newCreateAddress,
+    CreateAddressResponse (CreateAddressResponse'),
+    newCreateAddressResponse,
+
+    -- ** CreateCluster
+    CreateCluster (CreateCluster'),
+    newCreateCluster,
+    CreateClusterResponse (CreateClusterResponse'),
+    newCreateClusterResponse,
+
+    -- ** CreateJob
+    CreateJob (CreateJob'),
+    newCreateJob,
+    CreateJobResponse (CreateJobResponse'),
+    newCreateJobResponse,
+
+    -- ** CreateLongTermPricing
+    CreateLongTermPricing (CreateLongTermPricing'),
+    newCreateLongTermPricing,
+    CreateLongTermPricingResponse (CreateLongTermPricingResponse'),
+    newCreateLongTermPricingResponse,
+
+    -- ** CreateReturnShippingLabel
+    CreateReturnShippingLabel (CreateReturnShippingLabel'),
+    newCreateReturnShippingLabel,
+    CreateReturnShippingLabelResponse (CreateReturnShippingLabelResponse'),
+    newCreateReturnShippingLabelResponse,
+
+    -- ** DescribeAddress
+    DescribeAddress (DescribeAddress'),
+    newDescribeAddress,
+    DescribeAddressResponse (DescribeAddressResponse'),
+    newDescribeAddressResponse,
+
+    -- ** DescribeAddresses (Paginated)
+    DescribeAddresses (DescribeAddresses'),
+    newDescribeAddresses,
+    DescribeAddressesResponse (DescribeAddressesResponse'),
+    newDescribeAddressesResponse,
+
+    -- ** DescribeCluster
+    DescribeCluster (DescribeCluster'),
+    newDescribeCluster,
+    DescribeClusterResponse (DescribeClusterResponse'),
+    newDescribeClusterResponse,
+
+    -- ** DescribeJob
+    DescribeJob (DescribeJob'),
+    newDescribeJob,
+    DescribeJobResponse (DescribeJobResponse'),
+    newDescribeJobResponse,
+
+    -- ** DescribeReturnShippingLabel
+    DescribeReturnShippingLabel (DescribeReturnShippingLabel'),
+    newDescribeReturnShippingLabel,
+    DescribeReturnShippingLabelResponse (DescribeReturnShippingLabelResponse'),
+    newDescribeReturnShippingLabelResponse,
+
+    -- ** GetJobManifest
+    GetJobManifest (GetJobManifest'),
+    newGetJobManifest,
+    GetJobManifestResponse (GetJobManifestResponse'),
+    newGetJobManifestResponse,
+
+    -- ** GetJobUnlockCode
+    GetJobUnlockCode (GetJobUnlockCode'),
+    newGetJobUnlockCode,
+    GetJobUnlockCodeResponse (GetJobUnlockCodeResponse'),
+    newGetJobUnlockCodeResponse,
+
+    -- ** GetSnowballUsage
+    GetSnowballUsage (GetSnowballUsage'),
+    newGetSnowballUsage,
+    GetSnowballUsageResponse (GetSnowballUsageResponse'),
+    newGetSnowballUsageResponse,
+
+    -- ** GetSoftwareUpdates
+    GetSoftwareUpdates (GetSoftwareUpdates'),
+    newGetSoftwareUpdates,
+    GetSoftwareUpdatesResponse (GetSoftwareUpdatesResponse'),
+    newGetSoftwareUpdatesResponse,
+
+    -- ** ListClusterJobs (Paginated)
+    ListClusterJobs (ListClusterJobs'),
+    newListClusterJobs,
+    ListClusterJobsResponse (ListClusterJobsResponse'),
+    newListClusterJobsResponse,
+
+    -- ** ListClusters (Paginated)
+    ListClusters (ListClusters'),
+    newListClusters,
+    ListClustersResponse (ListClustersResponse'),
+    newListClustersResponse,
+
+    -- ** ListCompatibleImages (Paginated)
+    ListCompatibleImages (ListCompatibleImages'),
+    newListCompatibleImages,
+    ListCompatibleImagesResponse (ListCompatibleImagesResponse'),
+    newListCompatibleImagesResponse,
+
+    -- ** ListJobs (Paginated)
+    ListJobs (ListJobs'),
+    newListJobs,
+    ListJobsResponse (ListJobsResponse'),
+    newListJobsResponse,
+
+    -- ** ListLongTermPricing (Paginated)
+    ListLongTermPricing (ListLongTermPricing'),
+    newListLongTermPricing,
+    ListLongTermPricingResponse (ListLongTermPricingResponse'),
+    newListLongTermPricingResponse,
+
+    -- ** UpdateCluster
+    UpdateCluster (UpdateCluster'),
+    newUpdateCluster,
+    UpdateClusterResponse (UpdateClusterResponse'),
+    newUpdateClusterResponse,
+
+    -- ** UpdateJob
+    UpdateJob (UpdateJob'),
+    newUpdateJob,
+    UpdateJobResponse (UpdateJobResponse'),
+    newUpdateJobResponse,
+
+    -- ** UpdateJobShipmentState
+    UpdateJobShipmentState (UpdateJobShipmentState'),
+    newUpdateJobShipmentState,
+    UpdateJobShipmentStateResponse (UpdateJobShipmentStateResponse'),
+    newUpdateJobShipmentStateResponse,
+
+    -- ** UpdateLongTermPricing
+    UpdateLongTermPricing (UpdateLongTermPricing'),
+    newUpdateLongTermPricing,
+    UpdateLongTermPricingResponse (UpdateLongTermPricingResponse'),
+    newUpdateLongTermPricingResponse,
+
+    -- * Types
+
+    -- ** ClusterState
+    ClusterState (..),
+
+    -- ** DeviceServiceName
+    DeviceServiceName (..),
+
+    -- ** JobState
+    JobState (..),
+
+    -- ** JobType
+    JobType (..),
+
+    -- ** LongTermPricingType
+    LongTermPricingType (..),
+
+    -- ** RemoteManagement
+    RemoteManagement (..),
+
+    -- ** ShipmentState
+    ShipmentState (..),
+
+    -- ** ShippingLabelStatus
+    ShippingLabelStatus (..),
+
+    -- ** ShippingOption
+    ShippingOption (..),
+
+    -- ** SnowballCapacity
+    SnowballCapacity (..),
+
+    -- ** SnowballType
+    SnowballType (..),
+
+    -- ** StorageUnit
+    StorageUnit (..),
+
+    -- ** TransferOption
+    TransferOption (..),
+
+    -- ** Address
+    Address (Address'),
+    newAddress,
+
+    -- ** ClusterListEntry
+    ClusterListEntry (ClusterListEntry'),
+    newClusterListEntry,
+
+    -- ** ClusterMetadata
+    ClusterMetadata (ClusterMetadata'),
+    newClusterMetadata,
+
+    -- ** CompatibleImage
+    CompatibleImage (CompatibleImage'),
+    newCompatibleImage,
+
+    -- ** DataTransfer
+    DataTransfer (DataTransfer'),
+    newDataTransfer,
+
+    -- ** DeviceConfiguration
+    DeviceConfiguration (DeviceConfiguration'),
+    newDeviceConfiguration,
+
+    -- ** Ec2AmiResource
+    Ec2AmiResource (Ec2AmiResource'),
+    newEc2AmiResource,
+
+    -- ** EventTriggerDefinition
+    EventTriggerDefinition (EventTriggerDefinition'),
+    newEventTriggerDefinition,
+
+    -- ** INDTaxDocuments
+    INDTaxDocuments (INDTaxDocuments'),
+    newINDTaxDocuments,
+
+    -- ** JobListEntry
+    JobListEntry (JobListEntry'),
+    newJobListEntry,
+
+    -- ** JobLogs
+    JobLogs (JobLogs'),
+    newJobLogs,
+
+    -- ** JobMetadata
+    JobMetadata (JobMetadata'),
+    newJobMetadata,
+
+    -- ** JobResource
+    JobResource (JobResource'),
+    newJobResource,
+
+    -- ** KeyRange
+    KeyRange (KeyRange'),
+    newKeyRange,
+
+    -- ** LambdaResource
+    LambdaResource (LambdaResource'),
+    newLambdaResource,
+
+    -- ** LongTermPricingListEntry
+    LongTermPricingListEntry (LongTermPricingListEntry'),
+    newLongTermPricingListEntry,
+
+    -- ** NFSOnDeviceServiceConfiguration
+    NFSOnDeviceServiceConfiguration (NFSOnDeviceServiceConfiguration'),
+    newNFSOnDeviceServiceConfiguration,
+
+    -- ** Notification
+    Notification (Notification'),
+    newNotification,
+
+    -- ** OnDeviceServiceConfiguration
+    OnDeviceServiceConfiguration (OnDeviceServiceConfiguration'),
+    newOnDeviceServiceConfiguration,
+
+    -- ** S3Resource
+    S3Resource (S3Resource'),
+    newS3Resource,
+
+    -- ** Shipment
+    Shipment (Shipment'),
+    newShipment,
+
+    -- ** ShippingDetails
+    ShippingDetails (ShippingDetails'),
+    newShippingDetails,
+
+    -- ** SnowconeDeviceConfiguration
+    SnowconeDeviceConfiguration (SnowconeDeviceConfiguration'),
+    newSnowconeDeviceConfiguration,
+
+    -- ** TGWOnDeviceServiceConfiguration
+    TGWOnDeviceServiceConfiguration (TGWOnDeviceServiceConfiguration'),
+    newTGWOnDeviceServiceConfiguration,
+
+    -- ** TargetOnDeviceService
+    TargetOnDeviceService (TargetOnDeviceService'),
+    newTargetOnDeviceService,
+
+    -- ** TaxDocuments
+    TaxDocuments (TaxDocuments'),
+    newTaxDocuments,
+
+    -- ** WirelessConnection
+    WirelessConnection (WirelessConnection'),
+    newWirelessConnection,
+  )
+where
+
+import Amazonka.Snowball.CancelCluster
+import Amazonka.Snowball.CancelJob
+import Amazonka.Snowball.CreateAddress
+import Amazonka.Snowball.CreateCluster
+import Amazonka.Snowball.CreateJob
+import Amazonka.Snowball.CreateLongTermPricing
+import Amazonka.Snowball.CreateReturnShippingLabel
+import Amazonka.Snowball.DescribeAddress
+import Amazonka.Snowball.DescribeAddresses
+import Amazonka.Snowball.DescribeCluster
+import Amazonka.Snowball.DescribeJob
+import Amazonka.Snowball.DescribeReturnShippingLabel
+import Amazonka.Snowball.GetJobManifest
+import Amazonka.Snowball.GetJobUnlockCode
+import Amazonka.Snowball.GetSnowballUsage
+import Amazonka.Snowball.GetSoftwareUpdates
+import Amazonka.Snowball.Lens
+import Amazonka.Snowball.ListClusterJobs
+import Amazonka.Snowball.ListClusters
+import Amazonka.Snowball.ListCompatibleImages
+import Amazonka.Snowball.ListJobs
+import Amazonka.Snowball.ListLongTermPricing
+import Amazonka.Snowball.Types
+import Amazonka.Snowball.UpdateCluster
+import Amazonka.Snowball.UpdateJob
+import Amazonka.Snowball.UpdateJobShipmentState
+import Amazonka.Snowball.UpdateLongTermPricing
+import Amazonka.Snowball.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 'Snowball'.
+
+-- $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/Snowball/CancelCluster.hs b/gen/Amazonka/Snowball/CancelCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/CancelCluster.hs
@@ -0,0 +1,158 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.CancelCluster
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels a cluster job. You can only cancel a cluster job while it\'s in
+-- the @AwaitingQuorum@ status. You\'ll have at least an hour after
+-- creating a cluster job to cancel it.
+module Amazonka.Snowball.CancelCluster
+  ( -- * Creating a Request
+    CancelCluster (..),
+    newCancelCluster,
+
+    -- * Request Lenses
+    cancelCluster_clusterId,
+
+    -- * Destructuring the Response
+    CancelClusterResponse (..),
+    newCancelClusterResponse,
+
+    -- * Response Lenses
+    cancelClusterResponse_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.Snowball.Types
+
+-- | /See:/ 'newCancelCluster' smart constructor.
+data CancelCluster = CancelCluster'
+  { -- | The 39-character ID for the cluster that you want to cancel, for example
+    -- @CID123e4567-e89b-12d3-a456-426655440000@.
+    clusterId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelCluster' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterId', 'cancelCluster_clusterId' - The 39-character ID for the cluster that you want to cancel, for example
+-- @CID123e4567-e89b-12d3-a456-426655440000@.
+newCancelCluster ::
+  -- | 'clusterId'
+  Prelude.Text ->
+  CancelCluster
+newCancelCluster pClusterId_ =
+  CancelCluster' {clusterId = pClusterId_}
+
+-- | The 39-character ID for the cluster that you want to cancel, for example
+-- @CID123e4567-e89b-12d3-a456-426655440000@.
+cancelCluster_clusterId :: Lens.Lens' CancelCluster Prelude.Text
+cancelCluster_clusterId = Lens.lens (\CancelCluster' {clusterId} -> clusterId) (\s@CancelCluster' {} a -> s {clusterId = a} :: CancelCluster)
+
+instance Core.AWSRequest CancelCluster where
+  type
+    AWSResponse CancelCluster =
+      CancelClusterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelClusterResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelCluster where
+  hashWithSalt _salt CancelCluster' {..} =
+    _salt `Prelude.hashWithSalt` clusterId
+
+instance Prelude.NFData CancelCluster where
+  rnf CancelCluster' {..} = Prelude.rnf clusterId
+
+instance Data.ToHeaders CancelCluster where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.CancelCluster" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelCluster where
+  toJSON CancelCluster' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ClusterId" Data..= clusterId)]
+      )
+
+instance Data.ToPath CancelCluster where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelCluster where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelClusterResponse' smart constructor.
+data CancelClusterResponse = CancelClusterResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelClusterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'cancelClusterResponse_httpStatus' - The response's http status code.
+newCancelClusterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelClusterResponse
+newCancelClusterResponse pHttpStatus_ =
+  CancelClusterResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+cancelClusterResponse_httpStatus :: Lens.Lens' CancelClusterResponse Prelude.Int
+cancelClusterResponse_httpStatus = Lens.lens (\CancelClusterResponse' {httpStatus} -> httpStatus) (\s@CancelClusterResponse' {} a -> s {httpStatus = a} :: CancelClusterResponse)
+
+instance Prelude.NFData CancelClusterResponse where
+  rnf CancelClusterResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/CancelJob.hs b/gen/Amazonka/Snowball/CancelJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/CancelJob.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.CancelJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Cancels the specified job. You can only cancel a job before its
+-- @JobState@ value changes to @PreparingAppliance@. Requesting the
+-- @ListJobs@ or @DescribeJob@ action returns a job\'s @JobState@ as part
+-- of the response element data returned.
+module Amazonka.Snowball.CancelJob
+  ( -- * Creating a Request
+    CancelJob (..),
+    newCancelJob,
+
+    -- * Request Lenses
+    cancelJob_jobId,
+
+    -- * Destructuring the Response
+    CancelJobResponse (..),
+    newCancelJobResponse,
+
+    -- * Response Lenses
+    cancelJobResponse_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.Snowball.Types
+
+-- | /See:/ 'newCancelJob' smart constructor.
+data CancelJob = CancelJob'
+  { -- | The 39-character job ID for the job that you want to cancel, for example
+    -- @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'cancelJob_jobId' - The 39-character job ID for the job that you want to cancel, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+newCancelJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  CancelJob
+newCancelJob pJobId_ = CancelJob' {jobId = pJobId_}
+
+-- | The 39-character job ID for the job that you want to cancel, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+cancelJob_jobId :: Lens.Lens' CancelJob Prelude.Text
+cancelJob_jobId = Lens.lens (\CancelJob' {jobId} -> jobId) (\s@CancelJob' {} a -> s {jobId = a} :: CancelJob)
+
+instance Core.AWSRequest CancelJob where
+  type AWSResponse CancelJob = CancelJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          CancelJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CancelJob where
+  hashWithSalt _salt CancelJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData CancelJob where
+  rnf CancelJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders CancelJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.CancelJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CancelJob where
+  toJSON CancelJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath CancelJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CancelJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCancelJobResponse' smart constructor.
+data CancelJobResponse = CancelJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CancelJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'cancelJobResponse_httpStatus' - The response's http status code.
+newCancelJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CancelJobResponse
+newCancelJobResponse pHttpStatus_ =
+  CancelJobResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+cancelJobResponse_httpStatus :: Lens.Lens' CancelJobResponse Prelude.Int
+cancelJobResponse_httpStatus = Lens.lens (\CancelJobResponse' {httpStatus} -> httpStatus) (\s@CancelJobResponse' {} a -> s {httpStatus = a} :: CancelJobResponse)
+
+instance Prelude.NFData CancelJobResponse where
+  rnf CancelJobResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/CreateAddress.hs b/gen/Amazonka/Snowball/CreateAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/CreateAddress.hs
@@ -0,0 +1,176 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.CreateAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an address for a Snow device to be shipped to. In most regions,
+-- addresses are validated at the time of creation. The address you provide
+-- must be located within the serviceable area of your region. If the
+-- address is invalid or unsupported, then an exception is thrown.
+module Amazonka.Snowball.CreateAddress
+  ( -- * Creating a Request
+    CreateAddress (..),
+    newCreateAddress,
+
+    -- * Request Lenses
+    createAddress_address,
+
+    -- * Destructuring the Response
+    CreateAddressResponse (..),
+    newCreateAddressResponse,
+
+    -- * Response Lenses
+    createAddressResponse_addressId,
+    createAddressResponse_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.Snowball.Types
+
+-- | /See:/ 'newCreateAddress' smart constructor.
+data CreateAddress = CreateAddress'
+  { -- | The address that you want the Snow device shipped to.
+    address :: Address
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address', 'createAddress_address' - The address that you want the Snow device shipped to.
+newCreateAddress ::
+  -- | 'address'
+  Address ->
+  CreateAddress
+newCreateAddress pAddress_ =
+  CreateAddress' {address = pAddress_}
+
+-- | The address that you want the Snow device shipped to.
+createAddress_address :: Lens.Lens' CreateAddress Address
+createAddress_address = Lens.lens (\CreateAddress' {address} -> address) (\s@CreateAddress' {} a -> s {address = a} :: CreateAddress)
+
+instance Core.AWSRequest CreateAddress where
+  type
+    AWSResponse CreateAddress =
+      CreateAddressResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAddressResponse'
+            Prelude.<$> (x Data..?> "AddressId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateAddress where
+  hashWithSalt _salt CreateAddress' {..} =
+    _salt `Prelude.hashWithSalt` address
+
+instance Prelude.NFData CreateAddress where
+  rnf CreateAddress' {..} = Prelude.rnf address
+
+instance Data.ToHeaders CreateAddress where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.CreateAddress" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateAddress where
+  toJSON CreateAddress' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("Address" Data..= address)]
+      )
+
+instance Data.ToPath CreateAddress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateAddress where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAddressResponse' smart constructor.
+data CreateAddressResponse = CreateAddressResponse'
+  { -- | The automatically generated ID for a specific address. You\'ll use this
+    -- ID when you create a job to specify which address you want the Snow
+    -- device for that job shipped to.
+    addressId :: 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 'CreateAddressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressId', 'createAddressResponse_addressId' - The automatically generated ID for a specific address. You\'ll use this
+-- ID when you create a job to specify which address you want the Snow
+-- device for that job shipped to.
+--
+-- 'httpStatus', 'createAddressResponse_httpStatus' - The response's http status code.
+newCreateAddressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAddressResponse
+newCreateAddressResponse pHttpStatus_ =
+  CreateAddressResponse'
+    { addressId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The automatically generated ID for a specific address. You\'ll use this
+-- ID when you create a job to specify which address you want the Snow
+-- device for that job shipped to.
+createAddressResponse_addressId :: Lens.Lens' CreateAddressResponse (Prelude.Maybe Prelude.Text)
+createAddressResponse_addressId = Lens.lens (\CreateAddressResponse' {addressId} -> addressId) (\s@CreateAddressResponse' {} a -> s {addressId = a} :: CreateAddressResponse)
+
+-- | The response's http status code.
+createAddressResponse_httpStatus :: Lens.Lens' CreateAddressResponse Prelude.Int
+createAddressResponse_httpStatus = Lens.lens (\CreateAddressResponse' {httpStatus} -> httpStatus) (\s@CreateAddressResponse' {} a -> s {httpStatus = a} :: CreateAddressResponse)
+
+instance Prelude.NFData CreateAddressResponse where
+  rnf CreateAddressResponse' {..} =
+    Prelude.rnf addressId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/CreateCluster.hs b/gen/Amazonka/Snowball/CreateCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/CreateCluster.hs
@@ -0,0 +1,536 @@
+{-# 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.Snowball.CreateCluster
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an empty cluster. Each cluster supports five nodes. You use the
+-- CreateJob action separately to create the jobs for each of these nodes.
+-- The cluster does not ship until these five node jobs have been created.
+module Amazonka.Snowball.CreateCluster
+  ( -- * Creating a Request
+    CreateCluster (..),
+    newCreateCluster,
+
+    -- * Request Lenses
+    createCluster_description,
+    createCluster_forwardingAddressId,
+    createCluster_kmsKeyARN,
+    createCluster_notification,
+    createCluster_onDeviceServiceConfiguration,
+    createCluster_remoteManagement,
+    createCluster_taxDocuments,
+    createCluster_jobType,
+    createCluster_resources,
+    createCluster_addressId,
+    createCluster_roleARN,
+    createCluster_snowballType,
+    createCluster_shippingOption,
+
+    -- * Destructuring the Response
+    CreateClusterResponse (..),
+    newCreateClusterResponse,
+
+    -- * Response Lenses
+    createClusterResponse_clusterId,
+    createClusterResponse_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.Snowball.Types
+
+-- | /See:/ 'newCreateCluster' smart constructor.
+data CreateCluster = CreateCluster'
+  { -- | An optional description of this specific cluster, for example
+    -- @Environmental Data Cluster-01@.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The forwarding address ID for a cluster. This field is not supported in
+    -- most regions.
+    forwardingAddressId :: Prelude.Maybe Prelude.Text,
+    -- | The @KmsKeyARN@ value that you want to associate with this cluster.
+    -- @KmsKeyARN@ values are created by using the
+    -- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+    -- API action in Key Management Service (KMS).
+    kmsKeyARN :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Simple Notification Service (Amazon SNS) notification
+    -- settings for this cluster.
+    notification :: Prelude.Maybe Notification,
+    -- | Specifies the service or services on the Snow Family device that your
+    -- transferred data will be exported from or imported into. Amazon Web
+    -- Services Snow Family device clusters support Amazon S3 and NFS (Network
+    -- File System).
+    onDeviceServiceConfiguration :: Prelude.Maybe OnDeviceServiceConfiguration,
+    -- | Allows you to securely operate and manage Snow devices in a cluster
+    -- remotely from outside of your internal network. When set to
+    -- @INSTALLED_AUTOSTART@, remote management will automatically be available
+    -- when the device arrives at your location. Otherwise, you need to use the
+    -- Snowball Client to manage the device.
+    remoteManagement :: Prelude.Maybe RemoteManagement,
+    -- | The tax documents required in your Amazon Web Services Region.
+    taxDocuments :: Prelude.Maybe TaxDocuments,
+    -- | The type of job for this cluster. Currently, the only job type supported
+    -- for clusters is @LOCAL_USE@.
+    --
+    -- For more information, see
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+    jobType :: JobType,
+    -- | The resources associated with the cluster job. These resources include
+    -- Amazon S3 buckets and optional Lambda functions written in the Python
+    -- language.
+    resources :: JobResource,
+    -- | The ID for the address that you want the cluster shipped to.
+    addressId :: Prelude.Text,
+    -- | The @RoleARN@ that you want to associate with this cluster. @RoleArn@
+    -- values are created by using the
+    -- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+    -- API action in Identity and Access Management (IAM).
+    roleARN :: Prelude.Text,
+    -- | The type of Snow Family devices to use for this cluster.
+    --
+    -- For cluster jobs, Amazon Web Services Snow Family currently supports
+    -- only the @EDGE@ device type.
+    --
+    -- For more information, see
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+    snowballType :: SnowballType,
+    -- | The shipping speed for each node in this cluster. This speed doesn\'t
+    -- dictate how soon you\'ll get each Snowball Edge device, rather it
+    -- represents how quickly each device moves to its destination while in
+    -- transit. Regional shipping speeds are as follows:
+    --
+    -- -   In Australia, you have access to express shipping. Typically, Snow
+    --     devices shipped express are delivered in about a day.
+    --
+    -- -   In the European Union (EU), you have access to express shipping.
+    --     Typically, Snow devices shipped express are delivered in about a
+    --     day. In addition, most countries in the EU have access to standard
+    --     shipping, which typically takes less than a week, one way.
+    --
+    -- -   In India, Snow devices are delivered in one to seven days.
+    --
+    -- -   In the United States of America (US), you have access to one-day
+    --     shipping and two-day shipping.
+    --
+    -- -   In Australia, you have access to express shipping. Typically,
+    --     devices shipped express are delivered in about a day.
+    --
+    -- -   In the European Union (EU), you have access to express shipping.
+    --     Typically, Snow devices shipped express are delivered in about a
+    --     day. In addition, most countries in the EU have access to standard
+    --     shipping, which typically takes less than a week, one way.
+    --
+    -- -   In India, Snow devices are delivered in one to seven days.
+    --
+    -- -   In the US, you have access to one-day shipping and two-day shipping.
+    shippingOption :: ShippingOption
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateCluster' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'description', 'createCluster_description' - An optional description of this specific cluster, for example
+-- @Environmental Data Cluster-01@.
+--
+-- 'forwardingAddressId', 'createCluster_forwardingAddressId' - The forwarding address ID for a cluster. This field is not supported in
+-- most regions.
+--
+-- 'kmsKeyARN', 'createCluster_kmsKeyARN' - The @KmsKeyARN@ value that you want to associate with this cluster.
+-- @KmsKeyARN@ values are created by using the
+-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+-- API action in Key Management Service (KMS).
+--
+-- 'notification', 'createCluster_notification' - The Amazon Simple Notification Service (Amazon SNS) notification
+-- settings for this cluster.
+--
+-- 'onDeviceServiceConfiguration', 'createCluster_onDeviceServiceConfiguration' - Specifies the service or services on the Snow Family device that your
+-- transferred data will be exported from or imported into. Amazon Web
+-- Services Snow Family device clusters support Amazon S3 and NFS (Network
+-- File System).
+--
+-- 'remoteManagement', 'createCluster_remoteManagement' - Allows you to securely operate and manage Snow devices in a cluster
+-- remotely from outside of your internal network. When set to
+-- @INSTALLED_AUTOSTART@, remote management will automatically be available
+-- when the device arrives at your location. Otherwise, you need to use the
+-- Snowball Client to manage the device.
+--
+-- 'taxDocuments', 'createCluster_taxDocuments' - The tax documents required in your Amazon Web Services Region.
+--
+-- 'jobType', 'createCluster_jobType' - The type of job for this cluster. Currently, the only job type supported
+-- for clusters is @LOCAL_USE@.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+--
+-- 'resources', 'createCluster_resources' - The resources associated with the cluster job. These resources include
+-- Amazon S3 buckets and optional Lambda functions written in the Python
+-- language.
+--
+-- 'addressId', 'createCluster_addressId' - The ID for the address that you want the cluster shipped to.
+--
+-- 'roleARN', 'createCluster_roleARN' - The @RoleARN@ that you want to associate with this cluster. @RoleArn@
+-- values are created by using the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+-- API action in Identity and Access Management (IAM).
+--
+-- 'snowballType', 'createCluster_snowballType' - The type of Snow Family devices to use for this cluster.
+--
+-- For cluster jobs, Amazon Web Services Snow Family currently supports
+-- only the @EDGE@ device type.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+--
+-- 'shippingOption', 'createCluster_shippingOption' - The shipping speed for each node in this cluster. This speed doesn\'t
+-- dictate how soon you\'ll get each Snowball Edge device, rather it
+-- represents how quickly each device moves to its destination while in
+-- transit. Regional shipping speeds are as follows:
+--
+-- -   In Australia, you have access to express shipping. Typically, Snow
+--     devices shipped express are delivered in about a day.
+--
+-- -   In the European Union (EU), you have access to express shipping.
+--     Typically, Snow devices shipped express are delivered in about a
+--     day. In addition, most countries in the EU have access to standard
+--     shipping, which typically takes less than a week, one way.
+--
+-- -   In India, Snow devices are delivered in one to seven days.
+--
+-- -   In the United States of America (US), you have access to one-day
+--     shipping and two-day shipping.
+--
+-- -   In Australia, you have access to express shipping. Typically,
+--     devices shipped express are delivered in about a day.
+--
+-- -   In the European Union (EU), you have access to express shipping.
+--     Typically, Snow devices shipped express are delivered in about a
+--     day. In addition, most countries in the EU have access to standard
+--     shipping, which typically takes less than a week, one way.
+--
+-- -   In India, Snow devices are delivered in one to seven days.
+--
+-- -   In the US, you have access to one-day shipping and two-day shipping.
+newCreateCluster ::
+  -- | 'jobType'
+  JobType ->
+  -- | 'resources'
+  JobResource ->
+  -- | 'addressId'
+  Prelude.Text ->
+  -- | 'roleARN'
+  Prelude.Text ->
+  -- | 'snowballType'
+  SnowballType ->
+  -- | 'shippingOption'
+  ShippingOption ->
+  CreateCluster
+newCreateCluster
+  pJobType_
+  pResources_
+  pAddressId_
+  pRoleARN_
+  pSnowballType_
+  pShippingOption_ =
+    CreateCluster'
+      { description = Prelude.Nothing,
+        forwardingAddressId = Prelude.Nothing,
+        kmsKeyARN = Prelude.Nothing,
+        notification = Prelude.Nothing,
+        onDeviceServiceConfiguration = Prelude.Nothing,
+        remoteManagement = Prelude.Nothing,
+        taxDocuments = Prelude.Nothing,
+        jobType = pJobType_,
+        resources = pResources_,
+        addressId = pAddressId_,
+        roleARN = pRoleARN_,
+        snowballType = pSnowballType_,
+        shippingOption = pShippingOption_
+      }
+
+-- | An optional description of this specific cluster, for example
+-- @Environmental Data Cluster-01@.
+createCluster_description :: Lens.Lens' CreateCluster (Prelude.Maybe Prelude.Text)
+createCluster_description = Lens.lens (\CreateCluster' {description} -> description) (\s@CreateCluster' {} a -> s {description = a} :: CreateCluster)
+
+-- | The forwarding address ID for a cluster. This field is not supported in
+-- most regions.
+createCluster_forwardingAddressId :: Lens.Lens' CreateCluster (Prelude.Maybe Prelude.Text)
+createCluster_forwardingAddressId = Lens.lens (\CreateCluster' {forwardingAddressId} -> forwardingAddressId) (\s@CreateCluster' {} a -> s {forwardingAddressId = a} :: CreateCluster)
+
+-- | The @KmsKeyARN@ value that you want to associate with this cluster.
+-- @KmsKeyARN@ values are created by using the
+-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+-- API action in Key Management Service (KMS).
+createCluster_kmsKeyARN :: Lens.Lens' CreateCluster (Prelude.Maybe Prelude.Text)
+createCluster_kmsKeyARN = Lens.lens (\CreateCluster' {kmsKeyARN} -> kmsKeyARN) (\s@CreateCluster' {} a -> s {kmsKeyARN = a} :: CreateCluster)
+
+-- | The Amazon Simple Notification Service (Amazon SNS) notification
+-- settings for this cluster.
+createCluster_notification :: Lens.Lens' CreateCluster (Prelude.Maybe Notification)
+createCluster_notification = Lens.lens (\CreateCluster' {notification} -> notification) (\s@CreateCluster' {} a -> s {notification = a} :: CreateCluster)
+
+-- | Specifies the service or services on the Snow Family device that your
+-- transferred data will be exported from or imported into. Amazon Web
+-- Services Snow Family device clusters support Amazon S3 and NFS (Network
+-- File System).
+createCluster_onDeviceServiceConfiguration :: Lens.Lens' CreateCluster (Prelude.Maybe OnDeviceServiceConfiguration)
+createCluster_onDeviceServiceConfiguration = Lens.lens (\CreateCluster' {onDeviceServiceConfiguration} -> onDeviceServiceConfiguration) (\s@CreateCluster' {} a -> s {onDeviceServiceConfiguration = a} :: CreateCluster)
+
+-- | Allows you to securely operate and manage Snow devices in a cluster
+-- remotely from outside of your internal network. When set to
+-- @INSTALLED_AUTOSTART@, remote management will automatically be available
+-- when the device arrives at your location. Otherwise, you need to use the
+-- Snowball Client to manage the device.
+createCluster_remoteManagement :: Lens.Lens' CreateCluster (Prelude.Maybe RemoteManagement)
+createCluster_remoteManagement = Lens.lens (\CreateCluster' {remoteManagement} -> remoteManagement) (\s@CreateCluster' {} a -> s {remoteManagement = a} :: CreateCluster)
+
+-- | The tax documents required in your Amazon Web Services Region.
+createCluster_taxDocuments :: Lens.Lens' CreateCluster (Prelude.Maybe TaxDocuments)
+createCluster_taxDocuments = Lens.lens (\CreateCluster' {taxDocuments} -> taxDocuments) (\s@CreateCluster' {} a -> s {taxDocuments = a} :: CreateCluster)
+
+-- | The type of job for this cluster. Currently, the only job type supported
+-- for clusters is @LOCAL_USE@.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+createCluster_jobType :: Lens.Lens' CreateCluster JobType
+createCluster_jobType = Lens.lens (\CreateCluster' {jobType} -> jobType) (\s@CreateCluster' {} a -> s {jobType = a} :: CreateCluster)
+
+-- | The resources associated with the cluster job. These resources include
+-- Amazon S3 buckets and optional Lambda functions written in the Python
+-- language.
+createCluster_resources :: Lens.Lens' CreateCluster JobResource
+createCluster_resources = Lens.lens (\CreateCluster' {resources} -> resources) (\s@CreateCluster' {} a -> s {resources = a} :: CreateCluster)
+
+-- | The ID for the address that you want the cluster shipped to.
+createCluster_addressId :: Lens.Lens' CreateCluster Prelude.Text
+createCluster_addressId = Lens.lens (\CreateCluster' {addressId} -> addressId) (\s@CreateCluster' {} a -> s {addressId = a} :: CreateCluster)
+
+-- | The @RoleARN@ that you want to associate with this cluster. @RoleArn@
+-- values are created by using the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+-- API action in Identity and Access Management (IAM).
+createCluster_roleARN :: Lens.Lens' CreateCluster Prelude.Text
+createCluster_roleARN = Lens.lens (\CreateCluster' {roleARN} -> roleARN) (\s@CreateCluster' {} a -> s {roleARN = a} :: CreateCluster)
+
+-- | The type of Snow Family devices to use for this cluster.
+--
+-- For cluster jobs, Amazon Web Services Snow Family currently supports
+-- only the @EDGE@ device type.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+createCluster_snowballType :: Lens.Lens' CreateCluster SnowballType
+createCluster_snowballType = Lens.lens (\CreateCluster' {snowballType} -> snowballType) (\s@CreateCluster' {} a -> s {snowballType = a} :: CreateCluster)
+
+-- | The shipping speed for each node in this cluster. This speed doesn\'t
+-- dictate how soon you\'ll get each Snowball Edge device, rather it
+-- represents how quickly each device moves to its destination while in
+-- transit. Regional shipping speeds are as follows:
+--
+-- -   In Australia, you have access to express shipping. Typically, Snow
+--     devices shipped express are delivered in about a day.
+--
+-- -   In the European Union (EU), you have access to express shipping.
+--     Typically, Snow devices shipped express are delivered in about a
+--     day. In addition, most countries in the EU have access to standard
+--     shipping, which typically takes less than a week, one way.
+--
+-- -   In India, Snow devices are delivered in one to seven days.
+--
+-- -   In the United States of America (US), you have access to one-day
+--     shipping and two-day shipping.
+--
+-- -   In Australia, you have access to express shipping. Typically,
+--     devices shipped express are delivered in about a day.
+--
+-- -   In the European Union (EU), you have access to express shipping.
+--     Typically, Snow devices shipped express are delivered in about a
+--     day. In addition, most countries in the EU have access to standard
+--     shipping, which typically takes less than a week, one way.
+--
+-- -   In India, Snow devices are delivered in one to seven days.
+--
+-- -   In the US, you have access to one-day shipping and two-day shipping.
+createCluster_shippingOption :: Lens.Lens' CreateCluster ShippingOption
+createCluster_shippingOption = Lens.lens (\CreateCluster' {shippingOption} -> shippingOption) (\s@CreateCluster' {} a -> s {shippingOption = a} :: CreateCluster)
+
+instance Core.AWSRequest CreateCluster where
+  type
+    AWSResponse CreateCluster =
+      CreateClusterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateClusterResponse'
+            Prelude.<$> (x Data..?> "ClusterId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateCluster where
+  hashWithSalt _salt CreateCluster' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` forwardingAddressId
+      `Prelude.hashWithSalt` kmsKeyARN
+      `Prelude.hashWithSalt` notification
+      `Prelude.hashWithSalt` onDeviceServiceConfiguration
+      `Prelude.hashWithSalt` remoteManagement
+      `Prelude.hashWithSalt` taxDocuments
+      `Prelude.hashWithSalt` jobType
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` addressId
+      `Prelude.hashWithSalt` roleARN
+      `Prelude.hashWithSalt` snowballType
+      `Prelude.hashWithSalt` shippingOption
+
+instance Prelude.NFData CreateCluster where
+  rnf CreateCluster' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf forwardingAddressId
+      `Prelude.seq` Prelude.rnf kmsKeyARN
+      `Prelude.seq` Prelude.rnf notification
+      `Prelude.seq` Prelude.rnf onDeviceServiceConfiguration
+      `Prelude.seq` Prelude.rnf remoteManagement
+      `Prelude.seq` Prelude.rnf taxDocuments
+      `Prelude.seq` Prelude.rnf jobType
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf addressId
+      `Prelude.seq` Prelude.rnf roleARN
+      `Prelude.seq` Prelude.rnf snowballType
+      `Prelude.seq` Prelude.rnf shippingOption
+
+instance Data.ToHeaders CreateCluster where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.CreateCluster" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateCluster where
+  toJSON CreateCluster' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Description" Data..=) Prelude.<$> description,
+            ("ForwardingAddressId" Data..=)
+              Prelude.<$> forwardingAddressId,
+            ("KmsKeyARN" Data..=) Prelude.<$> kmsKeyARN,
+            ("Notification" Data..=) Prelude.<$> notification,
+            ("OnDeviceServiceConfiguration" Data..=)
+              Prelude.<$> onDeviceServiceConfiguration,
+            ("RemoteManagement" Data..=)
+              Prelude.<$> remoteManagement,
+            ("TaxDocuments" Data..=) Prelude.<$> taxDocuments,
+            Prelude.Just ("JobType" Data..= jobType),
+            Prelude.Just ("Resources" Data..= resources),
+            Prelude.Just ("AddressId" Data..= addressId),
+            Prelude.Just ("RoleARN" Data..= roleARN),
+            Prelude.Just ("SnowballType" Data..= snowballType),
+            Prelude.Just
+              ("ShippingOption" Data..= shippingOption)
+          ]
+      )
+
+instance Data.ToPath CreateCluster where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateCluster where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateClusterResponse' smart constructor.
+data CreateClusterResponse = CreateClusterResponse'
+  { -- | The automatically generated ID for a cluster.
+    clusterId :: 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 'CreateClusterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterId', 'createClusterResponse_clusterId' - The automatically generated ID for a cluster.
+--
+-- 'httpStatus', 'createClusterResponse_httpStatus' - The response's http status code.
+newCreateClusterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateClusterResponse
+newCreateClusterResponse pHttpStatus_ =
+  CreateClusterResponse'
+    { clusterId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The automatically generated ID for a cluster.
+createClusterResponse_clusterId :: Lens.Lens' CreateClusterResponse (Prelude.Maybe Prelude.Text)
+createClusterResponse_clusterId = Lens.lens (\CreateClusterResponse' {clusterId} -> clusterId) (\s@CreateClusterResponse' {} a -> s {clusterId = a} :: CreateClusterResponse)
+
+-- | The response's http status code.
+createClusterResponse_httpStatus :: Lens.Lens' CreateClusterResponse Prelude.Int
+createClusterResponse_httpStatus = Lens.lens (\CreateClusterResponse' {httpStatus} -> httpStatus) (\s@CreateClusterResponse' {} a -> s {httpStatus = a} :: CreateClusterResponse)
+
+instance Prelude.NFData CreateClusterResponse where
+  rnf CreateClusterResponse' {..} =
+    Prelude.rnf clusterId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/CreateJob.hs b/gen/Amazonka/Snowball/CreateJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/CreateJob.hs
@@ -0,0 +1,682 @@
+{-# 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.Snowball.CreateJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a job to import or export data between Amazon S3 and your
+-- on-premises data center. Your Amazon Web Services account must have the
+-- right trust policies and permissions in place to create a job for a Snow
+-- device. If you\'re creating a job for a node in a cluster, you only need
+-- to provide the @clusterId@ value; the other job attributes are inherited
+-- from the cluster.
+--
+-- Only the Snowball; Edge device type is supported when ordering clustered
+-- jobs.
+--
+-- The device capacity is optional.
+--
+-- Availability of device types differ by Amazon Web Services Region. For
+-- more information about Region availability, see
+-- <https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/?p=ngi&loc=4 Amazon Web Services Regional Services>.
+--
+-- __Snow Family devices and their capacities.__
+--
+-- -   Snow Family device type: __SNC1_SSD__
+--
+--     -   Capacity: T14
+--
+--     -   Description: Snowcone
+--
+-- -   Snow Family device type: __SNC1_HDD__
+--
+--     -   Capacity: T8
+--
+--     -   Description: Snowcone
+--
+-- -   Device type: __EDGE_S__
+--
+--     -   Capacity: T98
+--
+--     -   Description: Snowball Edge Storage Optimized for data transfer
+--         only
+--
+-- -   Device type: __EDGE_CG__
+--
+--     -   Capacity: T42
+--
+--     -   Description: Snowball Edge Compute Optimized with GPU
+--
+-- -   Device type: __EDGE_C__
+--
+--     -   Capacity: T42
+--
+--     -   Description: Snowball Edge Compute Optimized without GPU
+--
+-- -   Device type: __EDGE__
+--
+--     -   Capacity: T100
+--
+--     -   Description: Snowball Edge Storage Optimized with EC2 Compute
+--
+-- -   Device type: __V3_5C__
+--
+--     -   Capacity: T32
+--
+--     -   Description: Snowball Edge Compute Optimized without GPU
+--
+-- -   Device type: __STANDARD__
+--
+--     -   Capacity: T50
+--
+--     -   Description: Original Snowball device
+--
+--         This device is only available in the Ningxia, Beijing, and
+--         Singapore Amazon Web Services Region
+--
+-- -   Device type: __STANDARD__
+--
+--     -   Capacity: T80
+--
+--     -   Description: Original Snowball device
+--
+--         This device is only available in the Ningxia, Beijing, and
+--         Singapore Amazon Web Services Region.
+module Amazonka.Snowball.CreateJob
+  ( -- * Creating a Request
+    CreateJob (..),
+    newCreateJob,
+
+    -- * Request Lenses
+    createJob_addressId,
+    createJob_clusterId,
+    createJob_description,
+    createJob_deviceConfiguration,
+    createJob_forwardingAddressId,
+    createJob_jobType,
+    createJob_kmsKeyARN,
+    createJob_longTermPricingId,
+    createJob_notification,
+    createJob_onDeviceServiceConfiguration,
+    createJob_remoteManagement,
+    createJob_resources,
+    createJob_roleARN,
+    createJob_shippingOption,
+    createJob_snowballCapacityPreference,
+    createJob_snowballType,
+    createJob_taxDocuments,
+
+    -- * Destructuring the Response
+    CreateJobResponse (..),
+    newCreateJobResponse,
+
+    -- * Response Lenses
+    createJobResponse_jobId,
+    createJobResponse_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.Snowball.Types
+
+-- | /See:/ 'newCreateJob' smart constructor.
+data CreateJob = CreateJob'
+  { -- | The ID for the address that you want the Snow device shipped to.
+    addressId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a cluster. If you\'re creating a job for a node in a cluster,
+    -- you need to provide only this @clusterId@ value. The other job
+    -- attributes are inherited from the cluster.
+    clusterId :: Prelude.Maybe Prelude.Text,
+    -- | Defines an optional description of this specific job, for example
+    -- @Important Photos 2016-08-11@.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Defines the device configuration for an Snowcone job.
+    --
+    -- For more information, see
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+    deviceConfiguration :: Prelude.Maybe DeviceConfiguration,
+    -- | The forwarding address ID for a job. This field is not supported in most
+    -- Regions.
+    forwardingAddressId :: Prelude.Maybe Prelude.Text,
+    -- | Defines the type of job that you\'re creating.
+    jobType :: Prelude.Maybe JobType,
+    -- | The @KmsKeyARN@ that you want to associate with this job. @KmsKeyARN@s
+    -- are created using the
+    -- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+    -- Key Management Service (KMS) API action.
+    kmsKeyARN :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the long-term pricing type for the device.
+    longTermPricingId :: Prelude.Maybe Prelude.Text,
+    -- | Defines the Amazon Simple Notification Service (Amazon SNS) notification
+    -- settings for this job.
+    notification :: Prelude.Maybe Notification,
+    -- | Specifies the service or services on the Snow Family device that your
+    -- transferred data will be exported from or imported into. Amazon Web
+    -- Services Snow Family supports Amazon S3 and NFS (Network File System)
+    -- and the Amazon Web Services Storage Gateway service Tape Gateway type.
+    onDeviceServiceConfiguration :: Prelude.Maybe OnDeviceServiceConfiguration,
+    -- | Allows you to securely operate and manage Snowcone devices remotely from
+    -- outside of your internal network. When set to @INSTALLED_AUTOSTART@,
+    -- remote management will automatically be available when the device
+    -- arrives at your location. Otherwise, you need to use the Snowball Client
+    -- to manage the device.
+    remoteManagement :: Prelude.Maybe RemoteManagement,
+    -- | Defines the Amazon S3 buckets associated with this job.
+    --
+    -- With @IMPORT@ jobs, you specify the bucket or buckets that your
+    -- transferred data will be imported into.
+    --
+    -- With @EXPORT@ jobs, you specify the bucket or buckets that your
+    -- transferred data will be exported from. Optionally, you can also specify
+    -- a @KeyRange@ value. If you choose to export a range, you define the
+    -- length of the range by providing either an inclusive @BeginMarker@
+    -- value, an inclusive @EndMarker@ value, or both. Ranges are UTF-8 binary
+    -- sorted.
+    resources :: Prelude.Maybe JobResource,
+    -- | The @RoleARN@ that you want to associate with this job. @RoleArn@s are
+    -- created using the
+    -- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+    -- Identity and Access Management (IAM) API action.
+    roleARN :: Prelude.Maybe Prelude.Text,
+    -- | The shipping speed for this job. This speed doesn\'t dictate how soon
+    -- you\'ll get the Snow device, rather it represents how quickly the Snow
+    -- device moves to its destination while in transit. Regional shipping
+    -- speeds are as follows:
+    --
+    -- -   In Australia, you have access to express shipping. Typically, Snow
+    --     devices shipped express are delivered in about a day.
+    --
+    -- -   In the European Union (EU), you have access to express shipping.
+    --     Typically, Snow devices shipped express are delivered in about a
+    --     day. In addition, most countries in the EU have access to standard
+    --     shipping, which typically takes less than a week, one way.
+    --
+    -- -   In India, Snow devices are delivered in one to seven days.
+    --
+    -- -   In the US, you have access to one-day shipping and two-day shipping.
+    shippingOption :: Prelude.Maybe ShippingOption,
+    -- | If your job is being created in one of the US regions, you have the
+    -- option of specifying what size Snow device you\'d like for this job. In
+    -- all other regions, Snowballs come with 80 TB in storage capacity.
+    --
+    -- For more information, see
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+    snowballCapacityPreference :: Prelude.Maybe SnowballCapacity,
+    -- | The type of Snow Family devices to use for this job.
+    --
+    -- For cluster jobs, Amazon Web Services Snow Family currently supports
+    -- only the @EDGE@ device type.
+    --
+    -- The type of Amazon Web Services Snow device to use for this job.
+    -- Currently, the only supported device type for cluster jobs is @EDGE@.
+    --
+    -- For more information, see
+    -- <https://docs.aws.amazon.com/snowball/latest/developer-guide/device-differences.html Snowball Edge Device Options>
+    -- in the Snowball Edge Developer Guide.
+    --
+    -- For more information, see
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+    snowballType :: Prelude.Maybe SnowballType,
+    -- | The tax documents required in your Amazon Web Services Region.
+    taxDocuments :: Prelude.Maybe TaxDocuments
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressId', 'createJob_addressId' - The ID for the address that you want the Snow device shipped to.
+--
+-- 'clusterId', 'createJob_clusterId' - The ID of a cluster. If you\'re creating a job for a node in a cluster,
+-- you need to provide only this @clusterId@ value. The other job
+-- attributes are inherited from the cluster.
+--
+-- 'description', 'createJob_description' - Defines an optional description of this specific job, for example
+-- @Important Photos 2016-08-11@.
+--
+-- 'deviceConfiguration', 'createJob_deviceConfiguration' - Defines the device configuration for an Snowcone job.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+--
+-- 'forwardingAddressId', 'createJob_forwardingAddressId' - The forwarding address ID for a job. This field is not supported in most
+-- Regions.
+--
+-- 'jobType', 'createJob_jobType' - Defines the type of job that you\'re creating.
+--
+-- 'kmsKeyARN', 'createJob_kmsKeyARN' - The @KmsKeyARN@ that you want to associate with this job. @KmsKeyARN@s
+-- are created using the
+-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+-- Key Management Service (KMS) API action.
+--
+-- 'longTermPricingId', 'createJob_longTermPricingId' - The ID of the long-term pricing type for the device.
+--
+-- 'notification', 'createJob_notification' - Defines the Amazon Simple Notification Service (Amazon SNS) notification
+-- settings for this job.
+--
+-- 'onDeviceServiceConfiguration', 'createJob_onDeviceServiceConfiguration' - Specifies the service or services on the Snow Family device that your
+-- transferred data will be exported from or imported into. Amazon Web
+-- Services Snow Family supports Amazon S3 and NFS (Network File System)
+-- and the Amazon Web Services Storage Gateway service Tape Gateway type.
+--
+-- 'remoteManagement', 'createJob_remoteManagement' - Allows you to securely operate and manage Snowcone devices remotely from
+-- outside of your internal network. When set to @INSTALLED_AUTOSTART@,
+-- remote management will automatically be available when the device
+-- arrives at your location. Otherwise, you need to use the Snowball Client
+-- to manage the device.
+--
+-- 'resources', 'createJob_resources' - Defines the Amazon S3 buckets associated with this job.
+--
+-- With @IMPORT@ jobs, you specify the bucket or buckets that your
+-- transferred data will be imported into.
+--
+-- With @EXPORT@ jobs, you specify the bucket or buckets that your
+-- transferred data will be exported from. Optionally, you can also specify
+-- a @KeyRange@ value. If you choose to export a range, you define the
+-- length of the range by providing either an inclusive @BeginMarker@
+-- value, an inclusive @EndMarker@ value, or both. Ranges are UTF-8 binary
+-- sorted.
+--
+-- 'roleARN', 'createJob_roleARN' - The @RoleARN@ that you want to associate with this job. @RoleArn@s are
+-- created using the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+-- Identity and Access Management (IAM) API action.
+--
+-- 'shippingOption', 'createJob_shippingOption' - The shipping speed for this job. This speed doesn\'t dictate how soon
+-- you\'ll get the Snow device, rather it represents how quickly the Snow
+-- device moves to its destination while in transit. Regional shipping
+-- speeds are as follows:
+--
+-- -   In Australia, you have access to express shipping. Typically, Snow
+--     devices shipped express are delivered in about a day.
+--
+-- -   In the European Union (EU), you have access to express shipping.
+--     Typically, Snow devices shipped express are delivered in about a
+--     day. In addition, most countries in the EU have access to standard
+--     shipping, which typically takes less than a week, one way.
+--
+-- -   In India, Snow devices are delivered in one to seven days.
+--
+-- -   In the US, you have access to one-day shipping and two-day shipping.
+--
+-- 'snowballCapacityPreference', 'createJob_snowballCapacityPreference' - If your job is being created in one of the US regions, you have the
+-- option of specifying what size Snow device you\'d like for this job. In
+-- all other regions, Snowballs come with 80 TB in storage capacity.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+--
+-- 'snowballType', 'createJob_snowballType' - The type of Snow Family devices to use for this job.
+--
+-- For cluster jobs, Amazon Web Services Snow Family currently supports
+-- only the @EDGE@ device type.
+--
+-- The type of Amazon Web Services Snow device to use for this job.
+-- Currently, the only supported device type for cluster jobs is @EDGE@.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/snowball/latest/developer-guide/device-differences.html Snowball Edge Device Options>
+-- in the Snowball Edge Developer Guide.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+--
+-- 'taxDocuments', 'createJob_taxDocuments' - The tax documents required in your Amazon Web Services Region.
+newCreateJob ::
+  CreateJob
+newCreateJob =
+  CreateJob'
+    { addressId = Prelude.Nothing,
+      clusterId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      deviceConfiguration = Prelude.Nothing,
+      forwardingAddressId = Prelude.Nothing,
+      jobType = Prelude.Nothing,
+      kmsKeyARN = Prelude.Nothing,
+      longTermPricingId = Prelude.Nothing,
+      notification = Prelude.Nothing,
+      onDeviceServiceConfiguration = Prelude.Nothing,
+      remoteManagement = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      roleARN = Prelude.Nothing,
+      shippingOption = Prelude.Nothing,
+      snowballCapacityPreference = Prelude.Nothing,
+      snowballType = Prelude.Nothing,
+      taxDocuments = Prelude.Nothing
+    }
+
+-- | The ID for the address that you want the Snow device shipped to.
+createJob_addressId :: Lens.Lens' CreateJob (Prelude.Maybe Prelude.Text)
+createJob_addressId = Lens.lens (\CreateJob' {addressId} -> addressId) (\s@CreateJob' {} a -> s {addressId = a} :: CreateJob)
+
+-- | The ID of a cluster. If you\'re creating a job for a node in a cluster,
+-- you need to provide only this @clusterId@ value. The other job
+-- attributes are inherited from the cluster.
+createJob_clusterId :: Lens.Lens' CreateJob (Prelude.Maybe Prelude.Text)
+createJob_clusterId = Lens.lens (\CreateJob' {clusterId} -> clusterId) (\s@CreateJob' {} a -> s {clusterId = a} :: CreateJob)
+
+-- | Defines an optional description of this specific job, for example
+-- @Important Photos 2016-08-11@.
+createJob_description :: Lens.Lens' CreateJob (Prelude.Maybe Prelude.Text)
+createJob_description = Lens.lens (\CreateJob' {description} -> description) (\s@CreateJob' {} a -> s {description = a} :: CreateJob)
+
+-- | Defines the device configuration for an Snowcone job.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+createJob_deviceConfiguration :: Lens.Lens' CreateJob (Prelude.Maybe DeviceConfiguration)
+createJob_deviceConfiguration = Lens.lens (\CreateJob' {deviceConfiguration} -> deviceConfiguration) (\s@CreateJob' {} a -> s {deviceConfiguration = a} :: CreateJob)
+
+-- | The forwarding address ID for a job. This field is not supported in most
+-- Regions.
+createJob_forwardingAddressId :: Lens.Lens' CreateJob (Prelude.Maybe Prelude.Text)
+createJob_forwardingAddressId = Lens.lens (\CreateJob' {forwardingAddressId} -> forwardingAddressId) (\s@CreateJob' {} a -> s {forwardingAddressId = a} :: CreateJob)
+
+-- | Defines the type of job that you\'re creating.
+createJob_jobType :: Lens.Lens' CreateJob (Prelude.Maybe JobType)
+createJob_jobType = Lens.lens (\CreateJob' {jobType} -> jobType) (\s@CreateJob' {} a -> s {jobType = a} :: CreateJob)
+
+-- | The @KmsKeyARN@ that you want to associate with this job. @KmsKeyARN@s
+-- are created using the
+-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+-- Key Management Service (KMS) API action.
+createJob_kmsKeyARN :: Lens.Lens' CreateJob (Prelude.Maybe Prelude.Text)
+createJob_kmsKeyARN = Lens.lens (\CreateJob' {kmsKeyARN} -> kmsKeyARN) (\s@CreateJob' {} a -> s {kmsKeyARN = a} :: CreateJob)
+
+-- | The ID of the long-term pricing type for the device.
+createJob_longTermPricingId :: Lens.Lens' CreateJob (Prelude.Maybe Prelude.Text)
+createJob_longTermPricingId = Lens.lens (\CreateJob' {longTermPricingId} -> longTermPricingId) (\s@CreateJob' {} a -> s {longTermPricingId = a} :: CreateJob)
+
+-- | Defines the Amazon Simple Notification Service (Amazon SNS) notification
+-- settings for this job.
+createJob_notification :: Lens.Lens' CreateJob (Prelude.Maybe Notification)
+createJob_notification = Lens.lens (\CreateJob' {notification} -> notification) (\s@CreateJob' {} a -> s {notification = a} :: CreateJob)
+
+-- | Specifies the service or services on the Snow Family device that your
+-- transferred data will be exported from or imported into. Amazon Web
+-- Services Snow Family supports Amazon S3 and NFS (Network File System)
+-- and the Amazon Web Services Storage Gateway service Tape Gateway type.
+createJob_onDeviceServiceConfiguration :: Lens.Lens' CreateJob (Prelude.Maybe OnDeviceServiceConfiguration)
+createJob_onDeviceServiceConfiguration = Lens.lens (\CreateJob' {onDeviceServiceConfiguration} -> onDeviceServiceConfiguration) (\s@CreateJob' {} a -> s {onDeviceServiceConfiguration = a} :: CreateJob)
+
+-- | Allows you to securely operate and manage Snowcone devices remotely from
+-- outside of your internal network. When set to @INSTALLED_AUTOSTART@,
+-- remote management will automatically be available when the device
+-- arrives at your location. Otherwise, you need to use the Snowball Client
+-- to manage the device.
+createJob_remoteManagement :: Lens.Lens' CreateJob (Prelude.Maybe RemoteManagement)
+createJob_remoteManagement = Lens.lens (\CreateJob' {remoteManagement} -> remoteManagement) (\s@CreateJob' {} a -> s {remoteManagement = a} :: CreateJob)
+
+-- | Defines the Amazon S3 buckets associated with this job.
+--
+-- With @IMPORT@ jobs, you specify the bucket or buckets that your
+-- transferred data will be imported into.
+--
+-- With @EXPORT@ jobs, you specify the bucket or buckets that your
+-- transferred data will be exported from. Optionally, you can also specify
+-- a @KeyRange@ value. If you choose to export a range, you define the
+-- length of the range by providing either an inclusive @BeginMarker@
+-- value, an inclusive @EndMarker@ value, or both. Ranges are UTF-8 binary
+-- sorted.
+createJob_resources :: Lens.Lens' CreateJob (Prelude.Maybe JobResource)
+createJob_resources = Lens.lens (\CreateJob' {resources} -> resources) (\s@CreateJob' {} a -> s {resources = a} :: CreateJob)
+
+-- | The @RoleARN@ that you want to associate with this job. @RoleArn@s are
+-- created using the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+-- Identity and Access Management (IAM) API action.
+createJob_roleARN :: Lens.Lens' CreateJob (Prelude.Maybe Prelude.Text)
+createJob_roleARN = Lens.lens (\CreateJob' {roleARN} -> roleARN) (\s@CreateJob' {} a -> s {roleARN = a} :: CreateJob)
+
+-- | The shipping speed for this job. This speed doesn\'t dictate how soon
+-- you\'ll get the Snow device, rather it represents how quickly the Snow
+-- device moves to its destination while in transit. Regional shipping
+-- speeds are as follows:
+--
+-- -   In Australia, you have access to express shipping. Typically, Snow
+--     devices shipped express are delivered in about a day.
+--
+-- -   In the European Union (EU), you have access to express shipping.
+--     Typically, Snow devices shipped express are delivered in about a
+--     day. In addition, most countries in the EU have access to standard
+--     shipping, which typically takes less than a week, one way.
+--
+-- -   In India, Snow devices are delivered in one to seven days.
+--
+-- -   In the US, you have access to one-day shipping and two-day shipping.
+createJob_shippingOption :: Lens.Lens' CreateJob (Prelude.Maybe ShippingOption)
+createJob_shippingOption = Lens.lens (\CreateJob' {shippingOption} -> shippingOption) (\s@CreateJob' {} a -> s {shippingOption = a} :: CreateJob)
+
+-- | If your job is being created in one of the US regions, you have the
+-- option of specifying what size Snow device you\'d like for this job. In
+-- all other regions, Snowballs come with 80 TB in storage capacity.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+createJob_snowballCapacityPreference :: Lens.Lens' CreateJob (Prelude.Maybe SnowballCapacity)
+createJob_snowballCapacityPreference = Lens.lens (\CreateJob' {snowballCapacityPreference} -> snowballCapacityPreference) (\s@CreateJob' {} a -> s {snowballCapacityPreference = a} :: CreateJob)
+
+-- | The type of Snow Family devices to use for this job.
+--
+-- For cluster jobs, Amazon Web Services Snow Family currently supports
+-- only the @EDGE@ device type.
+--
+-- The type of Amazon Web Services Snow device to use for this job.
+-- Currently, the only supported device type for cluster jobs is @EDGE@.
+--
+-- For more information, see
+-- <https://docs.aws.amazon.com/snowball/latest/developer-guide/device-differences.html Snowball Edge Device Options>
+-- in the Snowball Edge Developer Guide.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+createJob_snowballType :: Lens.Lens' CreateJob (Prelude.Maybe SnowballType)
+createJob_snowballType = Lens.lens (\CreateJob' {snowballType} -> snowballType) (\s@CreateJob' {} a -> s {snowballType = a} :: CreateJob)
+
+-- | The tax documents required in your Amazon Web Services Region.
+createJob_taxDocuments :: Lens.Lens' CreateJob (Prelude.Maybe TaxDocuments)
+createJob_taxDocuments = Lens.lens (\CreateJob' {taxDocuments} -> taxDocuments) (\s@CreateJob' {} a -> s {taxDocuments = a} :: CreateJob)
+
+instance Core.AWSRequest CreateJob where
+  type AWSResponse CreateJob = CreateJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateJobResponse'
+            Prelude.<$> (x Data..?> "JobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateJob where
+  hashWithSalt _salt CreateJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressId
+      `Prelude.hashWithSalt` clusterId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` deviceConfiguration
+      `Prelude.hashWithSalt` forwardingAddressId
+      `Prelude.hashWithSalt` jobType
+      `Prelude.hashWithSalt` kmsKeyARN
+      `Prelude.hashWithSalt` longTermPricingId
+      `Prelude.hashWithSalt` notification
+      `Prelude.hashWithSalt` onDeviceServiceConfiguration
+      `Prelude.hashWithSalt` remoteManagement
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` roleARN
+      `Prelude.hashWithSalt` shippingOption
+      `Prelude.hashWithSalt` snowballCapacityPreference
+      `Prelude.hashWithSalt` snowballType
+      `Prelude.hashWithSalt` taxDocuments
+
+instance Prelude.NFData CreateJob where
+  rnf CreateJob' {..} =
+    Prelude.rnf addressId
+      `Prelude.seq` Prelude.rnf clusterId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf deviceConfiguration
+      `Prelude.seq` Prelude.rnf forwardingAddressId
+      `Prelude.seq` Prelude.rnf jobType
+      `Prelude.seq` Prelude.rnf kmsKeyARN
+      `Prelude.seq` Prelude.rnf longTermPricingId
+      `Prelude.seq` Prelude.rnf notification
+      `Prelude.seq` Prelude.rnf onDeviceServiceConfiguration
+      `Prelude.seq` Prelude.rnf remoteManagement
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf roleARN
+      `Prelude.seq` Prelude.rnf shippingOption
+      `Prelude.seq` Prelude.rnf snowballCapacityPreference
+      `Prelude.seq` Prelude.rnf snowballType
+      `Prelude.seq` Prelude.rnf taxDocuments
+
+instance Data.ToHeaders CreateJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.CreateJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateJob where
+  toJSON CreateJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AddressId" Data..=) Prelude.<$> addressId,
+            ("ClusterId" Data..=) Prelude.<$> clusterId,
+            ("Description" Data..=) Prelude.<$> description,
+            ("DeviceConfiguration" Data..=)
+              Prelude.<$> deviceConfiguration,
+            ("ForwardingAddressId" Data..=)
+              Prelude.<$> forwardingAddressId,
+            ("JobType" Data..=) Prelude.<$> jobType,
+            ("KmsKeyARN" Data..=) Prelude.<$> kmsKeyARN,
+            ("LongTermPricingId" Data..=)
+              Prelude.<$> longTermPricingId,
+            ("Notification" Data..=) Prelude.<$> notification,
+            ("OnDeviceServiceConfiguration" Data..=)
+              Prelude.<$> onDeviceServiceConfiguration,
+            ("RemoteManagement" Data..=)
+              Prelude.<$> remoteManagement,
+            ("Resources" Data..=) Prelude.<$> resources,
+            ("RoleARN" Data..=) Prelude.<$> roleARN,
+            ("ShippingOption" Data..=)
+              Prelude.<$> shippingOption,
+            ("SnowballCapacityPreference" Data..=)
+              Prelude.<$> snowballCapacityPreference,
+            ("SnowballType" Data..=) Prelude.<$> snowballType,
+            ("TaxDocuments" Data..=) Prelude.<$> taxDocuments
+          ]
+      )
+
+instance Data.ToPath CreateJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateJobResponse' smart constructor.
+data CreateJobResponse = CreateJobResponse'
+  { -- | The automatically generated ID for a job, for example
+    -- @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: 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 'CreateJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'createJobResponse_jobId' - The automatically generated ID for a job, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+--
+-- 'httpStatus', 'createJobResponse_httpStatus' - The response's http status code.
+newCreateJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateJobResponse
+newCreateJobResponse pHttpStatus_ =
+  CreateJobResponse'
+    { jobId = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The automatically generated ID for a job, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+createJobResponse_jobId :: Lens.Lens' CreateJobResponse (Prelude.Maybe Prelude.Text)
+createJobResponse_jobId = Lens.lens (\CreateJobResponse' {jobId} -> jobId) (\s@CreateJobResponse' {} a -> s {jobId = a} :: CreateJobResponse)
+
+-- | The response's http status code.
+createJobResponse_httpStatus :: Lens.Lens' CreateJobResponse Prelude.Int
+createJobResponse_httpStatus = Lens.lens (\CreateJobResponse' {httpStatus} -> httpStatus) (\s@CreateJobResponse' {} a -> s {httpStatus = a} :: CreateJobResponse)
+
+instance Prelude.NFData CreateJobResponse where
+  rnf CreateJobResponse' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/CreateLongTermPricing.hs b/gen/Amazonka/Snowball/CreateLongTermPricing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/CreateLongTermPricing.hs
@@ -0,0 +1,217 @@
+{-# 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.Snowball.CreateLongTermPricing
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a job with the long-term usage option for a device. The
+-- long-term usage is a 1-year or 3-year long-term pricing type for the
+-- device. You are billed upfront, and Amazon Web Services provides
+-- discounts for long-term pricing.
+module Amazonka.Snowball.CreateLongTermPricing
+  ( -- * Creating a Request
+    CreateLongTermPricing (..),
+    newCreateLongTermPricing,
+
+    -- * Request Lenses
+    createLongTermPricing_isLongTermPricingAutoRenew,
+    createLongTermPricing_snowballType,
+    createLongTermPricing_longTermPricingType,
+
+    -- * Destructuring the Response
+    CreateLongTermPricingResponse (..),
+    newCreateLongTermPricingResponse,
+
+    -- * Response Lenses
+    createLongTermPricingResponse_longTermPricingId,
+    createLongTermPricingResponse_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.Snowball.Types
+
+-- | /See:/ 'newCreateLongTermPricing' smart constructor.
+data CreateLongTermPricing = CreateLongTermPricing'
+  { -- | snowballty
+    --
+    -- Specifies whether the current long-term pricing type for the device
+    -- should be renewed.
+    isLongTermPricingAutoRenew :: Prelude.Maybe Prelude.Bool,
+    -- | The type of Snow Family devices to use for the long-term pricing job.
+    snowballType :: Prelude.Maybe SnowballType,
+    -- | The type of long-term pricing option you want for the device, either
+    -- 1-year or 3-year long-term pricing.
+    longTermPricingType :: LongTermPricingType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateLongTermPricing' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isLongTermPricingAutoRenew', 'createLongTermPricing_isLongTermPricingAutoRenew' - snowballty
+--
+-- Specifies whether the current long-term pricing type for the device
+-- should be renewed.
+--
+-- 'snowballType', 'createLongTermPricing_snowballType' - The type of Snow Family devices to use for the long-term pricing job.
+--
+-- 'longTermPricingType', 'createLongTermPricing_longTermPricingType' - The type of long-term pricing option you want for the device, either
+-- 1-year or 3-year long-term pricing.
+newCreateLongTermPricing ::
+  -- | 'longTermPricingType'
+  LongTermPricingType ->
+  CreateLongTermPricing
+newCreateLongTermPricing pLongTermPricingType_ =
+  CreateLongTermPricing'
+    { isLongTermPricingAutoRenew =
+        Prelude.Nothing,
+      snowballType = Prelude.Nothing,
+      longTermPricingType = pLongTermPricingType_
+    }
+
+-- | snowballty
+--
+-- Specifies whether the current long-term pricing type for the device
+-- should be renewed.
+createLongTermPricing_isLongTermPricingAutoRenew :: Lens.Lens' CreateLongTermPricing (Prelude.Maybe Prelude.Bool)
+createLongTermPricing_isLongTermPricingAutoRenew = Lens.lens (\CreateLongTermPricing' {isLongTermPricingAutoRenew} -> isLongTermPricingAutoRenew) (\s@CreateLongTermPricing' {} a -> s {isLongTermPricingAutoRenew = a} :: CreateLongTermPricing)
+
+-- | The type of Snow Family devices to use for the long-term pricing job.
+createLongTermPricing_snowballType :: Lens.Lens' CreateLongTermPricing (Prelude.Maybe SnowballType)
+createLongTermPricing_snowballType = Lens.lens (\CreateLongTermPricing' {snowballType} -> snowballType) (\s@CreateLongTermPricing' {} a -> s {snowballType = a} :: CreateLongTermPricing)
+
+-- | The type of long-term pricing option you want for the device, either
+-- 1-year or 3-year long-term pricing.
+createLongTermPricing_longTermPricingType :: Lens.Lens' CreateLongTermPricing LongTermPricingType
+createLongTermPricing_longTermPricingType = Lens.lens (\CreateLongTermPricing' {longTermPricingType} -> longTermPricingType) (\s@CreateLongTermPricing' {} a -> s {longTermPricingType = a} :: CreateLongTermPricing)
+
+instance Core.AWSRequest CreateLongTermPricing where
+  type
+    AWSResponse CreateLongTermPricing =
+      CreateLongTermPricingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateLongTermPricingResponse'
+            Prelude.<$> (x Data..?> "LongTermPricingId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateLongTermPricing where
+  hashWithSalt _salt CreateLongTermPricing' {..} =
+    _salt
+      `Prelude.hashWithSalt` isLongTermPricingAutoRenew
+      `Prelude.hashWithSalt` snowballType
+      `Prelude.hashWithSalt` longTermPricingType
+
+instance Prelude.NFData CreateLongTermPricing where
+  rnf CreateLongTermPricing' {..} =
+    Prelude.rnf isLongTermPricingAutoRenew
+      `Prelude.seq` Prelude.rnf snowballType
+      `Prelude.seq` Prelude.rnf longTermPricingType
+
+instance Data.ToHeaders CreateLongTermPricing where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.CreateLongTermPricing" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateLongTermPricing where
+  toJSON CreateLongTermPricing' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("IsLongTermPricingAutoRenew" Data..=)
+              Prelude.<$> isLongTermPricingAutoRenew,
+            ("SnowballType" Data..=) Prelude.<$> snowballType,
+            Prelude.Just
+              ("LongTermPricingType" Data..= longTermPricingType)
+          ]
+      )
+
+instance Data.ToPath CreateLongTermPricing where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateLongTermPricing where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateLongTermPricingResponse' smart constructor.
+data CreateLongTermPricingResponse = CreateLongTermPricingResponse'
+  { -- | The ID of the long-term pricing type for the device.
+    longTermPricingId :: 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 'CreateLongTermPricingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'longTermPricingId', 'createLongTermPricingResponse_longTermPricingId' - The ID of the long-term pricing type for the device.
+--
+-- 'httpStatus', 'createLongTermPricingResponse_httpStatus' - The response's http status code.
+newCreateLongTermPricingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateLongTermPricingResponse
+newCreateLongTermPricingResponse pHttpStatus_ =
+  CreateLongTermPricingResponse'
+    { longTermPricingId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the long-term pricing type for the device.
+createLongTermPricingResponse_longTermPricingId :: Lens.Lens' CreateLongTermPricingResponse (Prelude.Maybe Prelude.Text)
+createLongTermPricingResponse_longTermPricingId = Lens.lens (\CreateLongTermPricingResponse' {longTermPricingId} -> longTermPricingId) (\s@CreateLongTermPricingResponse' {} a -> s {longTermPricingId = a} :: CreateLongTermPricingResponse)
+
+-- | The response's http status code.
+createLongTermPricingResponse_httpStatus :: Lens.Lens' CreateLongTermPricingResponse Prelude.Int
+createLongTermPricingResponse_httpStatus = Lens.lens (\CreateLongTermPricingResponse' {httpStatus} -> httpStatus) (\s@CreateLongTermPricingResponse' {} a -> s {httpStatus = a} :: CreateLongTermPricingResponse)
+
+instance Prelude.NFData CreateLongTermPricingResponse where
+  rnf CreateLongTermPricingResponse' {..} =
+    Prelude.rnf longTermPricingId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/CreateReturnShippingLabel.hs b/gen/Amazonka/Snowball/CreateReturnShippingLabel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/CreateReturnShippingLabel.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.CreateReturnShippingLabel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a shipping label that will be used to return the Snow device to
+-- Amazon Web Services.
+module Amazonka.Snowball.CreateReturnShippingLabel
+  ( -- * Creating a Request
+    CreateReturnShippingLabel (..),
+    newCreateReturnShippingLabel,
+
+    -- * Request Lenses
+    createReturnShippingLabel_shippingOption,
+    createReturnShippingLabel_jobId,
+
+    -- * Destructuring the Response
+    CreateReturnShippingLabelResponse (..),
+    newCreateReturnShippingLabelResponse,
+
+    -- * Response Lenses
+    createReturnShippingLabelResponse_status,
+    createReturnShippingLabelResponse_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.Snowball.Types
+
+-- | /See:/ 'newCreateReturnShippingLabel' smart constructor.
+data CreateReturnShippingLabel = CreateReturnShippingLabel'
+  { -- | The shipping speed for a particular job. This speed doesn\'t dictate how
+    -- soon the device is returned to Amazon Web Services. This speed
+    -- represents how quickly it moves to its destination while in transit.
+    -- Regional shipping speeds are as follows:
+    shippingOption :: Prelude.Maybe ShippingOption,
+    -- | The ID for a job that you want to create the return shipping label for;
+    -- for example, @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateReturnShippingLabel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'shippingOption', 'createReturnShippingLabel_shippingOption' - The shipping speed for a particular job. This speed doesn\'t dictate how
+-- soon the device is returned to Amazon Web Services. This speed
+-- represents how quickly it moves to its destination while in transit.
+-- Regional shipping speeds are as follows:
+--
+-- 'jobId', 'createReturnShippingLabel_jobId' - The ID for a job that you want to create the return shipping label for;
+-- for example, @JID123e4567-e89b-12d3-a456-426655440000@.
+newCreateReturnShippingLabel ::
+  -- | 'jobId'
+  Prelude.Text ->
+  CreateReturnShippingLabel
+newCreateReturnShippingLabel pJobId_ =
+  CreateReturnShippingLabel'
+    { shippingOption =
+        Prelude.Nothing,
+      jobId = pJobId_
+    }
+
+-- | The shipping speed for a particular job. This speed doesn\'t dictate how
+-- soon the device is returned to Amazon Web Services. This speed
+-- represents how quickly it moves to its destination while in transit.
+-- Regional shipping speeds are as follows:
+createReturnShippingLabel_shippingOption :: Lens.Lens' CreateReturnShippingLabel (Prelude.Maybe ShippingOption)
+createReturnShippingLabel_shippingOption = Lens.lens (\CreateReturnShippingLabel' {shippingOption} -> shippingOption) (\s@CreateReturnShippingLabel' {} a -> s {shippingOption = a} :: CreateReturnShippingLabel)
+
+-- | The ID for a job that you want to create the return shipping label for;
+-- for example, @JID123e4567-e89b-12d3-a456-426655440000@.
+createReturnShippingLabel_jobId :: Lens.Lens' CreateReturnShippingLabel Prelude.Text
+createReturnShippingLabel_jobId = Lens.lens (\CreateReturnShippingLabel' {jobId} -> jobId) (\s@CreateReturnShippingLabel' {} a -> s {jobId = a} :: CreateReturnShippingLabel)
+
+instance Core.AWSRequest CreateReturnShippingLabel where
+  type
+    AWSResponse CreateReturnShippingLabel =
+      CreateReturnShippingLabelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateReturnShippingLabelResponse'
+            Prelude.<$> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateReturnShippingLabel where
+  hashWithSalt _salt CreateReturnShippingLabel' {..} =
+    _salt
+      `Prelude.hashWithSalt` shippingOption
+      `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData CreateReturnShippingLabel where
+  rnf CreateReturnShippingLabel' {..} =
+    Prelude.rnf shippingOption
+      `Prelude.seq` Prelude.rnf jobId
+
+instance Data.ToHeaders CreateReturnShippingLabel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.CreateReturnShippingLabel" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateReturnShippingLabel where
+  toJSON CreateReturnShippingLabel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ShippingOption" Data..=)
+              Prelude.<$> shippingOption,
+            Prelude.Just ("JobId" Data..= jobId)
+          ]
+      )
+
+instance Data.ToPath CreateReturnShippingLabel where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateReturnShippingLabel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateReturnShippingLabelResponse' smart constructor.
+data CreateReturnShippingLabelResponse = CreateReturnShippingLabelResponse'
+  { -- | The status information of the task on a Snow device that is being
+    -- returned to Amazon Web Services.
+    status :: Prelude.Maybe ShippingLabelStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateReturnShippingLabelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'createReturnShippingLabelResponse_status' - The status information of the task on a Snow device that is being
+-- returned to Amazon Web Services.
+--
+-- 'httpStatus', 'createReturnShippingLabelResponse_httpStatus' - The response's http status code.
+newCreateReturnShippingLabelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateReturnShippingLabelResponse
+newCreateReturnShippingLabelResponse pHttpStatus_ =
+  CreateReturnShippingLabelResponse'
+    { status =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The status information of the task on a Snow device that is being
+-- returned to Amazon Web Services.
+createReturnShippingLabelResponse_status :: Lens.Lens' CreateReturnShippingLabelResponse (Prelude.Maybe ShippingLabelStatus)
+createReturnShippingLabelResponse_status = Lens.lens (\CreateReturnShippingLabelResponse' {status} -> status) (\s@CreateReturnShippingLabelResponse' {} a -> s {status = a} :: CreateReturnShippingLabelResponse)
+
+-- | The response's http status code.
+createReturnShippingLabelResponse_httpStatus :: Lens.Lens' CreateReturnShippingLabelResponse Prelude.Int
+createReturnShippingLabelResponse_httpStatus = Lens.lens (\CreateReturnShippingLabelResponse' {httpStatus} -> httpStatus) (\s@CreateReturnShippingLabelResponse' {} a -> s {httpStatus = a} :: CreateReturnShippingLabelResponse)
+
+instance
+  Prelude.NFData
+    CreateReturnShippingLabelResponse
+  where
+  rnf CreateReturnShippingLabelResponse' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/DescribeAddress.hs b/gen/Amazonka/Snowball/DescribeAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/DescribeAddress.hs
@@ -0,0 +1,171 @@
+{-# 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.Snowball.DescribeAddress
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Takes an @AddressId@ and returns specific details about that address in
+-- the form of an @Address@ object.
+module Amazonka.Snowball.DescribeAddress
+  ( -- * Creating a Request
+    DescribeAddress (..),
+    newDescribeAddress,
+
+    -- * Request Lenses
+    describeAddress_addressId,
+
+    -- * Destructuring the Response
+    DescribeAddressResponse (..),
+    newDescribeAddressResponse,
+
+    -- * Response Lenses
+    describeAddressResponse_address,
+    describeAddressResponse_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.Snowball.Types
+
+-- | /See:/ 'newDescribeAddress' smart constructor.
+data DescribeAddress = DescribeAddress'
+  { -- | The automatically generated ID for a specific address.
+    addressId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressId', 'describeAddress_addressId' - The automatically generated ID for a specific address.
+newDescribeAddress ::
+  -- | 'addressId'
+  Prelude.Text ->
+  DescribeAddress
+newDescribeAddress pAddressId_ =
+  DescribeAddress' {addressId = pAddressId_}
+
+-- | The automatically generated ID for a specific address.
+describeAddress_addressId :: Lens.Lens' DescribeAddress Prelude.Text
+describeAddress_addressId = Lens.lens (\DescribeAddress' {addressId} -> addressId) (\s@DescribeAddress' {} a -> s {addressId = a} :: DescribeAddress)
+
+instance Core.AWSRequest DescribeAddress where
+  type
+    AWSResponse DescribeAddress =
+      DescribeAddressResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAddressResponse'
+            Prelude.<$> (x Data..?> "Address")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAddress where
+  hashWithSalt _salt DescribeAddress' {..} =
+    _salt `Prelude.hashWithSalt` addressId
+
+instance Prelude.NFData DescribeAddress where
+  rnf DescribeAddress' {..} = Prelude.rnf addressId
+
+instance Data.ToHeaders DescribeAddress where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.DescribeAddress" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAddress where
+  toJSON DescribeAddress' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("AddressId" Data..= addressId)]
+      )
+
+instance Data.ToPath DescribeAddress where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAddress where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAddressResponse' smart constructor.
+data DescribeAddressResponse = DescribeAddressResponse'
+  { -- | The address that you want the Snow device(s) associated with a specific
+    -- job to be shipped to.
+    address :: Prelude.Maybe Address,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddressResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'address', 'describeAddressResponse_address' - The address that you want the Snow device(s) associated with a specific
+-- job to be shipped to.
+--
+-- 'httpStatus', 'describeAddressResponse_httpStatus' - The response's http status code.
+newDescribeAddressResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAddressResponse
+newDescribeAddressResponse pHttpStatus_ =
+  DescribeAddressResponse'
+    { address = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The address that you want the Snow device(s) associated with a specific
+-- job to be shipped to.
+describeAddressResponse_address :: Lens.Lens' DescribeAddressResponse (Prelude.Maybe Address)
+describeAddressResponse_address = Lens.lens (\DescribeAddressResponse' {address} -> address) (\s@DescribeAddressResponse' {} a -> s {address = a} :: DescribeAddressResponse)
+
+-- | The response's http status code.
+describeAddressResponse_httpStatus :: Lens.Lens' DescribeAddressResponse Prelude.Int
+describeAddressResponse_httpStatus = Lens.lens (\DescribeAddressResponse' {httpStatus} -> httpStatus) (\s@DescribeAddressResponse' {} a -> s {httpStatus = a} :: DescribeAddressResponse)
+
+instance Prelude.NFData DescribeAddressResponse where
+  rnf DescribeAddressResponse' {..} =
+    Prelude.rnf address
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/DescribeAddresses.hs b/gen/Amazonka/Snowball/DescribeAddresses.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/DescribeAddresses.hs
@@ -0,0 +1,237 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.DescribeAddresses
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a specified number of @ADDRESS@ objects. Calling this API in one
+-- of the US regions will return addresses from the list of all addresses
+-- associated with this account in all US regions.
+--
+-- This operation returns paginated results.
+module Amazonka.Snowball.DescribeAddresses
+  ( -- * Creating a Request
+    DescribeAddresses (..),
+    newDescribeAddresses,
+
+    -- * Request Lenses
+    describeAddresses_maxResults,
+    describeAddresses_nextToken,
+
+    -- * Destructuring the Response
+    DescribeAddressesResponse (..),
+    newDescribeAddressesResponse,
+
+    -- * Response Lenses
+    describeAddressesResponse_addresses,
+    describeAddressesResponse_nextToken,
+    describeAddressesResponse_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.Snowball.Types
+
+-- | /See:/ 'newDescribeAddresses' smart constructor.
+data DescribeAddresses = DescribeAddresses'
+  { -- | The number of @ADDRESS@ objects to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | HTTP requests are stateless. To identify what object comes \"next\" in
+    -- the list of @ADDRESS@ objects, you have the option of specifying a value
+    -- for @NextToken@ as the starting point for your list of returned
+    -- addresses.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeAddresses' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'describeAddresses_maxResults' - The number of @ADDRESS@ objects to return.
+--
+-- 'nextToken', 'describeAddresses_nextToken' - HTTP requests are stateless. To identify what object comes \"next\" in
+-- the list of @ADDRESS@ objects, you have the option of specifying a value
+-- for @NextToken@ as the starting point for your list of returned
+-- addresses.
+newDescribeAddresses ::
+  DescribeAddresses
+newDescribeAddresses =
+  DescribeAddresses'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of @ADDRESS@ objects to return.
+describeAddresses_maxResults :: Lens.Lens' DescribeAddresses (Prelude.Maybe Prelude.Natural)
+describeAddresses_maxResults = Lens.lens (\DescribeAddresses' {maxResults} -> maxResults) (\s@DescribeAddresses' {} a -> s {maxResults = a} :: DescribeAddresses)
+
+-- | HTTP requests are stateless. To identify what object comes \"next\" in
+-- the list of @ADDRESS@ objects, you have the option of specifying a value
+-- for @NextToken@ as the starting point for your list of returned
+-- addresses.
+describeAddresses_nextToken :: Lens.Lens' DescribeAddresses (Prelude.Maybe Prelude.Text)
+describeAddresses_nextToken = Lens.lens (\DescribeAddresses' {nextToken} -> nextToken) (\s@DescribeAddresses' {} a -> s {nextToken = a} :: DescribeAddresses)
+
+instance Core.AWSPager DescribeAddresses where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? describeAddressesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? describeAddressesResponse_addresses
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& describeAddresses_nextToken
+          Lens..~ rs
+          Lens.^? describeAddressesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest DescribeAddresses where
+  type
+    AWSResponse DescribeAddresses =
+      DescribeAddressesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeAddressesResponse'
+            Prelude.<$> (x Data..?> "Addresses" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeAddresses where
+  hashWithSalt _salt DescribeAddresses' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData DescribeAddresses where
+  rnf DescribeAddresses' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders DescribeAddresses where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.DescribeAddresses" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeAddresses where
+  toJSON DescribeAddresses' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath DescribeAddresses where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeAddresses where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeAddressesResponse' smart constructor.
+data DescribeAddressesResponse = DescribeAddressesResponse'
+  { -- | The Snow device shipping addresses that were created for this account.
+    addresses :: Prelude.Maybe [Address],
+    -- | HTTP requests are stateless. If you use the automatically generated
+    -- @NextToken@ value in your next @DescribeAddresses@ call, your list of
+    -- returned addresses will start from this point in the array.
+    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 'DescribeAddressesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addresses', 'describeAddressesResponse_addresses' - The Snow device shipping addresses that were created for this account.
+--
+-- 'nextToken', 'describeAddressesResponse_nextToken' - HTTP requests are stateless. If you use the automatically generated
+-- @NextToken@ value in your next @DescribeAddresses@ call, your list of
+-- returned addresses will start from this point in the array.
+--
+-- 'httpStatus', 'describeAddressesResponse_httpStatus' - The response's http status code.
+newDescribeAddressesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeAddressesResponse
+newDescribeAddressesResponse pHttpStatus_ =
+  DescribeAddressesResponse'
+    { addresses =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Snow device shipping addresses that were created for this account.
+describeAddressesResponse_addresses :: Lens.Lens' DescribeAddressesResponse (Prelude.Maybe [Address])
+describeAddressesResponse_addresses = Lens.lens (\DescribeAddressesResponse' {addresses} -> addresses) (\s@DescribeAddressesResponse' {} a -> s {addresses = a} :: DescribeAddressesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | HTTP requests are stateless. If you use the automatically generated
+-- @NextToken@ value in your next @DescribeAddresses@ call, your list of
+-- returned addresses will start from this point in the array.
+describeAddressesResponse_nextToken :: Lens.Lens' DescribeAddressesResponse (Prelude.Maybe Prelude.Text)
+describeAddressesResponse_nextToken = Lens.lens (\DescribeAddressesResponse' {nextToken} -> nextToken) (\s@DescribeAddressesResponse' {} a -> s {nextToken = a} :: DescribeAddressesResponse)
+
+-- | The response's http status code.
+describeAddressesResponse_httpStatus :: Lens.Lens' DescribeAddressesResponse Prelude.Int
+describeAddressesResponse_httpStatus = Lens.lens (\DescribeAddressesResponse' {httpStatus} -> httpStatus) (\s@DescribeAddressesResponse' {} a -> s {httpStatus = a} :: DescribeAddressesResponse)
+
+instance Prelude.NFData DescribeAddressesResponse where
+  rnf DescribeAddressesResponse' {..} =
+    Prelude.rnf addresses
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/DescribeCluster.hs b/gen/Amazonka/Snowball/DescribeCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/DescribeCluster.hs
@@ -0,0 +1,172 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.DescribeCluster
+-- 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 a specific cluster including shipping
+-- information, cluster status, and other important metadata.
+module Amazonka.Snowball.DescribeCluster
+  ( -- * Creating a Request
+    DescribeCluster (..),
+    newDescribeCluster,
+
+    -- * Request Lenses
+    describeCluster_clusterId,
+
+    -- * Destructuring the Response
+    DescribeClusterResponse (..),
+    newDescribeClusterResponse,
+
+    -- * Response Lenses
+    describeClusterResponse_clusterMetadata,
+    describeClusterResponse_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.Snowball.Types
+
+-- | /See:/ 'newDescribeCluster' smart constructor.
+data DescribeCluster = DescribeCluster'
+  { -- | The automatically generated ID for a cluster.
+    clusterId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeCluster' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterId', 'describeCluster_clusterId' - The automatically generated ID for a cluster.
+newDescribeCluster ::
+  -- | 'clusterId'
+  Prelude.Text ->
+  DescribeCluster
+newDescribeCluster pClusterId_ =
+  DescribeCluster' {clusterId = pClusterId_}
+
+-- | The automatically generated ID for a cluster.
+describeCluster_clusterId :: Lens.Lens' DescribeCluster Prelude.Text
+describeCluster_clusterId = Lens.lens (\DescribeCluster' {clusterId} -> clusterId) (\s@DescribeCluster' {} a -> s {clusterId = a} :: DescribeCluster)
+
+instance Core.AWSRequest DescribeCluster where
+  type
+    AWSResponse DescribeCluster =
+      DescribeClusterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeClusterResponse'
+            Prelude.<$> (x Data..?> "ClusterMetadata")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeCluster where
+  hashWithSalt _salt DescribeCluster' {..} =
+    _salt `Prelude.hashWithSalt` clusterId
+
+instance Prelude.NFData DescribeCluster where
+  rnf DescribeCluster' {..} = Prelude.rnf clusterId
+
+instance Data.ToHeaders DescribeCluster where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.DescribeCluster" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeCluster where
+  toJSON DescribeCluster' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("ClusterId" Data..= clusterId)]
+      )
+
+instance Data.ToPath DescribeCluster where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeCluster where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeClusterResponse' smart constructor.
+data DescribeClusterResponse = DescribeClusterResponse'
+  { -- | Information about a specific cluster, including shipping information,
+    -- cluster status, and other important metadata.
+    clusterMetadata :: Prelude.Maybe ClusterMetadata,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeClusterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterMetadata', 'describeClusterResponse_clusterMetadata' - Information about a specific cluster, including shipping information,
+-- cluster status, and other important metadata.
+--
+-- 'httpStatus', 'describeClusterResponse_httpStatus' - The response's http status code.
+newDescribeClusterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeClusterResponse
+newDescribeClusterResponse pHttpStatus_ =
+  DescribeClusterResponse'
+    { clusterMetadata =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about a specific cluster, including shipping information,
+-- cluster status, and other important metadata.
+describeClusterResponse_clusterMetadata :: Lens.Lens' DescribeClusterResponse (Prelude.Maybe ClusterMetadata)
+describeClusterResponse_clusterMetadata = Lens.lens (\DescribeClusterResponse' {clusterMetadata} -> clusterMetadata) (\s@DescribeClusterResponse' {} a -> s {clusterMetadata = a} :: DescribeClusterResponse)
+
+-- | The response's http status code.
+describeClusterResponse_httpStatus :: Lens.Lens' DescribeClusterResponse Prelude.Int
+describeClusterResponse_httpStatus = Lens.lens (\DescribeClusterResponse' {httpStatus} -> httpStatus) (\s@DescribeClusterResponse' {} a -> s {httpStatus = a} :: DescribeClusterResponse)
+
+instance Prelude.NFData DescribeClusterResponse where
+  rnf DescribeClusterResponse' {..} =
+    Prelude.rnf clusterMetadata
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/DescribeJob.hs b/gen/Amazonka/Snowball/DescribeJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/DescribeJob.hs
@@ -0,0 +1,190 @@
+{-# 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.Snowball.DescribeJob
+-- 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 a specific job including shipping information,
+-- job status, and other important metadata.
+module Amazonka.Snowball.DescribeJob
+  ( -- * Creating a Request
+    DescribeJob (..),
+    newDescribeJob,
+
+    -- * Request Lenses
+    describeJob_jobId,
+
+    -- * Destructuring the Response
+    DescribeJobResponse (..),
+    newDescribeJobResponse,
+
+    -- * Response Lenses
+    describeJobResponse_jobMetadata,
+    describeJobResponse_subJobMetadata,
+    describeJobResponse_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.Snowball.Types
+
+-- | /See:/ 'newDescribeJob' smart constructor.
+data DescribeJob = DescribeJob'
+  { -- | The automatically generated ID for a job, for example
+    -- @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'describeJob_jobId' - The automatically generated ID for a job, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+newDescribeJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DescribeJob
+newDescribeJob pJobId_ =
+  DescribeJob' {jobId = pJobId_}
+
+-- | The automatically generated ID for a job, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+describeJob_jobId :: Lens.Lens' DescribeJob Prelude.Text
+describeJob_jobId = Lens.lens (\DescribeJob' {jobId} -> jobId) (\s@DescribeJob' {} a -> s {jobId = a} :: DescribeJob)
+
+instance Core.AWSRequest DescribeJob where
+  type AWSResponse DescribeJob = DescribeJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeJobResponse'
+            Prelude.<$> (x Data..?> "JobMetadata")
+            Prelude.<*> (x Data..?> "SubJobMetadata" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeJob where
+  hashWithSalt _salt DescribeJob' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DescribeJob where
+  rnf DescribeJob' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders DescribeJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.DescribeJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeJob where
+  toJSON DescribeJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath DescribeJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeJobResponse' smart constructor.
+data DescribeJobResponse = DescribeJobResponse'
+  { -- | Information about a specific job, including shipping information, job
+    -- status, and other important metadata.
+    jobMetadata :: Prelude.Maybe JobMetadata,
+    -- | Information about a specific job part (in the case of an export job),
+    -- including shipping information, job status, and other important
+    -- metadata.
+    subJobMetadata :: Prelude.Maybe [JobMetadata],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobMetadata', 'describeJobResponse_jobMetadata' - Information about a specific job, including shipping information, job
+-- status, and other important metadata.
+--
+-- 'subJobMetadata', 'describeJobResponse_subJobMetadata' - Information about a specific job part (in the case of an export job),
+-- including shipping information, job status, and other important
+-- metadata.
+--
+-- 'httpStatus', 'describeJobResponse_httpStatus' - The response's http status code.
+newDescribeJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeJobResponse
+newDescribeJobResponse pHttpStatus_ =
+  DescribeJobResponse'
+    { jobMetadata = Prelude.Nothing,
+      subJobMetadata = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about a specific job, including shipping information, job
+-- status, and other important metadata.
+describeJobResponse_jobMetadata :: Lens.Lens' DescribeJobResponse (Prelude.Maybe JobMetadata)
+describeJobResponse_jobMetadata = Lens.lens (\DescribeJobResponse' {jobMetadata} -> jobMetadata) (\s@DescribeJobResponse' {} a -> s {jobMetadata = a} :: DescribeJobResponse)
+
+-- | Information about a specific job part (in the case of an export job),
+-- including shipping information, job status, and other important
+-- metadata.
+describeJobResponse_subJobMetadata :: Lens.Lens' DescribeJobResponse (Prelude.Maybe [JobMetadata])
+describeJobResponse_subJobMetadata = Lens.lens (\DescribeJobResponse' {subJobMetadata} -> subJobMetadata) (\s@DescribeJobResponse' {} a -> s {subJobMetadata = a} :: DescribeJobResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+describeJobResponse_httpStatus :: Lens.Lens' DescribeJobResponse Prelude.Int
+describeJobResponse_httpStatus = Lens.lens (\DescribeJobResponse' {httpStatus} -> httpStatus) (\s@DescribeJobResponse' {} a -> s {httpStatus = a} :: DescribeJobResponse)
+
+instance Prelude.NFData DescribeJobResponse where
+  rnf DescribeJobResponse' {..} =
+    Prelude.rnf jobMetadata
+      `Prelude.seq` Prelude.rnf subJobMetadata
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/DescribeReturnShippingLabel.hs b/gen/Amazonka/Snowball/DescribeReturnShippingLabel.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/DescribeReturnShippingLabel.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.DescribeReturnShippingLabel
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Information on the shipping label of a Snow device that is being
+-- returned to Amazon Web Services.
+module Amazonka.Snowball.DescribeReturnShippingLabel
+  ( -- * Creating a Request
+    DescribeReturnShippingLabel (..),
+    newDescribeReturnShippingLabel,
+
+    -- * Request Lenses
+    describeReturnShippingLabel_jobId,
+
+    -- * Destructuring the Response
+    DescribeReturnShippingLabelResponse (..),
+    newDescribeReturnShippingLabelResponse,
+
+    -- * Response Lenses
+    describeReturnShippingLabelResponse_expirationDate,
+    describeReturnShippingLabelResponse_returnShippingLabelURI,
+    describeReturnShippingLabelResponse_status,
+    describeReturnShippingLabelResponse_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.Snowball.Types
+
+-- | /See:/ 'newDescribeReturnShippingLabel' smart constructor.
+data DescribeReturnShippingLabel = DescribeReturnShippingLabel'
+  { -- | The automatically generated ID for a job, for example
+    -- @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReturnShippingLabel' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'describeReturnShippingLabel_jobId' - The automatically generated ID for a job, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+newDescribeReturnShippingLabel ::
+  -- | 'jobId'
+  Prelude.Text ->
+  DescribeReturnShippingLabel
+newDescribeReturnShippingLabel pJobId_ =
+  DescribeReturnShippingLabel' {jobId = pJobId_}
+
+-- | The automatically generated ID for a job, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+describeReturnShippingLabel_jobId :: Lens.Lens' DescribeReturnShippingLabel Prelude.Text
+describeReturnShippingLabel_jobId = Lens.lens (\DescribeReturnShippingLabel' {jobId} -> jobId) (\s@DescribeReturnShippingLabel' {} a -> s {jobId = a} :: DescribeReturnShippingLabel)
+
+instance Core.AWSRequest DescribeReturnShippingLabel where
+  type
+    AWSResponse DescribeReturnShippingLabel =
+      DescribeReturnShippingLabelResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          DescribeReturnShippingLabelResponse'
+            Prelude.<$> (x Data..?> "ExpirationDate")
+            Prelude.<*> (x Data..?> "ReturnShippingLabelURI")
+            Prelude.<*> (x Data..?> "Status")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DescribeReturnShippingLabel where
+  hashWithSalt _salt DescribeReturnShippingLabel' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData DescribeReturnShippingLabel where
+  rnf DescribeReturnShippingLabel' {..} =
+    Prelude.rnf jobId
+
+instance Data.ToHeaders DescribeReturnShippingLabel where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.DescribeReturnShippingLabel" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DescribeReturnShippingLabel where
+  toJSON DescribeReturnShippingLabel' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath DescribeReturnShippingLabel where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DescribeReturnShippingLabel where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDescribeReturnShippingLabelResponse' smart constructor.
+data DescribeReturnShippingLabelResponse = DescribeReturnShippingLabelResponse'
+  { -- | The expiration date of the current return shipping label.
+    expirationDate :: Prelude.Maybe Data.POSIX,
+    -- | The pre-signed Amazon S3 URI used to download the return shipping label.
+    returnShippingLabelURI :: Prelude.Maybe Prelude.Text,
+    -- | The status information of the task on a Snow device that is being
+    -- returned to Amazon Web Services.
+    status :: Prelude.Maybe ShippingLabelStatus,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DescribeReturnShippingLabelResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'expirationDate', 'describeReturnShippingLabelResponse_expirationDate' - The expiration date of the current return shipping label.
+--
+-- 'returnShippingLabelURI', 'describeReturnShippingLabelResponse_returnShippingLabelURI' - The pre-signed Amazon S3 URI used to download the return shipping label.
+--
+-- 'status', 'describeReturnShippingLabelResponse_status' - The status information of the task on a Snow device that is being
+-- returned to Amazon Web Services.
+--
+-- 'httpStatus', 'describeReturnShippingLabelResponse_httpStatus' - The response's http status code.
+newDescribeReturnShippingLabelResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DescribeReturnShippingLabelResponse
+newDescribeReturnShippingLabelResponse pHttpStatus_ =
+  DescribeReturnShippingLabelResponse'
+    { expirationDate =
+        Prelude.Nothing,
+      returnShippingLabelURI =
+        Prelude.Nothing,
+      status = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The expiration date of the current return shipping label.
+describeReturnShippingLabelResponse_expirationDate :: Lens.Lens' DescribeReturnShippingLabelResponse (Prelude.Maybe Prelude.UTCTime)
+describeReturnShippingLabelResponse_expirationDate = Lens.lens (\DescribeReturnShippingLabelResponse' {expirationDate} -> expirationDate) (\s@DescribeReturnShippingLabelResponse' {} a -> s {expirationDate = a} :: DescribeReturnShippingLabelResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The pre-signed Amazon S3 URI used to download the return shipping label.
+describeReturnShippingLabelResponse_returnShippingLabelURI :: Lens.Lens' DescribeReturnShippingLabelResponse (Prelude.Maybe Prelude.Text)
+describeReturnShippingLabelResponse_returnShippingLabelURI = Lens.lens (\DescribeReturnShippingLabelResponse' {returnShippingLabelURI} -> returnShippingLabelURI) (\s@DescribeReturnShippingLabelResponse' {} a -> s {returnShippingLabelURI = a} :: DescribeReturnShippingLabelResponse)
+
+-- | The status information of the task on a Snow device that is being
+-- returned to Amazon Web Services.
+describeReturnShippingLabelResponse_status :: Lens.Lens' DescribeReturnShippingLabelResponse (Prelude.Maybe ShippingLabelStatus)
+describeReturnShippingLabelResponse_status = Lens.lens (\DescribeReturnShippingLabelResponse' {status} -> status) (\s@DescribeReturnShippingLabelResponse' {} a -> s {status = a} :: DescribeReturnShippingLabelResponse)
+
+-- | The response's http status code.
+describeReturnShippingLabelResponse_httpStatus :: Lens.Lens' DescribeReturnShippingLabelResponse Prelude.Int
+describeReturnShippingLabelResponse_httpStatus = Lens.lens (\DescribeReturnShippingLabelResponse' {httpStatus} -> httpStatus) (\s@DescribeReturnShippingLabelResponse' {} a -> s {httpStatus = a} :: DescribeReturnShippingLabelResponse)
+
+instance
+  Prelude.NFData
+    DescribeReturnShippingLabelResponse
+  where
+  rnf DescribeReturnShippingLabelResponse' {..} =
+    Prelude.rnf expirationDate
+      `Prelude.seq` Prelude.rnf returnShippingLabelURI
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/GetJobManifest.hs b/gen/Amazonka/Snowball/GetJobManifest.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/GetJobManifest.hs
@@ -0,0 +1,194 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.GetJobManifest
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Returns a link to an Amazon S3 presigned URL for the manifest file
+-- associated with the specified @JobId@ value. You can access the manifest
+-- file for up to 60 minutes after this request has been made. To access
+-- the manifest file after 60 minutes have passed, you\'ll have to make
+-- another call to the @GetJobManifest@ action.
+--
+-- The manifest is an encrypted file that you can download after your job
+-- enters the @WithCustomer@ status. This is the only valid status for
+-- calling this API as the manifest and @UnlockCode@ code value are used
+-- for securing your device and should only be used when you have the
+-- device. The manifest is decrypted by using the @UnlockCode@ code value,
+-- when you pass both values to the Snow device through the Snowball client
+-- when the client is started for the first time.
+--
+-- As a best practice, we recommend that you don\'t save a copy of an
+-- @UnlockCode@ value in the same location as the manifest file for that
+-- job. Saving these separately helps prevent unauthorized parties from
+-- gaining access to the Snow device associated with that job.
+--
+-- The credentials of a given job, including its manifest file and unlock
+-- code, expire 360 days after the job is created.
+module Amazonka.Snowball.GetJobManifest
+  ( -- * Creating a Request
+    GetJobManifest (..),
+    newGetJobManifest,
+
+    -- * Request Lenses
+    getJobManifest_jobId,
+
+    -- * Destructuring the Response
+    GetJobManifestResponse (..),
+    newGetJobManifestResponse,
+
+    -- * Response Lenses
+    getJobManifestResponse_manifestURI,
+    getJobManifestResponse_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.Snowball.Types
+
+-- | /See:/ 'newGetJobManifest' smart constructor.
+data GetJobManifest = GetJobManifest'
+  { -- | The ID for a job that you want to get the manifest file for, for example
+    -- @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetJobManifest' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'getJobManifest_jobId' - The ID for a job that you want to get the manifest file for, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+newGetJobManifest ::
+  -- | 'jobId'
+  Prelude.Text ->
+  GetJobManifest
+newGetJobManifest pJobId_ =
+  GetJobManifest' {jobId = pJobId_}
+
+-- | The ID for a job that you want to get the manifest file for, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+getJobManifest_jobId :: Lens.Lens' GetJobManifest Prelude.Text
+getJobManifest_jobId = Lens.lens (\GetJobManifest' {jobId} -> jobId) (\s@GetJobManifest' {} a -> s {jobId = a} :: GetJobManifest)
+
+instance Core.AWSRequest GetJobManifest where
+  type
+    AWSResponse GetJobManifest =
+      GetJobManifestResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetJobManifestResponse'
+            Prelude.<$> (x Data..?> "ManifestURI")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetJobManifest where
+  hashWithSalt _salt GetJobManifest' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData GetJobManifest where
+  rnf GetJobManifest' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders GetJobManifest where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.GetJobManifest" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetJobManifest where
+  toJSON GetJobManifest' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath GetJobManifest where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetJobManifest where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetJobManifestResponse' smart constructor.
+data GetJobManifestResponse = GetJobManifestResponse'
+  { -- | The Amazon S3 presigned URL for the manifest file associated with the
+    -- specified @JobId@ value.
+    manifestURI :: 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 'GetJobManifestResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'manifestURI', 'getJobManifestResponse_manifestURI' - The Amazon S3 presigned URL for the manifest file associated with the
+-- specified @JobId@ value.
+--
+-- 'httpStatus', 'getJobManifestResponse_httpStatus' - The response's http status code.
+newGetJobManifestResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetJobManifestResponse
+newGetJobManifestResponse pHttpStatus_ =
+  GetJobManifestResponse'
+    { manifestURI =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon S3 presigned URL for the manifest file associated with the
+-- specified @JobId@ value.
+getJobManifestResponse_manifestURI :: Lens.Lens' GetJobManifestResponse (Prelude.Maybe Prelude.Text)
+getJobManifestResponse_manifestURI = Lens.lens (\GetJobManifestResponse' {manifestURI} -> manifestURI) (\s@GetJobManifestResponse' {} a -> s {manifestURI = a} :: GetJobManifestResponse)
+
+-- | The response's http status code.
+getJobManifestResponse_httpStatus :: Lens.Lens' GetJobManifestResponse Prelude.Int
+getJobManifestResponse_httpStatus = Lens.lens (\GetJobManifestResponse' {httpStatus} -> httpStatus) (\s@GetJobManifestResponse' {} a -> s {httpStatus = a} :: GetJobManifestResponse)
+
+instance Prelude.NFData GetJobManifestResponse where
+  rnf GetJobManifestResponse' {..} =
+    Prelude.rnf manifestURI
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/GetJobUnlockCode.hs b/gen/Amazonka/Snowball/GetJobUnlockCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/GetJobUnlockCode.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.GetJobUnlockCode
+-- 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 the @UnlockCode@ code value for the specified job. A particular
+-- @UnlockCode@ value can be accessed for up to 360 days after the
+-- associated job has been created.
+--
+-- The @UnlockCode@ value is a 29-character code with 25 alphanumeric
+-- characters and 4 hyphens. This code is used to decrypt the manifest file
+-- when it is passed along with the manifest to the Snow device through the
+-- Snowball client when the client is started for the first time. The only
+-- valid status for calling this API is @WithCustomer@ as the manifest and
+-- @Unlock@ code values are used for securing your device and should only
+-- be used when you have the device.
+--
+-- As a best practice, we recommend that you don\'t save a copy of the
+-- @UnlockCode@ in the same location as the manifest file for that job.
+-- Saving these separately helps prevent unauthorized parties from gaining
+-- access to the Snow device associated with that job.
+module Amazonka.Snowball.GetJobUnlockCode
+  ( -- * Creating a Request
+    GetJobUnlockCode (..),
+    newGetJobUnlockCode,
+
+    -- * Request Lenses
+    getJobUnlockCode_jobId,
+
+    -- * Destructuring the Response
+    GetJobUnlockCodeResponse (..),
+    newGetJobUnlockCodeResponse,
+
+    -- * Response Lenses
+    getJobUnlockCodeResponse_unlockCode,
+    getJobUnlockCodeResponse_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.Snowball.Types
+
+-- | /See:/ 'newGetJobUnlockCode' smart constructor.
+data GetJobUnlockCode = GetJobUnlockCode'
+  { -- | The ID for the job that you want to get the @UnlockCode@ value for, for
+    -- example @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetJobUnlockCode' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'getJobUnlockCode_jobId' - The ID for the job that you want to get the @UnlockCode@ value for, for
+-- example @JID123e4567-e89b-12d3-a456-426655440000@.
+newGetJobUnlockCode ::
+  -- | 'jobId'
+  Prelude.Text ->
+  GetJobUnlockCode
+newGetJobUnlockCode pJobId_ =
+  GetJobUnlockCode' {jobId = pJobId_}
+
+-- | The ID for the job that you want to get the @UnlockCode@ value for, for
+-- example @JID123e4567-e89b-12d3-a456-426655440000@.
+getJobUnlockCode_jobId :: Lens.Lens' GetJobUnlockCode Prelude.Text
+getJobUnlockCode_jobId = Lens.lens (\GetJobUnlockCode' {jobId} -> jobId) (\s@GetJobUnlockCode' {} a -> s {jobId = a} :: GetJobUnlockCode)
+
+instance Core.AWSRequest GetJobUnlockCode where
+  type
+    AWSResponse GetJobUnlockCode =
+      GetJobUnlockCodeResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetJobUnlockCodeResponse'
+            Prelude.<$> (x Data..?> "UnlockCode")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetJobUnlockCode where
+  hashWithSalt _salt GetJobUnlockCode' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData GetJobUnlockCode where
+  rnf GetJobUnlockCode' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders GetJobUnlockCode where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.GetJobUnlockCode" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetJobUnlockCode where
+  toJSON GetJobUnlockCode' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath GetJobUnlockCode where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetJobUnlockCode where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetJobUnlockCodeResponse' smart constructor.
+data GetJobUnlockCodeResponse = GetJobUnlockCodeResponse'
+  { -- | The @UnlockCode@ value for the specified job. The @UnlockCode@ value can
+    -- be accessed for up to 360 days after the job has been created.
+    unlockCode :: 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 'GetJobUnlockCodeResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'unlockCode', 'getJobUnlockCodeResponse_unlockCode' - The @UnlockCode@ value for the specified job. The @UnlockCode@ value can
+-- be accessed for up to 360 days after the job has been created.
+--
+-- 'httpStatus', 'getJobUnlockCodeResponse_httpStatus' - The response's http status code.
+newGetJobUnlockCodeResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetJobUnlockCodeResponse
+newGetJobUnlockCodeResponse pHttpStatus_ =
+  GetJobUnlockCodeResponse'
+    { unlockCode =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The @UnlockCode@ value for the specified job. The @UnlockCode@ value can
+-- be accessed for up to 360 days after the job has been created.
+getJobUnlockCodeResponse_unlockCode :: Lens.Lens' GetJobUnlockCodeResponse (Prelude.Maybe Prelude.Text)
+getJobUnlockCodeResponse_unlockCode = Lens.lens (\GetJobUnlockCodeResponse' {unlockCode} -> unlockCode) (\s@GetJobUnlockCodeResponse' {} a -> s {unlockCode = a} :: GetJobUnlockCodeResponse)
+
+-- | The response's http status code.
+getJobUnlockCodeResponse_httpStatus :: Lens.Lens' GetJobUnlockCodeResponse Prelude.Int
+getJobUnlockCodeResponse_httpStatus = Lens.lens (\GetJobUnlockCodeResponse' {httpStatus} -> httpStatus) (\s@GetJobUnlockCodeResponse' {} a -> s {httpStatus = a} :: GetJobUnlockCodeResponse)
+
+instance Prelude.NFData GetJobUnlockCodeResponse where
+  rnf GetJobUnlockCodeResponse' {..} =
+    Prelude.rnf unlockCode
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/GetSnowballUsage.hs b/gen/Amazonka/Snowball/GetSnowballUsage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/GetSnowballUsage.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.GetSnowballUsage
+-- 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 Snow Family service limit for your
+-- account, and also the number of Snow devices your account has in use.
+--
+-- The default service limit for the number of Snow devices that you can
+-- have at one time is 1. If you want to increase your service limit,
+-- contact Amazon Web Services Support.
+module Amazonka.Snowball.GetSnowballUsage
+  ( -- * Creating a Request
+    GetSnowballUsage (..),
+    newGetSnowballUsage,
+
+    -- * Destructuring the Response
+    GetSnowballUsageResponse (..),
+    newGetSnowballUsageResponse,
+
+    -- * Response Lenses
+    getSnowballUsageResponse_snowballLimit,
+    getSnowballUsageResponse_snowballsInUse,
+    getSnowballUsageResponse_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.Snowball.Types
+
+-- | /See:/ 'newGetSnowballUsage' smart constructor.
+data GetSnowballUsage = GetSnowballUsage'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSnowballUsage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newGetSnowballUsage ::
+  GetSnowballUsage
+newGetSnowballUsage = GetSnowballUsage'
+
+instance Core.AWSRequest GetSnowballUsage where
+  type
+    AWSResponse GetSnowballUsage =
+      GetSnowballUsageResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSnowballUsageResponse'
+            Prelude.<$> (x Data..?> "SnowballLimit")
+            Prelude.<*> (x Data..?> "SnowballsInUse")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSnowballUsage where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData GetSnowballUsage where
+  rnf _ = ()
+
+instance Data.ToHeaders GetSnowballUsage where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.GetSnowballUsage" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetSnowballUsage where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath GetSnowballUsage where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetSnowballUsage where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSnowballUsageResponse' smart constructor.
+data GetSnowballUsageResponse = GetSnowballUsageResponse'
+  { -- | The service limit for number of Snow devices this account can have at
+    -- once. The default service limit is 1 (one).
+    snowballLimit :: Prelude.Maybe Prelude.Int,
+    -- | The number of Snow devices that this account is currently using.
+    snowballsInUse :: 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 'GetSnowballUsageResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snowballLimit', 'getSnowballUsageResponse_snowballLimit' - The service limit for number of Snow devices this account can have at
+-- once. The default service limit is 1 (one).
+--
+-- 'snowballsInUse', 'getSnowballUsageResponse_snowballsInUse' - The number of Snow devices that this account is currently using.
+--
+-- 'httpStatus', 'getSnowballUsageResponse_httpStatus' - The response's http status code.
+newGetSnowballUsageResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSnowballUsageResponse
+newGetSnowballUsageResponse pHttpStatus_ =
+  GetSnowballUsageResponse'
+    { snowballLimit =
+        Prelude.Nothing,
+      snowballsInUse = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The service limit for number of Snow devices this account can have at
+-- once. The default service limit is 1 (one).
+getSnowballUsageResponse_snowballLimit :: Lens.Lens' GetSnowballUsageResponse (Prelude.Maybe Prelude.Int)
+getSnowballUsageResponse_snowballLimit = Lens.lens (\GetSnowballUsageResponse' {snowballLimit} -> snowballLimit) (\s@GetSnowballUsageResponse' {} a -> s {snowballLimit = a} :: GetSnowballUsageResponse)
+
+-- | The number of Snow devices that this account is currently using.
+getSnowballUsageResponse_snowballsInUse :: Lens.Lens' GetSnowballUsageResponse (Prelude.Maybe Prelude.Int)
+getSnowballUsageResponse_snowballsInUse = Lens.lens (\GetSnowballUsageResponse' {snowballsInUse} -> snowballsInUse) (\s@GetSnowballUsageResponse' {} a -> s {snowballsInUse = a} :: GetSnowballUsageResponse)
+
+-- | The response's http status code.
+getSnowballUsageResponse_httpStatus :: Lens.Lens' GetSnowballUsageResponse Prelude.Int
+getSnowballUsageResponse_httpStatus = Lens.lens (\GetSnowballUsageResponse' {httpStatus} -> httpStatus) (\s@GetSnowballUsageResponse' {} a -> s {httpStatus = a} :: GetSnowballUsageResponse)
+
+instance Prelude.NFData GetSnowballUsageResponse where
+  rnf GetSnowballUsageResponse' {..} =
+    Prelude.rnf snowballLimit
+      `Prelude.seq` Prelude.rnf snowballsInUse
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/GetSoftwareUpdates.hs b/gen/Amazonka/Snowball/GetSoftwareUpdates.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/GetSoftwareUpdates.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.GetSoftwareUpdates
+-- 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 an Amazon S3 presigned URL for an update file associated with a
+-- specified @JobId@.
+module Amazonka.Snowball.GetSoftwareUpdates
+  ( -- * Creating a Request
+    GetSoftwareUpdates (..),
+    newGetSoftwareUpdates,
+
+    -- * Request Lenses
+    getSoftwareUpdates_jobId,
+
+    -- * Destructuring the Response
+    GetSoftwareUpdatesResponse (..),
+    newGetSoftwareUpdatesResponse,
+
+    -- * Response Lenses
+    getSoftwareUpdatesResponse_updatesURI,
+    getSoftwareUpdatesResponse_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.Snowball.Types
+
+-- | /See:/ 'newGetSoftwareUpdates' smart constructor.
+data GetSoftwareUpdates = GetSoftwareUpdates'
+  { -- | The ID for a job that you want to get the software update file for, for
+    -- example @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetSoftwareUpdates' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'getSoftwareUpdates_jobId' - The ID for a job that you want to get the software update file for, for
+-- example @JID123e4567-e89b-12d3-a456-426655440000@.
+newGetSoftwareUpdates ::
+  -- | 'jobId'
+  Prelude.Text ->
+  GetSoftwareUpdates
+newGetSoftwareUpdates pJobId_ =
+  GetSoftwareUpdates' {jobId = pJobId_}
+
+-- | The ID for a job that you want to get the software update file for, for
+-- example @JID123e4567-e89b-12d3-a456-426655440000@.
+getSoftwareUpdates_jobId :: Lens.Lens' GetSoftwareUpdates Prelude.Text
+getSoftwareUpdates_jobId = Lens.lens (\GetSoftwareUpdates' {jobId} -> jobId) (\s@GetSoftwareUpdates' {} a -> s {jobId = a} :: GetSoftwareUpdates)
+
+instance Core.AWSRequest GetSoftwareUpdates where
+  type
+    AWSResponse GetSoftwareUpdates =
+      GetSoftwareUpdatesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetSoftwareUpdatesResponse'
+            Prelude.<$> (x Data..?> "UpdatesURI")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetSoftwareUpdates where
+  hashWithSalt _salt GetSoftwareUpdates' {..} =
+    _salt `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData GetSoftwareUpdates where
+  rnf GetSoftwareUpdates' {..} = Prelude.rnf jobId
+
+instance Data.ToHeaders GetSoftwareUpdates where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.GetSoftwareUpdates" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetSoftwareUpdates where
+  toJSON GetSoftwareUpdates' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("JobId" Data..= jobId)]
+      )
+
+instance Data.ToPath GetSoftwareUpdates where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetSoftwareUpdates where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetSoftwareUpdatesResponse' smart constructor.
+data GetSoftwareUpdatesResponse = GetSoftwareUpdatesResponse'
+  { -- | The Amazon S3 presigned URL for the update file associated with the
+    -- specified @JobId@ value. The software update will be available for 2
+    -- days after this request is made. To access an update after the 2 days
+    -- have passed, you\'ll have to make another call to @GetSoftwareUpdates@.
+    updatesURI :: 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 'GetSoftwareUpdatesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'updatesURI', 'getSoftwareUpdatesResponse_updatesURI' - The Amazon S3 presigned URL for the update file associated with the
+-- specified @JobId@ value. The software update will be available for 2
+-- days after this request is made. To access an update after the 2 days
+-- have passed, you\'ll have to make another call to @GetSoftwareUpdates@.
+--
+-- 'httpStatus', 'getSoftwareUpdatesResponse_httpStatus' - The response's http status code.
+newGetSoftwareUpdatesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetSoftwareUpdatesResponse
+newGetSoftwareUpdatesResponse pHttpStatus_ =
+  GetSoftwareUpdatesResponse'
+    { updatesURI =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The Amazon S3 presigned URL for the update file associated with the
+-- specified @JobId@ value. The software update will be available for 2
+-- days after this request is made. To access an update after the 2 days
+-- have passed, you\'ll have to make another call to @GetSoftwareUpdates@.
+getSoftwareUpdatesResponse_updatesURI :: Lens.Lens' GetSoftwareUpdatesResponse (Prelude.Maybe Prelude.Text)
+getSoftwareUpdatesResponse_updatesURI = Lens.lens (\GetSoftwareUpdatesResponse' {updatesURI} -> updatesURI) (\s@GetSoftwareUpdatesResponse' {} a -> s {updatesURI = a} :: GetSoftwareUpdatesResponse)
+
+-- | The response's http status code.
+getSoftwareUpdatesResponse_httpStatus :: Lens.Lens' GetSoftwareUpdatesResponse Prelude.Int
+getSoftwareUpdatesResponse_httpStatus = Lens.lens (\GetSoftwareUpdatesResponse' {httpStatus} -> httpStatus) (\s@GetSoftwareUpdatesResponse' {} a -> s {httpStatus = a} :: GetSoftwareUpdatesResponse)
+
+instance Prelude.NFData GetSoftwareUpdatesResponse where
+  rnf GetSoftwareUpdatesResponse' {..} =
+    Prelude.rnf updatesURI
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/Lens.hs b/gen/Amazonka/Snowball/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Lens.hs
@@ -0,0 +1,427 @@
+{-# 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.Snowball.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.Snowball.Lens
+  ( -- * Operations
+
+    -- ** CancelCluster
+    cancelCluster_clusterId,
+    cancelClusterResponse_httpStatus,
+
+    -- ** CancelJob
+    cancelJob_jobId,
+    cancelJobResponse_httpStatus,
+
+    -- ** CreateAddress
+    createAddress_address,
+    createAddressResponse_addressId,
+    createAddressResponse_httpStatus,
+
+    -- ** CreateCluster
+    createCluster_description,
+    createCluster_forwardingAddressId,
+    createCluster_kmsKeyARN,
+    createCluster_notification,
+    createCluster_onDeviceServiceConfiguration,
+    createCluster_remoteManagement,
+    createCluster_taxDocuments,
+    createCluster_jobType,
+    createCluster_resources,
+    createCluster_addressId,
+    createCluster_roleARN,
+    createCluster_snowballType,
+    createCluster_shippingOption,
+    createClusterResponse_clusterId,
+    createClusterResponse_httpStatus,
+
+    -- ** CreateJob
+    createJob_addressId,
+    createJob_clusterId,
+    createJob_description,
+    createJob_deviceConfiguration,
+    createJob_forwardingAddressId,
+    createJob_jobType,
+    createJob_kmsKeyARN,
+    createJob_longTermPricingId,
+    createJob_notification,
+    createJob_onDeviceServiceConfiguration,
+    createJob_remoteManagement,
+    createJob_resources,
+    createJob_roleARN,
+    createJob_shippingOption,
+    createJob_snowballCapacityPreference,
+    createJob_snowballType,
+    createJob_taxDocuments,
+    createJobResponse_jobId,
+    createJobResponse_httpStatus,
+
+    -- ** CreateLongTermPricing
+    createLongTermPricing_isLongTermPricingAutoRenew,
+    createLongTermPricing_snowballType,
+    createLongTermPricing_longTermPricingType,
+    createLongTermPricingResponse_longTermPricingId,
+    createLongTermPricingResponse_httpStatus,
+
+    -- ** CreateReturnShippingLabel
+    createReturnShippingLabel_shippingOption,
+    createReturnShippingLabel_jobId,
+    createReturnShippingLabelResponse_status,
+    createReturnShippingLabelResponse_httpStatus,
+
+    -- ** DescribeAddress
+    describeAddress_addressId,
+    describeAddressResponse_address,
+    describeAddressResponse_httpStatus,
+
+    -- ** DescribeAddresses
+    describeAddresses_maxResults,
+    describeAddresses_nextToken,
+    describeAddressesResponse_addresses,
+    describeAddressesResponse_nextToken,
+    describeAddressesResponse_httpStatus,
+
+    -- ** DescribeCluster
+    describeCluster_clusterId,
+    describeClusterResponse_clusterMetadata,
+    describeClusterResponse_httpStatus,
+
+    -- ** DescribeJob
+    describeJob_jobId,
+    describeJobResponse_jobMetadata,
+    describeJobResponse_subJobMetadata,
+    describeJobResponse_httpStatus,
+
+    -- ** DescribeReturnShippingLabel
+    describeReturnShippingLabel_jobId,
+    describeReturnShippingLabelResponse_expirationDate,
+    describeReturnShippingLabelResponse_returnShippingLabelURI,
+    describeReturnShippingLabelResponse_status,
+    describeReturnShippingLabelResponse_httpStatus,
+
+    -- ** GetJobManifest
+    getJobManifest_jobId,
+    getJobManifestResponse_manifestURI,
+    getJobManifestResponse_httpStatus,
+
+    -- ** GetJobUnlockCode
+    getJobUnlockCode_jobId,
+    getJobUnlockCodeResponse_unlockCode,
+    getJobUnlockCodeResponse_httpStatus,
+
+    -- ** GetSnowballUsage
+    getSnowballUsageResponse_snowballLimit,
+    getSnowballUsageResponse_snowballsInUse,
+    getSnowballUsageResponse_httpStatus,
+
+    -- ** GetSoftwareUpdates
+    getSoftwareUpdates_jobId,
+    getSoftwareUpdatesResponse_updatesURI,
+    getSoftwareUpdatesResponse_httpStatus,
+
+    -- ** ListClusterJobs
+    listClusterJobs_maxResults,
+    listClusterJobs_nextToken,
+    listClusterJobs_clusterId,
+    listClusterJobsResponse_jobListEntries,
+    listClusterJobsResponse_nextToken,
+    listClusterJobsResponse_httpStatus,
+
+    -- ** ListClusters
+    listClusters_maxResults,
+    listClusters_nextToken,
+    listClustersResponse_clusterListEntries,
+    listClustersResponse_nextToken,
+    listClustersResponse_httpStatus,
+
+    -- ** ListCompatibleImages
+    listCompatibleImages_maxResults,
+    listCompatibleImages_nextToken,
+    listCompatibleImagesResponse_compatibleImages,
+    listCompatibleImagesResponse_nextToken,
+    listCompatibleImagesResponse_httpStatus,
+
+    -- ** ListJobs
+    listJobs_maxResults,
+    listJobs_nextToken,
+    listJobsResponse_jobListEntries,
+    listJobsResponse_nextToken,
+    listJobsResponse_httpStatus,
+
+    -- ** ListLongTermPricing
+    listLongTermPricing_maxResults,
+    listLongTermPricing_nextToken,
+    listLongTermPricingResponse_longTermPricingEntries,
+    listLongTermPricingResponse_nextToken,
+    listLongTermPricingResponse_httpStatus,
+
+    -- ** UpdateCluster
+    updateCluster_addressId,
+    updateCluster_description,
+    updateCluster_forwardingAddressId,
+    updateCluster_notification,
+    updateCluster_onDeviceServiceConfiguration,
+    updateCluster_resources,
+    updateCluster_roleARN,
+    updateCluster_shippingOption,
+    updateCluster_clusterId,
+    updateClusterResponse_httpStatus,
+
+    -- ** UpdateJob
+    updateJob_addressId,
+    updateJob_description,
+    updateJob_forwardingAddressId,
+    updateJob_notification,
+    updateJob_onDeviceServiceConfiguration,
+    updateJob_resources,
+    updateJob_roleARN,
+    updateJob_shippingOption,
+    updateJob_snowballCapacityPreference,
+    updateJob_jobId,
+    updateJobResponse_httpStatus,
+
+    -- ** UpdateJobShipmentState
+    updateJobShipmentState_jobId,
+    updateJobShipmentState_shipmentState,
+    updateJobShipmentStateResponse_httpStatus,
+
+    -- ** UpdateLongTermPricing
+    updateLongTermPricing_isLongTermPricingAutoRenew,
+    updateLongTermPricing_replacementJob,
+    updateLongTermPricing_longTermPricingId,
+    updateLongTermPricingResponse_httpStatus,
+
+    -- * Types
+
+    -- ** Address
+    address_addressId,
+    address_city,
+    address_company,
+    address_country,
+    address_isRestricted,
+    address_landmark,
+    address_name,
+    address_phoneNumber,
+    address_postalCode,
+    address_prefectureOrDistrict,
+    address_stateOrProvince,
+    address_street1,
+    address_street2,
+    address_street3,
+
+    -- ** ClusterListEntry
+    clusterListEntry_clusterId,
+    clusterListEntry_clusterState,
+    clusterListEntry_creationDate,
+    clusterListEntry_description,
+
+    -- ** ClusterMetadata
+    clusterMetadata_addressId,
+    clusterMetadata_clusterId,
+    clusterMetadata_clusterState,
+    clusterMetadata_creationDate,
+    clusterMetadata_description,
+    clusterMetadata_forwardingAddressId,
+    clusterMetadata_jobType,
+    clusterMetadata_kmsKeyARN,
+    clusterMetadata_notification,
+    clusterMetadata_onDeviceServiceConfiguration,
+    clusterMetadata_resources,
+    clusterMetadata_roleARN,
+    clusterMetadata_shippingOption,
+    clusterMetadata_snowballType,
+    clusterMetadata_taxDocuments,
+
+    -- ** CompatibleImage
+    compatibleImage_amiId,
+    compatibleImage_name,
+
+    -- ** DataTransfer
+    dataTransfer_bytesTransferred,
+    dataTransfer_objectsTransferred,
+    dataTransfer_totalBytes,
+    dataTransfer_totalObjects,
+
+    -- ** DeviceConfiguration
+    deviceConfiguration_snowconeDeviceConfiguration,
+
+    -- ** Ec2AmiResource
+    ec2AmiResource_snowballAmiId,
+    ec2AmiResource_amiId,
+
+    -- ** EventTriggerDefinition
+    eventTriggerDefinition_eventResourceARN,
+
+    -- ** INDTaxDocuments
+    iNDTaxDocuments_gstin,
+
+    -- ** JobListEntry
+    jobListEntry_creationDate,
+    jobListEntry_description,
+    jobListEntry_isMaster,
+    jobListEntry_jobId,
+    jobListEntry_jobState,
+    jobListEntry_jobType,
+    jobListEntry_snowballType,
+
+    -- ** JobLogs
+    jobLogs_jobCompletionReportURI,
+    jobLogs_jobFailureLogURI,
+    jobLogs_jobSuccessLogURI,
+
+    -- ** JobMetadata
+    jobMetadata_addressId,
+    jobMetadata_clusterId,
+    jobMetadata_creationDate,
+    jobMetadata_dataTransferProgress,
+    jobMetadata_description,
+    jobMetadata_deviceConfiguration,
+    jobMetadata_forwardingAddressId,
+    jobMetadata_jobId,
+    jobMetadata_jobLogInfo,
+    jobMetadata_jobState,
+    jobMetadata_jobType,
+    jobMetadata_kmsKeyARN,
+    jobMetadata_longTermPricingId,
+    jobMetadata_notification,
+    jobMetadata_onDeviceServiceConfiguration,
+    jobMetadata_remoteManagement,
+    jobMetadata_resources,
+    jobMetadata_roleARN,
+    jobMetadata_shippingDetails,
+    jobMetadata_snowballCapacityPreference,
+    jobMetadata_snowballType,
+    jobMetadata_taxDocuments,
+
+    -- ** JobResource
+    jobResource_ec2AmiResources,
+    jobResource_lambdaResources,
+    jobResource_s3Resources,
+
+    -- ** KeyRange
+    keyRange_beginMarker,
+    keyRange_endMarker,
+
+    -- ** LambdaResource
+    lambdaResource_eventTriggers,
+    lambdaResource_lambdaArn,
+
+    -- ** LongTermPricingListEntry
+    longTermPricingListEntry_currentActiveJob,
+    longTermPricingListEntry_isLongTermPricingAutoRenew,
+    longTermPricingListEntry_jobIds,
+    longTermPricingListEntry_longTermPricingEndDate,
+    longTermPricingListEntry_longTermPricingId,
+    longTermPricingListEntry_longTermPricingStartDate,
+    longTermPricingListEntry_longTermPricingStatus,
+    longTermPricingListEntry_longTermPricingType,
+    longTermPricingListEntry_replacementJob,
+    longTermPricingListEntry_snowballType,
+
+    -- ** NFSOnDeviceServiceConfiguration
+    nFSOnDeviceServiceConfiguration_storageLimit,
+    nFSOnDeviceServiceConfiguration_storageUnit,
+
+    -- ** Notification
+    notification_jobStatesToNotify,
+    notification_notifyAll,
+    notification_snsTopicARN,
+
+    -- ** OnDeviceServiceConfiguration
+    onDeviceServiceConfiguration_nFSOnDeviceService,
+    onDeviceServiceConfiguration_tGWOnDeviceService,
+
+    -- ** S3Resource
+    s3Resource_bucketArn,
+    s3Resource_keyRange,
+    s3Resource_targetOnDeviceServices,
+
+    -- ** Shipment
+    shipment_status,
+    shipment_trackingNumber,
+
+    -- ** ShippingDetails
+    shippingDetails_inboundShipment,
+    shippingDetails_outboundShipment,
+    shippingDetails_shippingOption,
+
+    -- ** SnowconeDeviceConfiguration
+    snowconeDeviceConfiguration_wirelessConnection,
+
+    -- ** TGWOnDeviceServiceConfiguration
+    tGWOnDeviceServiceConfiguration_storageLimit,
+    tGWOnDeviceServiceConfiguration_storageUnit,
+
+    -- ** TargetOnDeviceService
+    targetOnDeviceService_serviceName,
+    targetOnDeviceService_transferOption,
+
+    -- ** TaxDocuments
+    taxDocuments_ind,
+
+    -- ** WirelessConnection
+    wirelessConnection_isWifiEnabled,
+  )
+where
+
+import Amazonka.Snowball.CancelCluster
+import Amazonka.Snowball.CancelJob
+import Amazonka.Snowball.CreateAddress
+import Amazonka.Snowball.CreateCluster
+import Amazonka.Snowball.CreateJob
+import Amazonka.Snowball.CreateLongTermPricing
+import Amazonka.Snowball.CreateReturnShippingLabel
+import Amazonka.Snowball.DescribeAddress
+import Amazonka.Snowball.DescribeAddresses
+import Amazonka.Snowball.DescribeCluster
+import Amazonka.Snowball.DescribeJob
+import Amazonka.Snowball.DescribeReturnShippingLabel
+import Amazonka.Snowball.GetJobManifest
+import Amazonka.Snowball.GetJobUnlockCode
+import Amazonka.Snowball.GetSnowballUsage
+import Amazonka.Snowball.GetSoftwareUpdates
+import Amazonka.Snowball.ListClusterJobs
+import Amazonka.Snowball.ListClusters
+import Amazonka.Snowball.ListCompatibleImages
+import Amazonka.Snowball.ListJobs
+import Amazonka.Snowball.ListLongTermPricing
+import Amazonka.Snowball.Types.Address
+import Amazonka.Snowball.Types.ClusterListEntry
+import Amazonka.Snowball.Types.ClusterMetadata
+import Amazonka.Snowball.Types.CompatibleImage
+import Amazonka.Snowball.Types.DataTransfer
+import Amazonka.Snowball.Types.DeviceConfiguration
+import Amazonka.Snowball.Types.Ec2AmiResource
+import Amazonka.Snowball.Types.EventTriggerDefinition
+import Amazonka.Snowball.Types.INDTaxDocuments
+import Amazonka.Snowball.Types.JobListEntry
+import Amazonka.Snowball.Types.JobLogs
+import Amazonka.Snowball.Types.JobMetadata
+import Amazonka.Snowball.Types.JobResource
+import Amazonka.Snowball.Types.KeyRange
+import Amazonka.Snowball.Types.LambdaResource
+import Amazonka.Snowball.Types.LongTermPricingListEntry
+import Amazonka.Snowball.Types.NFSOnDeviceServiceConfiguration
+import Amazonka.Snowball.Types.Notification
+import Amazonka.Snowball.Types.OnDeviceServiceConfiguration
+import Amazonka.Snowball.Types.S3Resource
+import Amazonka.Snowball.Types.Shipment
+import Amazonka.Snowball.Types.ShippingDetails
+import Amazonka.Snowball.Types.SnowconeDeviceConfiguration
+import Amazonka.Snowball.Types.TGWOnDeviceServiceConfiguration
+import Amazonka.Snowball.Types.TargetOnDeviceService
+import Amazonka.Snowball.Types.TaxDocuments
+import Amazonka.Snowball.Types.WirelessConnection
+import Amazonka.Snowball.UpdateCluster
+import Amazonka.Snowball.UpdateJob
+import Amazonka.Snowball.UpdateJobShipmentState
+import Amazonka.Snowball.UpdateLongTermPricing
diff --git a/gen/Amazonka/Snowball/ListClusterJobs.hs b/gen/Amazonka/Snowball/ListClusterJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/ListClusterJobs.hs
@@ -0,0 +1,258 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.ListClusterJobs
+-- 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 an array of @JobListEntry@ objects of the specified length. Each
+-- @JobListEntry@ object is for a job in the specified cluster and contains
+-- a job\'s state, a job\'s ID, and other information.
+--
+-- This operation returns paginated results.
+module Amazonka.Snowball.ListClusterJobs
+  ( -- * Creating a Request
+    ListClusterJobs (..),
+    newListClusterJobs,
+
+    -- * Request Lenses
+    listClusterJobs_maxResults,
+    listClusterJobs_nextToken,
+    listClusterJobs_clusterId,
+
+    -- * Destructuring the Response
+    ListClusterJobsResponse (..),
+    newListClusterJobsResponse,
+
+    -- * Response Lenses
+    listClusterJobsResponse_jobListEntries,
+    listClusterJobsResponse_nextToken,
+    listClusterJobsResponse_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.Snowball.Types
+
+-- | /See:/ 'newListClusterJobs' smart constructor.
+data ListClusterJobs = ListClusterJobs'
+  { -- | The number of @JobListEntry@ objects to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | HTTP requests are stateless. To identify what object comes \"next\" in
+    -- the list of @JobListEntry@ objects, you have the option of specifying
+    -- @NextToken@ as the starting point for your returned list.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The 39-character ID for the cluster that you want to list, for example
+    -- @CID123e4567-e89b-12d3-a456-426655440000@.
+    clusterId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListClusterJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listClusterJobs_maxResults' - The number of @JobListEntry@ objects to return.
+--
+-- 'nextToken', 'listClusterJobs_nextToken' - HTTP requests are stateless. To identify what object comes \"next\" in
+-- the list of @JobListEntry@ objects, you have the option of specifying
+-- @NextToken@ as the starting point for your returned list.
+--
+-- 'clusterId', 'listClusterJobs_clusterId' - The 39-character ID for the cluster that you want to list, for example
+-- @CID123e4567-e89b-12d3-a456-426655440000@.
+newListClusterJobs ::
+  -- | 'clusterId'
+  Prelude.Text ->
+  ListClusterJobs
+newListClusterJobs pClusterId_ =
+  ListClusterJobs'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      clusterId = pClusterId_
+    }
+
+-- | The number of @JobListEntry@ objects to return.
+listClusterJobs_maxResults :: Lens.Lens' ListClusterJobs (Prelude.Maybe Prelude.Natural)
+listClusterJobs_maxResults = Lens.lens (\ListClusterJobs' {maxResults} -> maxResults) (\s@ListClusterJobs' {} a -> s {maxResults = a} :: ListClusterJobs)
+
+-- | HTTP requests are stateless. To identify what object comes \"next\" in
+-- the list of @JobListEntry@ objects, you have the option of specifying
+-- @NextToken@ as the starting point for your returned list.
+listClusterJobs_nextToken :: Lens.Lens' ListClusterJobs (Prelude.Maybe Prelude.Text)
+listClusterJobs_nextToken = Lens.lens (\ListClusterJobs' {nextToken} -> nextToken) (\s@ListClusterJobs' {} a -> s {nextToken = a} :: ListClusterJobs)
+
+-- | The 39-character ID for the cluster that you want to list, for example
+-- @CID123e4567-e89b-12d3-a456-426655440000@.
+listClusterJobs_clusterId :: Lens.Lens' ListClusterJobs Prelude.Text
+listClusterJobs_clusterId = Lens.lens (\ListClusterJobs' {clusterId} -> clusterId) (\s@ListClusterJobs' {} a -> s {clusterId = a} :: ListClusterJobs)
+
+instance Core.AWSPager ListClusterJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listClusterJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listClusterJobsResponse_jobListEntries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listClusterJobs_nextToken
+          Lens..~ rs
+          Lens.^? listClusterJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListClusterJobs where
+  type
+    AWSResponse ListClusterJobs =
+      ListClusterJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListClusterJobsResponse'
+            Prelude.<$> (x Data..?> "JobListEntries" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListClusterJobs where
+  hashWithSalt _salt ListClusterJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` clusterId
+
+instance Prelude.NFData ListClusterJobs where
+  rnf ListClusterJobs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf clusterId
+
+instance Data.ToHeaders ListClusterJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.ListClusterJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListClusterJobs where
+  toJSON ListClusterJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just ("ClusterId" Data..= clusterId)
+          ]
+      )
+
+instance Data.ToPath ListClusterJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListClusterJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListClusterJobsResponse' smart constructor.
+data ListClusterJobsResponse = ListClusterJobsResponse'
+  { -- | Each @JobListEntry@ object contains a job\'s state, a job\'s ID, and a
+    -- value that indicates whether the job is a job part, in the case of
+    -- export jobs.
+    jobListEntries :: Prelude.Maybe [JobListEntry],
+    -- | HTTP requests are stateless. If you use the automatically generated
+    -- @NextToken@ value in your next @ListClusterJobsResult@ call, your list
+    -- of returned jobs will start from this point in the array.
+    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 'ListClusterJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobListEntries', 'listClusterJobsResponse_jobListEntries' - Each @JobListEntry@ object contains a job\'s state, a job\'s ID, and a
+-- value that indicates whether the job is a job part, in the case of
+-- export jobs.
+--
+-- 'nextToken', 'listClusterJobsResponse_nextToken' - HTTP requests are stateless. If you use the automatically generated
+-- @NextToken@ value in your next @ListClusterJobsResult@ call, your list
+-- of returned jobs will start from this point in the array.
+--
+-- 'httpStatus', 'listClusterJobsResponse_httpStatus' - The response's http status code.
+newListClusterJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListClusterJobsResponse
+newListClusterJobsResponse pHttpStatus_ =
+  ListClusterJobsResponse'
+    { jobListEntries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Each @JobListEntry@ object contains a job\'s state, a job\'s ID, and a
+-- value that indicates whether the job is a job part, in the case of
+-- export jobs.
+listClusterJobsResponse_jobListEntries :: Lens.Lens' ListClusterJobsResponse (Prelude.Maybe [JobListEntry])
+listClusterJobsResponse_jobListEntries = Lens.lens (\ListClusterJobsResponse' {jobListEntries} -> jobListEntries) (\s@ListClusterJobsResponse' {} a -> s {jobListEntries = a} :: ListClusterJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | HTTP requests are stateless. If you use the automatically generated
+-- @NextToken@ value in your next @ListClusterJobsResult@ call, your list
+-- of returned jobs will start from this point in the array.
+listClusterJobsResponse_nextToken :: Lens.Lens' ListClusterJobsResponse (Prelude.Maybe Prelude.Text)
+listClusterJobsResponse_nextToken = Lens.lens (\ListClusterJobsResponse' {nextToken} -> nextToken) (\s@ListClusterJobsResponse' {} a -> s {nextToken = a} :: ListClusterJobsResponse)
+
+-- | The response's http status code.
+listClusterJobsResponse_httpStatus :: Lens.Lens' ListClusterJobsResponse Prelude.Int
+listClusterJobsResponse_httpStatus = Lens.lens (\ListClusterJobsResponse' {httpStatus} -> httpStatus) (\s@ListClusterJobsResponse' {} a -> s {httpStatus = a} :: ListClusterJobsResponse)
+
+instance Prelude.NFData ListClusterJobsResponse where
+  rnf ListClusterJobsResponse' {..} =
+    Prelude.rnf jobListEntries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/ListClusters.hs b/gen/Amazonka/Snowball/ListClusters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/ListClusters.hs
@@ -0,0 +1,238 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.ListClusters
+-- 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 an array of @ClusterListEntry@ objects of the specified length.
+-- Each @ClusterListEntry@ object contains a cluster\'s state, a cluster\'s
+-- ID, and other important status information.
+--
+-- This operation returns paginated results.
+module Amazonka.Snowball.ListClusters
+  ( -- * Creating a Request
+    ListClusters (..),
+    newListClusters,
+
+    -- * Request Lenses
+    listClusters_maxResults,
+    listClusters_nextToken,
+
+    -- * Destructuring the Response
+    ListClustersResponse (..),
+    newListClustersResponse,
+
+    -- * Response Lenses
+    listClustersResponse_clusterListEntries,
+    listClustersResponse_nextToken,
+    listClustersResponse_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.Snowball.Types
+
+-- | /See:/ 'newListClusters' smart constructor.
+data ListClusters = ListClusters'
+  { -- | The number of @ClusterListEntry@ objects to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | HTTP requests are stateless. To identify what object comes \"next\" in
+    -- the list of @ClusterListEntry@ objects, you have the option of
+    -- specifying @NextToken@ as the starting point for your returned list.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListClusters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listClusters_maxResults' - The number of @ClusterListEntry@ objects to return.
+--
+-- 'nextToken', 'listClusters_nextToken' - HTTP requests are stateless. To identify what object comes \"next\" in
+-- the list of @ClusterListEntry@ objects, you have the option of
+-- specifying @NextToken@ as the starting point for your returned list.
+newListClusters ::
+  ListClusters
+newListClusters =
+  ListClusters'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of @ClusterListEntry@ objects to return.
+listClusters_maxResults :: Lens.Lens' ListClusters (Prelude.Maybe Prelude.Natural)
+listClusters_maxResults = Lens.lens (\ListClusters' {maxResults} -> maxResults) (\s@ListClusters' {} a -> s {maxResults = a} :: ListClusters)
+
+-- | HTTP requests are stateless. To identify what object comes \"next\" in
+-- the list of @ClusterListEntry@ objects, you have the option of
+-- specifying @NextToken@ as the starting point for your returned list.
+listClusters_nextToken :: Lens.Lens' ListClusters (Prelude.Maybe Prelude.Text)
+listClusters_nextToken = Lens.lens (\ListClusters' {nextToken} -> nextToken) (\s@ListClusters' {} a -> s {nextToken = a} :: ListClusters)
+
+instance Core.AWSPager ListClusters where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listClustersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listClustersResponse_clusterListEntries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listClusters_nextToken
+          Lens..~ rs
+          Lens.^? listClustersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListClusters where
+  type AWSResponse ListClusters = ListClustersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListClustersResponse'
+            Prelude.<$> ( x
+                            Data..?> "ClusterListEntries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListClusters where
+  hashWithSalt _salt ListClusters' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListClusters where
+  rnf ListClusters' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListClusters where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.ListClusters" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListClusters where
+  toJSON ListClusters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListClusters where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListClusters where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListClustersResponse' smart constructor.
+data ListClustersResponse = ListClustersResponse'
+  { -- | Each @ClusterListEntry@ object contains a cluster\'s state, a cluster\'s
+    -- ID, and other important status information.
+    clusterListEntries :: Prelude.Maybe [ClusterListEntry],
+    -- | HTTP requests are stateless. If you use the automatically generated
+    -- @NextToken@ value in your next @ClusterListEntry@ call, your list of
+    -- returned clusters will start from this point in the array.
+    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 'ListClustersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterListEntries', 'listClustersResponse_clusterListEntries' - Each @ClusterListEntry@ object contains a cluster\'s state, a cluster\'s
+-- ID, and other important status information.
+--
+-- 'nextToken', 'listClustersResponse_nextToken' - HTTP requests are stateless. If you use the automatically generated
+-- @NextToken@ value in your next @ClusterListEntry@ call, your list of
+-- returned clusters will start from this point in the array.
+--
+-- 'httpStatus', 'listClustersResponse_httpStatus' - The response's http status code.
+newListClustersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListClustersResponse
+newListClustersResponse pHttpStatus_ =
+  ListClustersResponse'
+    { clusterListEntries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Each @ClusterListEntry@ object contains a cluster\'s state, a cluster\'s
+-- ID, and other important status information.
+listClustersResponse_clusterListEntries :: Lens.Lens' ListClustersResponse (Prelude.Maybe [ClusterListEntry])
+listClustersResponse_clusterListEntries = Lens.lens (\ListClustersResponse' {clusterListEntries} -> clusterListEntries) (\s@ListClustersResponse' {} a -> s {clusterListEntries = a} :: ListClustersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | HTTP requests are stateless. If you use the automatically generated
+-- @NextToken@ value in your next @ClusterListEntry@ call, your list of
+-- returned clusters will start from this point in the array.
+listClustersResponse_nextToken :: Lens.Lens' ListClustersResponse (Prelude.Maybe Prelude.Text)
+listClustersResponse_nextToken = Lens.lens (\ListClustersResponse' {nextToken} -> nextToken) (\s@ListClustersResponse' {} a -> s {nextToken = a} :: ListClustersResponse)
+
+-- | The response's http status code.
+listClustersResponse_httpStatus :: Lens.Lens' ListClustersResponse Prelude.Int
+listClustersResponse_httpStatus = Lens.lens (\ListClustersResponse' {httpStatus} -> httpStatus) (\s@ListClustersResponse' {} a -> s {httpStatus = a} :: ListClustersResponse)
+
+instance Prelude.NFData ListClustersResponse where
+  rnf ListClustersResponse' {..} =
+    Prelude.rnf clusterListEntries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/ListCompatibleImages.hs b/gen/Amazonka/Snowball/ListCompatibleImages.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/ListCompatibleImages.hs
@@ -0,0 +1,243 @@
+{-# 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.Snowball.ListCompatibleImages
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- This action returns a list of the different Amazon EC2 Amazon Machine
+-- Images (AMIs) that are owned by your Amazon Web Services accountthat
+-- would be supported for use on a Snow device. Currently, supported AMIs
+-- are based on the CentOS 7 (x86_64) - with Updates HVM, Ubuntu Server
+-- 14.04 LTS (HVM), and Ubuntu 16.04 LTS - Xenial (HVM) images, available
+-- on the Amazon Web Services Marketplace.
+--
+-- This operation returns paginated results.
+module Amazonka.Snowball.ListCompatibleImages
+  ( -- * Creating a Request
+    ListCompatibleImages (..),
+    newListCompatibleImages,
+
+    -- * Request Lenses
+    listCompatibleImages_maxResults,
+    listCompatibleImages_nextToken,
+
+    -- * Destructuring the Response
+    ListCompatibleImagesResponse (..),
+    newListCompatibleImagesResponse,
+
+    -- * Response Lenses
+    listCompatibleImagesResponse_compatibleImages,
+    listCompatibleImagesResponse_nextToken,
+    listCompatibleImagesResponse_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.Snowball.Types
+
+-- | /See:/ 'newListCompatibleImages' smart constructor.
+data ListCompatibleImages = ListCompatibleImages'
+  { -- | The maximum number of results for the list of compatible images.
+    -- Currently, a Snowball Edge device can store 10 AMIs.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | HTTP requests are stateless. To identify what object comes \"next\" in
+    -- the list of compatible images, you can specify a value for @NextToken@
+    -- as the starting point for your list of returned images.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListCompatibleImages' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listCompatibleImages_maxResults' - The maximum number of results for the list of compatible images.
+-- Currently, a Snowball Edge device can store 10 AMIs.
+--
+-- 'nextToken', 'listCompatibleImages_nextToken' - HTTP requests are stateless. To identify what object comes \"next\" in
+-- the list of compatible images, you can specify a value for @NextToken@
+-- as the starting point for your list of returned images.
+newListCompatibleImages ::
+  ListCompatibleImages
+newListCompatibleImages =
+  ListCompatibleImages'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results for the list of compatible images.
+-- Currently, a Snowball Edge device can store 10 AMIs.
+listCompatibleImages_maxResults :: Lens.Lens' ListCompatibleImages (Prelude.Maybe Prelude.Natural)
+listCompatibleImages_maxResults = Lens.lens (\ListCompatibleImages' {maxResults} -> maxResults) (\s@ListCompatibleImages' {} a -> s {maxResults = a} :: ListCompatibleImages)
+
+-- | HTTP requests are stateless. To identify what object comes \"next\" in
+-- the list of compatible images, you can specify a value for @NextToken@
+-- as the starting point for your list of returned images.
+listCompatibleImages_nextToken :: Lens.Lens' ListCompatibleImages (Prelude.Maybe Prelude.Text)
+listCompatibleImages_nextToken = Lens.lens (\ListCompatibleImages' {nextToken} -> nextToken) (\s@ListCompatibleImages' {} a -> s {nextToken = a} :: ListCompatibleImages)
+
+instance Core.AWSPager ListCompatibleImages where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listCompatibleImagesResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listCompatibleImagesResponse_compatibleImages
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listCompatibleImages_nextToken
+          Lens..~ rs
+          Lens.^? listCompatibleImagesResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListCompatibleImages where
+  type
+    AWSResponse ListCompatibleImages =
+      ListCompatibleImagesResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListCompatibleImagesResponse'
+            Prelude.<$> ( x
+                            Data..?> "CompatibleImages"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListCompatibleImages where
+  hashWithSalt _salt ListCompatibleImages' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListCompatibleImages where
+  rnf ListCompatibleImages' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListCompatibleImages where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.ListCompatibleImages" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListCompatibleImages where
+  toJSON ListCompatibleImages' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListCompatibleImages where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListCompatibleImages where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListCompatibleImagesResponse' smart constructor.
+data ListCompatibleImagesResponse = ListCompatibleImagesResponse'
+  { -- | A JSON-formatted object that describes a compatible AMI, including the
+    -- ID and name for a Snow device AMI.
+    compatibleImages :: Prelude.Maybe [CompatibleImage],
+    -- | Because HTTP requests are stateless, this is the starting point for your
+    -- next list of returned images.
+    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 'ListCompatibleImagesResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'compatibleImages', 'listCompatibleImagesResponse_compatibleImages' - A JSON-formatted object that describes a compatible AMI, including the
+-- ID and name for a Snow device AMI.
+--
+-- 'nextToken', 'listCompatibleImagesResponse_nextToken' - Because HTTP requests are stateless, this is the starting point for your
+-- next list of returned images.
+--
+-- 'httpStatus', 'listCompatibleImagesResponse_httpStatus' - The response's http status code.
+newListCompatibleImagesResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListCompatibleImagesResponse
+newListCompatibleImagesResponse pHttpStatus_ =
+  ListCompatibleImagesResponse'
+    { compatibleImages =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A JSON-formatted object that describes a compatible AMI, including the
+-- ID and name for a Snow device AMI.
+listCompatibleImagesResponse_compatibleImages :: Lens.Lens' ListCompatibleImagesResponse (Prelude.Maybe [CompatibleImage])
+listCompatibleImagesResponse_compatibleImages = Lens.lens (\ListCompatibleImagesResponse' {compatibleImages} -> compatibleImages) (\s@ListCompatibleImagesResponse' {} a -> s {compatibleImages = a} :: ListCompatibleImagesResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Because HTTP requests are stateless, this is the starting point for your
+-- next list of returned images.
+listCompatibleImagesResponse_nextToken :: Lens.Lens' ListCompatibleImagesResponse (Prelude.Maybe Prelude.Text)
+listCompatibleImagesResponse_nextToken = Lens.lens (\ListCompatibleImagesResponse' {nextToken} -> nextToken) (\s@ListCompatibleImagesResponse' {} a -> s {nextToken = a} :: ListCompatibleImagesResponse)
+
+-- | The response's http status code.
+listCompatibleImagesResponse_httpStatus :: Lens.Lens' ListCompatibleImagesResponse Prelude.Int
+listCompatibleImagesResponse_httpStatus = Lens.lens (\ListCompatibleImagesResponse' {httpStatus} -> httpStatus) (\s@ListCompatibleImagesResponse' {} a -> s {httpStatus = a} :: ListCompatibleImagesResponse)
+
+instance Prelude.NFData ListCompatibleImagesResponse where
+  rnf ListCompatibleImagesResponse' {..} =
+    Prelude.rnf compatibleImages
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/ListJobs.hs b/gen/Amazonka/Snowball/ListJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/ListJobs.hs
@@ -0,0 +1,240 @@
+{-# 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.Snowball.ListJobs
+-- 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 an array of @JobListEntry@ objects of the specified length. Each
+-- @JobListEntry@ object contains a job\'s state, a job\'s ID, and a value
+-- that indicates whether the job is a job part, in the case of export
+-- jobs. Calling this API action in one of the US regions will return jobs
+-- from the list of all jobs associated with this account in all US
+-- regions.
+--
+-- This operation returns paginated results.
+module Amazonka.Snowball.ListJobs
+  ( -- * Creating a Request
+    ListJobs (..),
+    newListJobs,
+
+    -- * Request Lenses
+    listJobs_maxResults,
+    listJobs_nextToken,
+
+    -- * Destructuring the Response
+    ListJobsResponse (..),
+    newListJobsResponse,
+
+    -- * Response Lenses
+    listJobsResponse_jobListEntries,
+    listJobsResponse_nextToken,
+    listJobsResponse_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.Snowball.Types
+
+-- | /See:/ 'newListJobs' smart constructor.
+data ListJobs = ListJobs'
+  { -- | The number of @JobListEntry@ objects to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | HTTP requests are stateless. To identify what object comes \"next\" in
+    -- the list of @JobListEntry@ objects, you have the option of specifying
+    -- @NextToken@ as the starting point for your returned list.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listJobs_maxResults' - The number of @JobListEntry@ objects to return.
+--
+-- 'nextToken', 'listJobs_nextToken' - HTTP requests are stateless. To identify what object comes \"next\" in
+-- the list of @JobListEntry@ objects, you have the option of specifying
+-- @NextToken@ as the starting point for your returned list.
+newListJobs ::
+  ListJobs
+newListJobs =
+  ListJobs'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The number of @JobListEntry@ objects to return.
+listJobs_maxResults :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Natural)
+listJobs_maxResults = Lens.lens (\ListJobs' {maxResults} -> maxResults) (\s@ListJobs' {} a -> s {maxResults = a} :: ListJobs)
+
+-- | HTTP requests are stateless. To identify what object comes \"next\" in
+-- the list of @JobListEntry@ objects, you have the option of specifying
+-- @NextToken@ as the starting point for your returned list.
+listJobs_nextToken :: Lens.Lens' ListJobs (Prelude.Maybe Prelude.Text)
+listJobs_nextToken = Lens.lens (\ListJobs' {nextToken} -> nextToken) (\s@ListJobs' {} a -> s {nextToken = a} :: ListJobs)
+
+instance Core.AWSPager ListJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listJobsResponse_jobListEntries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listJobs_nextToken
+          Lens..~ rs
+          Lens.^? listJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListJobs where
+  type AWSResponse ListJobs = ListJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListJobsResponse'
+            Prelude.<$> (x Data..?> "JobListEntries" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListJobs where
+  hashWithSalt _salt ListJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListJobs where
+  rnf ListJobs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.ListJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListJobs where
+  toJSON ListJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListJobsResponse' smart constructor.
+data ListJobsResponse = ListJobsResponse'
+  { -- | Each @JobListEntry@ object contains a job\'s state, a job\'s ID, and a
+    -- value that indicates whether the job is a job part, in the case of
+    -- export jobs.
+    jobListEntries :: Prelude.Maybe [JobListEntry],
+    -- | HTTP requests are stateless. If you use this automatically generated
+    -- @NextToken@ value in your next @ListJobs@ call, your returned
+    -- @JobListEntry@ objects will start from this point in the array.
+    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 'ListJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobListEntries', 'listJobsResponse_jobListEntries' - Each @JobListEntry@ object contains a job\'s state, a job\'s ID, and a
+-- value that indicates whether the job is a job part, in the case of
+-- export jobs.
+--
+-- 'nextToken', 'listJobsResponse_nextToken' - HTTP requests are stateless. If you use this automatically generated
+-- @NextToken@ value in your next @ListJobs@ call, your returned
+-- @JobListEntry@ objects will start from this point in the array.
+--
+-- 'httpStatus', 'listJobsResponse_httpStatus' - The response's http status code.
+newListJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListJobsResponse
+newListJobsResponse pHttpStatus_ =
+  ListJobsResponse'
+    { jobListEntries = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Each @JobListEntry@ object contains a job\'s state, a job\'s ID, and a
+-- value that indicates whether the job is a job part, in the case of
+-- export jobs.
+listJobsResponse_jobListEntries :: Lens.Lens' ListJobsResponse (Prelude.Maybe [JobListEntry])
+listJobsResponse_jobListEntries = Lens.lens (\ListJobsResponse' {jobListEntries} -> jobListEntries) (\s@ListJobsResponse' {} a -> s {jobListEntries = a} :: ListJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | HTTP requests are stateless. If you use this automatically generated
+-- @NextToken@ value in your next @ListJobs@ call, your returned
+-- @JobListEntry@ objects will start from this point in the array.
+listJobsResponse_nextToken :: Lens.Lens' ListJobsResponse (Prelude.Maybe Prelude.Text)
+listJobsResponse_nextToken = Lens.lens (\ListJobsResponse' {nextToken} -> nextToken) (\s@ListJobsResponse' {} a -> s {nextToken = a} :: ListJobsResponse)
+
+-- | The response's http status code.
+listJobsResponse_httpStatus :: Lens.Lens' ListJobsResponse Prelude.Int
+listJobsResponse_httpStatus = Lens.lens (\ListJobsResponse' {httpStatus} -> httpStatus) (\s@ListJobsResponse' {} a -> s {httpStatus = a} :: ListJobsResponse)
+
+instance Prelude.NFData ListJobsResponse where
+  rnf ListJobsResponse' {..} =
+    Prelude.rnf jobListEntries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/ListLongTermPricing.hs b/gen/Amazonka/Snowball/ListLongTermPricing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/ListLongTermPricing.hs
@@ -0,0 +1,232 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.ListLongTermPricing
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all long-term pricing types.
+--
+-- This operation returns paginated results.
+module Amazonka.Snowball.ListLongTermPricing
+  ( -- * Creating a Request
+    ListLongTermPricing (..),
+    newListLongTermPricing,
+
+    -- * Request Lenses
+    listLongTermPricing_maxResults,
+    listLongTermPricing_nextToken,
+
+    -- * Destructuring the Response
+    ListLongTermPricingResponse (..),
+    newListLongTermPricingResponse,
+
+    -- * Response Lenses
+    listLongTermPricingResponse_longTermPricingEntries,
+    listLongTermPricingResponse_nextToken,
+    listLongTermPricingResponse_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.Snowball.Types
+
+-- | /See:/ 'newListLongTermPricing' smart constructor.
+data ListLongTermPricing = ListLongTermPricing'
+  { -- | The maximum number of @ListLongTermPricing@ objects to return.
+    maxResults :: Prelude.Maybe Prelude.Natural,
+    -- | Because HTTP requests are stateless, this is the starting point for your
+    -- next list of @ListLongTermPricing@ to return.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListLongTermPricing' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'maxResults', 'listLongTermPricing_maxResults' - The maximum number of @ListLongTermPricing@ objects to return.
+--
+-- 'nextToken', 'listLongTermPricing_nextToken' - Because HTTP requests are stateless, this is the starting point for your
+-- next list of @ListLongTermPricing@ to return.
+newListLongTermPricing ::
+  ListLongTermPricing
+newListLongTermPricing =
+  ListLongTermPricing'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of @ListLongTermPricing@ objects to return.
+listLongTermPricing_maxResults :: Lens.Lens' ListLongTermPricing (Prelude.Maybe Prelude.Natural)
+listLongTermPricing_maxResults = Lens.lens (\ListLongTermPricing' {maxResults} -> maxResults) (\s@ListLongTermPricing' {} a -> s {maxResults = a} :: ListLongTermPricing)
+
+-- | Because HTTP requests are stateless, this is the starting point for your
+-- next list of @ListLongTermPricing@ to return.
+listLongTermPricing_nextToken :: Lens.Lens' ListLongTermPricing (Prelude.Maybe Prelude.Text)
+listLongTermPricing_nextToken = Lens.lens (\ListLongTermPricing' {nextToken} -> nextToken) (\s@ListLongTermPricing' {} a -> s {nextToken = a} :: ListLongTermPricing)
+
+instance Core.AWSPager ListLongTermPricing where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listLongTermPricingResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listLongTermPricingResponse_longTermPricingEntries
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listLongTermPricing_nextToken
+          Lens..~ rs
+          Lens.^? listLongTermPricingResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListLongTermPricing where
+  type
+    AWSResponse ListLongTermPricing =
+      ListLongTermPricingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListLongTermPricingResponse'
+            Prelude.<$> ( x
+                            Data..?> "LongTermPricingEntries"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (x Data..?> "NextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListLongTermPricing where
+  hashWithSalt _salt ListLongTermPricing' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListLongTermPricing where
+  rnf ListLongTermPricing' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListLongTermPricing where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.ListLongTermPricing" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListLongTermPricing where
+  toJSON ListLongTermPricing' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("MaxResults" Data..=) Prelude.<$> maxResults,
+            ("NextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListLongTermPricing where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListLongTermPricing where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListLongTermPricingResponse' smart constructor.
+data ListLongTermPricingResponse = ListLongTermPricingResponse'
+  { -- | Each @LongTermPricingEntry@ object contains a status, ID, and other
+    -- information about the @LongTermPricing@ type.
+    longTermPricingEntries :: Prelude.Maybe [LongTermPricingListEntry],
+    -- | Because HTTP requests are stateless, this is the starting point for your
+    -- next list of returned @ListLongTermPricing@ list.
+    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 'ListLongTermPricingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'longTermPricingEntries', 'listLongTermPricingResponse_longTermPricingEntries' - Each @LongTermPricingEntry@ object contains a status, ID, and other
+-- information about the @LongTermPricing@ type.
+--
+-- 'nextToken', 'listLongTermPricingResponse_nextToken' - Because HTTP requests are stateless, this is the starting point for your
+-- next list of returned @ListLongTermPricing@ list.
+--
+-- 'httpStatus', 'listLongTermPricingResponse_httpStatus' - The response's http status code.
+newListLongTermPricingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListLongTermPricingResponse
+newListLongTermPricingResponse pHttpStatus_ =
+  ListLongTermPricingResponse'
+    { longTermPricingEntries =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Each @LongTermPricingEntry@ object contains a status, ID, and other
+-- information about the @LongTermPricing@ type.
+listLongTermPricingResponse_longTermPricingEntries :: Lens.Lens' ListLongTermPricingResponse (Prelude.Maybe [LongTermPricingListEntry])
+listLongTermPricingResponse_longTermPricingEntries = Lens.lens (\ListLongTermPricingResponse' {longTermPricingEntries} -> longTermPricingEntries) (\s@ListLongTermPricingResponse' {} a -> s {longTermPricingEntries = a} :: ListLongTermPricingResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | Because HTTP requests are stateless, this is the starting point for your
+-- next list of returned @ListLongTermPricing@ list.
+listLongTermPricingResponse_nextToken :: Lens.Lens' ListLongTermPricingResponse (Prelude.Maybe Prelude.Text)
+listLongTermPricingResponse_nextToken = Lens.lens (\ListLongTermPricingResponse' {nextToken} -> nextToken) (\s@ListLongTermPricingResponse' {} a -> s {nextToken = a} :: ListLongTermPricingResponse)
+
+-- | The response's http status code.
+listLongTermPricingResponse_httpStatus :: Lens.Lens' ListLongTermPricingResponse Prelude.Int
+listLongTermPricingResponse_httpStatus = Lens.lens (\ListLongTermPricingResponse' {httpStatus} -> httpStatus) (\s@ListLongTermPricingResponse' {} a -> s {httpStatus = a} :: ListLongTermPricingResponse)
+
+instance Prelude.NFData ListLongTermPricingResponse where
+  rnf ListLongTermPricingResponse' {..} =
+    Prelude.rnf longTermPricingEntries
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/Types.hs b/gen/Amazonka/Snowball/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types.hs
@@ -0,0 +1,504 @@
+{-# 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.Snowball.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.Snowball.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _ClusterLimitExceededException,
+    _ConflictException,
+    _Ec2RequestFailedException,
+    _InvalidAddressException,
+    _InvalidInputCombinationException,
+    _InvalidJobStateException,
+    _InvalidNextTokenException,
+    _InvalidResourceException,
+    _KMSRequestFailedException,
+    _ReturnShippingLabelAlreadyExistsException,
+    _UnsupportedAddressException,
+
+    -- * ClusterState
+    ClusterState (..),
+
+    -- * DeviceServiceName
+    DeviceServiceName (..),
+
+    -- * JobState
+    JobState (..),
+
+    -- * JobType
+    JobType (..),
+
+    -- * LongTermPricingType
+    LongTermPricingType (..),
+
+    -- * RemoteManagement
+    RemoteManagement (..),
+
+    -- * ShipmentState
+    ShipmentState (..),
+
+    -- * ShippingLabelStatus
+    ShippingLabelStatus (..),
+
+    -- * ShippingOption
+    ShippingOption (..),
+
+    -- * SnowballCapacity
+    SnowballCapacity (..),
+
+    -- * SnowballType
+    SnowballType (..),
+
+    -- * StorageUnit
+    StorageUnit (..),
+
+    -- * TransferOption
+    TransferOption (..),
+
+    -- * Address
+    Address (..),
+    newAddress,
+    address_addressId,
+    address_city,
+    address_company,
+    address_country,
+    address_isRestricted,
+    address_landmark,
+    address_name,
+    address_phoneNumber,
+    address_postalCode,
+    address_prefectureOrDistrict,
+    address_stateOrProvince,
+    address_street1,
+    address_street2,
+    address_street3,
+
+    -- * ClusterListEntry
+    ClusterListEntry (..),
+    newClusterListEntry,
+    clusterListEntry_clusterId,
+    clusterListEntry_clusterState,
+    clusterListEntry_creationDate,
+    clusterListEntry_description,
+
+    -- * ClusterMetadata
+    ClusterMetadata (..),
+    newClusterMetadata,
+    clusterMetadata_addressId,
+    clusterMetadata_clusterId,
+    clusterMetadata_clusterState,
+    clusterMetadata_creationDate,
+    clusterMetadata_description,
+    clusterMetadata_forwardingAddressId,
+    clusterMetadata_jobType,
+    clusterMetadata_kmsKeyARN,
+    clusterMetadata_notification,
+    clusterMetadata_onDeviceServiceConfiguration,
+    clusterMetadata_resources,
+    clusterMetadata_roleARN,
+    clusterMetadata_shippingOption,
+    clusterMetadata_snowballType,
+    clusterMetadata_taxDocuments,
+
+    -- * CompatibleImage
+    CompatibleImage (..),
+    newCompatibleImage,
+    compatibleImage_amiId,
+    compatibleImage_name,
+
+    -- * DataTransfer
+    DataTransfer (..),
+    newDataTransfer,
+    dataTransfer_bytesTransferred,
+    dataTransfer_objectsTransferred,
+    dataTransfer_totalBytes,
+    dataTransfer_totalObjects,
+
+    -- * DeviceConfiguration
+    DeviceConfiguration (..),
+    newDeviceConfiguration,
+    deviceConfiguration_snowconeDeviceConfiguration,
+
+    -- * Ec2AmiResource
+    Ec2AmiResource (..),
+    newEc2AmiResource,
+    ec2AmiResource_snowballAmiId,
+    ec2AmiResource_amiId,
+
+    -- * EventTriggerDefinition
+    EventTriggerDefinition (..),
+    newEventTriggerDefinition,
+    eventTriggerDefinition_eventResourceARN,
+
+    -- * INDTaxDocuments
+    INDTaxDocuments (..),
+    newINDTaxDocuments,
+    iNDTaxDocuments_gstin,
+
+    -- * JobListEntry
+    JobListEntry (..),
+    newJobListEntry,
+    jobListEntry_creationDate,
+    jobListEntry_description,
+    jobListEntry_isMaster,
+    jobListEntry_jobId,
+    jobListEntry_jobState,
+    jobListEntry_jobType,
+    jobListEntry_snowballType,
+
+    -- * JobLogs
+    JobLogs (..),
+    newJobLogs,
+    jobLogs_jobCompletionReportURI,
+    jobLogs_jobFailureLogURI,
+    jobLogs_jobSuccessLogURI,
+
+    -- * JobMetadata
+    JobMetadata (..),
+    newJobMetadata,
+    jobMetadata_addressId,
+    jobMetadata_clusterId,
+    jobMetadata_creationDate,
+    jobMetadata_dataTransferProgress,
+    jobMetadata_description,
+    jobMetadata_deviceConfiguration,
+    jobMetadata_forwardingAddressId,
+    jobMetadata_jobId,
+    jobMetadata_jobLogInfo,
+    jobMetadata_jobState,
+    jobMetadata_jobType,
+    jobMetadata_kmsKeyARN,
+    jobMetadata_longTermPricingId,
+    jobMetadata_notification,
+    jobMetadata_onDeviceServiceConfiguration,
+    jobMetadata_remoteManagement,
+    jobMetadata_resources,
+    jobMetadata_roleARN,
+    jobMetadata_shippingDetails,
+    jobMetadata_snowballCapacityPreference,
+    jobMetadata_snowballType,
+    jobMetadata_taxDocuments,
+
+    -- * JobResource
+    JobResource (..),
+    newJobResource,
+    jobResource_ec2AmiResources,
+    jobResource_lambdaResources,
+    jobResource_s3Resources,
+
+    -- * KeyRange
+    KeyRange (..),
+    newKeyRange,
+    keyRange_beginMarker,
+    keyRange_endMarker,
+
+    -- * LambdaResource
+    LambdaResource (..),
+    newLambdaResource,
+    lambdaResource_eventTriggers,
+    lambdaResource_lambdaArn,
+
+    -- * LongTermPricingListEntry
+    LongTermPricingListEntry (..),
+    newLongTermPricingListEntry,
+    longTermPricingListEntry_currentActiveJob,
+    longTermPricingListEntry_isLongTermPricingAutoRenew,
+    longTermPricingListEntry_jobIds,
+    longTermPricingListEntry_longTermPricingEndDate,
+    longTermPricingListEntry_longTermPricingId,
+    longTermPricingListEntry_longTermPricingStartDate,
+    longTermPricingListEntry_longTermPricingStatus,
+    longTermPricingListEntry_longTermPricingType,
+    longTermPricingListEntry_replacementJob,
+    longTermPricingListEntry_snowballType,
+
+    -- * NFSOnDeviceServiceConfiguration
+    NFSOnDeviceServiceConfiguration (..),
+    newNFSOnDeviceServiceConfiguration,
+    nFSOnDeviceServiceConfiguration_storageLimit,
+    nFSOnDeviceServiceConfiguration_storageUnit,
+
+    -- * Notification
+    Notification (..),
+    newNotification,
+    notification_jobStatesToNotify,
+    notification_notifyAll,
+    notification_snsTopicARN,
+
+    -- * OnDeviceServiceConfiguration
+    OnDeviceServiceConfiguration (..),
+    newOnDeviceServiceConfiguration,
+    onDeviceServiceConfiguration_nFSOnDeviceService,
+    onDeviceServiceConfiguration_tGWOnDeviceService,
+
+    -- * S3Resource
+    S3Resource (..),
+    newS3Resource,
+    s3Resource_bucketArn,
+    s3Resource_keyRange,
+    s3Resource_targetOnDeviceServices,
+
+    -- * Shipment
+    Shipment (..),
+    newShipment,
+    shipment_status,
+    shipment_trackingNumber,
+
+    -- * ShippingDetails
+    ShippingDetails (..),
+    newShippingDetails,
+    shippingDetails_inboundShipment,
+    shippingDetails_outboundShipment,
+    shippingDetails_shippingOption,
+
+    -- * SnowconeDeviceConfiguration
+    SnowconeDeviceConfiguration (..),
+    newSnowconeDeviceConfiguration,
+    snowconeDeviceConfiguration_wirelessConnection,
+
+    -- * TGWOnDeviceServiceConfiguration
+    TGWOnDeviceServiceConfiguration (..),
+    newTGWOnDeviceServiceConfiguration,
+    tGWOnDeviceServiceConfiguration_storageLimit,
+    tGWOnDeviceServiceConfiguration_storageUnit,
+
+    -- * TargetOnDeviceService
+    TargetOnDeviceService (..),
+    newTargetOnDeviceService,
+    targetOnDeviceService_serviceName,
+    targetOnDeviceService_transferOption,
+
+    -- * TaxDocuments
+    TaxDocuments (..),
+    newTaxDocuments,
+    taxDocuments_ind,
+
+    -- * WirelessConnection
+    WirelessConnection (..),
+    newWirelessConnection,
+    wirelessConnection_isWifiEnabled,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import qualified Amazonka.Sign.V4 as Sign
+import Amazonka.Snowball.Types.Address
+import Amazonka.Snowball.Types.ClusterListEntry
+import Amazonka.Snowball.Types.ClusterMetadata
+import Amazonka.Snowball.Types.ClusterState
+import Amazonka.Snowball.Types.CompatibleImage
+import Amazonka.Snowball.Types.DataTransfer
+import Amazonka.Snowball.Types.DeviceConfiguration
+import Amazonka.Snowball.Types.DeviceServiceName
+import Amazonka.Snowball.Types.Ec2AmiResource
+import Amazonka.Snowball.Types.EventTriggerDefinition
+import Amazonka.Snowball.Types.INDTaxDocuments
+import Amazonka.Snowball.Types.JobListEntry
+import Amazonka.Snowball.Types.JobLogs
+import Amazonka.Snowball.Types.JobMetadata
+import Amazonka.Snowball.Types.JobResource
+import Amazonka.Snowball.Types.JobState
+import Amazonka.Snowball.Types.JobType
+import Amazonka.Snowball.Types.KeyRange
+import Amazonka.Snowball.Types.LambdaResource
+import Amazonka.Snowball.Types.LongTermPricingListEntry
+import Amazonka.Snowball.Types.LongTermPricingType
+import Amazonka.Snowball.Types.NFSOnDeviceServiceConfiguration
+import Amazonka.Snowball.Types.Notification
+import Amazonka.Snowball.Types.OnDeviceServiceConfiguration
+import Amazonka.Snowball.Types.RemoteManagement
+import Amazonka.Snowball.Types.S3Resource
+import Amazonka.Snowball.Types.Shipment
+import Amazonka.Snowball.Types.ShipmentState
+import Amazonka.Snowball.Types.ShippingDetails
+import Amazonka.Snowball.Types.ShippingLabelStatus
+import Amazonka.Snowball.Types.ShippingOption
+import Amazonka.Snowball.Types.SnowballCapacity
+import Amazonka.Snowball.Types.SnowballType
+import Amazonka.Snowball.Types.SnowconeDeviceConfiguration
+import Amazonka.Snowball.Types.StorageUnit
+import Amazonka.Snowball.Types.TGWOnDeviceServiceConfiguration
+import Amazonka.Snowball.Types.TargetOnDeviceService
+import Amazonka.Snowball.Types.TaxDocuments
+import Amazonka.Snowball.Types.TransferOption
+import Amazonka.Snowball.Types.WirelessConnection
+
+-- | API version @2016-06-30@ of the Amazon Import/Export Snowball SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "Snowball",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "snowball",
+      Core.signingName = "snowball",
+      Core.version = "2016-06-30",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "Snowball",
+      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
+
+-- | Job creation failed. Currently, clusters support five nodes. If you have
+-- fewer than five nodes for your cluster and you have more nodes to create
+-- for this cluster, try again and create jobs until your cluster has
+-- exactly five nodes.
+_ClusterLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ClusterLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ClusterLimitExceededException"
+
+-- | You get this exception when you call @CreateReturnShippingLabel@ more
+-- than once when other requests are not completed.
+_ConflictException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ConflictException =
+  Core._MatchServiceError
+    defaultService
+    "ConflictException"
+
+-- | Your IAM user lacks the necessary Amazon EC2 permissions to perform the
+-- attempted action.
+_Ec2RequestFailedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_Ec2RequestFailedException =
+  Core._MatchServiceError
+    defaultService
+    "Ec2RequestFailedException"
+
+-- | The address provided was invalid. Check the address with your region\'s
+-- carrier, and try again.
+_InvalidAddressException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidAddressException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidAddressException"
+
+-- | Job or cluster creation failed. One or more inputs were invalid. Confirm
+-- that the CreateClusterRequest$SnowballType value supports your
+-- CreateJobRequest$JobType, and try again.
+_InvalidInputCombinationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidInputCombinationException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidInputCombinationException"
+
+-- | The action can\'t be performed because the job\'s current state doesn\'t
+-- allow that action to be performed.
+_InvalidJobStateException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidJobStateException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidJobStateException"
+
+-- | The @NextToken@ string was altered unexpectedly, and the operation has
+-- stopped. Run the operation without changing the @NextToken@ string, and
+-- try again.
+_InvalidNextTokenException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidNextTokenException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidNextTokenException"
+
+-- | The specified resource can\'t be found. Check the information you
+-- provided in your last request, and try again.
+_InvalidResourceException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidResourceException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidResourceException"
+
+-- | The provided Key Management Service key lacks the permissions to perform
+-- the specified CreateJob or UpdateJob action.
+_KMSRequestFailedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_KMSRequestFailedException =
+  Core._MatchServiceError
+    defaultService
+    "KMSRequestFailedException"
+
+-- | You get this exception if you call @CreateReturnShippingLabel@ and a
+-- valid return shipping label already exists. In this case, use
+-- @DescribeReturnShippingLabel@ to get the URL.
+_ReturnShippingLabelAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ReturnShippingLabelAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "ReturnShippingLabelAlreadyExistsException"
+
+-- | The address is either outside the serviceable area for your region, or
+-- an error occurred. Check the address with your region\'s carrier and try
+-- again. If the issue persists, contact Amazon Web Services Support.
+_UnsupportedAddressException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnsupportedAddressException =
+  Core._MatchServiceError
+    defaultService
+    "UnsupportedAddressException"
diff --git a/gen/Amazonka/Snowball/Types/Address.hs b/gen/Amazonka/Snowball/Types/Address.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/Address.hs
@@ -0,0 +1,274 @@
+{-# 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.Snowball.Types.Address
+-- 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.Snowball.Types.Address where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The address that you want the Snow device(s) associated with a specific
+-- job to be shipped to. Addresses are validated at the time of creation.
+-- The address you provide must be located within the serviceable area of
+-- your region. Although no individual elements of the @Address@ are
+-- required, if the address is invalid or unsupported, then an exception is
+-- thrown.
+--
+-- /See:/ 'newAddress' smart constructor.
+data Address = Address'
+  { -- | The unique ID for an address.
+    addressId :: Prelude.Maybe Prelude.Text,
+    -- | The city in an address that a Snow device is to be delivered to.
+    city :: Prelude.Maybe Prelude.Text,
+    -- | The name of the company to receive a Snow device at an address.
+    company :: Prelude.Maybe Prelude.Text,
+    -- | The country in an address that a Snow device is to be delivered to.
+    country :: Prelude.Maybe Prelude.Text,
+    -- | If the address you are creating is a primary address, then set this
+    -- option to true. This field is not supported in most regions.
+    isRestricted :: Prelude.Maybe Prelude.Bool,
+    -- | This field is no longer used and the value is ignored.
+    landmark :: Prelude.Maybe Prelude.Text,
+    -- | The name of a person to receive a Snow device at an address.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The phone number associated with an address that a Snow device is to be
+    -- delivered to.
+    phoneNumber :: Prelude.Maybe Prelude.Text,
+    -- | The postal code in an address that a Snow device is to be delivered to.
+    postalCode :: Prelude.Maybe Prelude.Text,
+    -- | This field is no longer used and the value is ignored.
+    prefectureOrDistrict :: Prelude.Maybe Prelude.Text,
+    -- | The state or province in an address that a Snow device is to be
+    -- delivered to.
+    stateOrProvince :: Prelude.Maybe Prelude.Text,
+    -- | The first line in a street address that a Snow device is to be delivered
+    -- to.
+    street1 :: Prelude.Maybe Prelude.Text,
+    -- | The second line in a street address that a Snow device is to be
+    -- delivered to.
+    street2 :: Prelude.Maybe Prelude.Text,
+    -- | The third line in a street address that a Snow device is to be delivered
+    -- to.
+    street3 :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Address' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressId', 'address_addressId' - The unique ID for an address.
+--
+-- 'city', 'address_city' - The city in an address that a Snow device is to be delivered to.
+--
+-- 'company', 'address_company' - The name of the company to receive a Snow device at an address.
+--
+-- 'country', 'address_country' - The country in an address that a Snow device is to be delivered to.
+--
+-- 'isRestricted', 'address_isRestricted' - If the address you are creating is a primary address, then set this
+-- option to true. This field is not supported in most regions.
+--
+-- 'landmark', 'address_landmark' - This field is no longer used and the value is ignored.
+--
+-- 'name', 'address_name' - The name of a person to receive a Snow device at an address.
+--
+-- 'phoneNumber', 'address_phoneNumber' - The phone number associated with an address that a Snow device is to be
+-- delivered to.
+--
+-- 'postalCode', 'address_postalCode' - The postal code in an address that a Snow device is to be delivered to.
+--
+-- 'prefectureOrDistrict', 'address_prefectureOrDistrict' - This field is no longer used and the value is ignored.
+--
+-- 'stateOrProvince', 'address_stateOrProvince' - The state or province in an address that a Snow device is to be
+-- delivered to.
+--
+-- 'street1', 'address_street1' - The first line in a street address that a Snow device is to be delivered
+-- to.
+--
+-- 'street2', 'address_street2' - The second line in a street address that a Snow device is to be
+-- delivered to.
+--
+-- 'street3', 'address_street3' - The third line in a street address that a Snow device is to be delivered
+-- to.
+newAddress ::
+  Address
+newAddress =
+  Address'
+    { addressId = Prelude.Nothing,
+      city = Prelude.Nothing,
+      company = Prelude.Nothing,
+      country = Prelude.Nothing,
+      isRestricted = Prelude.Nothing,
+      landmark = Prelude.Nothing,
+      name = Prelude.Nothing,
+      phoneNumber = Prelude.Nothing,
+      postalCode = Prelude.Nothing,
+      prefectureOrDistrict = Prelude.Nothing,
+      stateOrProvince = Prelude.Nothing,
+      street1 = Prelude.Nothing,
+      street2 = Prelude.Nothing,
+      street3 = Prelude.Nothing
+    }
+
+-- | The unique ID for an address.
+address_addressId :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_addressId = Lens.lens (\Address' {addressId} -> addressId) (\s@Address' {} a -> s {addressId = a} :: Address)
+
+-- | The city in an address that a Snow device is to be delivered to.
+address_city :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_city = Lens.lens (\Address' {city} -> city) (\s@Address' {} a -> s {city = a} :: Address)
+
+-- | The name of the company to receive a Snow device at an address.
+address_company :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_company = Lens.lens (\Address' {company} -> company) (\s@Address' {} a -> s {company = a} :: Address)
+
+-- | The country in an address that a Snow device is to be delivered to.
+address_country :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_country = Lens.lens (\Address' {country} -> country) (\s@Address' {} a -> s {country = a} :: Address)
+
+-- | If the address you are creating is a primary address, then set this
+-- option to true. This field is not supported in most regions.
+address_isRestricted :: Lens.Lens' Address (Prelude.Maybe Prelude.Bool)
+address_isRestricted = Lens.lens (\Address' {isRestricted} -> isRestricted) (\s@Address' {} a -> s {isRestricted = a} :: Address)
+
+-- | This field is no longer used and the value is ignored.
+address_landmark :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_landmark = Lens.lens (\Address' {landmark} -> landmark) (\s@Address' {} a -> s {landmark = a} :: Address)
+
+-- | The name of a person to receive a Snow device at an address.
+address_name :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_name = Lens.lens (\Address' {name} -> name) (\s@Address' {} a -> s {name = a} :: Address)
+
+-- | The phone number associated with an address that a Snow device is to be
+-- delivered to.
+address_phoneNumber :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_phoneNumber = Lens.lens (\Address' {phoneNumber} -> phoneNumber) (\s@Address' {} a -> s {phoneNumber = a} :: Address)
+
+-- | The postal code in an address that a Snow device is to be delivered to.
+address_postalCode :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_postalCode = Lens.lens (\Address' {postalCode} -> postalCode) (\s@Address' {} a -> s {postalCode = a} :: Address)
+
+-- | This field is no longer used and the value is ignored.
+address_prefectureOrDistrict :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_prefectureOrDistrict = Lens.lens (\Address' {prefectureOrDistrict} -> prefectureOrDistrict) (\s@Address' {} a -> s {prefectureOrDistrict = a} :: Address)
+
+-- | The state or province in an address that a Snow device is to be
+-- delivered to.
+address_stateOrProvince :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_stateOrProvince = Lens.lens (\Address' {stateOrProvince} -> stateOrProvince) (\s@Address' {} a -> s {stateOrProvince = a} :: Address)
+
+-- | The first line in a street address that a Snow device is to be delivered
+-- to.
+address_street1 :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_street1 = Lens.lens (\Address' {street1} -> street1) (\s@Address' {} a -> s {street1 = a} :: Address)
+
+-- | The second line in a street address that a Snow device is to be
+-- delivered to.
+address_street2 :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_street2 = Lens.lens (\Address' {street2} -> street2) (\s@Address' {} a -> s {street2 = a} :: Address)
+
+-- | The third line in a street address that a Snow device is to be delivered
+-- to.
+address_street3 :: Lens.Lens' Address (Prelude.Maybe Prelude.Text)
+address_street3 = Lens.lens (\Address' {street3} -> street3) (\s@Address' {} a -> s {street3 = a} :: Address)
+
+instance Data.FromJSON Address where
+  parseJSON =
+    Data.withObject
+      "Address"
+      ( \x ->
+          Address'
+            Prelude.<$> (x Data..:? "AddressId")
+            Prelude.<*> (x Data..:? "City")
+            Prelude.<*> (x Data..:? "Company")
+            Prelude.<*> (x Data..:? "Country")
+            Prelude.<*> (x Data..:? "IsRestricted")
+            Prelude.<*> (x Data..:? "Landmark")
+            Prelude.<*> (x Data..:? "Name")
+            Prelude.<*> (x Data..:? "PhoneNumber")
+            Prelude.<*> (x Data..:? "PostalCode")
+            Prelude.<*> (x Data..:? "PrefectureOrDistrict")
+            Prelude.<*> (x Data..:? "StateOrProvince")
+            Prelude.<*> (x Data..:? "Street1")
+            Prelude.<*> (x Data..:? "Street2")
+            Prelude.<*> (x Data..:? "Street3")
+      )
+
+instance Prelude.Hashable Address where
+  hashWithSalt _salt Address' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressId
+      `Prelude.hashWithSalt` city
+      `Prelude.hashWithSalt` company
+      `Prelude.hashWithSalt` country
+      `Prelude.hashWithSalt` isRestricted
+      `Prelude.hashWithSalt` landmark
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` phoneNumber
+      `Prelude.hashWithSalt` postalCode
+      `Prelude.hashWithSalt` prefectureOrDistrict
+      `Prelude.hashWithSalt` stateOrProvince
+      `Prelude.hashWithSalt` street1
+      `Prelude.hashWithSalt` street2
+      `Prelude.hashWithSalt` street3
+
+instance Prelude.NFData Address where
+  rnf Address' {..} =
+    Prelude.rnf addressId
+      `Prelude.seq` Prelude.rnf city
+      `Prelude.seq` Prelude.rnf company
+      `Prelude.seq` Prelude.rnf country
+      `Prelude.seq` Prelude.rnf isRestricted
+      `Prelude.seq` Prelude.rnf landmark
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf phoneNumber
+      `Prelude.seq` Prelude.rnf postalCode
+      `Prelude.seq` Prelude.rnf prefectureOrDistrict
+      `Prelude.seq` Prelude.rnf stateOrProvince
+      `Prelude.seq` Prelude.rnf street1
+      `Prelude.seq` Prelude.rnf street2
+      `Prelude.seq` Prelude.rnf street3
+
+instance Data.ToJSON Address where
+  toJSON Address' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AddressId" Data..=) Prelude.<$> addressId,
+            ("City" Data..=) Prelude.<$> city,
+            ("Company" Data..=) Prelude.<$> company,
+            ("Country" Data..=) Prelude.<$> country,
+            ("IsRestricted" Data..=) Prelude.<$> isRestricted,
+            ("Landmark" Data..=) Prelude.<$> landmark,
+            ("Name" Data..=) Prelude.<$> name,
+            ("PhoneNumber" Data..=) Prelude.<$> phoneNumber,
+            ("PostalCode" Data..=) Prelude.<$> postalCode,
+            ("PrefectureOrDistrict" Data..=)
+              Prelude.<$> prefectureOrDistrict,
+            ("StateOrProvince" Data..=)
+              Prelude.<$> stateOrProvince,
+            ("Street1" Data..=) Prelude.<$> street1,
+            ("Street2" Data..=) Prelude.<$> street2,
+            ("Street3" Data..=) Prelude.<$> street3
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/ClusterListEntry.hs b/gen/Amazonka/Snowball/Types/ClusterListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/ClusterListEntry.hs
@@ -0,0 +1,119 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.ClusterListEntry
+-- 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.Snowball.Types.ClusterListEntry 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.Snowball.Types.ClusterState
+
+-- | Contains a cluster\'s state, a cluster\'s ID, and other important
+-- information.
+--
+-- /See:/ 'newClusterListEntry' smart constructor.
+data ClusterListEntry = ClusterListEntry'
+  { -- | The 39-character ID for the cluster that you want to list, for example
+    -- @CID123e4567-e89b-12d3-a456-426655440000@.
+    clusterId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of this cluster. For information about the state of a
+    -- specific node, see JobListEntry$JobState.
+    clusterState :: Prelude.Maybe ClusterState,
+    -- | The creation date for this cluster.
+    creationDate :: Prelude.Maybe Data.POSIX,
+    -- | Defines an optional description of the cluster, for example
+    -- @Environmental Data Cluster-01@.
+    description :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClusterListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clusterId', 'clusterListEntry_clusterId' - The 39-character ID for the cluster that you want to list, for example
+-- @CID123e4567-e89b-12d3-a456-426655440000@.
+--
+-- 'clusterState', 'clusterListEntry_clusterState' - The current state of this cluster. For information about the state of a
+-- specific node, see JobListEntry$JobState.
+--
+-- 'creationDate', 'clusterListEntry_creationDate' - The creation date for this cluster.
+--
+-- 'description', 'clusterListEntry_description' - Defines an optional description of the cluster, for example
+-- @Environmental Data Cluster-01@.
+newClusterListEntry ::
+  ClusterListEntry
+newClusterListEntry =
+  ClusterListEntry'
+    { clusterId = Prelude.Nothing,
+      clusterState = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      description = Prelude.Nothing
+    }
+
+-- | The 39-character ID for the cluster that you want to list, for example
+-- @CID123e4567-e89b-12d3-a456-426655440000@.
+clusterListEntry_clusterId :: Lens.Lens' ClusterListEntry (Prelude.Maybe Prelude.Text)
+clusterListEntry_clusterId = Lens.lens (\ClusterListEntry' {clusterId} -> clusterId) (\s@ClusterListEntry' {} a -> s {clusterId = a} :: ClusterListEntry)
+
+-- | The current state of this cluster. For information about the state of a
+-- specific node, see JobListEntry$JobState.
+clusterListEntry_clusterState :: Lens.Lens' ClusterListEntry (Prelude.Maybe ClusterState)
+clusterListEntry_clusterState = Lens.lens (\ClusterListEntry' {clusterState} -> clusterState) (\s@ClusterListEntry' {} a -> s {clusterState = a} :: ClusterListEntry)
+
+-- | The creation date for this cluster.
+clusterListEntry_creationDate :: Lens.Lens' ClusterListEntry (Prelude.Maybe Prelude.UTCTime)
+clusterListEntry_creationDate = Lens.lens (\ClusterListEntry' {creationDate} -> creationDate) (\s@ClusterListEntry' {} a -> s {creationDate = a} :: ClusterListEntry) Prelude.. Lens.mapping Data._Time
+
+-- | Defines an optional description of the cluster, for example
+-- @Environmental Data Cluster-01@.
+clusterListEntry_description :: Lens.Lens' ClusterListEntry (Prelude.Maybe Prelude.Text)
+clusterListEntry_description = Lens.lens (\ClusterListEntry' {description} -> description) (\s@ClusterListEntry' {} a -> s {description = a} :: ClusterListEntry)
+
+instance Data.FromJSON ClusterListEntry where
+  parseJSON =
+    Data.withObject
+      "ClusterListEntry"
+      ( \x ->
+          ClusterListEntry'
+            Prelude.<$> (x Data..:? "ClusterId")
+            Prelude.<*> (x Data..:? "ClusterState")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Description")
+      )
+
+instance Prelude.Hashable ClusterListEntry where
+  hashWithSalt _salt ClusterListEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` clusterId
+      `Prelude.hashWithSalt` clusterState
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` description
+
+instance Prelude.NFData ClusterListEntry where
+  rnf ClusterListEntry' {..} =
+    Prelude.rnf clusterId
+      `Prelude.seq` Prelude.rnf clusterState
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf description
diff --git a/gen/Amazonka/Snowball/Types/ClusterMetadata.hs b/gen/Amazonka/Snowball/Types/ClusterMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/ClusterMetadata.hs
@@ -0,0 +1,338 @@
+{-# 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.Snowball.Types.ClusterMetadata
+-- 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.Snowball.Types.ClusterMetadata 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.Snowball.Types.ClusterState
+import Amazonka.Snowball.Types.JobResource
+import Amazonka.Snowball.Types.JobType
+import Amazonka.Snowball.Types.Notification
+import Amazonka.Snowball.Types.OnDeviceServiceConfiguration
+import Amazonka.Snowball.Types.ShippingOption
+import Amazonka.Snowball.Types.SnowballType
+import Amazonka.Snowball.Types.TaxDocuments
+
+-- | Contains metadata about a specific cluster.
+--
+-- /See:/ 'newClusterMetadata' smart constructor.
+data ClusterMetadata = ClusterMetadata'
+  { -- | The automatically generated ID for a specific address.
+    addressId :: Prelude.Maybe Prelude.Text,
+    -- | The automatically generated ID for a cluster.
+    clusterId :: Prelude.Maybe Prelude.Text,
+    -- | The current status of the cluster.
+    clusterState :: Prelude.Maybe ClusterState,
+    -- | The creation date for this cluster.
+    creationDate :: Prelude.Maybe Data.POSIX,
+    -- | The optional description of the cluster.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the address that you want a cluster shipped to, after it will
+    -- be shipped to its primary address. This field is not supported in most
+    -- regions.
+    forwardingAddressId :: Prelude.Maybe Prelude.Text,
+    -- | The type of job for this cluster. Currently, the only job type supported
+    -- for clusters is @LOCAL_USE@.
+    jobType :: Prelude.Maybe JobType,
+    -- | The @KmsKeyARN@ Amazon Resource Name (ARN) associated with this cluster.
+    -- This ARN was created using the
+    -- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+    -- API action in Key Management Service (KMS.
+    kmsKeyARN :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Simple Notification Service (Amazon SNS) notification
+    -- settings for this cluster.
+    notification :: Prelude.Maybe Notification,
+    -- | Represents metadata and configuration settings for services on an Amazon
+    -- Web Services Snow Family device.
+    onDeviceServiceConfiguration :: Prelude.Maybe OnDeviceServiceConfiguration,
+    -- | The arrays of JobResource objects that can include updated S3Resource
+    -- objects or LambdaResource objects.
+    resources :: Prelude.Maybe JobResource,
+    -- | The role ARN associated with this cluster. This ARN was created using
+    -- the
+    -- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+    -- API action in Identity and Access Management (IAM).
+    roleARN :: Prelude.Maybe Prelude.Text,
+    -- | The shipping speed for each node in this cluster. This speed doesn\'t
+    -- dictate how soon you\'ll get each device, rather it represents how
+    -- quickly each device moves to its destination while in transit. Regional
+    -- shipping speeds are as follows:
+    --
+    -- -   In Australia, you have access to express shipping. Typically,
+    --     devices shipped express are delivered in about a day.
+    --
+    -- -   In the European Union (EU), you have access to express shipping.
+    --     Typically, Snow devices shipped express are delivered in about a
+    --     day. In addition, most countries in the EU have access to standard
+    --     shipping, which typically takes less than a week, one way.
+    --
+    -- -   In India, Snow devices are delivered in one to seven days.
+    --
+    -- -   In the US, you have access to one-day shipping and two-day shipping.
+    shippingOption :: Prelude.Maybe ShippingOption,
+    -- | The type of Snowcone device to use for this cluster.
+    --
+    -- For cluster jobs, Amazon Web Services Snow Family currently supports
+    -- only the @EDGE@ device type.
+    snowballType :: Prelude.Maybe SnowballType,
+    -- | The tax documents required in your Amazon Web Services Region.
+    taxDocuments :: Prelude.Maybe TaxDocuments
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ClusterMetadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressId', 'clusterMetadata_addressId' - The automatically generated ID for a specific address.
+--
+-- 'clusterId', 'clusterMetadata_clusterId' - The automatically generated ID for a cluster.
+--
+-- 'clusterState', 'clusterMetadata_clusterState' - The current status of the cluster.
+--
+-- 'creationDate', 'clusterMetadata_creationDate' - The creation date for this cluster.
+--
+-- 'description', 'clusterMetadata_description' - The optional description of the cluster.
+--
+-- 'forwardingAddressId', 'clusterMetadata_forwardingAddressId' - The ID of the address that you want a cluster shipped to, after it will
+-- be shipped to its primary address. This field is not supported in most
+-- regions.
+--
+-- 'jobType', 'clusterMetadata_jobType' - The type of job for this cluster. Currently, the only job type supported
+-- for clusters is @LOCAL_USE@.
+--
+-- 'kmsKeyARN', 'clusterMetadata_kmsKeyARN' - The @KmsKeyARN@ Amazon Resource Name (ARN) associated with this cluster.
+-- This ARN was created using the
+-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+-- API action in Key Management Service (KMS.
+--
+-- 'notification', 'clusterMetadata_notification' - The Amazon Simple Notification Service (Amazon SNS) notification
+-- settings for this cluster.
+--
+-- 'onDeviceServiceConfiguration', 'clusterMetadata_onDeviceServiceConfiguration' - Represents metadata and configuration settings for services on an Amazon
+-- Web Services Snow Family device.
+--
+-- 'resources', 'clusterMetadata_resources' - The arrays of JobResource objects that can include updated S3Resource
+-- objects or LambdaResource objects.
+--
+-- 'roleARN', 'clusterMetadata_roleARN' - The role ARN associated with this cluster. This ARN was created using
+-- the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+-- API action in Identity and Access Management (IAM).
+--
+-- 'shippingOption', 'clusterMetadata_shippingOption' - The shipping speed for each node in this cluster. This speed doesn\'t
+-- dictate how soon you\'ll get each device, rather it represents how
+-- quickly each device moves to its destination while in transit. Regional
+-- shipping speeds are as follows:
+--
+-- -   In Australia, you have access to express shipping. Typically,
+--     devices shipped express are delivered in about a day.
+--
+-- -   In the European Union (EU), you have access to express shipping.
+--     Typically, Snow devices shipped express are delivered in about a
+--     day. In addition, most countries in the EU have access to standard
+--     shipping, which typically takes less than a week, one way.
+--
+-- -   In India, Snow devices are delivered in one to seven days.
+--
+-- -   In the US, you have access to one-day shipping and two-day shipping.
+--
+-- 'snowballType', 'clusterMetadata_snowballType' - The type of Snowcone device to use for this cluster.
+--
+-- For cluster jobs, Amazon Web Services Snow Family currently supports
+-- only the @EDGE@ device type.
+--
+-- 'taxDocuments', 'clusterMetadata_taxDocuments' - The tax documents required in your Amazon Web Services Region.
+newClusterMetadata ::
+  ClusterMetadata
+newClusterMetadata =
+  ClusterMetadata'
+    { addressId = Prelude.Nothing,
+      clusterId = Prelude.Nothing,
+      clusterState = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      forwardingAddressId = Prelude.Nothing,
+      jobType = Prelude.Nothing,
+      kmsKeyARN = Prelude.Nothing,
+      notification = Prelude.Nothing,
+      onDeviceServiceConfiguration = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      roleARN = Prelude.Nothing,
+      shippingOption = Prelude.Nothing,
+      snowballType = Prelude.Nothing,
+      taxDocuments = Prelude.Nothing
+    }
+
+-- | The automatically generated ID for a specific address.
+clusterMetadata_addressId :: Lens.Lens' ClusterMetadata (Prelude.Maybe Prelude.Text)
+clusterMetadata_addressId = Lens.lens (\ClusterMetadata' {addressId} -> addressId) (\s@ClusterMetadata' {} a -> s {addressId = a} :: ClusterMetadata)
+
+-- | The automatically generated ID for a cluster.
+clusterMetadata_clusterId :: Lens.Lens' ClusterMetadata (Prelude.Maybe Prelude.Text)
+clusterMetadata_clusterId = Lens.lens (\ClusterMetadata' {clusterId} -> clusterId) (\s@ClusterMetadata' {} a -> s {clusterId = a} :: ClusterMetadata)
+
+-- | The current status of the cluster.
+clusterMetadata_clusterState :: Lens.Lens' ClusterMetadata (Prelude.Maybe ClusterState)
+clusterMetadata_clusterState = Lens.lens (\ClusterMetadata' {clusterState} -> clusterState) (\s@ClusterMetadata' {} a -> s {clusterState = a} :: ClusterMetadata)
+
+-- | The creation date for this cluster.
+clusterMetadata_creationDate :: Lens.Lens' ClusterMetadata (Prelude.Maybe Prelude.UTCTime)
+clusterMetadata_creationDate = Lens.lens (\ClusterMetadata' {creationDate} -> creationDate) (\s@ClusterMetadata' {} a -> s {creationDate = a} :: ClusterMetadata) Prelude.. Lens.mapping Data._Time
+
+-- | The optional description of the cluster.
+clusterMetadata_description :: Lens.Lens' ClusterMetadata (Prelude.Maybe Prelude.Text)
+clusterMetadata_description = Lens.lens (\ClusterMetadata' {description} -> description) (\s@ClusterMetadata' {} a -> s {description = a} :: ClusterMetadata)
+
+-- | The ID of the address that you want a cluster shipped to, after it will
+-- be shipped to its primary address. This field is not supported in most
+-- regions.
+clusterMetadata_forwardingAddressId :: Lens.Lens' ClusterMetadata (Prelude.Maybe Prelude.Text)
+clusterMetadata_forwardingAddressId = Lens.lens (\ClusterMetadata' {forwardingAddressId} -> forwardingAddressId) (\s@ClusterMetadata' {} a -> s {forwardingAddressId = a} :: ClusterMetadata)
+
+-- | The type of job for this cluster. Currently, the only job type supported
+-- for clusters is @LOCAL_USE@.
+clusterMetadata_jobType :: Lens.Lens' ClusterMetadata (Prelude.Maybe JobType)
+clusterMetadata_jobType = Lens.lens (\ClusterMetadata' {jobType} -> jobType) (\s@ClusterMetadata' {} a -> s {jobType = a} :: ClusterMetadata)
+
+-- | The @KmsKeyARN@ Amazon Resource Name (ARN) associated with this cluster.
+-- This ARN was created using the
+-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+-- API action in Key Management Service (KMS.
+clusterMetadata_kmsKeyARN :: Lens.Lens' ClusterMetadata (Prelude.Maybe Prelude.Text)
+clusterMetadata_kmsKeyARN = Lens.lens (\ClusterMetadata' {kmsKeyARN} -> kmsKeyARN) (\s@ClusterMetadata' {} a -> s {kmsKeyARN = a} :: ClusterMetadata)
+
+-- | The Amazon Simple Notification Service (Amazon SNS) notification
+-- settings for this cluster.
+clusterMetadata_notification :: Lens.Lens' ClusterMetadata (Prelude.Maybe Notification)
+clusterMetadata_notification = Lens.lens (\ClusterMetadata' {notification} -> notification) (\s@ClusterMetadata' {} a -> s {notification = a} :: ClusterMetadata)
+
+-- | Represents metadata and configuration settings for services on an Amazon
+-- Web Services Snow Family device.
+clusterMetadata_onDeviceServiceConfiguration :: Lens.Lens' ClusterMetadata (Prelude.Maybe OnDeviceServiceConfiguration)
+clusterMetadata_onDeviceServiceConfiguration = Lens.lens (\ClusterMetadata' {onDeviceServiceConfiguration} -> onDeviceServiceConfiguration) (\s@ClusterMetadata' {} a -> s {onDeviceServiceConfiguration = a} :: ClusterMetadata)
+
+-- | The arrays of JobResource objects that can include updated S3Resource
+-- objects or LambdaResource objects.
+clusterMetadata_resources :: Lens.Lens' ClusterMetadata (Prelude.Maybe JobResource)
+clusterMetadata_resources = Lens.lens (\ClusterMetadata' {resources} -> resources) (\s@ClusterMetadata' {} a -> s {resources = a} :: ClusterMetadata)
+
+-- | The role ARN associated with this cluster. This ARN was created using
+-- the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+-- API action in Identity and Access Management (IAM).
+clusterMetadata_roleARN :: Lens.Lens' ClusterMetadata (Prelude.Maybe Prelude.Text)
+clusterMetadata_roleARN = Lens.lens (\ClusterMetadata' {roleARN} -> roleARN) (\s@ClusterMetadata' {} a -> s {roleARN = a} :: ClusterMetadata)
+
+-- | The shipping speed for each node in this cluster. This speed doesn\'t
+-- dictate how soon you\'ll get each device, rather it represents how
+-- quickly each device moves to its destination while in transit. Regional
+-- shipping speeds are as follows:
+--
+-- -   In Australia, you have access to express shipping. Typically,
+--     devices shipped express are delivered in about a day.
+--
+-- -   In the European Union (EU), you have access to express shipping.
+--     Typically, Snow devices shipped express are delivered in about a
+--     day. In addition, most countries in the EU have access to standard
+--     shipping, which typically takes less than a week, one way.
+--
+-- -   In India, Snow devices are delivered in one to seven days.
+--
+-- -   In the US, you have access to one-day shipping and two-day shipping.
+clusterMetadata_shippingOption :: Lens.Lens' ClusterMetadata (Prelude.Maybe ShippingOption)
+clusterMetadata_shippingOption = Lens.lens (\ClusterMetadata' {shippingOption} -> shippingOption) (\s@ClusterMetadata' {} a -> s {shippingOption = a} :: ClusterMetadata)
+
+-- | The type of Snowcone device to use for this cluster.
+--
+-- For cluster jobs, Amazon Web Services Snow Family currently supports
+-- only the @EDGE@ device type.
+clusterMetadata_snowballType :: Lens.Lens' ClusterMetadata (Prelude.Maybe SnowballType)
+clusterMetadata_snowballType = Lens.lens (\ClusterMetadata' {snowballType} -> snowballType) (\s@ClusterMetadata' {} a -> s {snowballType = a} :: ClusterMetadata)
+
+-- | The tax documents required in your Amazon Web Services Region.
+clusterMetadata_taxDocuments :: Lens.Lens' ClusterMetadata (Prelude.Maybe TaxDocuments)
+clusterMetadata_taxDocuments = Lens.lens (\ClusterMetadata' {taxDocuments} -> taxDocuments) (\s@ClusterMetadata' {} a -> s {taxDocuments = a} :: ClusterMetadata)
+
+instance Data.FromJSON ClusterMetadata where
+  parseJSON =
+    Data.withObject
+      "ClusterMetadata"
+      ( \x ->
+          ClusterMetadata'
+            Prelude.<$> (x Data..:? "AddressId")
+            Prelude.<*> (x Data..:? "ClusterId")
+            Prelude.<*> (x Data..:? "ClusterState")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "ForwardingAddressId")
+            Prelude.<*> (x Data..:? "JobType")
+            Prelude.<*> (x Data..:? "KmsKeyARN")
+            Prelude.<*> (x Data..:? "Notification")
+            Prelude.<*> (x Data..:? "OnDeviceServiceConfiguration")
+            Prelude.<*> (x Data..:? "Resources")
+            Prelude.<*> (x Data..:? "RoleARN")
+            Prelude.<*> (x Data..:? "ShippingOption")
+            Prelude.<*> (x Data..:? "SnowballType")
+            Prelude.<*> (x Data..:? "TaxDocuments")
+      )
+
+instance Prelude.Hashable ClusterMetadata where
+  hashWithSalt _salt ClusterMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressId
+      `Prelude.hashWithSalt` clusterId
+      `Prelude.hashWithSalt` clusterState
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` forwardingAddressId
+      `Prelude.hashWithSalt` jobType
+      `Prelude.hashWithSalt` kmsKeyARN
+      `Prelude.hashWithSalt` notification
+      `Prelude.hashWithSalt` onDeviceServiceConfiguration
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` roleARN
+      `Prelude.hashWithSalt` shippingOption
+      `Prelude.hashWithSalt` snowballType
+      `Prelude.hashWithSalt` taxDocuments
+
+instance Prelude.NFData ClusterMetadata where
+  rnf ClusterMetadata' {..} =
+    Prelude.rnf addressId
+      `Prelude.seq` Prelude.rnf clusterId
+      `Prelude.seq` Prelude.rnf clusterState
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf forwardingAddressId
+      `Prelude.seq` Prelude.rnf jobType
+      `Prelude.seq` Prelude.rnf kmsKeyARN
+      `Prelude.seq` Prelude.rnf notification
+      `Prelude.seq` Prelude.rnf onDeviceServiceConfiguration
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf roleARN
+      `Prelude.seq` Prelude.rnf shippingOption
+      `Prelude.seq` Prelude.rnf snowballType
+      `Prelude.seq` Prelude.rnf taxDocuments
diff --git a/gen/Amazonka/Snowball/Types/ClusterState.hs b/gen/Amazonka/Snowball/Types/ClusterState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/ClusterState.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.ClusterState
+-- 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.Snowball.Types.ClusterState
+  ( ClusterState
+      ( ..,
+        ClusterState_AwaitingQuorum,
+        ClusterState_Cancelled,
+        ClusterState_Complete,
+        ClusterState_InUse,
+        ClusterState_Pending
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ClusterState = ClusterState'
+  { fromClusterState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ClusterState_AwaitingQuorum :: ClusterState
+pattern ClusterState_AwaitingQuorum = ClusterState' "AwaitingQuorum"
+
+pattern ClusterState_Cancelled :: ClusterState
+pattern ClusterState_Cancelled = ClusterState' "Cancelled"
+
+pattern ClusterState_Complete :: ClusterState
+pattern ClusterState_Complete = ClusterState' "Complete"
+
+pattern ClusterState_InUse :: ClusterState
+pattern ClusterState_InUse = ClusterState' "InUse"
+
+pattern ClusterState_Pending :: ClusterState
+pattern ClusterState_Pending = ClusterState' "Pending"
+
+{-# COMPLETE
+  ClusterState_AwaitingQuorum,
+  ClusterState_Cancelled,
+  ClusterState_Complete,
+  ClusterState_InUse,
+  ClusterState_Pending,
+  ClusterState'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/CompatibleImage.hs b/gen/Amazonka/Snowball/Types/CompatibleImage.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/CompatibleImage.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.CompatibleImage
+-- 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.Snowball.Types.CompatibleImage where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A JSON-formatted object that describes a compatible Amazon Machine Image
+-- (AMI), including the ID and name for a Snow device AMI. This AMI is
+-- compatible with the device\'s physical hardware requirements, and it
+-- should be able to be run in an SBE1 instance on the device.
+--
+-- /See:/ 'newCompatibleImage' smart constructor.
+data CompatibleImage = CompatibleImage'
+  { -- | The unique identifier for an individual Snow device AMI.
+    amiId :: Prelude.Maybe Prelude.Text,
+    -- | The optional name of a compatible image.
+    name :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CompatibleImage' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'amiId', 'compatibleImage_amiId' - The unique identifier for an individual Snow device AMI.
+--
+-- 'name', 'compatibleImage_name' - The optional name of a compatible image.
+newCompatibleImage ::
+  CompatibleImage
+newCompatibleImage =
+  CompatibleImage'
+    { amiId = Prelude.Nothing,
+      name = Prelude.Nothing
+    }
+
+-- | The unique identifier for an individual Snow device AMI.
+compatibleImage_amiId :: Lens.Lens' CompatibleImage (Prelude.Maybe Prelude.Text)
+compatibleImage_amiId = Lens.lens (\CompatibleImage' {amiId} -> amiId) (\s@CompatibleImage' {} a -> s {amiId = a} :: CompatibleImage)
+
+-- | The optional name of a compatible image.
+compatibleImage_name :: Lens.Lens' CompatibleImage (Prelude.Maybe Prelude.Text)
+compatibleImage_name = Lens.lens (\CompatibleImage' {name} -> name) (\s@CompatibleImage' {} a -> s {name = a} :: CompatibleImage)
+
+instance Data.FromJSON CompatibleImage where
+  parseJSON =
+    Data.withObject
+      "CompatibleImage"
+      ( \x ->
+          CompatibleImage'
+            Prelude.<$> (x Data..:? "AmiId")
+            Prelude.<*> (x Data..:? "Name")
+      )
+
+instance Prelude.Hashable CompatibleImage where
+  hashWithSalt _salt CompatibleImage' {..} =
+    _salt
+      `Prelude.hashWithSalt` amiId
+      `Prelude.hashWithSalt` name
+
+instance Prelude.NFData CompatibleImage where
+  rnf CompatibleImage' {..} =
+    Prelude.rnf amiId `Prelude.seq` Prelude.rnf name
diff --git a/gen/Amazonka/Snowball/Types/DataTransfer.hs b/gen/Amazonka/Snowball/Types/DataTransfer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/DataTransfer.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.DataTransfer
+-- 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.Snowball.Types.DataTransfer 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
+
+-- | Defines the real-time status of a Snow device\'s data transfer while the
+-- device is at Amazon Web Services. This data is only available while a
+-- job has a @JobState@ value of @InProgress@, for both import and export
+-- jobs.
+--
+-- /See:/ 'newDataTransfer' smart constructor.
+data DataTransfer = DataTransfer'
+  { -- | The number of bytes transferred between a Snow device and Amazon S3.
+    bytesTransferred :: Prelude.Maybe Prelude.Integer,
+    -- | The number of objects transferred between a Snow device and Amazon S3.
+    objectsTransferred :: Prelude.Maybe Prelude.Integer,
+    -- | The total bytes of data for a transfer between a Snow device and Amazon
+    -- S3. This value is set to 0 (zero) until all the keys that will be
+    -- transferred have been listed.
+    totalBytes :: Prelude.Maybe Prelude.Integer,
+    -- | The total number of objects for a transfer between a Snow device and
+    -- Amazon S3. This value is set to 0 (zero) until all the keys that will be
+    -- transferred have been listed.
+    totalObjects :: Prelude.Maybe Prelude.Integer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DataTransfer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bytesTransferred', 'dataTransfer_bytesTransferred' - The number of bytes transferred between a Snow device and Amazon S3.
+--
+-- 'objectsTransferred', 'dataTransfer_objectsTransferred' - The number of objects transferred between a Snow device and Amazon S3.
+--
+-- 'totalBytes', 'dataTransfer_totalBytes' - The total bytes of data for a transfer between a Snow device and Amazon
+-- S3. This value is set to 0 (zero) until all the keys that will be
+-- transferred have been listed.
+--
+-- 'totalObjects', 'dataTransfer_totalObjects' - The total number of objects for a transfer between a Snow device and
+-- Amazon S3. This value is set to 0 (zero) until all the keys that will be
+-- transferred have been listed.
+newDataTransfer ::
+  DataTransfer
+newDataTransfer =
+  DataTransfer'
+    { bytesTransferred = Prelude.Nothing,
+      objectsTransferred = Prelude.Nothing,
+      totalBytes = Prelude.Nothing,
+      totalObjects = Prelude.Nothing
+    }
+
+-- | The number of bytes transferred between a Snow device and Amazon S3.
+dataTransfer_bytesTransferred :: Lens.Lens' DataTransfer (Prelude.Maybe Prelude.Integer)
+dataTransfer_bytesTransferred = Lens.lens (\DataTransfer' {bytesTransferred} -> bytesTransferred) (\s@DataTransfer' {} a -> s {bytesTransferred = a} :: DataTransfer)
+
+-- | The number of objects transferred between a Snow device and Amazon S3.
+dataTransfer_objectsTransferred :: Lens.Lens' DataTransfer (Prelude.Maybe Prelude.Integer)
+dataTransfer_objectsTransferred = Lens.lens (\DataTransfer' {objectsTransferred} -> objectsTransferred) (\s@DataTransfer' {} a -> s {objectsTransferred = a} :: DataTransfer)
+
+-- | The total bytes of data for a transfer between a Snow device and Amazon
+-- S3. This value is set to 0 (zero) until all the keys that will be
+-- transferred have been listed.
+dataTransfer_totalBytes :: Lens.Lens' DataTransfer (Prelude.Maybe Prelude.Integer)
+dataTransfer_totalBytes = Lens.lens (\DataTransfer' {totalBytes} -> totalBytes) (\s@DataTransfer' {} a -> s {totalBytes = a} :: DataTransfer)
+
+-- | The total number of objects for a transfer between a Snow device and
+-- Amazon S3. This value is set to 0 (zero) until all the keys that will be
+-- transferred have been listed.
+dataTransfer_totalObjects :: Lens.Lens' DataTransfer (Prelude.Maybe Prelude.Integer)
+dataTransfer_totalObjects = Lens.lens (\DataTransfer' {totalObjects} -> totalObjects) (\s@DataTransfer' {} a -> s {totalObjects = a} :: DataTransfer)
+
+instance Data.FromJSON DataTransfer where
+  parseJSON =
+    Data.withObject
+      "DataTransfer"
+      ( \x ->
+          DataTransfer'
+            Prelude.<$> (x Data..:? "BytesTransferred")
+            Prelude.<*> (x Data..:? "ObjectsTransferred")
+            Prelude.<*> (x Data..:? "TotalBytes")
+            Prelude.<*> (x Data..:? "TotalObjects")
+      )
+
+instance Prelude.Hashable DataTransfer where
+  hashWithSalt _salt DataTransfer' {..} =
+    _salt
+      `Prelude.hashWithSalt` bytesTransferred
+      `Prelude.hashWithSalt` objectsTransferred
+      `Prelude.hashWithSalt` totalBytes
+      `Prelude.hashWithSalt` totalObjects
+
+instance Prelude.NFData DataTransfer where
+  rnf DataTransfer' {..} =
+    Prelude.rnf bytesTransferred
+      `Prelude.seq` Prelude.rnf objectsTransferred
+      `Prelude.seq` Prelude.rnf totalBytes
+      `Prelude.seq` Prelude.rnf totalObjects
diff --git a/gen/Amazonka/Snowball/Types/DeviceConfiguration.hs b/gen/Amazonka/Snowball/Types/DeviceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/DeviceConfiguration.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.Snowball.Types.DeviceConfiguration
+-- 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.Snowball.Types.DeviceConfiguration 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.Snowball.Types.SnowconeDeviceConfiguration
+
+-- | The container for @SnowconeDeviceConfiguration@.
+--
+-- /See:/ 'newDeviceConfiguration' smart constructor.
+data DeviceConfiguration = DeviceConfiguration'
+  { -- | Returns information about the device configuration for an Snowcone job.
+    snowconeDeviceConfiguration :: Prelude.Maybe SnowconeDeviceConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeviceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snowconeDeviceConfiguration', 'deviceConfiguration_snowconeDeviceConfiguration' - Returns information about the device configuration for an Snowcone job.
+newDeviceConfiguration ::
+  DeviceConfiguration
+newDeviceConfiguration =
+  DeviceConfiguration'
+    { snowconeDeviceConfiguration =
+        Prelude.Nothing
+    }
+
+-- | Returns information about the device configuration for an Snowcone job.
+deviceConfiguration_snowconeDeviceConfiguration :: Lens.Lens' DeviceConfiguration (Prelude.Maybe SnowconeDeviceConfiguration)
+deviceConfiguration_snowconeDeviceConfiguration = Lens.lens (\DeviceConfiguration' {snowconeDeviceConfiguration} -> snowconeDeviceConfiguration) (\s@DeviceConfiguration' {} a -> s {snowconeDeviceConfiguration = a} :: DeviceConfiguration)
+
+instance Data.FromJSON DeviceConfiguration where
+  parseJSON =
+    Data.withObject
+      "DeviceConfiguration"
+      ( \x ->
+          DeviceConfiguration'
+            Prelude.<$> (x Data..:? "SnowconeDeviceConfiguration")
+      )
+
+instance Prelude.Hashable DeviceConfiguration where
+  hashWithSalt _salt DeviceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` snowconeDeviceConfiguration
+
+instance Prelude.NFData DeviceConfiguration where
+  rnf DeviceConfiguration' {..} =
+    Prelude.rnf snowconeDeviceConfiguration
+
+instance Data.ToJSON DeviceConfiguration where
+  toJSON DeviceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SnowconeDeviceConfiguration" Data..=)
+              Prelude.<$> snowconeDeviceConfiguration
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/DeviceServiceName.hs b/gen/Amazonka/Snowball/Types/DeviceServiceName.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/DeviceServiceName.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.DeviceServiceName
+-- 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.Snowball.Types.DeviceServiceName
+  ( DeviceServiceName
+      ( ..,
+        DeviceServiceName_NFS_ON_DEVICE_SERVICE,
+        DeviceServiceName_S3_ON_DEVICE_SERVICE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype DeviceServiceName = DeviceServiceName'
+  { fromDeviceServiceName ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern DeviceServiceName_NFS_ON_DEVICE_SERVICE :: DeviceServiceName
+pattern DeviceServiceName_NFS_ON_DEVICE_SERVICE = DeviceServiceName' "NFS_ON_DEVICE_SERVICE"
+
+pattern DeviceServiceName_S3_ON_DEVICE_SERVICE :: DeviceServiceName
+pattern DeviceServiceName_S3_ON_DEVICE_SERVICE = DeviceServiceName' "S3_ON_DEVICE_SERVICE"
+
+{-# COMPLETE
+  DeviceServiceName_NFS_ON_DEVICE_SERVICE,
+  DeviceServiceName_S3_ON_DEVICE_SERVICE,
+  DeviceServiceName'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/Ec2AmiResource.hs b/gen/Amazonka/Snowball/Types/Ec2AmiResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/Ec2AmiResource.hs
@@ -0,0 +1,98 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.Ec2AmiResource
+-- 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.Snowball.Types.Ec2AmiResource where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | A JSON-formatted object that contains the IDs for an Amazon Machine
+-- Image (AMI), including the Amazon EC2 AMI ID and the Snow device AMI ID.
+-- Each AMI has these two IDs to simplify identifying the AMI in both the
+-- Amazon Web Services Cloud and on the device.
+--
+-- /See:/ 'newEc2AmiResource' smart constructor.
+data Ec2AmiResource = Ec2AmiResource'
+  { -- | The ID of the AMI on the Snow device.
+    snowballAmiId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the AMI in Amazon EC2.
+    amiId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Ec2AmiResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'snowballAmiId', 'ec2AmiResource_snowballAmiId' - The ID of the AMI on the Snow device.
+--
+-- 'amiId', 'ec2AmiResource_amiId' - The ID of the AMI in Amazon EC2.
+newEc2AmiResource ::
+  -- | 'amiId'
+  Prelude.Text ->
+  Ec2AmiResource
+newEc2AmiResource pAmiId_ =
+  Ec2AmiResource'
+    { snowballAmiId = Prelude.Nothing,
+      amiId = pAmiId_
+    }
+
+-- | The ID of the AMI on the Snow device.
+ec2AmiResource_snowballAmiId :: Lens.Lens' Ec2AmiResource (Prelude.Maybe Prelude.Text)
+ec2AmiResource_snowballAmiId = Lens.lens (\Ec2AmiResource' {snowballAmiId} -> snowballAmiId) (\s@Ec2AmiResource' {} a -> s {snowballAmiId = a} :: Ec2AmiResource)
+
+-- | The ID of the AMI in Amazon EC2.
+ec2AmiResource_amiId :: Lens.Lens' Ec2AmiResource Prelude.Text
+ec2AmiResource_amiId = Lens.lens (\Ec2AmiResource' {amiId} -> amiId) (\s@Ec2AmiResource' {} a -> s {amiId = a} :: Ec2AmiResource)
+
+instance Data.FromJSON Ec2AmiResource where
+  parseJSON =
+    Data.withObject
+      "Ec2AmiResource"
+      ( \x ->
+          Ec2AmiResource'
+            Prelude.<$> (x Data..:? "SnowballAmiId")
+            Prelude.<*> (x Data..: "AmiId")
+      )
+
+instance Prelude.Hashable Ec2AmiResource where
+  hashWithSalt _salt Ec2AmiResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` snowballAmiId
+      `Prelude.hashWithSalt` amiId
+
+instance Prelude.NFData Ec2AmiResource where
+  rnf Ec2AmiResource' {..} =
+    Prelude.rnf snowballAmiId
+      `Prelude.seq` Prelude.rnf amiId
+
+instance Data.ToJSON Ec2AmiResource where
+  toJSON Ec2AmiResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("SnowballAmiId" Data..=) Prelude.<$> snowballAmiId,
+            Prelude.Just ("AmiId" Data..= amiId)
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/EventTriggerDefinition.hs b/gen/Amazonka/Snowball/Types/EventTriggerDefinition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/EventTriggerDefinition.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.Snowball.Types.EventTriggerDefinition
+-- 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.Snowball.Types.EventTriggerDefinition where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The container for the EventTriggerDefinition$EventResourceARN.
+--
+-- /See:/ 'newEventTriggerDefinition' smart constructor.
+data EventTriggerDefinition = EventTriggerDefinition'
+  { -- | The Amazon Resource Name (ARN) for any local Amazon S3 resource that is
+    -- an Lambda function\'s event trigger associated with this job.
+    eventResourceARN :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'EventTriggerDefinition' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventResourceARN', 'eventTriggerDefinition_eventResourceARN' - The Amazon Resource Name (ARN) for any local Amazon S3 resource that is
+-- an Lambda function\'s event trigger associated with this job.
+newEventTriggerDefinition ::
+  EventTriggerDefinition
+newEventTriggerDefinition =
+  EventTriggerDefinition'
+    { eventResourceARN =
+        Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) for any local Amazon S3 resource that is
+-- an Lambda function\'s event trigger associated with this job.
+eventTriggerDefinition_eventResourceARN :: Lens.Lens' EventTriggerDefinition (Prelude.Maybe Prelude.Text)
+eventTriggerDefinition_eventResourceARN = Lens.lens (\EventTriggerDefinition' {eventResourceARN} -> eventResourceARN) (\s@EventTriggerDefinition' {} a -> s {eventResourceARN = a} :: EventTriggerDefinition)
+
+instance Data.FromJSON EventTriggerDefinition where
+  parseJSON =
+    Data.withObject
+      "EventTriggerDefinition"
+      ( \x ->
+          EventTriggerDefinition'
+            Prelude.<$> (x Data..:? "EventResourceARN")
+      )
+
+instance Prelude.Hashable EventTriggerDefinition where
+  hashWithSalt _salt EventTriggerDefinition' {..} =
+    _salt `Prelude.hashWithSalt` eventResourceARN
+
+instance Prelude.NFData EventTriggerDefinition where
+  rnf EventTriggerDefinition' {..} =
+    Prelude.rnf eventResourceARN
+
+instance Data.ToJSON EventTriggerDefinition where
+  toJSON EventTriggerDefinition' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EventResourceARN" Data..=)
+              Prelude.<$> eventResourceARN
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/INDTaxDocuments.hs b/gen/Amazonka/Snowball/Types/INDTaxDocuments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/INDTaxDocuments.hs
@@ -0,0 +1,77 @@
+{-# 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.Snowball.Types.INDTaxDocuments
+-- 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.Snowball.Types.INDTaxDocuments where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The tax documents required in Amazon Web Services Region in India.
+--
+-- /See:/ 'newINDTaxDocuments' smart constructor.
+data INDTaxDocuments = INDTaxDocuments'
+  { -- | The Goods and Services Tax (GST) documents required in Amazon Web
+    -- Services Region in India.
+    gstin :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'INDTaxDocuments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'gstin', 'iNDTaxDocuments_gstin' - The Goods and Services Tax (GST) documents required in Amazon Web
+-- Services Region in India.
+newINDTaxDocuments ::
+  INDTaxDocuments
+newINDTaxDocuments =
+  INDTaxDocuments' {gstin = Prelude.Nothing}
+
+-- | The Goods and Services Tax (GST) documents required in Amazon Web
+-- Services Region in India.
+iNDTaxDocuments_gstin :: Lens.Lens' INDTaxDocuments (Prelude.Maybe Prelude.Text)
+iNDTaxDocuments_gstin = Lens.lens (\INDTaxDocuments' {gstin} -> gstin) (\s@INDTaxDocuments' {} a -> s {gstin = a} :: INDTaxDocuments)
+
+instance Data.FromJSON INDTaxDocuments where
+  parseJSON =
+    Data.withObject
+      "INDTaxDocuments"
+      ( \x ->
+          INDTaxDocuments' Prelude.<$> (x Data..:? "GSTIN")
+      )
+
+instance Prelude.Hashable INDTaxDocuments where
+  hashWithSalt _salt INDTaxDocuments' {..} =
+    _salt `Prelude.hashWithSalt` gstin
+
+instance Prelude.NFData INDTaxDocuments where
+  rnf INDTaxDocuments' {..} = Prelude.rnf gstin
+
+instance Data.ToJSON INDTaxDocuments where
+  toJSON INDTaxDocuments' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("GSTIN" Data..=) Prelude.<$> gstin]
+      )
diff --git a/gen/Amazonka/Snowball/Types/JobListEntry.hs b/gen/Amazonka/Snowball/Types/JobListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/JobListEntry.hs
@@ -0,0 +1,173 @@
+{-# 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.Snowball.Types.JobListEntry
+-- 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.Snowball.Types.JobListEntry 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.Snowball.Types.JobState
+import Amazonka.Snowball.Types.JobType
+import Amazonka.Snowball.Types.SnowballType
+
+-- | Each @JobListEntry@ object contains a job\'s state, a job\'s ID, and a
+-- value that indicates whether the job is a job part, in the case of an
+-- export job.
+--
+-- /See:/ 'newJobListEntry' smart constructor.
+data JobListEntry = JobListEntry'
+  { -- | The creation date for this job.
+    creationDate :: Prelude.Maybe Data.POSIX,
+    -- | The optional description of this specific job, for example
+    -- @Important Photos 2016-08-11@.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | A value that indicates that this job is a main job. A main job
+    -- represents a successful request to create an export job. Main jobs
+    -- aren\'t associated with any Snowballs. Instead, each main job will have
+    -- at least one job part, and each job part is associated with a Snowball.
+    -- It might take some time before the job parts associated with a
+    -- particular main job are listed, because they are created after the main
+    -- job is created.
+    isMaster :: Prelude.Maybe Prelude.Bool,
+    -- | The automatically generated ID for a job, for example
+    -- @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | The current state of this job.
+    jobState :: Prelude.Maybe JobState,
+    -- | The type of job.
+    jobType :: Prelude.Maybe JobType,
+    -- | The type of device used with this job.
+    snowballType :: Prelude.Maybe SnowballType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'creationDate', 'jobListEntry_creationDate' - The creation date for this job.
+--
+-- 'description', 'jobListEntry_description' - The optional description of this specific job, for example
+-- @Important Photos 2016-08-11@.
+--
+-- 'isMaster', 'jobListEntry_isMaster' - A value that indicates that this job is a main job. A main job
+-- represents a successful request to create an export job. Main jobs
+-- aren\'t associated with any Snowballs. Instead, each main job will have
+-- at least one job part, and each job part is associated with a Snowball.
+-- It might take some time before the job parts associated with a
+-- particular main job are listed, because they are created after the main
+-- job is created.
+--
+-- 'jobId', 'jobListEntry_jobId' - The automatically generated ID for a job, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+--
+-- 'jobState', 'jobListEntry_jobState' - The current state of this job.
+--
+-- 'jobType', 'jobListEntry_jobType' - The type of job.
+--
+-- 'snowballType', 'jobListEntry_snowballType' - The type of device used with this job.
+newJobListEntry ::
+  JobListEntry
+newJobListEntry =
+  JobListEntry'
+    { creationDate = Prelude.Nothing,
+      description = Prelude.Nothing,
+      isMaster = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobState = Prelude.Nothing,
+      jobType = Prelude.Nothing,
+      snowballType = Prelude.Nothing
+    }
+
+-- | The creation date for this job.
+jobListEntry_creationDate :: Lens.Lens' JobListEntry (Prelude.Maybe Prelude.UTCTime)
+jobListEntry_creationDate = Lens.lens (\JobListEntry' {creationDate} -> creationDate) (\s@JobListEntry' {} a -> s {creationDate = a} :: JobListEntry) Prelude.. Lens.mapping Data._Time
+
+-- | The optional description of this specific job, for example
+-- @Important Photos 2016-08-11@.
+jobListEntry_description :: Lens.Lens' JobListEntry (Prelude.Maybe Prelude.Text)
+jobListEntry_description = Lens.lens (\JobListEntry' {description} -> description) (\s@JobListEntry' {} a -> s {description = a} :: JobListEntry)
+
+-- | A value that indicates that this job is a main job. A main job
+-- represents a successful request to create an export job. Main jobs
+-- aren\'t associated with any Snowballs. Instead, each main job will have
+-- at least one job part, and each job part is associated with a Snowball.
+-- It might take some time before the job parts associated with a
+-- particular main job are listed, because they are created after the main
+-- job is created.
+jobListEntry_isMaster :: Lens.Lens' JobListEntry (Prelude.Maybe Prelude.Bool)
+jobListEntry_isMaster = Lens.lens (\JobListEntry' {isMaster} -> isMaster) (\s@JobListEntry' {} a -> s {isMaster = a} :: JobListEntry)
+
+-- | The automatically generated ID for a job, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+jobListEntry_jobId :: Lens.Lens' JobListEntry (Prelude.Maybe Prelude.Text)
+jobListEntry_jobId = Lens.lens (\JobListEntry' {jobId} -> jobId) (\s@JobListEntry' {} a -> s {jobId = a} :: JobListEntry)
+
+-- | The current state of this job.
+jobListEntry_jobState :: Lens.Lens' JobListEntry (Prelude.Maybe JobState)
+jobListEntry_jobState = Lens.lens (\JobListEntry' {jobState} -> jobState) (\s@JobListEntry' {} a -> s {jobState = a} :: JobListEntry)
+
+-- | The type of job.
+jobListEntry_jobType :: Lens.Lens' JobListEntry (Prelude.Maybe JobType)
+jobListEntry_jobType = Lens.lens (\JobListEntry' {jobType} -> jobType) (\s@JobListEntry' {} a -> s {jobType = a} :: JobListEntry)
+
+-- | The type of device used with this job.
+jobListEntry_snowballType :: Lens.Lens' JobListEntry (Prelude.Maybe SnowballType)
+jobListEntry_snowballType = Lens.lens (\JobListEntry' {snowballType} -> snowballType) (\s@JobListEntry' {} a -> s {snowballType = a} :: JobListEntry)
+
+instance Data.FromJSON JobListEntry where
+  parseJSON =
+    Data.withObject
+      "JobListEntry"
+      ( \x ->
+          JobListEntry'
+            Prelude.<$> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "IsMaster")
+            Prelude.<*> (x Data..:? "JobId")
+            Prelude.<*> (x Data..:? "JobState")
+            Prelude.<*> (x Data..:? "JobType")
+            Prelude.<*> (x Data..:? "SnowballType")
+      )
+
+instance Prelude.Hashable JobListEntry where
+  hashWithSalt _salt JobListEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` isMaster
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` jobState
+      `Prelude.hashWithSalt` jobType
+      `Prelude.hashWithSalt` snowballType
+
+instance Prelude.NFData JobListEntry where
+  rnf JobListEntry' {..} =
+    Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf isMaster
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobState
+      `Prelude.seq` Prelude.rnf jobType
+      `Prelude.seq` Prelude.rnf snowballType
diff --git a/gen/Amazonka/Snowball/Types/JobLogs.hs b/gen/Amazonka/Snowball/Types/JobLogs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/JobLogs.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.JobLogs
+-- 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.Snowball.Types.JobLogs 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
+
+-- | Contains job logs. Whenever a Snow device is used to import data into or
+-- export data out of Amazon S3, you\'ll have the option of downloading a
+-- PDF job report. Job logs are returned as a part of the response syntax
+-- of the @DescribeJob@ action in the @JobMetadata@ data type. The job logs
+-- can be accessed for up to 60 minutes after this request has been made.
+-- To access any of the job logs after 60 minutes have passed, you\'ll have
+-- to make another call to the @DescribeJob@ action.
+--
+-- For import jobs, the PDF job report becomes available at the end of the
+-- import process. For export jobs, your job report typically becomes
+-- available while the Snow device for your job part is being delivered to
+-- you.
+--
+-- The job report provides you insight into the state of your Amazon S3
+-- data transfer. The report includes details about your job or job part
+-- for your records.
+--
+-- For deeper visibility into the status of your transferred objects, you
+-- can look at the two associated logs: a success log and a failure log.
+-- The logs are saved in comma-separated value (CSV) format, and the name
+-- of each log includes the ID of the job or job part that the log
+-- describes.
+--
+-- /See:/ 'newJobLogs' smart constructor.
+data JobLogs = JobLogs'
+  { -- | A link to an Amazon S3 presigned URL where the job completion report is
+    -- located.
+    jobCompletionReportURI :: Prelude.Maybe Prelude.Text,
+    -- | A link to an Amazon S3 presigned URL where the job failure log is
+    -- located.
+    jobFailureLogURI :: Prelude.Maybe Prelude.Text,
+    -- | A link to an Amazon S3 presigned URL where the job success log is
+    -- located.
+    jobSuccessLogURI :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobLogs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobCompletionReportURI', 'jobLogs_jobCompletionReportURI' - A link to an Amazon S3 presigned URL where the job completion report is
+-- located.
+--
+-- 'jobFailureLogURI', 'jobLogs_jobFailureLogURI' - A link to an Amazon S3 presigned URL where the job failure log is
+-- located.
+--
+-- 'jobSuccessLogURI', 'jobLogs_jobSuccessLogURI' - A link to an Amazon S3 presigned URL where the job success log is
+-- located.
+newJobLogs ::
+  JobLogs
+newJobLogs =
+  JobLogs'
+    { jobCompletionReportURI = Prelude.Nothing,
+      jobFailureLogURI = Prelude.Nothing,
+      jobSuccessLogURI = Prelude.Nothing
+    }
+
+-- | A link to an Amazon S3 presigned URL where the job completion report is
+-- located.
+jobLogs_jobCompletionReportURI :: Lens.Lens' JobLogs (Prelude.Maybe Prelude.Text)
+jobLogs_jobCompletionReportURI = Lens.lens (\JobLogs' {jobCompletionReportURI} -> jobCompletionReportURI) (\s@JobLogs' {} a -> s {jobCompletionReportURI = a} :: JobLogs)
+
+-- | A link to an Amazon S3 presigned URL where the job failure log is
+-- located.
+jobLogs_jobFailureLogURI :: Lens.Lens' JobLogs (Prelude.Maybe Prelude.Text)
+jobLogs_jobFailureLogURI = Lens.lens (\JobLogs' {jobFailureLogURI} -> jobFailureLogURI) (\s@JobLogs' {} a -> s {jobFailureLogURI = a} :: JobLogs)
+
+-- | A link to an Amazon S3 presigned URL where the job success log is
+-- located.
+jobLogs_jobSuccessLogURI :: Lens.Lens' JobLogs (Prelude.Maybe Prelude.Text)
+jobLogs_jobSuccessLogURI = Lens.lens (\JobLogs' {jobSuccessLogURI} -> jobSuccessLogURI) (\s@JobLogs' {} a -> s {jobSuccessLogURI = a} :: JobLogs)
+
+instance Data.FromJSON JobLogs where
+  parseJSON =
+    Data.withObject
+      "JobLogs"
+      ( \x ->
+          JobLogs'
+            Prelude.<$> (x Data..:? "JobCompletionReportURI")
+            Prelude.<*> (x Data..:? "JobFailureLogURI")
+            Prelude.<*> (x Data..:? "JobSuccessLogURI")
+      )
+
+instance Prelude.Hashable JobLogs where
+  hashWithSalt _salt JobLogs' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobCompletionReportURI
+      `Prelude.hashWithSalt` jobFailureLogURI
+      `Prelude.hashWithSalt` jobSuccessLogURI
+
+instance Prelude.NFData JobLogs where
+  rnf JobLogs' {..} =
+    Prelude.rnf jobCompletionReportURI
+      `Prelude.seq` Prelude.rnf jobFailureLogURI
+      `Prelude.seq` Prelude.rnf jobSuccessLogURI
diff --git a/gen/Amazonka/Snowball/Types/JobMetadata.hs b/gen/Amazonka/Snowball/Types/JobMetadata.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/JobMetadata.hs
@@ -0,0 +1,448 @@
+{-# 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.Snowball.Types.JobMetadata
+-- 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.Snowball.Types.JobMetadata 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.Snowball.Types.DataTransfer
+import Amazonka.Snowball.Types.DeviceConfiguration
+import Amazonka.Snowball.Types.JobLogs
+import Amazonka.Snowball.Types.JobResource
+import Amazonka.Snowball.Types.JobState
+import Amazonka.Snowball.Types.JobType
+import Amazonka.Snowball.Types.Notification
+import Amazonka.Snowball.Types.OnDeviceServiceConfiguration
+import Amazonka.Snowball.Types.RemoteManagement
+import Amazonka.Snowball.Types.ShippingDetails
+import Amazonka.Snowball.Types.SnowballCapacity
+import Amazonka.Snowball.Types.SnowballType
+import Amazonka.Snowball.Types.TaxDocuments
+
+-- | Contains information about a specific job including shipping
+-- information, job status, and other important metadata. This information
+-- is returned as a part of the response syntax of the @DescribeJob@
+-- action.
+--
+-- /See:/ 'newJobMetadata' smart constructor.
+data JobMetadata = JobMetadata'
+  { -- | The ID for the address that you want the Snow device shipped to.
+    addressId :: Prelude.Maybe Prelude.Text,
+    -- | The 39-character ID for the cluster, for example
+    -- @CID123e4567-e89b-12d3-a456-426655440000@.
+    clusterId :: Prelude.Maybe Prelude.Text,
+    -- | The creation date for this job.
+    creationDate :: Prelude.Maybe Data.POSIX,
+    -- | A value that defines the real-time status of a Snow device\'s data
+    -- transfer while the device is at Amazon Web Services. This data is only
+    -- available while a job has a @JobState@ value of @InProgress@, for both
+    -- import and export jobs.
+    dataTransferProgress :: Prelude.Maybe DataTransfer,
+    -- | The description of the job, provided at job creation.
+    description :: Prelude.Maybe Prelude.Text,
+    deviceConfiguration :: Prelude.Maybe DeviceConfiguration,
+    -- | The ID of the address that you want a job shipped to, after it will be
+    -- shipped to its primary address. This field is not supported in most
+    -- regions.
+    forwardingAddressId :: Prelude.Maybe Prelude.Text,
+    -- | The automatically generated ID for a job, for example
+    -- @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Maybe Prelude.Text,
+    -- | Links to Amazon S3 presigned URLs for the job report and logs. For
+    -- import jobs, the PDF job report becomes available at the end of the
+    -- import process. For export jobs, your job report typically becomes
+    -- available while the Snow device for your job part is being delivered to
+    -- you.
+    jobLogInfo :: Prelude.Maybe JobLogs,
+    -- | The current status of the jobs.
+    jobState :: Prelude.Maybe JobState,
+    -- | The type of job.
+    jobType :: Prelude.Maybe JobType,
+    -- | The Amazon Resource Name (ARN) for the Key Management Service (KMS) key
+    -- associated with this job. This ARN was created using the
+    -- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+    -- API action in KMS.
+    kmsKeyARN :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the long-term pricing type for the device.
+    longTermPricingId :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon Simple Notification Service (Amazon SNS) notification
+    -- settings associated with a specific job. The @Notification@ object is
+    -- returned as a part of the response syntax of the @DescribeJob@ action in
+    -- the @JobMetadata@ data type.
+    notification :: Prelude.Maybe Notification,
+    -- | Represents metadata and configuration settings for services on an Amazon
+    -- Web Services Snow Family device.
+    onDeviceServiceConfiguration :: Prelude.Maybe OnDeviceServiceConfiguration,
+    -- | Allows you to securely operate and manage Snowcone devices remotely from
+    -- outside of your internal network. When set to @INSTALLED_AUTOSTART@,
+    -- remote management will automatically be available when the device
+    -- arrives at your location. Otherwise, you need to use the Snowball Client
+    -- to manage the device.
+    remoteManagement :: Prelude.Maybe RemoteManagement,
+    -- | An array of @S3Resource@ objects. Each @S3Resource@ object represents an
+    -- Amazon S3 bucket that your transferred data will be exported from or
+    -- imported into.
+    resources :: Prelude.Maybe JobResource,
+    -- | The role ARN associated with this job. This ARN was created using the
+    -- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+    -- API action in Identity and Access Management.
+    roleARN :: Prelude.Maybe Prelude.Text,
+    -- | A job\'s shipping information, including inbound and outbound tracking
+    -- numbers and shipping speed options.
+    shippingDetails :: Prelude.Maybe ShippingDetails,
+    -- | The Snow device capacity preference for this job, specified at job
+    -- creation. In US regions, you can choose between 50 TB and 80 TB
+    -- Snowballs. All other regions use 80 TB capacity Snowballs.
+    --
+    -- For more information, see
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+    snowballCapacityPreference :: Prelude.Maybe SnowballCapacity,
+    -- | The type of device used with this job.
+    snowballType :: Prelude.Maybe SnowballType,
+    -- | The metadata associated with the tax documents required in your Amazon
+    -- Web Services Region.
+    taxDocuments :: Prelude.Maybe TaxDocuments
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobMetadata' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressId', 'jobMetadata_addressId' - The ID for the address that you want the Snow device shipped to.
+--
+-- 'clusterId', 'jobMetadata_clusterId' - The 39-character ID for the cluster, for example
+-- @CID123e4567-e89b-12d3-a456-426655440000@.
+--
+-- 'creationDate', 'jobMetadata_creationDate' - The creation date for this job.
+--
+-- 'dataTransferProgress', 'jobMetadata_dataTransferProgress' - A value that defines the real-time status of a Snow device\'s data
+-- transfer while the device is at Amazon Web Services. This data is only
+-- available while a job has a @JobState@ value of @InProgress@, for both
+-- import and export jobs.
+--
+-- 'description', 'jobMetadata_description' - The description of the job, provided at job creation.
+--
+-- 'deviceConfiguration', 'jobMetadata_deviceConfiguration' - Undocumented member.
+--
+-- 'forwardingAddressId', 'jobMetadata_forwardingAddressId' - The ID of the address that you want a job shipped to, after it will be
+-- shipped to its primary address. This field is not supported in most
+-- regions.
+--
+-- 'jobId', 'jobMetadata_jobId' - The automatically generated ID for a job, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+--
+-- 'jobLogInfo', 'jobMetadata_jobLogInfo' - Links to Amazon S3 presigned URLs for the job report and logs. For
+-- import jobs, the PDF job report becomes available at the end of the
+-- import process. For export jobs, your job report typically becomes
+-- available while the Snow device for your job part is being delivered to
+-- you.
+--
+-- 'jobState', 'jobMetadata_jobState' - The current status of the jobs.
+--
+-- 'jobType', 'jobMetadata_jobType' - The type of job.
+--
+-- 'kmsKeyARN', 'jobMetadata_kmsKeyARN' - The Amazon Resource Name (ARN) for the Key Management Service (KMS) key
+-- associated with this job. This ARN was created using the
+-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+-- API action in KMS.
+--
+-- 'longTermPricingId', 'jobMetadata_longTermPricingId' - The ID of the long-term pricing type for the device.
+--
+-- 'notification', 'jobMetadata_notification' - The Amazon Simple Notification Service (Amazon SNS) notification
+-- settings associated with a specific job. The @Notification@ object is
+-- returned as a part of the response syntax of the @DescribeJob@ action in
+-- the @JobMetadata@ data type.
+--
+-- 'onDeviceServiceConfiguration', 'jobMetadata_onDeviceServiceConfiguration' - Represents metadata and configuration settings for services on an Amazon
+-- Web Services Snow Family device.
+--
+-- 'remoteManagement', 'jobMetadata_remoteManagement' - Allows you to securely operate and manage Snowcone devices remotely from
+-- outside of your internal network. When set to @INSTALLED_AUTOSTART@,
+-- remote management will automatically be available when the device
+-- arrives at your location. Otherwise, you need to use the Snowball Client
+-- to manage the device.
+--
+-- 'resources', 'jobMetadata_resources' - An array of @S3Resource@ objects. Each @S3Resource@ object represents an
+-- Amazon S3 bucket that your transferred data will be exported from or
+-- imported into.
+--
+-- 'roleARN', 'jobMetadata_roleARN' - The role ARN associated with this job. This ARN was created using the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+-- API action in Identity and Access Management.
+--
+-- 'shippingDetails', 'jobMetadata_shippingDetails' - A job\'s shipping information, including inbound and outbound tracking
+-- numbers and shipping speed options.
+--
+-- 'snowballCapacityPreference', 'jobMetadata_snowballCapacityPreference' - The Snow device capacity preference for this job, specified at job
+-- creation. In US regions, you can choose between 50 TB and 80 TB
+-- Snowballs. All other regions use 80 TB capacity Snowballs.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+--
+-- 'snowballType', 'jobMetadata_snowballType' - The type of device used with this job.
+--
+-- 'taxDocuments', 'jobMetadata_taxDocuments' - The metadata associated with the tax documents required in your Amazon
+-- Web Services Region.
+newJobMetadata ::
+  JobMetadata
+newJobMetadata =
+  JobMetadata'
+    { addressId = Prelude.Nothing,
+      clusterId = Prelude.Nothing,
+      creationDate = Prelude.Nothing,
+      dataTransferProgress = Prelude.Nothing,
+      description = Prelude.Nothing,
+      deviceConfiguration = Prelude.Nothing,
+      forwardingAddressId = Prelude.Nothing,
+      jobId = Prelude.Nothing,
+      jobLogInfo = Prelude.Nothing,
+      jobState = Prelude.Nothing,
+      jobType = Prelude.Nothing,
+      kmsKeyARN = Prelude.Nothing,
+      longTermPricingId = Prelude.Nothing,
+      notification = Prelude.Nothing,
+      onDeviceServiceConfiguration = Prelude.Nothing,
+      remoteManagement = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      roleARN = Prelude.Nothing,
+      shippingDetails = Prelude.Nothing,
+      snowballCapacityPreference = Prelude.Nothing,
+      snowballType = Prelude.Nothing,
+      taxDocuments = Prelude.Nothing
+    }
+
+-- | The ID for the address that you want the Snow device shipped to.
+jobMetadata_addressId :: Lens.Lens' JobMetadata (Prelude.Maybe Prelude.Text)
+jobMetadata_addressId = Lens.lens (\JobMetadata' {addressId} -> addressId) (\s@JobMetadata' {} a -> s {addressId = a} :: JobMetadata)
+
+-- | The 39-character ID for the cluster, for example
+-- @CID123e4567-e89b-12d3-a456-426655440000@.
+jobMetadata_clusterId :: Lens.Lens' JobMetadata (Prelude.Maybe Prelude.Text)
+jobMetadata_clusterId = Lens.lens (\JobMetadata' {clusterId} -> clusterId) (\s@JobMetadata' {} a -> s {clusterId = a} :: JobMetadata)
+
+-- | The creation date for this job.
+jobMetadata_creationDate :: Lens.Lens' JobMetadata (Prelude.Maybe Prelude.UTCTime)
+jobMetadata_creationDate = Lens.lens (\JobMetadata' {creationDate} -> creationDate) (\s@JobMetadata' {} a -> s {creationDate = a} :: JobMetadata) Prelude.. Lens.mapping Data._Time
+
+-- | A value that defines the real-time status of a Snow device\'s data
+-- transfer while the device is at Amazon Web Services. This data is only
+-- available while a job has a @JobState@ value of @InProgress@, for both
+-- import and export jobs.
+jobMetadata_dataTransferProgress :: Lens.Lens' JobMetadata (Prelude.Maybe DataTransfer)
+jobMetadata_dataTransferProgress = Lens.lens (\JobMetadata' {dataTransferProgress} -> dataTransferProgress) (\s@JobMetadata' {} a -> s {dataTransferProgress = a} :: JobMetadata)
+
+-- | The description of the job, provided at job creation.
+jobMetadata_description :: Lens.Lens' JobMetadata (Prelude.Maybe Prelude.Text)
+jobMetadata_description = Lens.lens (\JobMetadata' {description} -> description) (\s@JobMetadata' {} a -> s {description = a} :: JobMetadata)
+
+-- | Undocumented member.
+jobMetadata_deviceConfiguration :: Lens.Lens' JobMetadata (Prelude.Maybe DeviceConfiguration)
+jobMetadata_deviceConfiguration = Lens.lens (\JobMetadata' {deviceConfiguration} -> deviceConfiguration) (\s@JobMetadata' {} a -> s {deviceConfiguration = a} :: JobMetadata)
+
+-- | The ID of the address that you want a job shipped to, after it will be
+-- shipped to its primary address. This field is not supported in most
+-- regions.
+jobMetadata_forwardingAddressId :: Lens.Lens' JobMetadata (Prelude.Maybe Prelude.Text)
+jobMetadata_forwardingAddressId = Lens.lens (\JobMetadata' {forwardingAddressId} -> forwardingAddressId) (\s@JobMetadata' {} a -> s {forwardingAddressId = a} :: JobMetadata)
+
+-- | The automatically generated ID for a job, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+jobMetadata_jobId :: Lens.Lens' JobMetadata (Prelude.Maybe Prelude.Text)
+jobMetadata_jobId = Lens.lens (\JobMetadata' {jobId} -> jobId) (\s@JobMetadata' {} a -> s {jobId = a} :: JobMetadata)
+
+-- | Links to Amazon S3 presigned URLs for the job report and logs. For
+-- import jobs, the PDF job report becomes available at the end of the
+-- import process. For export jobs, your job report typically becomes
+-- available while the Snow device for your job part is being delivered to
+-- you.
+jobMetadata_jobLogInfo :: Lens.Lens' JobMetadata (Prelude.Maybe JobLogs)
+jobMetadata_jobLogInfo = Lens.lens (\JobMetadata' {jobLogInfo} -> jobLogInfo) (\s@JobMetadata' {} a -> s {jobLogInfo = a} :: JobMetadata)
+
+-- | The current status of the jobs.
+jobMetadata_jobState :: Lens.Lens' JobMetadata (Prelude.Maybe JobState)
+jobMetadata_jobState = Lens.lens (\JobMetadata' {jobState} -> jobState) (\s@JobMetadata' {} a -> s {jobState = a} :: JobMetadata)
+
+-- | The type of job.
+jobMetadata_jobType :: Lens.Lens' JobMetadata (Prelude.Maybe JobType)
+jobMetadata_jobType = Lens.lens (\JobMetadata' {jobType} -> jobType) (\s@JobMetadata' {} a -> s {jobType = a} :: JobMetadata)
+
+-- | The Amazon Resource Name (ARN) for the Key Management Service (KMS) key
+-- associated with this job. This ARN was created using the
+-- <https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey>
+-- API action in KMS.
+jobMetadata_kmsKeyARN :: Lens.Lens' JobMetadata (Prelude.Maybe Prelude.Text)
+jobMetadata_kmsKeyARN = Lens.lens (\JobMetadata' {kmsKeyARN} -> kmsKeyARN) (\s@JobMetadata' {} a -> s {kmsKeyARN = a} :: JobMetadata)
+
+-- | The ID of the long-term pricing type for the device.
+jobMetadata_longTermPricingId :: Lens.Lens' JobMetadata (Prelude.Maybe Prelude.Text)
+jobMetadata_longTermPricingId = Lens.lens (\JobMetadata' {longTermPricingId} -> longTermPricingId) (\s@JobMetadata' {} a -> s {longTermPricingId = a} :: JobMetadata)
+
+-- | The Amazon Simple Notification Service (Amazon SNS) notification
+-- settings associated with a specific job. The @Notification@ object is
+-- returned as a part of the response syntax of the @DescribeJob@ action in
+-- the @JobMetadata@ data type.
+jobMetadata_notification :: Lens.Lens' JobMetadata (Prelude.Maybe Notification)
+jobMetadata_notification = Lens.lens (\JobMetadata' {notification} -> notification) (\s@JobMetadata' {} a -> s {notification = a} :: JobMetadata)
+
+-- | Represents metadata and configuration settings for services on an Amazon
+-- Web Services Snow Family device.
+jobMetadata_onDeviceServiceConfiguration :: Lens.Lens' JobMetadata (Prelude.Maybe OnDeviceServiceConfiguration)
+jobMetadata_onDeviceServiceConfiguration = Lens.lens (\JobMetadata' {onDeviceServiceConfiguration} -> onDeviceServiceConfiguration) (\s@JobMetadata' {} a -> s {onDeviceServiceConfiguration = a} :: JobMetadata)
+
+-- | Allows you to securely operate and manage Snowcone devices remotely from
+-- outside of your internal network. When set to @INSTALLED_AUTOSTART@,
+-- remote management will automatically be available when the device
+-- arrives at your location. Otherwise, you need to use the Snowball Client
+-- to manage the device.
+jobMetadata_remoteManagement :: Lens.Lens' JobMetadata (Prelude.Maybe RemoteManagement)
+jobMetadata_remoteManagement = Lens.lens (\JobMetadata' {remoteManagement} -> remoteManagement) (\s@JobMetadata' {} a -> s {remoteManagement = a} :: JobMetadata)
+
+-- | An array of @S3Resource@ objects. Each @S3Resource@ object represents an
+-- Amazon S3 bucket that your transferred data will be exported from or
+-- imported into.
+jobMetadata_resources :: Lens.Lens' JobMetadata (Prelude.Maybe JobResource)
+jobMetadata_resources = Lens.lens (\JobMetadata' {resources} -> resources) (\s@JobMetadata' {} a -> s {resources = a} :: JobMetadata)
+
+-- | The role ARN associated with this job. This ARN was created using the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+-- API action in Identity and Access Management.
+jobMetadata_roleARN :: Lens.Lens' JobMetadata (Prelude.Maybe Prelude.Text)
+jobMetadata_roleARN = Lens.lens (\JobMetadata' {roleARN} -> roleARN) (\s@JobMetadata' {} a -> s {roleARN = a} :: JobMetadata)
+
+-- | A job\'s shipping information, including inbound and outbound tracking
+-- numbers and shipping speed options.
+jobMetadata_shippingDetails :: Lens.Lens' JobMetadata (Prelude.Maybe ShippingDetails)
+jobMetadata_shippingDetails = Lens.lens (\JobMetadata' {shippingDetails} -> shippingDetails) (\s@JobMetadata' {} a -> s {shippingDetails = a} :: JobMetadata)
+
+-- | The Snow device capacity preference for this job, specified at job
+-- creation. In US regions, you can choose between 50 TB and 80 TB
+-- Snowballs. All other regions use 80 TB capacity Snowballs.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+jobMetadata_snowballCapacityPreference :: Lens.Lens' JobMetadata (Prelude.Maybe SnowballCapacity)
+jobMetadata_snowballCapacityPreference = Lens.lens (\JobMetadata' {snowballCapacityPreference} -> snowballCapacityPreference) (\s@JobMetadata' {} a -> s {snowballCapacityPreference = a} :: JobMetadata)
+
+-- | The type of device used with this job.
+jobMetadata_snowballType :: Lens.Lens' JobMetadata (Prelude.Maybe SnowballType)
+jobMetadata_snowballType = Lens.lens (\JobMetadata' {snowballType} -> snowballType) (\s@JobMetadata' {} a -> s {snowballType = a} :: JobMetadata)
+
+-- | The metadata associated with the tax documents required in your Amazon
+-- Web Services Region.
+jobMetadata_taxDocuments :: Lens.Lens' JobMetadata (Prelude.Maybe TaxDocuments)
+jobMetadata_taxDocuments = Lens.lens (\JobMetadata' {taxDocuments} -> taxDocuments) (\s@JobMetadata' {} a -> s {taxDocuments = a} :: JobMetadata)
+
+instance Data.FromJSON JobMetadata where
+  parseJSON =
+    Data.withObject
+      "JobMetadata"
+      ( \x ->
+          JobMetadata'
+            Prelude.<$> (x Data..:? "AddressId")
+            Prelude.<*> (x Data..:? "ClusterId")
+            Prelude.<*> (x Data..:? "CreationDate")
+            Prelude.<*> (x Data..:? "DataTransferProgress")
+            Prelude.<*> (x Data..:? "Description")
+            Prelude.<*> (x Data..:? "DeviceConfiguration")
+            Prelude.<*> (x Data..:? "ForwardingAddressId")
+            Prelude.<*> (x Data..:? "JobId")
+            Prelude.<*> (x Data..:? "JobLogInfo")
+            Prelude.<*> (x Data..:? "JobState")
+            Prelude.<*> (x Data..:? "JobType")
+            Prelude.<*> (x Data..:? "KmsKeyARN")
+            Prelude.<*> (x Data..:? "LongTermPricingId")
+            Prelude.<*> (x Data..:? "Notification")
+            Prelude.<*> (x Data..:? "OnDeviceServiceConfiguration")
+            Prelude.<*> (x Data..:? "RemoteManagement")
+            Prelude.<*> (x Data..:? "Resources")
+            Prelude.<*> (x Data..:? "RoleARN")
+            Prelude.<*> (x Data..:? "ShippingDetails")
+            Prelude.<*> (x Data..:? "SnowballCapacityPreference")
+            Prelude.<*> (x Data..:? "SnowballType")
+            Prelude.<*> (x Data..:? "TaxDocuments")
+      )
+
+instance Prelude.Hashable JobMetadata where
+  hashWithSalt _salt JobMetadata' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressId
+      `Prelude.hashWithSalt` clusterId
+      `Prelude.hashWithSalt` creationDate
+      `Prelude.hashWithSalt` dataTransferProgress
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` deviceConfiguration
+      `Prelude.hashWithSalt` forwardingAddressId
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` jobLogInfo
+      `Prelude.hashWithSalt` jobState
+      `Prelude.hashWithSalt` jobType
+      `Prelude.hashWithSalt` kmsKeyARN
+      `Prelude.hashWithSalt` longTermPricingId
+      `Prelude.hashWithSalt` notification
+      `Prelude.hashWithSalt` onDeviceServiceConfiguration
+      `Prelude.hashWithSalt` remoteManagement
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` roleARN
+      `Prelude.hashWithSalt` shippingDetails
+      `Prelude.hashWithSalt` snowballCapacityPreference
+      `Prelude.hashWithSalt` snowballType
+      `Prelude.hashWithSalt` taxDocuments
+
+instance Prelude.NFData JobMetadata where
+  rnf JobMetadata' {..} =
+    Prelude.rnf addressId
+      `Prelude.seq` Prelude.rnf clusterId
+      `Prelude.seq` Prelude.rnf creationDate
+      `Prelude.seq` Prelude.rnf dataTransferProgress
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf deviceConfiguration
+      `Prelude.seq` Prelude.rnf forwardingAddressId
+      `Prelude.seq` Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf jobLogInfo
+      `Prelude.seq` Prelude.rnf jobState
+      `Prelude.seq` Prelude.rnf jobType
+      `Prelude.seq` Prelude.rnf kmsKeyARN
+      `Prelude.seq` Prelude.rnf longTermPricingId
+      `Prelude.seq` Prelude.rnf notification
+      `Prelude.seq` Prelude.rnf onDeviceServiceConfiguration
+      `Prelude.seq` Prelude.rnf remoteManagement
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf roleARN
+      `Prelude.seq` Prelude.rnf shippingDetails
+      `Prelude.seq` Prelude.rnf
+        snowballCapacityPreference
+      `Prelude.seq` Prelude.rnf snowballType
+      `Prelude.seq` Prelude.rnf taxDocuments
diff --git a/gen/Amazonka/Snowball/Types/JobResource.hs b/gen/Amazonka/Snowball/Types/JobResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/JobResource.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.JobResource
+-- 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.Snowball.Types.JobResource 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.Snowball.Types.Ec2AmiResource
+import Amazonka.Snowball.Types.LambdaResource
+import Amazonka.Snowball.Types.S3Resource
+
+-- | Contains an array of Amazon Web Services resource objects. Each object
+-- represents an Amazon S3 bucket, an Lambda function, or an Amazon Machine
+-- Image (AMI) based on Amazon EC2 that is associated with a particular
+-- job.
+--
+-- /See:/ 'newJobResource' smart constructor.
+data JobResource = JobResource'
+  { -- | The Amazon Machine Images (AMIs) associated with this job.
+    ec2AmiResources :: Prelude.Maybe [Ec2AmiResource],
+    -- | The Python-language Lambda functions for this job.
+    lambdaResources :: Prelude.Maybe [LambdaResource],
+    -- | An array of @S3Resource@ objects.
+    s3Resources :: Prelude.Maybe [S3Resource]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'JobResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ec2AmiResources', 'jobResource_ec2AmiResources' - The Amazon Machine Images (AMIs) associated with this job.
+--
+-- 'lambdaResources', 'jobResource_lambdaResources' - The Python-language Lambda functions for this job.
+--
+-- 's3Resources', 'jobResource_s3Resources' - An array of @S3Resource@ objects.
+newJobResource ::
+  JobResource
+newJobResource =
+  JobResource'
+    { ec2AmiResources = Prelude.Nothing,
+      lambdaResources = Prelude.Nothing,
+      s3Resources = Prelude.Nothing
+    }
+
+-- | The Amazon Machine Images (AMIs) associated with this job.
+jobResource_ec2AmiResources :: Lens.Lens' JobResource (Prelude.Maybe [Ec2AmiResource])
+jobResource_ec2AmiResources = Lens.lens (\JobResource' {ec2AmiResources} -> ec2AmiResources) (\s@JobResource' {} a -> s {ec2AmiResources = a} :: JobResource) Prelude.. Lens.mapping Lens.coerced
+
+-- | The Python-language Lambda functions for this job.
+jobResource_lambdaResources :: Lens.Lens' JobResource (Prelude.Maybe [LambdaResource])
+jobResource_lambdaResources = Lens.lens (\JobResource' {lambdaResources} -> lambdaResources) (\s@JobResource' {} a -> s {lambdaResources = a} :: JobResource) Prelude.. Lens.mapping Lens.coerced
+
+-- | An array of @S3Resource@ objects.
+jobResource_s3Resources :: Lens.Lens' JobResource (Prelude.Maybe [S3Resource])
+jobResource_s3Resources = Lens.lens (\JobResource' {s3Resources} -> s3Resources) (\s@JobResource' {} a -> s {s3Resources = a} :: JobResource) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON JobResource where
+  parseJSON =
+    Data.withObject
+      "JobResource"
+      ( \x ->
+          JobResource'
+            Prelude.<$> ( x
+                            Data..:? "Ec2AmiResources"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..:? "LambdaResources"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "S3Resources" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable JobResource where
+  hashWithSalt _salt JobResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` ec2AmiResources
+      `Prelude.hashWithSalt` lambdaResources
+      `Prelude.hashWithSalt` s3Resources
+
+instance Prelude.NFData JobResource where
+  rnf JobResource' {..} =
+    Prelude.rnf ec2AmiResources
+      `Prelude.seq` Prelude.rnf lambdaResources
+      `Prelude.seq` Prelude.rnf s3Resources
+
+instance Data.ToJSON JobResource where
+  toJSON JobResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("Ec2AmiResources" Data..=)
+              Prelude.<$> ec2AmiResources,
+            ("LambdaResources" Data..=)
+              Prelude.<$> lambdaResources,
+            ("S3Resources" Data..=) Prelude.<$> s3Resources
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/JobState.hs b/gen/Amazonka/Snowball/Types/JobState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/JobState.hs
@@ -0,0 +1,126 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.JobState
+-- 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.Snowball.Types.JobState
+  ( JobState
+      ( ..,
+        JobState_Cancelled,
+        JobState_Complete,
+        JobState_InProgress,
+        JobState_InTransitToAWS,
+        JobState_InTransitToCustomer,
+        JobState_Listing,
+        JobState_New,
+        JobState_Pending,
+        JobState_PreparingAppliance,
+        JobState_PreparingShipment,
+        JobState_WithAWS,
+        JobState_WithAWSSortingFacility,
+        JobState_WithCustomer
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobState = JobState'
+  { fromJobState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern JobState_Cancelled :: JobState
+pattern JobState_Cancelled = JobState' "Cancelled"
+
+pattern JobState_Complete :: JobState
+pattern JobState_Complete = JobState' "Complete"
+
+pattern JobState_InProgress :: JobState
+pattern JobState_InProgress = JobState' "InProgress"
+
+pattern JobState_InTransitToAWS :: JobState
+pattern JobState_InTransitToAWS = JobState' "InTransitToAWS"
+
+pattern JobState_InTransitToCustomer :: JobState
+pattern JobState_InTransitToCustomer = JobState' "InTransitToCustomer"
+
+pattern JobState_Listing :: JobState
+pattern JobState_Listing = JobState' "Listing"
+
+pattern JobState_New :: JobState
+pattern JobState_New = JobState' "New"
+
+pattern JobState_Pending :: JobState
+pattern JobState_Pending = JobState' "Pending"
+
+pattern JobState_PreparingAppliance :: JobState
+pattern JobState_PreparingAppliance = JobState' "PreparingAppliance"
+
+pattern JobState_PreparingShipment :: JobState
+pattern JobState_PreparingShipment = JobState' "PreparingShipment"
+
+pattern JobState_WithAWS :: JobState
+pattern JobState_WithAWS = JobState' "WithAWS"
+
+pattern JobState_WithAWSSortingFacility :: JobState
+pattern JobState_WithAWSSortingFacility = JobState' "WithAWSSortingFacility"
+
+pattern JobState_WithCustomer :: JobState
+pattern JobState_WithCustomer = JobState' "WithCustomer"
+
+{-# COMPLETE
+  JobState_Cancelled,
+  JobState_Complete,
+  JobState_InProgress,
+  JobState_InTransitToAWS,
+  JobState_InTransitToCustomer,
+  JobState_Listing,
+  JobState_New,
+  JobState_Pending,
+  JobState_PreparingAppliance,
+  JobState_PreparingShipment,
+  JobState_WithAWS,
+  JobState_WithAWSSortingFacility,
+  JobState_WithCustomer,
+  JobState'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/JobType.hs b/gen/Amazonka/Snowball/Types/JobType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/JobType.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.JobType
+-- 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.Snowball.Types.JobType
+  ( JobType
+      ( ..,
+        JobType_EXPORT,
+        JobType_IMPORT,
+        JobType_LOCAL_USE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype JobType = JobType' {fromJobType :: Data.Text}
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern JobType_EXPORT :: JobType
+pattern JobType_EXPORT = JobType' "EXPORT"
+
+pattern JobType_IMPORT :: JobType
+pattern JobType_IMPORT = JobType' "IMPORT"
+
+pattern JobType_LOCAL_USE :: JobType
+pattern JobType_LOCAL_USE = JobType' "LOCAL_USE"
+
+{-# COMPLETE
+  JobType_EXPORT,
+  JobType_IMPORT,
+  JobType_LOCAL_USE,
+  JobType'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/KeyRange.hs b/gen/Amazonka/Snowball/Types/KeyRange.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/KeyRange.hs
@@ -0,0 +1,102 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.KeyRange
+-- 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.Snowball.Types.KeyRange 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
+
+-- | Contains a key range. For export jobs, a @S3Resource@ object can have an
+-- optional @KeyRange@ value. The length of the range is defined at job
+-- creation, and has either an inclusive @BeginMarker@, an inclusive
+-- @EndMarker@, or both. Ranges are UTF-8 binary sorted.
+--
+-- /See:/ 'newKeyRange' smart constructor.
+data KeyRange = KeyRange'
+  { -- | The key that starts an optional key range for an export job. Ranges are
+    -- inclusive and UTF-8 binary sorted.
+    beginMarker :: Prelude.Maybe Prelude.Text,
+    -- | The key that ends an optional key range for an export job. Ranges are
+    -- inclusive and UTF-8 binary sorted.
+    endMarker :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'KeyRange' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'beginMarker', 'keyRange_beginMarker' - The key that starts an optional key range for an export job. Ranges are
+-- inclusive and UTF-8 binary sorted.
+--
+-- 'endMarker', 'keyRange_endMarker' - The key that ends an optional key range for an export job. Ranges are
+-- inclusive and UTF-8 binary sorted.
+newKeyRange ::
+  KeyRange
+newKeyRange =
+  KeyRange'
+    { beginMarker = Prelude.Nothing,
+      endMarker = Prelude.Nothing
+    }
+
+-- | The key that starts an optional key range for an export job. Ranges are
+-- inclusive and UTF-8 binary sorted.
+keyRange_beginMarker :: Lens.Lens' KeyRange (Prelude.Maybe Prelude.Text)
+keyRange_beginMarker = Lens.lens (\KeyRange' {beginMarker} -> beginMarker) (\s@KeyRange' {} a -> s {beginMarker = a} :: KeyRange)
+
+-- | The key that ends an optional key range for an export job. Ranges are
+-- inclusive and UTF-8 binary sorted.
+keyRange_endMarker :: Lens.Lens' KeyRange (Prelude.Maybe Prelude.Text)
+keyRange_endMarker = Lens.lens (\KeyRange' {endMarker} -> endMarker) (\s@KeyRange' {} a -> s {endMarker = a} :: KeyRange)
+
+instance Data.FromJSON KeyRange where
+  parseJSON =
+    Data.withObject
+      "KeyRange"
+      ( \x ->
+          KeyRange'
+            Prelude.<$> (x Data..:? "BeginMarker")
+            Prelude.<*> (x Data..:? "EndMarker")
+      )
+
+instance Prelude.Hashable KeyRange where
+  hashWithSalt _salt KeyRange' {..} =
+    _salt
+      `Prelude.hashWithSalt` beginMarker
+      `Prelude.hashWithSalt` endMarker
+
+instance Prelude.NFData KeyRange where
+  rnf KeyRange' {..} =
+    Prelude.rnf beginMarker
+      `Prelude.seq` Prelude.rnf endMarker
+
+instance Data.ToJSON KeyRange where
+  toJSON KeyRange' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BeginMarker" Data..=) Prelude.<$> beginMarker,
+            ("EndMarker" Data..=) Prelude.<$> endMarker
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/LambdaResource.hs b/gen/Amazonka/Snowball/Types/LambdaResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/LambdaResource.hs
@@ -0,0 +1,103 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.LambdaResource
+-- 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.Snowball.Types.LambdaResource 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.Snowball.Types.EventTriggerDefinition
+
+-- | Identifies
+--
+-- /See:/ 'newLambdaResource' smart constructor.
+data LambdaResource = LambdaResource'
+  { -- | The array of ARNs for S3Resource objects to trigger the LambdaResource
+    -- objects associated with this job.
+    eventTriggers :: Prelude.Maybe [EventTriggerDefinition],
+    -- | An Amazon Resource Name (ARN) that represents an Lambda function to be
+    -- triggered by PUT object actions on the associated local Amazon S3
+    -- resource.
+    lambdaArn :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LambdaResource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'eventTriggers', 'lambdaResource_eventTriggers' - The array of ARNs for S3Resource objects to trigger the LambdaResource
+-- objects associated with this job.
+--
+-- 'lambdaArn', 'lambdaResource_lambdaArn' - An Amazon Resource Name (ARN) that represents an Lambda function to be
+-- triggered by PUT object actions on the associated local Amazon S3
+-- resource.
+newLambdaResource ::
+  LambdaResource
+newLambdaResource =
+  LambdaResource'
+    { eventTriggers = Prelude.Nothing,
+      lambdaArn = Prelude.Nothing
+    }
+
+-- | The array of ARNs for S3Resource objects to trigger the LambdaResource
+-- objects associated with this job.
+lambdaResource_eventTriggers :: Lens.Lens' LambdaResource (Prelude.Maybe [EventTriggerDefinition])
+lambdaResource_eventTriggers = Lens.lens (\LambdaResource' {eventTriggers} -> eventTriggers) (\s@LambdaResource' {} a -> s {eventTriggers = a} :: LambdaResource) Prelude.. Lens.mapping Lens.coerced
+
+-- | An Amazon Resource Name (ARN) that represents an Lambda function to be
+-- triggered by PUT object actions on the associated local Amazon S3
+-- resource.
+lambdaResource_lambdaArn :: Lens.Lens' LambdaResource (Prelude.Maybe Prelude.Text)
+lambdaResource_lambdaArn = Lens.lens (\LambdaResource' {lambdaArn} -> lambdaArn) (\s@LambdaResource' {} a -> s {lambdaArn = a} :: LambdaResource)
+
+instance Data.FromJSON LambdaResource where
+  parseJSON =
+    Data.withObject
+      "LambdaResource"
+      ( \x ->
+          LambdaResource'
+            Prelude.<$> (x Data..:? "EventTriggers" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "LambdaArn")
+      )
+
+instance Prelude.Hashable LambdaResource where
+  hashWithSalt _salt LambdaResource' {..} =
+    _salt
+      `Prelude.hashWithSalt` eventTriggers
+      `Prelude.hashWithSalt` lambdaArn
+
+instance Prelude.NFData LambdaResource where
+  rnf LambdaResource' {..} =
+    Prelude.rnf eventTriggers
+      `Prelude.seq` Prelude.rnf lambdaArn
+
+instance Data.ToJSON LambdaResource where
+  toJSON LambdaResource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("EventTriggers" Data..=) Prelude.<$> eventTriggers,
+            ("LambdaArn" Data..=) Prelude.<$> lambdaArn
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/LongTermPricingListEntry.hs b/gen/Amazonka/Snowball/Types/LongTermPricingListEntry.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/LongTermPricingListEntry.hs
@@ -0,0 +1,196 @@
+{-# 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.Snowball.Types.LongTermPricingListEntry
+-- 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.Snowball.Types.LongTermPricingListEntry 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.Snowball.Types.LongTermPricingType
+import Amazonka.Snowball.Types.SnowballType
+
+-- | Each @LongTermPricingListEntry@ object contains information about a
+-- long-term pricing type.
+--
+-- /See:/ 'newLongTermPricingListEntry' smart constructor.
+data LongTermPricingListEntry = LongTermPricingListEntry'
+  { -- | The current active jobs on the device the long-term pricing type.
+    currentActiveJob :: Prelude.Maybe Prelude.Text,
+    -- | If set to @true@, specifies that the current long-term pricing type for
+    -- the device should be automatically renewed before the long-term pricing
+    -- contract expires.
+    isLongTermPricingAutoRenew :: Prelude.Maybe Prelude.Bool,
+    -- | The IDs of the jobs that are associated with a long-term pricing type.
+    jobIds :: Prelude.Maybe [Prelude.Text],
+    -- | The end date the long-term pricing contract.
+    longTermPricingEndDate :: Prelude.Maybe Data.POSIX,
+    -- | The ID of the long-term pricing type for the device.
+    longTermPricingId :: Prelude.Maybe Prelude.Text,
+    -- | The start date of the long-term pricing contract.
+    longTermPricingStartDate :: Prelude.Maybe Data.POSIX,
+    -- | The status of the long-term pricing type.
+    longTermPricingStatus :: Prelude.Maybe Prelude.Text,
+    -- | The type of long-term pricing that was selected for the device.
+    longTermPricingType :: Prelude.Maybe LongTermPricingType,
+    -- | A new device that replaces a device that is ordered with long-term
+    -- pricing.
+    replacementJob :: Prelude.Maybe Prelude.Text,
+    -- | The type of Snow Family devices associated with this long-term pricing
+    -- job.
+    snowballType :: Prelude.Maybe SnowballType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LongTermPricingListEntry' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'currentActiveJob', 'longTermPricingListEntry_currentActiveJob' - The current active jobs on the device the long-term pricing type.
+--
+-- 'isLongTermPricingAutoRenew', 'longTermPricingListEntry_isLongTermPricingAutoRenew' - If set to @true@, specifies that the current long-term pricing type for
+-- the device should be automatically renewed before the long-term pricing
+-- contract expires.
+--
+-- 'jobIds', 'longTermPricingListEntry_jobIds' - The IDs of the jobs that are associated with a long-term pricing type.
+--
+-- 'longTermPricingEndDate', 'longTermPricingListEntry_longTermPricingEndDate' - The end date the long-term pricing contract.
+--
+-- 'longTermPricingId', 'longTermPricingListEntry_longTermPricingId' - The ID of the long-term pricing type for the device.
+--
+-- 'longTermPricingStartDate', 'longTermPricingListEntry_longTermPricingStartDate' - The start date of the long-term pricing contract.
+--
+-- 'longTermPricingStatus', 'longTermPricingListEntry_longTermPricingStatus' - The status of the long-term pricing type.
+--
+-- 'longTermPricingType', 'longTermPricingListEntry_longTermPricingType' - The type of long-term pricing that was selected for the device.
+--
+-- 'replacementJob', 'longTermPricingListEntry_replacementJob' - A new device that replaces a device that is ordered with long-term
+-- pricing.
+--
+-- 'snowballType', 'longTermPricingListEntry_snowballType' - The type of Snow Family devices associated with this long-term pricing
+-- job.
+newLongTermPricingListEntry ::
+  LongTermPricingListEntry
+newLongTermPricingListEntry =
+  LongTermPricingListEntry'
+    { currentActiveJob =
+        Prelude.Nothing,
+      isLongTermPricingAutoRenew = Prelude.Nothing,
+      jobIds = Prelude.Nothing,
+      longTermPricingEndDate = Prelude.Nothing,
+      longTermPricingId = Prelude.Nothing,
+      longTermPricingStartDate = Prelude.Nothing,
+      longTermPricingStatus = Prelude.Nothing,
+      longTermPricingType = Prelude.Nothing,
+      replacementJob = Prelude.Nothing,
+      snowballType = Prelude.Nothing
+    }
+
+-- | The current active jobs on the device the long-term pricing type.
+longTermPricingListEntry_currentActiveJob :: Lens.Lens' LongTermPricingListEntry (Prelude.Maybe Prelude.Text)
+longTermPricingListEntry_currentActiveJob = Lens.lens (\LongTermPricingListEntry' {currentActiveJob} -> currentActiveJob) (\s@LongTermPricingListEntry' {} a -> s {currentActiveJob = a} :: LongTermPricingListEntry)
+
+-- | If set to @true@, specifies that the current long-term pricing type for
+-- the device should be automatically renewed before the long-term pricing
+-- contract expires.
+longTermPricingListEntry_isLongTermPricingAutoRenew :: Lens.Lens' LongTermPricingListEntry (Prelude.Maybe Prelude.Bool)
+longTermPricingListEntry_isLongTermPricingAutoRenew = Lens.lens (\LongTermPricingListEntry' {isLongTermPricingAutoRenew} -> isLongTermPricingAutoRenew) (\s@LongTermPricingListEntry' {} a -> s {isLongTermPricingAutoRenew = a} :: LongTermPricingListEntry)
+
+-- | The IDs of the jobs that are associated with a long-term pricing type.
+longTermPricingListEntry_jobIds :: Lens.Lens' LongTermPricingListEntry (Prelude.Maybe [Prelude.Text])
+longTermPricingListEntry_jobIds = Lens.lens (\LongTermPricingListEntry' {jobIds} -> jobIds) (\s@LongTermPricingListEntry' {} a -> s {jobIds = a} :: LongTermPricingListEntry) Prelude.. Lens.mapping Lens.coerced
+
+-- | The end date the long-term pricing contract.
+longTermPricingListEntry_longTermPricingEndDate :: Lens.Lens' LongTermPricingListEntry (Prelude.Maybe Prelude.UTCTime)
+longTermPricingListEntry_longTermPricingEndDate = Lens.lens (\LongTermPricingListEntry' {longTermPricingEndDate} -> longTermPricingEndDate) (\s@LongTermPricingListEntry' {} a -> s {longTermPricingEndDate = a} :: LongTermPricingListEntry) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the long-term pricing type for the device.
+longTermPricingListEntry_longTermPricingId :: Lens.Lens' LongTermPricingListEntry (Prelude.Maybe Prelude.Text)
+longTermPricingListEntry_longTermPricingId = Lens.lens (\LongTermPricingListEntry' {longTermPricingId} -> longTermPricingId) (\s@LongTermPricingListEntry' {} a -> s {longTermPricingId = a} :: LongTermPricingListEntry)
+
+-- | The start date of the long-term pricing contract.
+longTermPricingListEntry_longTermPricingStartDate :: Lens.Lens' LongTermPricingListEntry (Prelude.Maybe Prelude.UTCTime)
+longTermPricingListEntry_longTermPricingStartDate = Lens.lens (\LongTermPricingListEntry' {longTermPricingStartDate} -> longTermPricingStartDate) (\s@LongTermPricingListEntry' {} a -> s {longTermPricingStartDate = a} :: LongTermPricingListEntry) Prelude.. Lens.mapping Data._Time
+
+-- | The status of the long-term pricing type.
+longTermPricingListEntry_longTermPricingStatus :: Lens.Lens' LongTermPricingListEntry (Prelude.Maybe Prelude.Text)
+longTermPricingListEntry_longTermPricingStatus = Lens.lens (\LongTermPricingListEntry' {longTermPricingStatus} -> longTermPricingStatus) (\s@LongTermPricingListEntry' {} a -> s {longTermPricingStatus = a} :: LongTermPricingListEntry)
+
+-- | The type of long-term pricing that was selected for the device.
+longTermPricingListEntry_longTermPricingType :: Lens.Lens' LongTermPricingListEntry (Prelude.Maybe LongTermPricingType)
+longTermPricingListEntry_longTermPricingType = Lens.lens (\LongTermPricingListEntry' {longTermPricingType} -> longTermPricingType) (\s@LongTermPricingListEntry' {} a -> s {longTermPricingType = a} :: LongTermPricingListEntry)
+
+-- | A new device that replaces a device that is ordered with long-term
+-- pricing.
+longTermPricingListEntry_replacementJob :: Lens.Lens' LongTermPricingListEntry (Prelude.Maybe Prelude.Text)
+longTermPricingListEntry_replacementJob = Lens.lens (\LongTermPricingListEntry' {replacementJob} -> replacementJob) (\s@LongTermPricingListEntry' {} a -> s {replacementJob = a} :: LongTermPricingListEntry)
+
+-- | The type of Snow Family devices associated with this long-term pricing
+-- job.
+longTermPricingListEntry_snowballType :: Lens.Lens' LongTermPricingListEntry (Prelude.Maybe SnowballType)
+longTermPricingListEntry_snowballType = Lens.lens (\LongTermPricingListEntry' {snowballType} -> snowballType) (\s@LongTermPricingListEntry' {} a -> s {snowballType = a} :: LongTermPricingListEntry)
+
+instance Data.FromJSON LongTermPricingListEntry where
+  parseJSON =
+    Data.withObject
+      "LongTermPricingListEntry"
+      ( \x ->
+          LongTermPricingListEntry'
+            Prelude.<$> (x Data..:? "CurrentActiveJob")
+            Prelude.<*> (x Data..:? "IsLongTermPricingAutoRenew")
+            Prelude.<*> (x Data..:? "JobIds" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "LongTermPricingEndDate")
+            Prelude.<*> (x Data..:? "LongTermPricingId")
+            Prelude.<*> (x Data..:? "LongTermPricingStartDate")
+            Prelude.<*> (x Data..:? "LongTermPricingStatus")
+            Prelude.<*> (x Data..:? "LongTermPricingType")
+            Prelude.<*> (x Data..:? "ReplacementJob")
+            Prelude.<*> (x Data..:? "SnowballType")
+      )
+
+instance Prelude.Hashable LongTermPricingListEntry where
+  hashWithSalt _salt LongTermPricingListEntry' {..} =
+    _salt
+      `Prelude.hashWithSalt` currentActiveJob
+      `Prelude.hashWithSalt` isLongTermPricingAutoRenew
+      `Prelude.hashWithSalt` jobIds
+      `Prelude.hashWithSalt` longTermPricingEndDate
+      `Prelude.hashWithSalt` longTermPricingId
+      `Prelude.hashWithSalt` longTermPricingStartDate
+      `Prelude.hashWithSalt` longTermPricingStatus
+      `Prelude.hashWithSalt` longTermPricingType
+      `Prelude.hashWithSalt` replacementJob
+      `Prelude.hashWithSalt` snowballType
+
+instance Prelude.NFData LongTermPricingListEntry where
+  rnf LongTermPricingListEntry' {..} =
+    Prelude.rnf currentActiveJob
+      `Prelude.seq` Prelude.rnf isLongTermPricingAutoRenew
+      `Prelude.seq` Prelude.rnf jobIds
+      `Prelude.seq` Prelude.rnf longTermPricingEndDate
+      `Prelude.seq` Prelude.rnf longTermPricingId
+      `Prelude.seq` Prelude.rnf longTermPricingStartDate
+      `Prelude.seq` Prelude.rnf longTermPricingStatus
+      `Prelude.seq` Prelude.rnf longTermPricingType
+      `Prelude.seq` Prelude.rnf replacementJob
+      `Prelude.seq` Prelude.rnf snowballType
diff --git a/gen/Amazonka/Snowball/Types/LongTermPricingType.hs b/gen/Amazonka/Snowball/Types/LongTermPricingType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/LongTermPricingType.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.LongTermPricingType
+-- 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.Snowball.Types.LongTermPricingType
+  ( LongTermPricingType
+      ( ..,
+        LongTermPricingType_OneYear,
+        LongTermPricingType_ThreeYear
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LongTermPricingType = LongTermPricingType'
+  { fromLongTermPricingType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern LongTermPricingType_OneYear :: LongTermPricingType
+pattern LongTermPricingType_OneYear = LongTermPricingType' "OneYear"
+
+pattern LongTermPricingType_ThreeYear :: LongTermPricingType
+pattern LongTermPricingType_ThreeYear = LongTermPricingType' "ThreeYear"
+
+{-# COMPLETE
+  LongTermPricingType_OneYear,
+  LongTermPricingType_ThreeYear,
+  LongTermPricingType'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/NFSOnDeviceServiceConfiguration.hs b/gen/Amazonka/Snowball/Types/NFSOnDeviceServiceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/NFSOnDeviceServiceConfiguration.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.NFSOnDeviceServiceConfiguration
+-- 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.Snowball.Types.NFSOnDeviceServiceConfiguration 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.Snowball.Types.StorageUnit
+
+-- | An object that represents the metadata and configuration settings for
+-- the NFS (Network File System) service on an Amazon Web Services Snow
+-- Family device.
+--
+-- /See:/ 'newNFSOnDeviceServiceConfiguration' smart constructor.
+data NFSOnDeviceServiceConfiguration = NFSOnDeviceServiceConfiguration'
+  { -- | The maximum NFS storage for one Snow Family device.
+    storageLimit :: Prelude.Maybe Prelude.Natural,
+    -- | The scale unit of the NFS storage on the device.
+    --
+    -- Valid values: TB.
+    storageUnit :: Prelude.Maybe StorageUnit
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NFSOnDeviceServiceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'storageLimit', 'nFSOnDeviceServiceConfiguration_storageLimit' - The maximum NFS storage for one Snow Family device.
+--
+-- 'storageUnit', 'nFSOnDeviceServiceConfiguration_storageUnit' - The scale unit of the NFS storage on the device.
+--
+-- Valid values: TB.
+newNFSOnDeviceServiceConfiguration ::
+  NFSOnDeviceServiceConfiguration
+newNFSOnDeviceServiceConfiguration =
+  NFSOnDeviceServiceConfiguration'
+    { storageLimit =
+        Prelude.Nothing,
+      storageUnit = Prelude.Nothing
+    }
+
+-- | The maximum NFS storage for one Snow Family device.
+nFSOnDeviceServiceConfiguration_storageLimit :: Lens.Lens' NFSOnDeviceServiceConfiguration (Prelude.Maybe Prelude.Natural)
+nFSOnDeviceServiceConfiguration_storageLimit = Lens.lens (\NFSOnDeviceServiceConfiguration' {storageLimit} -> storageLimit) (\s@NFSOnDeviceServiceConfiguration' {} a -> s {storageLimit = a} :: NFSOnDeviceServiceConfiguration)
+
+-- | The scale unit of the NFS storage on the device.
+--
+-- Valid values: TB.
+nFSOnDeviceServiceConfiguration_storageUnit :: Lens.Lens' NFSOnDeviceServiceConfiguration (Prelude.Maybe StorageUnit)
+nFSOnDeviceServiceConfiguration_storageUnit = Lens.lens (\NFSOnDeviceServiceConfiguration' {storageUnit} -> storageUnit) (\s@NFSOnDeviceServiceConfiguration' {} a -> s {storageUnit = a} :: NFSOnDeviceServiceConfiguration)
+
+instance
+  Data.FromJSON
+    NFSOnDeviceServiceConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "NFSOnDeviceServiceConfiguration"
+      ( \x ->
+          NFSOnDeviceServiceConfiguration'
+            Prelude.<$> (x Data..:? "StorageLimit")
+            Prelude.<*> (x Data..:? "StorageUnit")
+      )
+
+instance
+  Prelude.Hashable
+    NFSOnDeviceServiceConfiguration
+  where
+  hashWithSalt
+    _salt
+    NFSOnDeviceServiceConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` storageLimit
+        `Prelude.hashWithSalt` storageUnit
+
+instance
+  Prelude.NFData
+    NFSOnDeviceServiceConfiguration
+  where
+  rnf NFSOnDeviceServiceConfiguration' {..} =
+    Prelude.rnf storageLimit
+      `Prelude.seq` Prelude.rnf storageUnit
+
+instance Data.ToJSON NFSOnDeviceServiceConfiguration where
+  toJSON NFSOnDeviceServiceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("StorageLimit" Data..=) Prelude.<$> storageLimit,
+            ("StorageUnit" Data..=) Prelude.<$> storageUnit
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/Notification.hs b/gen/Amazonka/Snowball/Types/Notification.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/Notification.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.Notification
+-- 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.Snowball.Types.Notification 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.Snowball.Types.JobState
+
+-- | The Amazon Simple Notification Service (Amazon SNS) notification
+-- settings associated with a specific job. The @Notification@ object is
+-- returned as a part of the response syntax of the @DescribeJob@ action in
+-- the @JobMetadata@ data type.
+--
+-- When the notification settings are defined during job creation, you can
+-- choose to notify based on a specific set of job states using the
+-- @JobStatesToNotify@ array of strings, or you can specify that you want
+-- to have Amazon SNS notifications sent out for all job states with
+-- @NotifyAll@ set to true.
+--
+-- /See:/ 'newNotification' smart constructor.
+data Notification = Notification'
+  { -- | The list of job states that will trigger a notification for this job.
+    jobStatesToNotify :: Prelude.Maybe [JobState],
+    -- | Any change in job state will trigger a notification for this job.
+    notifyAll :: Prelude.Maybe Prelude.Bool,
+    -- | The new SNS @TopicArn@ that you want to associate with this job. You can
+    -- create Amazon Resource Names (ARNs) for topics by using the
+    -- <https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html CreateTopic>
+    -- Amazon SNS API action.
+    --
+    -- You can subscribe email addresses to an Amazon SNS topic through the
+    -- Amazon Web Services Management Console, or by using the
+    -- <https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html Subscribe>
+    -- Amazon Simple Notification Service (Amazon SNS) API action.
+    snsTopicARN :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Notification' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobStatesToNotify', 'notification_jobStatesToNotify' - The list of job states that will trigger a notification for this job.
+--
+-- 'notifyAll', 'notification_notifyAll' - Any change in job state will trigger a notification for this job.
+--
+-- 'snsTopicARN', 'notification_snsTopicARN' - The new SNS @TopicArn@ that you want to associate with this job. You can
+-- create Amazon Resource Names (ARNs) for topics by using the
+-- <https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html CreateTopic>
+-- Amazon SNS API action.
+--
+-- You can subscribe email addresses to an Amazon SNS topic through the
+-- Amazon Web Services Management Console, or by using the
+-- <https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html Subscribe>
+-- Amazon Simple Notification Service (Amazon SNS) API action.
+newNotification ::
+  Notification
+newNotification =
+  Notification'
+    { jobStatesToNotify = Prelude.Nothing,
+      notifyAll = Prelude.Nothing,
+      snsTopicARN = Prelude.Nothing
+    }
+
+-- | The list of job states that will trigger a notification for this job.
+notification_jobStatesToNotify :: Lens.Lens' Notification (Prelude.Maybe [JobState])
+notification_jobStatesToNotify = Lens.lens (\Notification' {jobStatesToNotify} -> jobStatesToNotify) (\s@Notification' {} a -> s {jobStatesToNotify = a} :: Notification) Prelude.. Lens.mapping Lens.coerced
+
+-- | Any change in job state will trigger a notification for this job.
+notification_notifyAll :: Lens.Lens' Notification (Prelude.Maybe Prelude.Bool)
+notification_notifyAll = Lens.lens (\Notification' {notifyAll} -> notifyAll) (\s@Notification' {} a -> s {notifyAll = a} :: Notification)
+
+-- | The new SNS @TopicArn@ that you want to associate with this job. You can
+-- create Amazon Resource Names (ARNs) for topics by using the
+-- <https://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html CreateTopic>
+-- Amazon SNS API action.
+--
+-- You can subscribe email addresses to an Amazon SNS topic through the
+-- Amazon Web Services Management Console, or by using the
+-- <https://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html Subscribe>
+-- Amazon Simple Notification Service (Amazon SNS) API action.
+notification_snsTopicARN :: Lens.Lens' Notification (Prelude.Maybe Prelude.Text)
+notification_snsTopicARN = Lens.lens (\Notification' {snsTopicARN} -> snsTopicARN) (\s@Notification' {} a -> s {snsTopicARN = a} :: Notification)
+
+instance Data.FromJSON Notification where
+  parseJSON =
+    Data.withObject
+      "Notification"
+      ( \x ->
+          Notification'
+            Prelude.<$> ( x
+                            Data..:? "JobStatesToNotify"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "NotifyAll")
+            Prelude.<*> (x Data..:? "SnsTopicARN")
+      )
+
+instance Prelude.Hashable Notification where
+  hashWithSalt _salt Notification' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobStatesToNotify
+      `Prelude.hashWithSalt` notifyAll
+      `Prelude.hashWithSalt` snsTopicARN
+
+instance Prelude.NFData Notification where
+  rnf Notification' {..} =
+    Prelude.rnf jobStatesToNotify
+      `Prelude.seq` Prelude.rnf notifyAll
+      `Prelude.seq` Prelude.rnf snsTopicARN
+
+instance Data.ToJSON Notification where
+  toJSON Notification' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("JobStatesToNotify" Data..=)
+              Prelude.<$> jobStatesToNotify,
+            ("NotifyAll" Data..=) Prelude.<$> notifyAll,
+            ("SnsTopicARN" Data..=) Prelude.<$> snsTopicARN
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/OnDeviceServiceConfiguration.hs b/gen/Amazonka/Snowball/Types/OnDeviceServiceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/OnDeviceServiceConfiguration.hs
@@ -0,0 +1,108 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.OnDeviceServiceConfiguration
+-- 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.Snowball.Types.OnDeviceServiceConfiguration 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.Snowball.Types.NFSOnDeviceServiceConfiguration
+import Amazonka.Snowball.Types.TGWOnDeviceServiceConfiguration
+
+-- | An object that represents the metadata and configuration settings for
+-- services on an Amazon Web Services Snow Family device.
+--
+-- /See:/ 'newOnDeviceServiceConfiguration' smart constructor.
+data OnDeviceServiceConfiguration = OnDeviceServiceConfiguration'
+  { -- | Represents the NFS (Network File System) service on a Snow Family
+    -- device.
+    nFSOnDeviceService :: Prelude.Maybe NFSOnDeviceServiceConfiguration,
+    -- | Represents the Storage Gateway service Tape Gateway type on a Snow
+    -- Family device.
+    tGWOnDeviceService :: Prelude.Maybe TGWOnDeviceServiceConfiguration
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'OnDeviceServiceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nFSOnDeviceService', 'onDeviceServiceConfiguration_nFSOnDeviceService' - Represents the NFS (Network File System) service on a Snow Family
+-- device.
+--
+-- 'tGWOnDeviceService', 'onDeviceServiceConfiguration_tGWOnDeviceService' - Represents the Storage Gateway service Tape Gateway type on a Snow
+-- Family device.
+newOnDeviceServiceConfiguration ::
+  OnDeviceServiceConfiguration
+newOnDeviceServiceConfiguration =
+  OnDeviceServiceConfiguration'
+    { nFSOnDeviceService =
+        Prelude.Nothing,
+      tGWOnDeviceService = Prelude.Nothing
+    }
+
+-- | Represents the NFS (Network File System) service on a Snow Family
+-- device.
+onDeviceServiceConfiguration_nFSOnDeviceService :: Lens.Lens' OnDeviceServiceConfiguration (Prelude.Maybe NFSOnDeviceServiceConfiguration)
+onDeviceServiceConfiguration_nFSOnDeviceService = Lens.lens (\OnDeviceServiceConfiguration' {nFSOnDeviceService} -> nFSOnDeviceService) (\s@OnDeviceServiceConfiguration' {} a -> s {nFSOnDeviceService = a} :: OnDeviceServiceConfiguration)
+
+-- | Represents the Storage Gateway service Tape Gateway type on a Snow
+-- Family device.
+onDeviceServiceConfiguration_tGWOnDeviceService :: Lens.Lens' OnDeviceServiceConfiguration (Prelude.Maybe TGWOnDeviceServiceConfiguration)
+onDeviceServiceConfiguration_tGWOnDeviceService = Lens.lens (\OnDeviceServiceConfiguration' {tGWOnDeviceService} -> tGWOnDeviceService) (\s@OnDeviceServiceConfiguration' {} a -> s {tGWOnDeviceService = a} :: OnDeviceServiceConfiguration)
+
+instance Data.FromJSON OnDeviceServiceConfiguration where
+  parseJSON =
+    Data.withObject
+      "OnDeviceServiceConfiguration"
+      ( \x ->
+          OnDeviceServiceConfiguration'
+            Prelude.<$> (x Data..:? "NFSOnDeviceService")
+            Prelude.<*> (x Data..:? "TGWOnDeviceService")
+      )
+
+instance
+  Prelude.Hashable
+    OnDeviceServiceConfiguration
+  where
+  hashWithSalt _salt OnDeviceServiceConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` nFSOnDeviceService
+      `Prelude.hashWithSalt` tGWOnDeviceService
+
+instance Prelude.NFData OnDeviceServiceConfiguration where
+  rnf OnDeviceServiceConfiguration' {..} =
+    Prelude.rnf nFSOnDeviceService
+      `Prelude.seq` Prelude.rnf tGWOnDeviceService
+
+instance Data.ToJSON OnDeviceServiceConfiguration where
+  toJSON OnDeviceServiceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("NFSOnDeviceService" Data..=)
+              Prelude.<$> nFSOnDeviceService,
+            ("TGWOnDeviceService" Data..=)
+              Prelude.<$> tGWOnDeviceService
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/RemoteManagement.hs b/gen/Amazonka/Snowball/Types/RemoteManagement.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/RemoteManagement.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.RemoteManagement
+-- 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.Snowball.Types.RemoteManagement
+  ( RemoteManagement
+      ( ..,
+        RemoteManagement_INSTALLED_AUTOSTART,
+        RemoteManagement_INSTALLED_ONLY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype RemoteManagement = RemoteManagement'
+  { fromRemoteManagement ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern RemoteManagement_INSTALLED_AUTOSTART :: RemoteManagement
+pattern RemoteManagement_INSTALLED_AUTOSTART = RemoteManagement' "INSTALLED_AUTOSTART"
+
+pattern RemoteManagement_INSTALLED_ONLY :: RemoteManagement
+pattern RemoteManagement_INSTALLED_ONLY = RemoteManagement' "INSTALLED_ONLY"
+
+{-# COMPLETE
+  RemoteManagement_INSTALLED_AUTOSTART,
+  RemoteManagement_INSTALLED_ONLY,
+  RemoteManagement'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/S3Resource.hs b/gen/Amazonka/Snowball/Types/S3Resource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/S3Resource.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.S3Resource
+-- 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.Snowball.Types.S3Resource 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.Snowball.Types.KeyRange
+import Amazonka.Snowball.Types.TargetOnDeviceService
+
+-- | Each @S3Resource@ object represents an Amazon S3 bucket that your
+-- transferred data will be exported from or imported into. For export
+-- jobs, this object can have an optional @KeyRange@ value. The length of
+-- the range is defined at job creation, and has either an inclusive
+-- @BeginMarker@, an inclusive @EndMarker@, or both. Ranges are UTF-8
+-- binary sorted.
+--
+-- /See:/ 'newS3Resource' smart constructor.
+data S3Resource = S3Resource'
+  { -- | The Amazon Resource Name (ARN) of an Amazon S3 bucket.
+    bucketArn :: Prelude.Maybe Prelude.Text,
+    -- | For export jobs, you can provide an optional @KeyRange@ within a
+    -- specific Amazon S3 bucket. The length of the range is defined at job
+    -- creation, and has either an inclusive @BeginMarker@, an inclusive
+    -- @EndMarker@, or both. Ranges are UTF-8 binary sorted.
+    keyRange :: Prelude.Maybe KeyRange,
+    -- | Specifies the service or services on the Snow Family device that your
+    -- transferred data will be exported from or imported into. Amazon Web
+    -- Services Snow Family supports Amazon S3 and NFS (Network File System).
+    targetOnDeviceServices :: Prelude.Maybe [TargetOnDeviceService]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Resource' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucketArn', 's3Resource_bucketArn' - The Amazon Resource Name (ARN) of an Amazon S3 bucket.
+--
+-- 'keyRange', 's3Resource_keyRange' - For export jobs, you can provide an optional @KeyRange@ within a
+-- specific Amazon S3 bucket. The length of the range is defined at job
+-- creation, and has either an inclusive @BeginMarker@, an inclusive
+-- @EndMarker@, or both. Ranges are UTF-8 binary sorted.
+--
+-- 'targetOnDeviceServices', 's3Resource_targetOnDeviceServices' - Specifies the service or services on the Snow Family device that your
+-- transferred data will be exported from or imported into. Amazon Web
+-- Services Snow Family supports Amazon S3 and NFS (Network File System).
+newS3Resource ::
+  S3Resource
+newS3Resource =
+  S3Resource'
+    { bucketArn = Prelude.Nothing,
+      keyRange = Prelude.Nothing,
+      targetOnDeviceServices = Prelude.Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of an Amazon S3 bucket.
+s3Resource_bucketArn :: Lens.Lens' S3Resource (Prelude.Maybe Prelude.Text)
+s3Resource_bucketArn = Lens.lens (\S3Resource' {bucketArn} -> bucketArn) (\s@S3Resource' {} a -> s {bucketArn = a} :: S3Resource)
+
+-- | For export jobs, you can provide an optional @KeyRange@ within a
+-- specific Amazon S3 bucket. The length of the range is defined at job
+-- creation, and has either an inclusive @BeginMarker@, an inclusive
+-- @EndMarker@, or both. Ranges are UTF-8 binary sorted.
+s3Resource_keyRange :: Lens.Lens' S3Resource (Prelude.Maybe KeyRange)
+s3Resource_keyRange = Lens.lens (\S3Resource' {keyRange} -> keyRange) (\s@S3Resource' {} a -> s {keyRange = a} :: S3Resource)
+
+-- | Specifies the service or services on the Snow Family device that your
+-- transferred data will be exported from or imported into. Amazon Web
+-- Services Snow Family supports Amazon S3 and NFS (Network File System).
+s3Resource_targetOnDeviceServices :: Lens.Lens' S3Resource (Prelude.Maybe [TargetOnDeviceService])
+s3Resource_targetOnDeviceServices = Lens.lens (\S3Resource' {targetOnDeviceServices} -> targetOnDeviceServices) (\s@S3Resource' {} a -> s {targetOnDeviceServices = a} :: S3Resource) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON S3Resource where
+  parseJSON =
+    Data.withObject
+      "S3Resource"
+      ( \x ->
+          S3Resource'
+            Prelude.<$> (x Data..:? "BucketArn")
+            Prelude.<*> (x Data..:? "KeyRange")
+            Prelude.<*> ( x
+                            Data..:? "TargetOnDeviceServices"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance Prelude.Hashable S3Resource where
+  hashWithSalt _salt S3Resource' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucketArn
+      `Prelude.hashWithSalt` keyRange
+      `Prelude.hashWithSalt` targetOnDeviceServices
+
+instance Prelude.NFData S3Resource where
+  rnf S3Resource' {..} =
+    Prelude.rnf bucketArn
+      `Prelude.seq` Prelude.rnf keyRange
+      `Prelude.seq` Prelude.rnf targetOnDeviceServices
+
+instance Data.ToJSON S3Resource where
+  toJSON S3Resource' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("BucketArn" Data..=) Prelude.<$> bucketArn,
+            ("KeyRange" Data..=) Prelude.<$> keyRange,
+            ("TargetOnDeviceServices" Data..=)
+              Prelude.<$> targetOnDeviceServices
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/Shipment.hs b/gen/Amazonka/Snowball/Types/Shipment.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/Shipment.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.Snowball.Types.Shipment
+-- 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.Snowball.Types.Shipment where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | The @Status@ and @TrackingNumber@ information for an inbound or outbound
+-- shipment.
+--
+-- /See:/ 'newShipment' smart constructor.
+data Shipment = Shipment'
+  { -- | Status information for a shipment.
+    status :: Prelude.Maybe Prelude.Text,
+    -- | The tracking number for this job. Using this tracking number with your
+    -- region\'s carrier\'s website, you can track a Snow device as the carrier
+    -- transports it.
+    --
+    -- For India, the carrier is Amazon Logistics. For all other regions, UPS
+    -- is the carrier.
+    trackingNumber :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Shipment' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'status', 'shipment_status' - Status information for a shipment.
+--
+-- 'trackingNumber', 'shipment_trackingNumber' - The tracking number for this job. Using this tracking number with your
+-- region\'s carrier\'s website, you can track a Snow device as the carrier
+-- transports it.
+--
+-- For India, the carrier is Amazon Logistics. For all other regions, UPS
+-- is the carrier.
+newShipment ::
+  Shipment
+newShipment =
+  Shipment'
+    { status = Prelude.Nothing,
+      trackingNumber = Prelude.Nothing
+    }
+
+-- | Status information for a shipment.
+shipment_status :: Lens.Lens' Shipment (Prelude.Maybe Prelude.Text)
+shipment_status = Lens.lens (\Shipment' {status} -> status) (\s@Shipment' {} a -> s {status = a} :: Shipment)
+
+-- | The tracking number for this job. Using this tracking number with your
+-- region\'s carrier\'s website, you can track a Snow device as the carrier
+-- transports it.
+--
+-- For India, the carrier is Amazon Logistics. For all other regions, UPS
+-- is the carrier.
+shipment_trackingNumber :: Lens.Lens' Shipment (Prelude.Maybe Prelude.Text)
+shipment_trackingNumber = Lens.lens (\Shipment' {trackingNumber} -> trackingNumber) (\s@Shipment' {} a -> s {trackingNumber = a} :: Shipment)
+
+instance Data.FromJSON Shipment where
+  parseJSON =
+    Data.withObject
+      "Shipment"
+      ( \x ->
+          Shipment'
+            Prelude.<$> (x Data..:? "Status")
+            Prelude.<*> (x Data..:? "TrackingNumber")
+      )
+
+instance Prelude.Hashable Shipment where
+  hashWithSalt _salt Shipment' {..} =
+    _salt
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` trackingNumber
+
+instance Prelude.NFData Shipment where
+  rnf Shipment' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf trackingNumber
diff --git a/gen/Amazonka/Snowball/Types/ShipmentState.hs b/gen/Amazonka/Snowball/Types/ShipmentState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/ShipmentState.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.ShipmentState
+-- 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.Snowball.Types.ShipmentState
+  ( ShipmentState
+      ( ..,
+        ShipmentState_RECEIVED,
+        ShipmentState_RETURNED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ShipmentState = ShipmentState'
+  { fromShipmentState ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ShipmentState_RECEIVED :: ShipmentState
+pattern ShipmentState_RECEIVED = ShipmentState' "RECEIVED"
+
+pattern ShipmentState_RETURNED :: ShipmentState
+pattern ShipmentState_RETURNED = ShipmentState' "RETURNED"
+
+{-# COMPLETE
+  ShipmentState_RECEIVED,
+  ShipmentState_RETURNED,
+  ShipmentState'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/ShippingDetails.hs b/gen/Amazonka/Snowball/Types/ShippingDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/ShippingDetails.hs
@@ -0,0 +1,153 @@
+{-# 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.Snowball.Types.ShippingDetails
+-- 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.Snowball.Types.ShippingDetails 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.Snowball.Types.Shipment
+import Amazonka.Snowball.Types.ShippingOption
+
+-- | A job\'s shipping information, including inbound and outbound tracking
+-- numbers and shipping speed options.
+--
+-- /See:/ 'newShippingDetails' smart constructor.
+data ShippingDetails = ShippingDetails'
+  { -- | The @Status@ and @TrackingNumber@ values for a Snow device being
+    -- returned to Amazon Web Services for a particular job.
+    inboundShipment :: Prelude.Maybe Shipment,
+    -- | The @Status@ and @TrackingNumber@ values for a Snow device being
+    -- delivered to the address that you specified for a particular job.
+    outboundShipment :: Prelude.Maybe Shipment,
+    -- | The shipping speed for a particular job. This speed doesn\'t dictate how
+    -- soon you\'ll get the Snow device from the job\'s creation date. This
+    -- speed represents how quickly it moves to its destination while in
+    -- transit. Regional shipping speeds are as follows:
+    --
+    -- -   In Australia, you have access to express shipping. Typically, Snow
+    --     devices shipped express are delivered in about a day.
+    --
+    -- -   In the European Union (EU), you have access to express shipping.
+    --     Typically, Snow devices shipped express are delivered in about a
+    --     day. In addition, most countries in the EU have access to standard
+    --     shipping, which typically takes less than a week, one way.
+    --
+    -- -   In India, Snow devices are delivered in one to seven days.
+    --
+    -- -   In the United States of America (US), you have access to one-day
+    --     shipping and two-day shipping.
+    shippingOption :: Prelude.Maybe ShippingOption
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ShippingDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'inboundShipment', 'shippingDetails_inboundShipment' - The @Status@ and @TrackingNumber@ values for a Snow device being
+-- returned to Amazon Web Services for a particular job.
+--
+-- 'outboundShipment', 'shippingDetails_outboundShipment' - The @Status@ and @TrackingNumber@ values for a Snow device being
+-- delivered to the address that you specified for a particular job.
+--
+-- 'shippingOption', 'shippingDetails_shippingOption' - The shipping speed for a particular job. This speed doesn\'t dictate how
+-- soon you\'ll get the Snow device from the job\'s creation date. This
+-- speed represents how quickly it moves to its destination while in
+-- transit. Regional shipping speeds are as follows:
+--
+-- -   In Australia, you have access to express shipping. Typically, Snow
+--     devices shipped express are delivered in about a day.
+--
+-- -   In the European Union (EU), you have access to express shipping.
+--     Typically, Snow devices shipped express are delivered in about a
+--     day. In addition, most countries in the EU have access to standard
+--     shipping, which typically takes less than a week, one way.
+--
+-- -   In India, Snow devices are delivered in one to seven days.
+--
+-- -   In the United States of America (US), you have access to one-day
+--     shipping and two-day shipping.
+newShippingDetails ::
+  ShippingDetails
+newShippingDetails =
+  ShippingDetails'
+    { inboundShipment = Prelude.Nothing,
+      outboundShipment = Prelude.Nothing,
+      shippingOption = Prelude.Nothing
+    }
+
+-- | The @Status@ and @TrackingNumber@ values for a Snow device being
+-- returned to Amazon Web Services for a particular job.
+shippingDetails_inboundShipment :: Lens.Lens' ShippingDetails (Prelude.Maybe Shipment)
+shippingDetails_inboundShipment = Lens.lens (\ShippingDetails' {inboundShipment} -> inboundShipment) (\s@ShippingDetails' {} a -> s {inboundShipment = a} :: ShippingDetails)
+
+-- | The @Status@ and @TrackingNumber@ values for a Snow device being
+-- delivered to the address that you specified for a particular job.
+shippingDetails_outboundShipment :: Lens.Lens' ShippingDetails (Prelude.Maybe Shipment)
+shippingDetails_outboundShipment = Lens.lens (\ShippingDetails' {outboundShipment} -> outboundShipment) (\s@ShippingDetails' {} a -> s {outboundShipment = a} :: ShippingDetails)
+
+-- | The shipping speed for a particular job. This speed doesn\'t dictate how
+-- soon you\'ll get the Snow device from the job\'s creation date. This
+-- speed represents how quickly it moves to its destination while in
+-- transit. Regional shipping speeds are as follows:
+--
+-- -   In Australia, you have access to express shipping. Typically, Snow
+--     devices shipped express are delivered in about a day.
+--
+-- -   In the European Union (EU), you have access to express shipping.
+--     Typically, Snow devices shipped express are delivered in about a
+--     day. In addition, most countries in the EU have access to standard
+--     shipping, which typically takes less than a week, one way.
+--
+-- -   In India, Snow devices are delivered in one to seven days.
+--
+-- -   In the United States of America (US), you have access to one-day
+--     shipping and two-day shipping.
+shippingDetails_shippingOption :: Lens.Lens' ShippingDetails (Prelude.Maybe ShippingOption)
+shippingDetails_shippingOption = Lens.lens (\ShippingDetails' {shippingOption} -> shippingOption) (\s@ShippingDetails' {} a -> s {shippingOption = a} :: ShippingDetails)
+
+instance Data.FromJSON ShippingDetails where
+  parseJSON =
+    Data.withObject
+      "ShippingDetails"
+      ( \x ->
+          ShippingDetails'
+            Prelude.<$> (x Data..:? "InboundShipment")
+            Prelude.<*> (x Data..:? "OutboundShipment")
+            Prelude.<*> (x Data..:? "ShippingOption")
+      )
+
+instance Prelude.Hashable ShippingDetails where
+  hashWithSalt _salt ShippingDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` inboundShipment
+      `Prelude.hashWithSalt` outboundShipment
+      `Prelude.hashWithSalt` shippingOption
+
+instance Prelude.NFData ShippingDetails where
+  rnf ShippingDetails' {..} =
+    Prelude.rnf inboundShipment
+      `Prelude.seq` Prelude.rnf outboundShipment
+      `Prelude.seq` Prelude.rnf shippingOption
diff --git a/gen/Amazonka/Snowball/Types/ShippingLabelStatus.hs b/gen/Amazonka/Snowball/Types/ShippingLabelStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/ShippingLabelStatus.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.ShippingLabelStatus
+-- 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.Snowball.Types.ShippingLabelStatus
+  ( ShippingLabelStatus
+      ( ..,
+        ShippingLabelStatus_Failed,
+        ShippingLabelStatus_InProgress,
+        ShippingLabelStatus_Succeeded,
+        ShippingLabelStatus_TimedOut
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ShippingLabelStatus = ShippingLabelStatus'
+  { fromShippingLabelStatus ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ShippingLabelStatus_Failed :: ShippingLabelStatus
+pattern ShippingLabelStatus_Failed = ShippingLabelStatus' "Failed"
+
+pattern ShippingLabelStatus_InProgress :: ShippingLabelStatus
+pattern ShippingLabelStatus_InProgress = ShippingLabelStatus' "InProgress"
+
+pattern ShippingLabelStatus_Succeeded :: ShippingLabelStatus
+pattern ShippingLabelStatus_Succeeded = ShippingLabelStatus' "Succeeded"
+
+pattern ShippingLabelStatus_TimedOut :: ShippingLabelStatus
+pattern ShippingLabelStatus_TimedOut = ShippingLabelStatus' "TimedOut"
+
+{-# COMPLETE
+  ShippingLabelStatus_Failed,
+  ShippingLabelStatus_InProgress,
+  ShippingLabelStatus_Succeeded,
+  ShippingLabelStatus_TimedOut,
+  ShippingLabelStatus'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/ShippingOption.hs b/gen/Amazonka/Snowball/Types/ShippingOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/ShippingOption.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.ShippingOption
+-- 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.Snowball.Types.ShippingOption
+  ( ShippingOption
+      ( ..,
+        ShippingOption_EXPRESS,
+        ShippingOption_NEXT_DAY,
+        ShippingOption_SECOND_DAY,
+        ShippingOption_STANDARD
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ShippingOption = ShippingOption'
+  { fromShippingOption ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern ShippingOption_EXPRESS :: ShippingOption
+pattern ShippingOption_EXPRESS = ShippingOption' "EXPRESS"
+
+pattern ShippingOption_NEXT_DAY :: ShippingOption
+pattern ShippingOption_NEXT_DAY = ShippingOption' "NEXT_DAY"
+
+pattern ShippingOption_SECOND_DAY :: ShippingOption
+pattern ShippingOption_SECOND_DAY = ShippingOption' "SECOND_DAY"
+
+pattern ShippingOption_STANDARD :: ShippingOption
+pattern ShippingOption_STANDARD = ShippingOption' "STANDARD"
+
+{-# COMPLETE
+  ShippingOption_EXPRESS,
+  ShippingOption_NEXT_DAY,
+  ShippingOption_SECOND_DAY,
+  ShippingOption_STANDARD,
+  ShippingOption'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/SnowballCapacity.hs b/gen/Amazonka/Snowball/Types/SnowballCapacity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/SnowballCapacity.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.SnowballCapacity
+-- 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.Snowball.Types.SnowballCapacity
+  ( SnowballCapacity
+      ( ..,
+        SnowballCapacity_NoPreference,
+        SnowballCapacity_T100,
+        SnowballCapacity_T14,
+        SnowballCapacity_T32,
+        SnowballCapacity_T42,
+        SnowballCapacity_T50,
+        SnowballCapacity_T8,
+        SnowballCapacity_T80,
+        SnowballCapacity_T98
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SnowballCapacity = SnowballCapacity'
+  { fromSnowballCapacity ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SnowballCapacity_NoPreference :: SnowballCapacity
+pattern SnowballCapacity_NoPreference = SnowballCapacity' "NoPreference"
+
+pattern SnowballCapacity_T100 :: SnowballCapacity
+pattern SnowballCapacity_T100 = SnowballCapacity' "T100"
+
+pattern SnowballCapacity_T14 :: SnowballCapacity
+pattern SnowballCapacity_T14 = SnowballCapacity' "T14"
+
+pattern SnowballCapacity_T32 :: SnowballCapacity
+pattern SnowballCapacity_T32 = SnowballCapacity' "T32"
+
+pattern SnowballCapacity_T42 :: SnowballCapacity
+pattern SnowballCapacity_T42 = SnowballCapacity' "T42"
+
+pattern SnowballCapacity_T50 :: SnowballCapacity
+pattern SnowballCapacity_T50 = SnowballCapacity' "T50"
+
+pattern SnowballCapacity_T8 :: SnowballCapacity
+pattern SnowballCapacity_T8 = SnowballCapacity' "T8"
+
+pattern SnowballCapacity_T80 :: SnowballCapacity
+pattern SnowballCapacity_T80 = SnowballCapacity' "T80"
+
+pattern SnowballCapacity_T98 :: SnowballCapacity
+pattern SnowballCapacity_T98 = SnowballCapacity' "T98"
+
+{-# COMPLETE
+  SnowballCapacity_NoPreference,
+  SnowballCapacity_T100,
+  SnowballCapacity_T14,
+  SnowballCapacity_T32,
+  SnowballCapacity_T42,
+  SnowballCapacity_T50,
+  SnowballCapacity_T8,
+  SnowballCapacity_T80,
+  SnowballCapacity_T98,
+  SnowballCapacity'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/SnowballType.hs b/gen/Amazonka/Snowball/Types/SnowballType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/SnowballType.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.SnowballType
+-- 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.Snowball.Types.SnowballType
+  ( SnowballType
+      ( ..,
+        SnowballType_EDGE,
+        SnowballType_EDGE_C,
+        SnowballType_EDGE_CG,
+        SnowballType_EDGE_S,
+        SnowballType_SNC1_HDD,
+        SnowballType_SNC1_SSD,
+        SnowballType_STANDARD,
+        SnowballType_V3_5C
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype SnowballType = SnowballType'
+  { fromSnowballType ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern SnowballType_EDGE :: SnowballType
+pattern SnowballType_EDGE = SnowballType' "EDGE"
+
+pattern SnowballType_EDGE_C :: SnowballType
+pattern SnowballType_EDGE_C = SnowballType' "EDGE_C"
+
+pattern SnowballType_EDGE_CG :: SnowballType
+pattern SnowballType_EDGE_CG = SnowballType' "EDGE_CG"
+
+pattern SnowballType_EDGE_S :: SnowballType
+pattern SnowballType_EDGE_S = SnowballType' "EDGE_S"
+
+pattern SnowballType_SNC1_HDD :: SnowballType
+pattern SnowballType_SNC1_HDD = SnowballType' "SNC1_HDD"
+
+pattern SnowballType_SNC1_SSD :: SnowballType
+pattern SnowballType_SNC1_SSD = SnowballType' "SNC1_SSD"
+
+pattern SnowballType_STANDARD :: SnowballType
+pattern SnowballType_STANDARD = SnowballType' "STANDARD"
+
+pattern SnowballType_V3_5C :: SnowballType
+pattern SnowballType_V3_5C = SnowballType' "V3_5C"
+
+{-# COMPLETE
+  SnowballType_EDGE,
+  SnowballType_EDGE_C,
+  SnowballType_EDGE_CG,
+  SnowballType_EDGE_S,
+  SnowballType_SNC1_HDD,
+  SnowballType_SNC1_SSD,
+  SnowballType_STANDARD,
+  SnowballType_V3_5C,
+  SnowballType'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/SnowconeDeviceConfiguration.hs b/gen/Amazonka/Snowball/Types/SnowconeDeviceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/SnowconeDeviceConfiguration.hs
@@ -0,0 +1,82 @@
+{-# 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.Snowball.Types.SnowconeDeviceConfiguration
+-- 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.Snowball.Types.SnowconeDeviceConfiguration 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.Snowball.Types.WirelessConnection
+
+-- | Specifies the device configuration for an Snowcone job.
+--
+-- /See:/ 'newSnowconeDeviceConfiguration' smart constructor.
+data SnowconeDeviceConfiguration = SnowconeDeviceConfiguration'
+  { -- | Configures the wireless connection for the Snowcone device.
+    wirelessConnection :: Prelude.Maybe WirelessConnection
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SnowconeDeviceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'wirelessConnection', 'snowconeDeviceConfiguration_wirelessConnection' - Configures the wireless connection for the Snowcone device.
+newSnowconeDeviceConfiguration ::
+  SnowconeDeviceConfiguration
+newSnowconeDeviceConfiguration =
+  SnowconeDeviceConfiguration'
+    { wirelessConnection =
+        Prelude.Nothing
+    }
+
+-- | Configures the wireless connection for the Snowcone device.
+snowconeDeviceConfiguration_wirelessConnection :: Lens.Lens' SnowconeDeviceConfiguration (Prelude.Maybe WirelessConnection)
+snowconeDeviceConfiguration_wirelessConnection = Lens.lens (\SnowconeDeviceConfiguration' {wirelessConnection} -> wirelessConnection) (\s@SnowconeDeviceConfiguration' {} a -> s {wirelessConnection = a} :: SnowconeDeviceConfiguration)
+
+instance Data.FromJSON SnowconeDeviceConfiguration where
+  parseJSON =
+    Data.withObject
+      "SnowconeDeviceConfiguration"
+      ( \x ->
+          SnowconeDeviceConfiguration'
+            Prelude.<$> (x Data..:? "WirelessConnection")
+      )
+
+instance Prelude.Hashable SnowconeDeviceConfiguration where
+  hashWithSalt _salt SnowconeDeviceConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` wirelessConnection
+
+instance Prelude.NFData SnowconeDeviceConfiguration where
+  rnf SnowconeDeviceConfiguration' {..} =
+    Prelude.rnf wirelessConnection
+
+instance Data.ToJSON SnowconeDeviceConfiguration where
+  toJSON SnowconeDeviceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("WirelessConnection" Data..=)
+              Prelude.<$> wirelessConnection
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/StorageUnit.hs b/gen/Amazonka/Snowball/Types/StorageUnit.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/StorageUnit.hs
@@ -0,0 +1,66 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.StorageUnit
+-- 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.Snowball.Types.StorageUnit
+  ( StorageUnit
+      ( ..,
+        StorageUnit_TB
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype StorageUnit = StorageUnit'
+  { fromStorageUnit ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern StorageUnit_TB :: StorageUnit
+pattern StorageUnit_TB = StorageUnit' "TB"
+
+{-# COMPLETE
+  StorageUnit_TB,
+  StorageUnit'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/TGWOnDeviceServiceConfiguration.hs b/gen/Amazonka/Snowball/Types/TGWOnDeviceServiceConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/TGWOnDeviceServiceConfiguration.hs
@@ -0,0 +1,114 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.TGWOnDeviceServiceConfiguration
+-- 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.Snowball.Types.TGWOnDeviceServiceConfiguration 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.Snowball.Types.StorageUnit
+
+-- | An object that represents the metadata and configuration settings for
+-- the Storage Gateway service Tape Gateway type on an Amazon Web Services
+-- Snow Family device.
+--
+-- /See:/ 'newTGWOnDeviceServiceConfiguration' smart constructor.
+data TGWOnDeviceServiceConfiguration = TGWOnDeviceServiceConfiguration'
+  { -- | The maximum number of virtual tapes to store on one Snow Family device.
+    -- Due to physical resource limitations, this value must be set to 80 for
+    -- Snowball Edge.
+    storageLimit :: Prelude.Maybe Prelude.Natural,
+    -- | The scale unit of the virtual tapes on the device.
+    storageUnit :: Prelude.Maybe StorageUnit
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TGWOnDeviceServiceConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'storageLimit', 'tGWOnDeviceServiceConfiguration_storageLimit' - The maximum number of virtual tapes to store on one Snow Family device.
+-- Due to physical resource limitations, this value must be set to 80 for
+-- Snowball Edge.
+--
+-- 'storageUnit', 'tGWOnDeviceServiceConfiguration_storageUnit' - The scale unit of the virtual tapes on the device.
+newTGWOnDeviceServiceConfiguration ::
+  TGWOnDeviceServiceConfiguration
+newTGWOnDeviceServiceConfiguration =
+  TGWOnDeviceServiceConfiguration'
+    { storageLimit =
+        Prelude.Nothing,
+      storageUnit = Prelude.Nothing
+    }
+
+-- | The maximum number of virtual tapes to store on one Snow Family device.
+-- Due to physical resource limitations, this value must be set to 80 for
+-- Snowball Edge.
+tGWOnDeviceServiceConfiguration_storageLimit :: Lens.Lens' TGWOnDeviceServiceConfiguration (Prelude.Maybe Prelude.Natural)
+tGWOnDeviceServiceConfiguration_storageLimit = Lens.lens (\TGWOnDeviceServiceConfiguration' {storageLimit} -> storageLimit) (\s@TGWOnDeviceServiceConfiguration' {} a -> s {storageLimit = a} :: TGWOnDeviceServiceConfiguration)
+
+-- | The scale unit of the virtual tapes on the device.
+tGWOnDeviceServiceConfiguration_storageUnit :: Lens.Lens' TGWOnDeviceServiceConfiguration (Prelude.Maybe StorageUnit)
+tGWOnDeviceServiceConfiguration_storageUnit = Lens.lens (\TGWOnDeviceServiceConfiguration' {storageUnit} -> storageUnit) (\s@TGWOnDeviceServiceConfiguration' {} a -> s {storageUnit = a} :: TGWOnDeviceServiceConfiguration)
+
+instance
+  Data.FromJSON
+    TGWOnDeviceServiceConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "TGWOnDeviceServiceConfiguration"
+      ( \x ->
+          TGWOnDeviceServiceConfiguration'
+            Prelude.<$> (x Data..:? "StorageLimit")
+            Prelude.<*> (x Data..:? "StorageUnit")
+      )
+
+instance
+  Prelude.Hashable
+    TGWOnDeviceServiceConfiguration
+  where
+  hashWithSalt
+    _salt
+    TGWOnDeviceServiceConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` storageLimit
+        `Prelude.hashWithSalt` storageUnit
+
+instance
+  Prelude.NFData
+    TGWOnDeviceServiceConfiguration
+  where
+  rnf TGWOnDeviceServiceConfiguration' {..} =
+    Prelude.rnf storageLimit
+      `Prelude.seq` Prelude.rnf storageUnit
+
+instance Data.ToJSON TGWOnDeviceServiceConfiguration where
+  toJSON TGWOnDeviceServiceConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("StorageLimit" Data..=) Prelude.<$> storageLimit,
+            ("StorageUnit" Data..=) Prelude.<$> storageUnit
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/TargetOnDeviceService.hs b/gen/Amazonka/Snowball/Types/TargetOnDeviceService.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/TargetOnDeviceService.hs
@@ -0,0 +1,106 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.TargetOnDeviceService
+-- 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.Snowball.Types.TargetOnDeviceService 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.Snowball.Types.DeviceServiceName
+import Amazonka.Snowball.Types.TransferOption
+
+-- | An object that represents the service or services on the Snow Family
+-- device that your transferred data will be exported from or imported
+-- into. Amazon Web Services Snow Family supports Amazon S3 and NFS
+-- (Network File System).
+--
+-- /See:/ 'newTargetOnDeviceService' smart constructor.
+data TargetOnDeviceService = TargetOnDeviceService'
+  { -- | Specifies the name of the service on the Snow Family device that your
+    -- transferred data will be exported from or imported into.
+    serviceName :: Prelude.Maybe DeviceServiceName,
+    -- | Specifies whether the data is being imported or exported. You can import
+    -- or export the data, or use it locally on the device.
+    transferOption :: Prelude.Maybe TransferOption
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TargetOnDeviceService' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serviceName', 'targetOnDeviceService_serviceName' - Specifies the name of the service on the Snow Family device that your
+-- transferred data will be exported from or imported into.
+--
+-- 'transferOption', 'targetOnDeviceService_transferOption' - Specifies whether the data is being imported or exported. You can import
+-- or export the data, or use it locally on the device.
+newTargetOnDeviceService ::
+  TargetOnDeviceService
+newTargetOnDeviceService =
+  TargetOnDeviceService'
+    { serviceName =
+        Prelude.Nothing,
+      transferOption = Prelude.Nothing
+    }
+
+-- | Specifies the name of the service on the Snow Family device that your
+-- transferred data will be exported from or imported into.
+targetOnDeviceService_serviceName :: Lens.Lens' TargetOnDeviceService (Prelude.Maybe DeviceServiceName)
+targetOnDeviceService_serviceName = Lens.lens (\TargetOnDeviceService' {serviceName} -> serviceName) (\s@TargetOnDeviceService' {} a -> s {serviceName = a} :: TargetOnDeviceService)
+
+-- | Specifies whether the data is being imported or exported. You can import
+-- or export the data, or use it locally on the device.
+targetOnDeviceService_transferOption :: Lens.Lens' TargetOnDeviceService (Prelude.Maybe TransferOption)
+targetOnDeviceService_transferOption = Lens.lens (\TargetOnDeviceService' {transferOption} -> transferOption) (\s@TargetOnDeviceService' {} a -> s {transferOption = a} :: TargetOnDeviceService)
+
+instance Data.FromJSON TargetOnDeviceService where
+  parseJSON =
+    Data.withObject
+      "TargetOnDeviceService"
+      ( \x ->
+          TargetOnDeviceService'
+            Prelude.<$> (x Data..:? "ServiceName")
+            Prelude.<*> (x Data..:? "TransferOption")
+      )
+
+instance Prelude.Hashable TargetOnDeviceService where
+  hashWithSalt _salt TargetOnDeviceService' {..} =
+    _salt
+      `Prelude.hashWithSalt` serviceName
+      `Prelude.hashWithSalt` transferOption
+
+instance Prelude.NFData TargetOnDeviceService where
+  rnf TargetOnDeviceService' {..} =
+    Prelude.rnf serviceName
+      `Prelude.seq` Prelude.rnf transferOption
+
+instance Data.ToJSON TargetOnDeviceService where
+  toJSON TargetOnDeviceService' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("ServiceName" Data..=) Prelude.<$> serviceName,
+            ("TransferOption" Data..=)
+              Prelude.<$> transferOption
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/Types/TaxDocuments.hs b/gen/Amazonka/Snowball/Types/TaxDocuments.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/TaxDocuments.hs
@@ -0,0 +1,70 @@
+{-# 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.Snowball.Types.TaxDocuments
+-- 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.Snowball.Types.TaxDocuments 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.Snowball.Types.INDTaxDocuments
+
+-- | The tax documents required in your Amazon Web Services Region.
+--
+-- /See:/ 'newTaxDocuments' smart constructor.
+data TaxDocuments = TaxDocuments'
+  { ind :: Prelude.Maybe INDTaxDocuments
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TaxDocuments' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ind', 'taxDocuments_ind' - Undocumented member.
+newTaxDocuments ::
+  TaxDocuments
+newTaxDocuments =
+  TaxDocuments' {ind = Prelude.Nothing}
+
+-- | Undocumented member.
+taxDocuments_ind :: Lens.Lens' TaxDocuments (Prelude.Maybe INDTaxDocuments)
+taxDocuments_ind = Lens.lens (\TaxDocuments' {ind} -> ind) (\s@TaxDocuments' {} a -> s {ind = a} :: TaxDocuments)
+
+instance Data.FromJSON TaxDocuments where
+  parseJSON =
+    Data.withObject
+      "TaxDocuments"
+      (\x -> TaxDocuments' Prelude.<$> (x Data..:? "IND"))
+
+instance Prelude.Hashable TaxDocuments where
+  hashWithSalt _salt TaxDocuments' {..} =
+    _salt `Prelude.hashWithSalt` ind
+
+instance Prelude.NFData TaxDocuments where
+  rnf TaxDocuments' {..} = Prelude.rnf ind
+
+instance Data.ToJSON TaxDocuments where
+  toJSON TaxDocuments' {..} =
+    Data.object
+      (Prelude.catMaybes [("IND" Data..=) Prelude.<$> ind])
diff --git a/gen/Amazonka/Snowball/Types/TransferOption.hs b/gen/Amazonka/Snowball/Types/TransferOption.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/TransferOption.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.Types.TransferOption
+-- 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.Snowball.Types.TransferOption
+  ( TransferOption
+      ( ..,
+        TransferOption_EXPORT,
+        TransferOption_IMPORT,
+        TransferOption_LOCAL_USE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype TransferOption = TransferOption'
+  { fromTransferOption ::
+      Data.Text
+  }
+  deriving stock
+    ( Prelude.Show,
+      Prelude.Read,
+      Prelude.Eq,
+      Prelude.Ord,
+      Prelude.Generic
+    )
+  deriving newtype
+    ( Prelude.Hashable,
+      Prelude.NFData,
+      Data.FromText,
+      Data.ToText,
+      Data.ToByteString,
+      Data.ToLog,
+      Data.ToHeader,
+      Data.ToQuery,
+      Data.FromJSON,
+      Data.FromJSONKey,
+      Data.ToJSON,
+      Data.ToJSONKey,
+      Data.FromXML,
+      Data.ToXML
+    )
+
+pattern TransferOption_EXPORT :: TransferOption
+pattern TransferOption_EXPORT = TransferOption' "EXPORT"
+
+pattern TransferOption_IMPORT :: TransferOption
+pattern TransferOption_IMPORT = TransferOption' "IMPORT"
+
+pattern TransferOption_LOCAL_USE :: TransferOption
+pattern TransferOption_LOCAL_USE = TransferOption' "LOCAL_USE"
+
+{-# COMPLETE
+  TransferOption_EXPORT,
+  TransferOption_IMPORT,
+  TransferOption_LOCAL_USE,
+  TransferOption'
+  #-}
diff --git a/gen/Amazonka/Snowball/Types/WirelessConnection.hs b/gen/Amazonka/Snowball/Types/WirelessConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/Types/WirelessConnection.hs
@@ -0,0 +1,81 @@
+{-# 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.Snowball.Types.WirelessConnection
+-- 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.Snowball.Types.WirelessConnection 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
+
+-- | Configures the wireless connection on an Snowcone device.
+--
+-- /See:/ 'newWirelessConnection' smart constructor.
+data WirelessConnection = WirelessConnection'
+  { -- | Enables the Wi-Fi adapter on an Snowcone device.
+    isWifiEnabled :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'WirelessConnection' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isWifiEnabled', 'wirelessConnection_isWifiEnabled' - Enables the Wi-Fi adapter on an Snowcone device.
+newWirelessConnection ::
+  WirelessConnection
+newWirelessConnection =
+  WirelessConnection'
+    { isWifiEnabled =
+        Prelude.Nothing
+    }
+
+-- | Enables the Wi-Fi adapter on an Snowcone device.
+wirelessConnection_isWifiEnabled :: Lens.Lens' WirelessConnection (Prelude.Maybe Prelude.Bool)
+wirelessConnection_isWifiEnabled = Lens.lens (\WirelessConnection' {isWifiEnabled} -> isWifiEnabled) (\s@WirelessConnection' {} a -> s {isWifiEnabled = a} :: WirelessConnection)
+
+instance Data.FromJSON WirelessConnection where
+  parseJSON =
+    Data.withObject
+      "WirelessConnection"
+      ( \x ->
+          WirelessConnection'
+            Prelude.<$> (x Data..:? "IsWifiEnabled")
+      )
+
+instance Prelude.Hashable WirelessConnection where
+  hashWithSalt _salt WirelessConnection' {..} =
+    _salt `Prelude.hashWithSalt` isWifiEnabled
+
+instance Prelude.NFData WirelessConnection where
+  rnf WirelessConnection' {..} =
+    Prelude.rnf isWifiEnabled
+
+instance Data.ToJSON WirelessConnection where
+  toJSON WirelessConnection' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("IsWifiEnabled" Data..=)
+              Prelude.<$> isWifiEnabled
+          ]
+      )
diff --git a/gen/Amazonka/Snowball/UpdateCluster.hs b/gen/Amazonka/Snowball/UpdateCluster.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/UpdateCluster.hs
@@ -0,0 +1,298 @@
+{-# 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.Snowball.UpdateCluster
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- While a cluster\'s @ClusterState@ value is in the @AwaitingQuorum@
+-- state, you can update some of the information associated with a cluster.
+-- Once the cluster changes to a different job state, usually 60 minutes
+-- after the cluster being created, this action is no longer available.
+module Amazonka.Snowball.UpdateCluster
+  ( -- * Creating a Request
+    UpdateCluster (..),
+    newUpdateCluster,
+
+    -- * Request Lenses
+    updateCluster_addressId,
+    updateCluster_description,
+    updateCluster_forwardingAddressId,
+    updateCluster_notification,
+    updateCluster_onDeviceServiceConfiguration,
+    updateCluster_resources,
+    updateCluster_roleARN,
+    updateCluster_shippingOption,
+    updateCluster_clusterId,
+
+    -- * Destructuring the Response
+    UpdateClusterResponse (..),
+    newUpdateClusterResponse,
+
+    -- * Response Lenses
+    updateClusterResponse_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.Snowball.Types
+
+-- | /See:/ 'newUpdateCluster' smart constructor.
+data UpdateCluster = UpdateCluster'
+  { -- | The ID of the updated Address object.
+    addressId :: Prelude.Maybe Prelude.Text,
+    -- | The updated description of this cluster.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The updated ID for the forwarding address for a cluster. This field is
+    -- not supported in most regions.
+    forwardingAddressId :: Prelude.Maybe Prelude.Text,
+    -- | The new or updated Notification object.
+    notification :: Prelude.Maybe Notification,
+    -- | Specifies the service or services on the Snow Family device that your
+    -- transferred data will be exported from or imported into. Amazon Web
+    -- Services Snow Family device clusters support Amazon S3 and NFS (Network
+    -- File System).
+    onDeviceServiceConfiguration :: Prelude.Maybe OnDeviceServiceConfiguration,
+    -- | The updated arrays of JobResource objects that can include updated
+    -- S3Resource objects or LambdaResource objects.
+    resources :: Prelude.Maybe JobResource,
+    -- | The new role Amazon Resource Name (ARN) that you want to associate with
+    -- this cluster. To create a role ARN, use the
+    -- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+    -- API action in Identity and Access Management (IAM).
+    roleARN :: Prelude.Maybe Prelude.Text,
+    -- | The updated shipping option value of this cluster\'s ShippingDetails
+    -- object.
+    shippingOption :: Prelude.Maybe ShippingOption,
+    -- | The cluster ID of the cluster that you want to update, for example
+    -- @CID123e4567-e89b-12d3-a456-426655440000@.
+    clusterId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateCluster' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressId', 'updateCluster_addressId' - The ID of the updated Address object.
+--
+-- 'description', 'updateCluster_description' - The updated description of this cluster.
+--
+-- 'forwardingAddressId', 'updateCluster_forwardingAddressId' - The updated ID for the forwarding address for a cluster. This field is
+-- not supported in most regions.
+--
+-- 'notification', 'updateCluster_notification' - The new or updated Notification object.
+--
+-- 'onDeviceServiceConfiguration', 'updateCluster_onDeviceServiceConfiguration' - Specifies the service or services on the Snow Family device that your
+-- transferred data will be exported from or imported into. Amazon Web
+-- Services Snow Family device clusters support Amazon S3 and NFS (Network
+-- File System).
+--
+-- 'resources', 'updateCluster_resources' - The updated arrays of JobResource objects that can include updated
+-- S3Resource objects or LambdaResource objects.
+--
+-- 'roleARN', 'updateCluster_roleARN' - The new role Amazon Resource Name (ARN) that you want to associate with
+-- this cluster. To create a role ARN, use the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+-- API action in Identity and Access Management (IAM).
+--
+-- 'shippingOption', 'updateCluster_shippingOption' - The updated shipping option value of this cluster\'s ShippingDetails
+-- object.
+--
+-- 'clusterId', 'updateCluster_clusterId' - The cluster ID of the cluster that you want to update, for example
+-- @CID123e4567-e89b-12d3-a456-426655440000@.
+newUpdateCluster ::
+  -- | 'clusterId'
+  Prelude.Text ->
+  UpdateCluster
+newUpdateCluster pClusterId_ =
+  UpdateCluster'
+    { addressId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      forwardingAddressId = Prelude.Nothing,
+      notification = Prelude.Nothing,
+      onDeviceServiceConfiguration = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      roleARN = Prelude.Nothing,
+      shippingOption = Prelude.Nothing,
+      clusterId = pClusterId_
+    }
+
+-- | The ID of the updated Address object.
+updateCluster_addressId :: Lens.Lens' UpdateCluster (Prelude.Maybe Prelude.Text)
+updateCluster_addressId = Lens.lens (\UpdateCluster' {addressId} -> addressId) (\s@UpdateCluster' {} a -> s {addressId = a} :: UpdateCluster)
+
+-- | The updated description of this cluster.
+updateCluster_description :: Lens.Lens' UpdateCluster (Prelude.Maybe Prelude.Text)
+updateCluster_description = Lens.lens (\UpdateCluster' {description} -> description) (\s@UpdateCluster' {} a -> s {description = a} :: UpdateCluster)
+
+-- | The updated ID for the forwarding address for a cluster. This field is
+-- not supported in most regions.
+updateCluster_forwardingAddressId :: Lens.Lens' UpdateCluster (Prelude.Maybe Prelude.Text)
+updateCluster_forwardingAddressId = Lens.lens (\UpdateCluster' {forwardingAddressId} -> forwardingAddressId) (\s@UpdateCluster' {} a -> s {forwardingAddressId = a} :: UpdateCluster)
+
+-- | The new or updated Notification object.
+updateCluster_notification :: Lens.Lens' UpdateCluster (Prelude.Maybe Notification)
+updateCluster_notification = Lens.lens (\UpdateCluster' {notification} -> notification) (\s@UpdateCluster' {} a -> s {notification = a} :: UpdateCluster)
+
+-- | Specifies the service or services on the Snow Family device that your
+-- transferred data will be exported from or imported into. Amazon Web
+-- Services Snow Family device clusters support Amazon S3 and NFS (Network
+-- File System).
+updateCluster_onDeviceServiceConfiguration :: Lens.Lens' UpdateCluster (Prelude.Maybe OnDeviceServiceConfiguration)
+updateCluster_onDeviceServiceConfiguration = Lens.lens (\UpdateCluster' {onDeviceServiceConfiguration} -> onDeviceServiceConfiguration) (\s@UpdateCluster' {} a -> s {onDeviceServiceConfiguration = a} :: UpdateCluster)
+
+-- | The updated arrays of JobResource objects that can include updated
+-- S3Resource objects or LambdaResource objects.
+updateCluster_resources :: Lens.Lens' UpdateCluster (Prelude.Maybe JobResource)
+updateCluster_resources = Lens.lens (\UpdateCluster' {resources} -> resources) (\s@UpdateCluster' {} a -> s {resources = a} :: UpdateCluster)
+
+-- | The new role Amazon Resource Name (ARN) that you want to associate with
+-- this cluster. To create a role ARN, use the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>
+-- API action in Identity and Access Management (IAM).
+updateCluster_roleARN :: Lens.Lens' UpdateCluster (Prelude.Maybe Prelude.Text)
+updateCluster_roleARN = Lens.lens (\UpdateCluster' {roleARN} -> roleARN) (\s@UpdateCluster' {} a -> s {roleARN = a} :: UpdateCluster)
+
+-- | The updated shipping option value of this cluster\'s ShippingDetails
+-- object.
+updateCluster_shippingOption :: Lens.Lens' UpdateCluster (Prelude.Maybe ShippingOption)
+updateCluster_shippingOption = Lens.lens (\UpdateCluster' {shippingOption} -> shippingOption) (\s@UpdateCluster' {} a -> s {shippingOption = a} :: UpdateCluster)
+
+-- | The cluster ID of the cluster that you want to update, for example
+-- @CID123e4567-e89b-12d3-a456-426655440000@.
+updateCluster_clusterId :: Lens.Lens' UpdateCluster Prelude.Text
+updateCluster_clusterId = Lens.lens (\UpdateCluster' {clusterId} -> clusterId) (\s@UpdateCluster' {} a -> s {clusterId = a} :: UpdateCluster)
+
+instance Core.AWSRequest UpdateCluster where
+  type
+    AWSResponse UpdateCluster =
+      UpdateClusterResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateClusterResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateCluster where
+  hashWithSalt _salt UpdateCluster' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` forwardingAddressId
+      `Prelude.hashWithSalt` notification
+      `Prelude.hashWithSalt` onDeviceServiceConfiguration
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` roleARN
+      `Prelude.hashWithSalt` shippingOption
+      `Prelude.hashWithSalt` clusterId
+
+instance Prelude.NFData UpdateCluster where
+  rnf UpdateCluster' {..} =
+    Prelude.rnf addressId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf forwardingAddressId
+      `Prelude.seq` Prelude.rnf notification
+      `Prelude.seq` Prelude.rnf onDeviceServiceConfiguration
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf roleARN
+      `Prelude.seq` Prelude.rnf shippingOption
+      `Prelude.seq` Prelude.rnf clusterId
+
+instance Data.ToHeaders UpdateCluster where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.UpdateCluster" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateCluster where
+  toJSON UpdateCluster' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AddressId" Data..=) Prelude.<$> addressId,
+            ("Description" Data..=) Prelude.<$> description,
+            ("ForwardingAddressId" Data..=)
+              Prelude.<$> forwardingAddressId,
+            ("Notification" Data..=) Prelude.<$> notification,
+            ("OnDeviceServiceConfiguration" Data..=)
+              Prelude.<$> onDeviceServiceConfiguration,
+            ("Resources" Data..=) Prelude.<$> resources,
+            ("RoleARN" Data..=) Prelude.<$> roleARN,
+            ("ShippingOption" Data..=)
+              Prelude.<$> shippingOption,
+            Prelude.Just ("ClusterId" Data..= clusterId)
+          ]
+      )
+
+instance Data.ToPath UpdateCluster where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateCluster where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateClusterResponse' smart constructor.
+data UpdateClusterResponse = UpdateClusterResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateClusterResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateClusterResponse_httpStatus' - The response's http status code.
+newUpdateClusterResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateClusterResponse
+newUpdateClusterResponse pHttpStatus_ =
+  UpdateClusterResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateClusterResponse_httpStatus :: Lens.Lens' UpdateClusterResponse Prelude.Int
+updateClusterResponse_httpStatus = Lens.lens (\UpdateClusterResponse' {httpStatus} -> httpStatus) (\s@UpdateClusterResponse' {} a -> s {httpStatus = a} :: UpdateClusterResponse)
+
+instance Prelude.NFData UpdateClusterResponse where
+  rnf UpdateClusterResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/UpdateJob.hs b/gen/Amazonka/Snowball/UpdateJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/UpdateJob.hs
@@ -0,0 +1,324 @@
+{-# 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.Snowball.UpdateJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- While a job\'s @JobState@ value is @New@, you can update some of the
+-- information associated with a job. Once the job changes to a different
+-- job state, usually within 60 minutes of the job being created, this
+-- action is no longer available.
+module Amazonka.Snowball.UpdateJob
+  ( -- * Creating a Request
+    UpdateJob (..),
+    newUpdateJob,
+
+    -- * Request Lenses
+    updateJob_addressId,
+    updateJob_description,
+    updateJob_forwardingAddressId,
+    updateJob_notification,
+    updateJob_onDeviceServiceConfiguration,
+    updateJob_resources,
+    updateJob_roleARN,
+    updateJob_shippingOption,
+    updateJob_snowballCapacityPreference,
+    updateJob_jobId,
+
+    -- * Destructuring the Response
+    UpdateJobResponse (..),
+    newUpdateJobResponse,
+
+    -- * Response Lenses
+    updateJobResponse_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.Snowball.Types
+
+-- | /See:/ 'newUpdateJob' smart constructor.
+data UpdateJob = UpdateJob'
+  { -- | The ID of the updated Address object.
+    addressId :: Prelude.Maybe Prelude.Text,
+    -- | The updated description of this job\'s JobMetadata object.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The updated ID for the forwarding address for a job. This field is not
+    -- supported in most regions.
+    forwardingAddressId :: Prelude.Maybe Prelude.Text,
+    -- | The new or updated Notification object.
+    notification :: Prelude.Maybe Notification,
+    -- | Specifies the service or services on the Snow Family device that your
+    -- transferred data will be exported from or imported into. Amazon Web
+    -- Services Snow Family supports Amazon S3 and NFS (Network File System)
+    -- and the Amazon Web Services Storage Gateway service Tape Gateway type.
+    onDeviceServiceConfiguration :: Prelude.Maybe OnDeviceServiceConfiguration,
+    -- | The updated @JobResource@ object, or the updated JobResource object.
+    resources :: Prelude.Maybe JobResource,
+    -- | The new role Amazon Resource Name (ARN) that you want to associate with
+    -- this job. To create a role ARN, use the
+    -- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>Identity
+    -- and Access Management (IAM) API action.
+    roleARN :: Prelude.Maybe Prelude.Text,
+    -- | The updated shipping option value of this job\'s ShippingDetails object.
+    shippingOption :: Prelude.Maybe ShippingOption,
+    -- | The updated @SnowballCapacityPreference@ of this job\'s JobMetadata
+    -- object. The 50 TB Snowballs are only available in the US regions.
+    --
+    -- For more information, see
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+    -- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+    -- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+    snowballCapacityPreference :: Prelude.Maybe SnowballCapacity,
+    -- | The job ID of the job that you want to update, for example
+    -- @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'addressId', 'updateJob_addressId' - The ID of the updated Address object.
+--
+-- 'description', 'updateJob_description' - The updated description of this job\'s JobMetadata object.
+--
+-- 'forwardingAddressId', 'updateJob_forwardingAddressId' - The updated ID for the forwarding address for a job. This field is not
+-- supported in most regions.
+--
+-- 'notification', 'updateJob_notification' - The new or updated Notification object.
+--
+-- 'onDeviceServiceConfiguration', 'updateJob_onDeviceServiceConfiguration' - Specifies the service or services on the Snow Family device that your
+-- transferred data will be exported from or imported into. Amazon Web
+-- Services Snow Family supports Amazon S3 and NFS (Network File System)
+-- and the Amazon Web Services Storage Gateway service Tape Gateway type.
+--
+-- 'resources', 'updateJob_resources' - The updated @JobResource@ object, or the updated JobResource object.
+--
+-- 'roleARN', 'updateJob_roleARN' - The new role Amazon Resource Name (ARN) that you want to associate with
+-- this job. To create a role ARN, use the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>Identity
+-- and Access Management (IAM) API action.
+--
+-- 'shippingOption', 'updateJob_shippingOption' - The updated shipping option value of this job\'s ShippingDetails object.
+--
+-- 'snowballCapacityPreference', 'updateJob_snowballCapacityPreference' - The updated @SnowballCapacityPreference@ of this job\'s JobMetadata
+-- object. The 50 TB Snowballs are only available in the US regions.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+--
+-- 'jobId', 'updateJob_jobId' - The job ID of the job that you want to update, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+newUpdateJob ::
+  -- | 'jobId'
+  Prelude.Text ->
+  UpdateJob
+newUpdateJob pJobId_ =
+  UpdateJob'
+    { addressId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      forwardingAddressId = Prelude.Nothing,
+      notification = Prelude.Nothing,
+      onDeviceServiceConfiguration = Prelude.Nothing,
+      resources = Prelude.Nothing,
+      roleARN = Prelude.Nothing,
+      shippingOption = Prelude.Nothing,
+      snowballCapacityPreference = Prelude.Nothing,
+      jobId = pJobId_
+    }
+
+-- | The ID of the updated Address object.
+updateJob_addressId :: Lens.Lens' UpdateJob (Prelude.Maybe Prelude.Text)
+updateJob_addressId = Lens.lens (\UpdateJob' {addressId} -> addressId) (\s@UpdateJob' {} a -> s {addressId = a} :: UpdateJob)
+
+-- | The updated description of this job\'s JobMetadata object.
+updateJob_description :: Lens.Lens' UpdateJob (Prelude.Maybe Prelude.Text)
+updateJob_description = Lens.lens (\UpdateJob' {description} -> description) (\s@UpdateJob' {} a -> s {description = a} :: UpdateJob)
+
+-- | The updated ID for the forwarding address for a job. This field is not
+-- supported in most regions.
+updateJob_forwardingAddressId :: Lens.Lens' UpdateJob (Prelude.Maybe Prelude.Text)
+updateJob_forwardingAddressId = Lens.lens (\UpdateJob' {forwardingAddressId} -> forwardingAddressId) (\s@UpdateJob' {} a -> s {forwardingAddressId = a} :: UpdateJob)
+
+-- | The new or updated Notification object.
+updateJob_notification :: Lens.Lens' UpdateJob (Prelude.Maybe Notification)
+updateJob_notification = Lens.lens (\UpdateJob' {notification} -> notification) (\s@UpdateJob' {} a -> s {notification = a} :: UpdateJob)
+
+-- | Specifies the service or services on the Snow Family device that your
+-- transferred data will be exported from or imported into. Amazon Web
+-- Services Snow Family supports Amazon S3 and NFS (Network File System)
+-- and the Amazon Web Services Storage Gateway service Tape Gateway type.
+updateJob_onDeviceServiceConfiguration :: Lens.Lens' UpdateJob (Prelude.Maybe OnDeviceServiceConfiguration)
+updateJob_onDeviceServiceConfiguration = Lens.lens (\UpdateJob' {onDeviceServiceConfiguration} -> onDeviceServiceConfiguration) (\s@UpdateJob' {} a -> s {onDeviceServiceConfiguration = a} :: UpdateJob)
+
+-- | The updated @JobResource@ object, or the updated JobResource object.
+updateJob_resources :: Lens.Lens' UpdateJob (Prelude.Maybe JobResource)
+updateJob_resources = Lens.lens (\UpdateJob' {resources} -> resources) (\s@UpdateJob' {} a -> s {resources = a} :: UpdateJob)
+
+-- | The new role Amazon Resource Name (ARN) that you want to associate with
+-- this job. To create a role ARN, use the
+-- <https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole>Identity
+-- and Access Management (IAM) API action.
+updateJob_roleARN :: Lens.Lens' UpdateJob (Prelude.Maybe Prelude.Text)
+updateJob_roleARN = Lens.lens (\UpdateJob' {roleARN} -> roleARN) (\s@UpdateJob' {} a -> s {roleARN = a} :: UpdateJob)
+
+-- | The updated shipping option value of this job\'s ShippingDetails object.
+updateJob_shippingOption :: Lens.Lens' UpdateJob (Prelude.Maybe ShippingOption)
+updateJob_shippingOption = Lens.lens (\UpdateJob' {shippingOption} -> shippingOption) (\s@UpdateJob' {} a -> s {shippingOption = a} :: UpdateJob)
+
+-- | The updated @SnowballCapacityPreference@ of this job\'s JobMetadata
+-- object. The 50 TB Snowballs are only available in the US regions.
+--
+-- For more information, see
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/snowcone-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/ or
+-- \"https:\/\/docs.aws.amazon.com\/snowball\/latest\/developer-guide\/snow-device-types.html\"
+-- (Snow Family Devices and Capacity) in the /Snowcone User Guide/.
+updateJob_snowballCapacityPreference :: Lens.Lens' UpdateJob (Prelude.Maybe SnowballCapacity)
+updateJob_snowballCapacityPreference = Lens.lens (\UpdateJob' {snowballCapacityPreference} -> snowballCapacityPreference) (\s@UpdateJob' {} a -> s {snowballCapacityPreference = a} :: UpdateJob)
+
+-- | The job ID of the job that you want to update, for example
+-- @JID123e4567-e89b-12d3-a456-426655440000@.
+updateJob_jobId :: Lens.Lens' UpdateJob Prelude.Text
+updateJob_jobId = Lens.lens (\UpdateJob' {jobId} -> jobId) (\s@UpdateJob' {} a -> s {jobId = a} :: UpdateJob)
+
+instance Core.AWSRequest UpdateJob where
+  type AWSResponse UpdateJob = UpdateJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateJob where
+  hashWithSalt _salt UpdateJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` addressId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` forwardingAddressId
+      `Prelude.hashWithSalt` notification
+      `Prelude.hashWithSalt` onDeviceServiceConfiguration
+      `Prelude.hashWithSalt` resources
+      `Prelude.hashWithSalt` roleARN
+      `Prelude.hashWithSalt` shippingOption
+      `Prelude.hashWithSalt` snowballCapacityPreference
+      `Prelude.hashWithSalt` jobId
+
+instance Prelude.NFData UpdateJob where
+  rnf UpdateJob' {..} =
+    Prelude.rnf addressId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf forwardingAddressId
+      `Prelude.seq` Prelude.rnf notification
+      `Prelude.seq` Prelude.rnf onDeviceServiceConfiguration
+      `Prelude.seq` Prelude.rnf resources
+      `Prelude.seq` Prelude.rnf roleARN
+      `Prelude.seq` Prelude.rnf shippingOption
+      `Prelude.seq` Prelude.rnf snowballCapacityPreference
+      `Prelude.seq` Prelude.rnf jobId
+
+instance Data.ToHeaders UpdateJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.UpdateJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateJob where
+  toJSON UpdateJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("AddressId" Data..=) Prelude.<$> addressId,
+            ("Description" Data..=) Prelude.<$> description,
+            ("ForwardingAddressId" Data..=)
+              Prelude.<$> forwardingAddressId,
+            ("Notification" Data..=) Prelude.<$> notification,
+            ("OnDeviceServiceConfiguration" Data..=)
+              Prelude.<$> onDeviceServiceConfiguration,
+            ("Resources" Data..=) Prelude.<$> resources,
+            ("RoleARN" Data..=) Prelude.<$> roleARN,
+            ("ShippingOption" Data..=)
+              Prelude.<$> shippingOption,
+            ("SnowballCapacityPreference" Data..=)
+              Prelude.<$> snowballCapacityPreference,
+            Prelude.Just ("JobId" Data..= jobId)
+          ]
+      )
+
+instance Data.ToPath UpdateJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateJobResponse' smart constructor.
+data UpdateJobResponse = UpdateJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateJobResponse_httpStatus' - The response's http status code.
+newUpdateJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateJobResponse
+newUpdateJobResponse pHttpStatus_ =
+  UpdateJobResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+updateJobResponse_httpStatus :: Lens.Lens' UpdateJobResponse Prelude.Int
+updateJobResponse_httpStatus = Lens.lens (\UpdateJobResponse' {httpStatus} -> httpStatus) (\s@UpdateJobResponse' {} a -> s {httpStatus = a} :: UpdateJobResponse)
+
+instance Prelude.NFData UpdateJobResponse where
+  rnf UpdateJobResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/UpdateJobShipmentState.hs b/gen/Amazonka/Snowball/UpdateJobShipmentState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/UpdateJobShipmentState.hs
@@ -0,0 +1,198 @@
+{-# 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.Snowball.UpdateJobShipmentState
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the state when a shipment state changes to a different state.
+module Amazonka.Snowball.UpdateJobShipmentState
+  ( -- * Creating a Request
+    UpdateJobShipmentState (..),
+    newUpdateJobShipmentState,
+
+    -- * Request Lenses
+    updateJobShipmentState_jobId,
+    updateJobShipmentState_shipmentState,
+
+    -- * Destructuring the Response
+    UpdateJobShipmentStateResponse (..),
+    newUpdateJobShipmentStateResponse,
+
+    -- * Response Lenses
+    updateJobShipmentStateResponse_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.Snowball.Types
+
+-- | /See:/ 'newUpdateJobShipmentState' smart constructor.
+data UpdateJobShipmentState = UpdateJobShipmentState'
+  { -- | The job ID of the job whose shipment date you want to update, for
+    -- example @JID123e4567-e89b-12d3-a456-426655440000@.
+    jobId :: Prelude.Text,
+    -- | The state of a device when it is being shipped.
+    --
+    -- Set to @RECEIVED@ when the device arrives at your location.
+    --
+    -- Set to @RETURNED@ when you have returned the device to Amazon Web
+    -- Services.
+    shipmentState :: ShipmentState
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateJobShipmentState' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'jobId', 'updateJobShipmentState_jobId' - The job ID of the job whose shipment date you want to update, for
+-- example @JID123e4567-e89b-12d3-a456-426655440000@.
+--
+-- 'shipmentState', 'updateJobShipmentState_shipmentState' - The state of a device when it is being shipped.
+--
+-- Set to @RECEIVED@ when the device arrives at your location.
+--
+-- Set to @RETURNED@ when you have returned the device to Amazon Web
+-- Services.
+newUpdateJobShipmentState ::
+  -- | 'jobId'
+  Prelude.Text ->
+  -- | 'shipmentState'
+  ShipmentState ->
+  UpdateJobShipmentState
+newUpdateJobShipmentState pJobId_ pShipmentState_ =
+  UpdateJobShipmentState'
+    { jobId = pJobId_,
+      shipmentState = pShipmentState_
+    }
+
+-- | The job ID of the job whose shipment date you want to update, for
+-- example @JID123e4567-e89b-12d3-a456-426655440000@.
+updateJobShipmentState_jobId :: Lens.Lens' UpdateJobShipmentState Prelude.Text
+updateJobShipmentState_jobId = Lens.lens (\UpdateJobShipmentState' {jobId} -> jobId) (\s@UpdateJobShipmentState' {} a -> s {jobId = a} :: UpdateJobShipmentState)
+
+-- | The state of a device when it is being shipped.
+--
+-- Set to @RECEIVED@ when the device arrives at your location.
+--
+-- Set to @RETURNED@ when you have returned the device to Amazon Web
+-- Services.
+updateJobShipmentState_shipmentState :: Lens.Lens' UpdateJobShipmentState ShipmentState
+updateJobShipmentState_shipmentState = Lens.lens (\UpdateJobShipmentState' {shipmentState} -> shipmentState) (\s@UpdateJobShipmentState' {} a -> s {shipmentState = a} :: UpdateJobShipmentState)
+
+instance Core.AWSRequest UpdateJobShipmentState where
+  type
+    AWSResponse UpdateJobShipmentState =
+      UpdateJobShipmentStateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateJobShipmentStateResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateJobShipmentState where
+  hashWithSalt _salt UpdateJobShipmentState' {..} =
+    _salt
+      `Prelude.hashWithSalt` jobId
+      `Prelude.hashWithSalt` shipmentState
+
+instance Prelude.NFData UpdateJobShipmentState where
+  rnf UpdateJobShipmentState' {..} =
+    Prelude.rnf jobId
+      `Prelude.seq` Prelude.rnf shipmentState
+
+instance Data.ToHeaders UpdateJobShipmentState where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.UpdateJobShipmentState" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateJobShipmentState where
+  toJSON UpdateJobShipmentState' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just ("JobId" Data..= jobId),
+            Prelude.Just
+              ("ShipmentState" Data..= shipmentState)
+          ]
+      )
+
+instance Data.ToPath UpdateJobShipmentState where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateJobShipmentState where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateJobShipmentStateResponse' smart constructor.
+data UpdateJobShipmentStateResponse = UpdateJobShipmentStateResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateJobShipmentStateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateJobShipmentStateResponse_httpStatus' - The response's http status code.
+newUpdateJobShipmentStateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateJobShipmentStateResponse
+newUpdateJobShipmentStateResponse pHttpStatus_ =
+  UpdateJobShipmentStateResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateJobShipmentStateResponse_httpStatus :: Lens.Lens' UpdateJobShipmentStateResponse Prelude.Int
+updateJobShipmentStateResponse_httpStatus = Lens.lens (\UpdateJobShipmentStateResponse' {httpStatus} -> httpStatus) (\s@UpdateJobShipmentStateResponse' {} a -> s {httpStatus = a} :: UpdateJobShipmentStateResponse)
+
+instance
+  Prelude.NFData
+    UpdateJobShipmentStateResponse
+  where
+  rnf UpdateJobShipmentStateResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/UpdateLongTermPricing.hs b/gen/Amazonka/Snowball/UpdateLongTermPricing.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/UpdateLongTermPricing.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.Snowball.UpdateLongTermPricing
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the long-term pricing type.
+module Amazonka.Snowball.UpdateLongTermPricing
+  ( -- * Creating a Request
+    UpdateLongTermPricing (..),
+    newUpdateLongTermPricing,
+
+    -- * Request Lenses
+    updateLongTermPricing_isLongTermPricingAutoRenew,
+    updateLongTermPricing_replacementJob,
+    updateLongTermPricing_longTermPricingId,
+
+    -- * Destructuring the Response
+    UpdateLongTermPricingResponse (..),
+    newUpdateLongTermPricingResponse,
+
+    -- * Response Lenses
+    updateLongTermPricingResponse_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.Snowball.Types
+
+-- | /See:/ 'newUpdateLongTermPricing' smart constructor.
+data UpdateLongTermPricing = UpdateLongTermPricing'
+  { -- | If set to @true@, specifies that the current long-term pricing type for
+    -- the device should be automatically renewed before the long-term pricing
+    -- contract expires.
+    isLongTermPricingAutoRenew :: Prelude.Maybe Prelude.Bool,
+    -- | Specifies that a device that is ordered with long-term pricing should be
+    -- replaced with a new device.
+    replacementJob :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the long-term pricing type for the device.
+    longTermPricingId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLongTermPricing' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'isLongTermPricingAutoRenew', 'updateLongTermPricing_isLongTermPricingAutoRenew' - If set to @true@, specifies that the current long-term pricing type for
+-- the device should be automatically renewed before the long-term pricing
+-- contract expires.
+--
+-- 'replacementJob', 'updateLongTermPricing_replacementJob' - Specifies that a device that is ordered with long-term pricing should be
+-- replaced with a new device.
+--
+-- 'longTermPricingId', 'updateLongTermPricing_longTermPricingId' - The ID of the long-term pricing type for the device.
+newUpdateLongTermPricing ::
+  -- | 'longTermPricingId'
+  Prelude.Text ->
+  UpdateLongTermPricing
+newUpdateLongTermPricing pLongTermPricingId_ =
+  UpdateLongTermPricing'
+    { isLongTermPricingAutoRenew =
+        Prelude.Nothing,
+      replacementJob = Prelude.Nothing,
+      longTermPricingId = pLongTermPricingId_
+    }
+
+-- | If set to @true@, specifies that the current long-term pricing type for
+-- the device should be automatically renewed before the long-term pricing
+-- contract expires.
+updateLongTermPricing_isLongTermPricingAutoRenew :: Lens.Lens' UpdateLongTermPricing (Prelude.Maybe Prelude.Bool)
+updateLongTermPricing_isLongTermPricingAutoRenew = Lens.lens (\UpdateLongTermPricing' {isLongTermPricingAutoRenew} -> isLongTermPricingAutoRenew) (\s@UpdateLongTermPricing' {} a -> s {isLongTermPricingAutoRenew = a} :: UpdateLongTermPricing)
+
+-- | Specifies that a device that is ordered with long-term pricing should be
+-- replaced with a new device.
+updateLongTermPricing_replacementJob :: Lens.Lens' UpdateLongTermPricing (Prelude.Maybe Prelude.Text)
+updateLongTermPricing_replacementJob = Lens.lens (\UpdateLongTermPricing' {replacementJob} -> replacementJob) (\s@UpdateLongTermPricing' {} a -> s {replacementJob = a} :: UpdateLongTermPricing)
+
+-- | The ID of the long-term pricing type for the device.
+updateLongTermPricing_longTermPricingId :: Lens.Lens' UpdateLongTermPricing Prelude.Text
+updateLongTermPricing_longTermPricingId = Lens.lens (\UpdateLongTermPricing' {longTermPricingId} -> longTermPricingId) (\s@UpdateLongTermPricing' {} a -> s {longTermPricingId = a} :: UpdateLongTermPricing)
+
+instance Core.AWSRequest UpdateLongTermPricing where
+  type
+    AWSResponse UpdateLongTermPricing =
+      UpdateLongTermPricingResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateLongTermPricingResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateLongTermPricing where
+  hashWithSalt _salt UpdateLongTermPricing' {..} =
+    _salt
+      `Prelude.hashWithSalt` isLongTermPricingAutoRenew
+      `Prelude.hashWithSalt` replacementJob
+      `Prelude.hashWithSalt` longTermPricingId
+
+instance Prelude.NFData UpdateLongTermPricing where
+  rnf UpdateLongTermPricing' {..} =
+    Prelude.rnf isLongTermPricingAutoRenew
+      `Prelude.seq` Prelude.rnf replacementJob
+      `Prelude.seq` Prelude.rnf longTermPricingId
+
+instance Data.ToHeaders UpdateLongTermPricing where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSIESnowballJobManagementService.UpdateLongTermPricing" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateLongTermPricing where
+  toJSON UpdateLongTermPricing' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("IsLongTermPricingAutoRenew" Data..=)
+              Prelude.<$> isLongTermPricingAutoRenew,
+            ("ReplacementJob" Data..=)
+              Prelude.<$> replacementJob,
+            Prelude.Just
+              ("LongTermPricingId" Data..= longTermPricingId)
+          ]
+      )
+
+instance Data.ToPath UpdateLongTermPricing where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateLongTermPricing where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateLongTermPricingResponse' smart constructor.
+data UpdateLongTermPricingResponse = UpdateLongTermPricingResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateLongTermPricingResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'httpStatus', 'updateLongTermPricingResponse_httpStatus' - The response's http status code.
+newUpdateLongTermPricingResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateLongTermPricingResponse
+newUpdateLongTermPricingResponse pHttpStatus_ =
+  UpdateLongTermPricingResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateLongTermPricingResponse_httpStatus :: Lens.Lens' UpdateLongTermPricingResponse Prelude.Int
+updateLongTermPricingResponse_httpStatus = Lens.lens (\UpdateLongTermPricingResponse' {httpStatus} -> httpStatus) (\s@UpdateLongTermPricingResponse' {} a -> s {httpStatus = a} :: UpdateLongTermPricingResponse)
+
+instance Prelude.NFData UpdateLongTermPricingResponse where
+  rnf UpdateLongTermPricingResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/Snowball/Waiters.hs b/gen/Amazonka/Snowball/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/Snowball/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.Snowball.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.Snowball.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.Snowball.Lens
+import Amazonka.Snowball.Types
diff --git a/gen/Network/AWS/Snowball.hs b/gen/Network/AWS/Snowball.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball.hs
+++ /dev/null
@@ -1,314 +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.Snowball
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- AWS Snowball is a petabyte-scale data transport solution that uses secure appliances to transfer large amounts of data between your on-premises data centers and Amazon Simple Storage Service (Amazon S3). The Snowball commands described here provide access to the same functionality that is available in the AWS Snowball Management Console, which enables you to create and manage jobs for Snowball. To transfer data locally with a Snowball appliance, you'll need to use the Snowball client or the Amazon S3 API adapter for Snowball. For more information, see the <http://docs.aws.amazon.com/AWSImportExport/latest/ug/api-reference.html User Guide> .
---
---
-module Network.AWS.Snowball
-    (
-    -- * Service Configuration
-      snowball
-
-    -- * Errors
-    -- $errors
-
-    -- ** InvalidResourceException
-    , _InvalidResourceException
-
-    -- ** UnsupportedAddressException
-    , _UnsupportedAddressException
-
-    -- ** KMSRequestFailedException
-    , _KMSRequestFailedException
-
-    -- ** InvalidJobStateException
-    , _InvalidJobStateException
-
-    -- ** InvalidInputCombinationException
-    , _InvalidInputCombinationException
-
-    -- ** InvalidNextTokenException
-    , _InvalidNextTokenException
-
-    -- ** InvalidAddressException
-    , _InvalidAddressException
-
-    -- ** ClusterLimitExceededException
-    , _ClusterLimitExceededException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** CancelCluster
-    , module Network.AWS.Snowball.CancelCluster
-
-    -- ** DescribeCluster
-    , module Network.AWS.Snowball.DescribeCluster
-
-    -- ** CreateAddress
-    , module Network.AWS.Snowball.CreateAddress
-
-    -- ** GetSnowballUsage
-    , module Network.AWS.Snowball.GetSnowballUsage
-
-    -- ** DescribeAddresses (Paginated)
-    , module Network.AWS.Snowball.DescribeAddresses
-
-    -- ** UpdateCluster
-    , module Network.AWS.Snowball.UpdateCluster
-
-    -- ** CreateJob
-    , module Network.AWS.Snowball.CreateJob
-
-    -- ** GetJobManifest
-    , module Network.AWS.Snowball.GetJobManifest
-
-    -- ** CreateCluster
-    , module Network.AWS.Snowball.CreateCluster
-
-    -- ** ListJobs (Paginated)
-    , module Network.AWS.Snowball.ListJobs
-
-    -- ** UpdateJob
-    , module Network.AWS.Snowball.UpdateJob
-
-    -- ** GetJobUnlockCode
-    , module Network.AWS.Snowball.GetJobUnlockCode
-
-    -- ** ListClusterJobs
-    , module Network.AWS.Snowball.ListClusterJobs
-
-    -- ** DescribeJob
-    , module Network.AWS.Snowball.DescribeJob
-
-    -- ** ListClusters
-    , module Network.AWS.Snowball.ListClusters
-
-    -- ** DescribeAddress
-    , module Network.AWS.Snowball.DescribeAddress
-
-    -- ** CancelJob
-    , module Network.AWS.Snowball.CancelJob
-
-    -- * Types
-
-    -- ** ClusterState
-    , ClusterState (..)
-
-    -- ** JobState
-    , JobState (..)
-
-    -- ** JobType
-    , JobType (..)
-
-    -- ** ShippingOption
-    , ShippingOption (..)
-
-    -- ** SnowballCapacity
-    , SnowballCapacity (..)
-
-    -- ** SnowballType
-    , SnowballType (..)
-
-    -- ** Address
-    , Address
-    , address
-    , aIsRestricted
-    , aStreet3
-    , aLandmark
-    , aPostalCode
-    , aCountry
-    , aStateOrProvince
-    , aStreet2
-    , aAddressId
-    , aCity
-    , aPhoneNumber
-    , aCompany
-    , aName
-    , aPrefectureOrDistrict
-    , aStreet1
-
-    -- ** ClusterListEntry
-    , ClusterListEntry
-    , clusterListEntry
-    , cleClusterState
-    , cleClusterId
-    , cleCreationDate
-    , cleDescription
-
-    -- ** ClusterMetadata
-    , ClusterMetadata
-    , clusterMetadata
-    , cmJobType
-    , cmKMSKeyARN
-    , cmClusterState
-    , cmNotification
-    , cmForwardingAddressId
-    , cmAddressId
-    , cmSnowballType
-    , cmShippingOption
-    , cmResources
-    , cmClusterId
-    , cmCreationDate
-    , cmDescription
-    , cmRoleARN
-
-    -- ** DataTransfer
-    , DataTransfer
-    , dataTransfer
-    , dtTotalObjects
-    , dtTotalBytes
-    , dtObjectsTransferred
-    , dtBytesTransferred
-
-    -- ** EventTriggerDefinition
-    , EventTriggerDefinition
-    , eventTriggerDefinition
-    , etdEventResourceARN
-
-    -- ** JobListEntry
-    , JobListEntry
-    , jobListEntry
-    , jleJobType
-    , jleJobId
-    , jleJobState
-    , jleSnowballType
-    , jleCreationDate
-    , jleDescription
-    , jleIsMaster
-
-    -- ** JobLogs
-    , JobLogs
-    , jobLogs
-    , jlJobFailureLogURI
-    , jlJobCompletionReportURI
-    , jlJobSuccessLogURI
-
-    -- ** JobMetadata
-    , JobMetadata
-    , jobMetadata
-    , jmJobType
-    , jmKMSKeyARN
-    , jmJobId
-    , jmJobLogInfo
-    , jmNotification
-    , jmJobState
-    , jmForwardingAddressId
-    , jmShippingDetails
-    , jmAddressId
-    , jmSnowballType
-    , jmDataTransferProgress
-    , jmResources
-    , jmClusterId
-    , jmCreationDate
-    , jmDescription
-    , jmRoleARN
-    , jmSnowballCapacityPreference
-
-    -- ** JobResource
-    , JobResource
-    , jobResource
-    , jrLambdaResources
-    , jrS3Resources
-
-    -- ** KeyRange
-    , KeyRange
-    , keyRange
-    , krEndMarker
-    , krBeginMarker
-
-    -- ** LambdaResource
-    , LambdaResource
-    , lambdaResource
-    , lrEventTriggers
-    , lrLambdaARN
-
-    -- ** Notification
-    , Notification
-    , notification
-    , nNotifyAll
-    , nSNSTopicARN
-    , nJobStatesToNotify
-
-    -- ** S3Resource
-    , S3Resource
-    , s3Resource
-    , srKeyRange
-    , srBucketARN
-
-    -- ** Shipment
-    , Shipment
-    , shipment
-    , sStatus
-    , sTrackingNumber
-
-    -- ** ShippingDetails
-    , ShippingDetails
-    , shippingDetails
-    , sdShippingOption
-    , sdOutboundShipment
-    , sdInboundShipment
-    ) where
-
-import Network.AWS.Snowball.CancelCluster
-import Network.AWS.Snowball.CancelJob
-import Network.AWS.Snowball.CreateAddress
-import Network.AWS.Snowball.CreateCluster
-import Network.AWS.Snowball.CreateJob
-import Network.AWS.Snowball.DescribeAddress
-import Network.AWS.Snowball.DescribeAddresses
-import Network.AWS.Snowball.DescribeCluster
-import Network.AWS.Snowball.DescribeJob
-import Network.AWS.Snowball.GetJobManifest
-import Network.AWS.Snowball.GetJobUnlockCode
-import Network.AWS.Snowball.GetSnowballUsage
-import Network.AWS.Snowball.ListClusterJobs
-import Network.AWS.Snowball.ListClusters
-import Network.AWS.Snowball.ListJobs
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.UpdateCluster
-import Network.AWS.Snowball.UpdateJob
-import Network.AWS.Snowball.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 'Snowball'.
--}
-
-{- $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/Snowball/CancelCluster.hs b/gen/Network/AWS/Snowball/CancelCluster.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/CancelCluster.hs
+++ /dev/null
@@ -1,122 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Snowball.CancelCluster
--- 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)
---
--- Cancels a cluster job. You can only cancel a cluster job while it's in the @AwaitingQuorum@ status. You'll have at least an hour after creating a cluster job to cancel it.
---
---
-module Network.AWS.Snowball.CancelCluster
-    (
-    -- * Creating a Request
-      cancelCluster
-    , CancelCluster
-    -- * Request Lenses
-    , ccClusterId
-
-    -- * Destructuring the Response
-    , cancelClusterResponse
-    , CancelClusterResponse
-    -- * Response Lenses
-    , ccrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'cancelCluster' smart constructor.
-newtype CancelCluster = CancelCluster'
-  { _ccClusterId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CancelCluster' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccClusterId' - The 39-character ID for the cluster that you want to cancel, for example @CID123e4567-e89b-12d3-a456-426655440000@ .
-cancelCluster
-    :: Text -- ^ 'ccClusterId'
-    -> CancelCluster
-cancelCluster pClusterId_ = CancelCluster' {_ccClusterId = pClusterId_}
-
-
--- | The 39-character ID for the cluster that you want to cancel, for example @CID123e4567-e89b-12d3-a456-426655440000@ .
-ccClusterId :: Lens' CancelCluster Text
-ccClusterId = lens _ccClusterId (\ s a -> s{_ccClusterId = a})
-
-instance AWSRequest CancelCluster where
-        type Rs CancelCluster = CancelClusterResponse
-        request = postJSON snowball
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 CancelClusterResponse' <$> (pure (fromEnum s)))
-
-instance Hashable CancelCluster where
-
-instance NFData CancelCluster where
-
-instance ToHeaders CancelCluster where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.CancelCluster" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CancelCluster where
-        toJSON CancelCluster'{..}
-          = object
-              (catMaybes [Just ("ClusterId" .= _ccClusterId)])
-
-instance ToPath CancelCluster where
-        toPath = const "/"
-
-instance ToQuery CancelCluster where
-        toQuery = const mempty
-
--- | /See:/ 'cancelClusterResponse' smart constructor.
-newtype CancelClusterResponse = CancelClusterResponse'
-  { _ccrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CancelClusterResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccrsResponseStatus' - -- | The response status code.
-cancelClusterResponse
-    :: Int -- ^ 'ccrsResponseStatus'
-    -> CancelClusterResponse
-cancelClusterResponse pResponseStatus_ =
-  CancelClusterResponse' {_ccrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-ccrsResponseStatus :: Lens' CancelClusterResponse Int
-ccrsResponseStatus = lens _ccrsResponseStatus (\ s a -> s{_ccrsResponseStatus = a})
-
-instance NFData CancelClusterResponse where
diff --git a/gen/Network/AWS/Snowball/CancelJob.hs b/gen/Network/AWS/Snowball/CancelJob.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/CancelJob.hs
+++ /dev/null
@@ -1,121 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Snowball.CancelJob
--- 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)
---
--- Cancels the specified job. You can only cancel a job before its @JobState@ value changes to @PreparingAppliance@ . Requesting the @ListJobs@ or @DescribeJob@ action will return a job's @JobState@ as part of the response element data returned.
---
---
-module Network.AWS.Snowball.CancelJob
-    (
-    -- * Creating a Request
-      cancelJob
-    , CancelJob
-    -- * Request Lenses
-    , cjJobId
-
-    -- * Destructuring the Response
-    , cancelJobResponse
-    , CancelJobResponse
-    -- * Response Lenses
-    , crsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'cancelJob' smart constructor.
-newtype CancelJob = CancelJob'
-  { _cjJobId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CancelJob' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cjJobId' - The 39-character job ID for the job that you want to cancel, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-cancelJob
-    :: Text -- ^ 'cjJobId'
-    -> CancelJob
-cancelJob pJobId_ = CancelJob' {_cjJobId = pJobId_}
-
-
--- | The 39-character job ID for the job that you want to cancel, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-cjJobId :: Lens' CancelJob Text
-cjJobId = lens _cjJobId (\ s a -> s{_cjJobId = a})
-
-instance AWSRequest CancelJob where
-        type Rs CancelJob = CancelJobResponse
-        request = postJSON snowball
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 CancelJobResponse' <$> (pure (fromEnum s)))
-
-instance Hashable CancelJob where
-
-instance NFData CancelJob where
-
-instance ToHeaders CancelJob where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.CancelJob" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CancelJob where
-        toJSON CancelJob'{..}
-          = object (catMaybes [Just ("JobId" .= _cjJobId)])
-
-instance ToPath CancelJob where
-        toPath = const "/"
-
-instance ToQuery CancelJob where
-        toQuery = const mempty
-
--- | /See:/ 'cancelJobResponse' smart constructor.
-newtype CancelJobResponse = CancelJobResponse'
-  { _crsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CancelJobResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crsResponseStatus' - -- | The response status code.
-cancelJobResponse
-    :: Int -- ^ 'crsResponseStatus'
-    -> CancelJobResponse
-cancelJobResponse pResponseStatus_ =
-  CancelJobResponse' {_crsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-crsResponseStatus :: Lens' CancelJobResponse Int
-crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = a})
-
-instance NFData CancelJobResponse where
diff --git a/gen/Network/AWS/Snowball/CreateAddress.hs b/gen/Network/AWS/Snowball/CreateAddress.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/CreateAddress.hs
+++ /dev/null
@@ -1,131 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Snowball.CreateAddress
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an address for a Snowball to be shipped to. In most regions, addresses are validated at the time of creation. The address you provide must be located within the serviceable area of your region. If the address is invalid or unsupported, then an exception is thrown.
---
---
-module Network.AWS.Snowball.CreateAddress
-    (
-    -- * Creating a Request
-      createAddress
-    , CreateAddress
-    -- * Request Lenses
-    , caAddress
-
-    -- * Destructuring the Response
-    , createAddressResponse
-    , CreateAddressResponse
-    -- * Response Lenses
-    , carsAddressId
-    , carsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'createAddress' smart constructor.
-newtype CreateAddress = CreateAddress'
-  { _caAddress :: Address
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'caAddress' - The address that you want the Snowball shipped to.
-createAddress
-    :: Address -- ^ 'caAddress'
-    -> CreateAddress
-createAddress pAddress_ = CreateAddress' {_caAddress = pAddress_}
-
-
--- | The address that you want the Snowball shipped to.
-caAddress :: Lens' CreateAddress Address
-caAddress = lens _caAddress (\ s a -> s{_caAddress = a})
-
-instance AWSRequest CreateAddress where
-        type Rs CreateAddress = CreateAddressResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateAddressResponse' <$>
-                   (x .?> "AddressId") <*> (pure (fromEnum s)))
-
-instance Hashable CreateAddress where
-
-instance NFData CreateAddress where
-
-instance ToHeaders CreateAddress where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.CreateAddress" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateAddress where
-        toJSON CreateAddress'{..}
-          = object (catMaybes [Just ("Address" .= _caAddress)])
-
-instance ToPath CreateAddress where
-        toPath = const "/"
-
-instance ToQuery CreateAddress where
-        toQuery = const mempty
-
--- | /See:/ 'createAddressResponse' smart constructor.
-data CreateAddressResponse = CreateAddressResponse'
-  { _carsAddressId      :: !(Maybe Text)
-  , _carsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateAddressResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'carsAddressId' - The automatically generated ID for a specific address. You'll use this ID when you create a job to specify which address you want the Snowball for that job shipped to.
---
--- * 'carsResponseStatus' - -- | The response status code.
-createAddressResponse
-    :: Int -- ^ 'carsResponseStatus'
-    -> CreateAddressResponse
-createAddressResponse pResponseStatus_ =
-  CreateAddressResponse'
-    {_carsAddressId = Nothing, _carsResponseStatus = pResponseStatus_}
-
-
--- | The automatically generated ID for a specific address. You'll use this ID when you create a job to specify which address you want the Snowball for that job shipped to.
-carsAddressId :: Lens' CreateAddressResponse (Maybe Text)
-carsAddressId = lens _carsAddressId (\ s a -> s{_carsAddressId = a})
-
--- | -- | The response status code.
-carsResponseStatus :: Lens' CreateAddressResponse Int
-carsResponseStatus = lens _carsResponseStatus (\ s a -> s{_carsResponseStatus = a})
-
-instance NFData CreateAddressResponse where
diff --git a/gen/Network/AWS/Snowball/CreateCluster.hs b/gen/Network/AWS/Snowball/CreateCluster.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/CreateCluster.hs
+++ /dev/null
@@ -1,231 +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.Snowball.CreateCluster
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates an empty cluster. Each cluster supports five nodes. You use the 'CreateJob' action separately to create the jobs for each of these nodes. The cluster does not ship until these five node jobs have been created.
---
---
-module Network.AWS.Snowball.CreateCluster
-    (
-    -- * Creating a Request
-      createCluster
-    , CreateCluster
-    -- * Request Lenses
-    , ccKMSKeyARN
-    , ccNotification
-    , ccForwardingAddressId
-    , ccSnowballType
-    , ccDescription
-    , ccJobType
-    , ccResources
-    , ccAddressId
-    , ccRoleARN
-    , ccShippingOption
-
-    -- * Destructuring the Response
-    , createClusterResponse
-    , CreateClusterResponse
-    -- * Response Lenses
-    , crersClusterId
-    , crersResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'createCluster' smart constructor.
-data CreateCluster = CreateCluster'
-  { _ccKMSKeyARN           :: !(Maybe Text)
-  , _ccNotification        :: !(Maybe Notification)
-  , _ccForwardingAddressId :: !(Maybe Text)
-  , _ccSnowballType        :: !(Maybe SnowballType)
-  , _ccDescription         :: !(Maybe Text)
-  , _ccJobType             :: !JobType
-  , _ccResources           :: !JobResource
-  , _ccAddressId           :: !Text
-  , _ccRoleARN             :: !Text
-  , _ccShippingOption      :: !ShippingOption
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateCluster' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ccKMSKeyARN' - The @KmsKeyARN@ value that you want to associate with this cluster. @KmsKeyARN@ values are created by using the <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey> API action in AWS Key Management Service (AWS KMS).
---
--- * 'ccNotification' - The Amazon Simple Notification Service (Amazon SNS) notification settings for this cluster.
---
--- * 'ccForwardingAddressId' - The forwarding address ID for a cluster. This field is not supported in most regions.
---
--- * 'ccSnowballType' - The type of AWS Snowball appliance to use for this cluster. Currently, the only supported appliance type for cluster jobs is @EDGE@ .
---
--- * 'ccDescription' - An optional description of this specific cluster, for example @Environmental Data Cluster-01@ .
---
--- * 'ccJobType' - The type of job for this cluster. Currently, the only job type supported for clusters is @LOCAL_USE@ .
---
--- * 'ccResources' - The resources associated with the cluster job. These resources include Amazon S3 buckets and optional AWS Lambda functions written in the Python language.
---
--- * 'ccAddressId' - The ID for the address that you want the cluster shipped to.
---
--- * 'ccRoleARN' - The @RoleARN@ that you want to associate with this cluster. @RoleArn@ values are created by using the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> API action in AWS Identity and Access Management (IAM).
---
--- * 'ccShippingOption' - The shipping speed for each node in this cluster. This speed doesn't dictate how soon you'll get each Snowball Edge appliance, rather it represents how quickly each appliance moves to its destination while in transit. Regional shipping speeds are as follows:     * In Australia, you have access to express shipping. Typically, appliances shipped express are delivered in about a day.     * In the European Union (EU), you have access to express shipping. Typically, Snowball Edges shipped express are delivered in about a day. In addition, most countries in the EU have access to standard shipping, which typically takes less than a week, one way.     * In India, Snowball Edges are delivered in one to seven days.     * In the US, you have access to one-day shipping and two-day shipping.
-createCluster
-    :: JobType -- ^ 'ccJobType'
-    -> JobResource -- ^ 'ccResources'
-    -> Text -- ^ 'ccAddressId'
-    -> Text -- ^ 'ccRoleARN'
-    -> ShippingOption -- ^ 'ccShippingOption'
-    -> CreateCluster
-createCluster pJobType_ pResources_ pAddressId_ pRoleARN_ pShippingOption_ =
-  CreateCluster'
-    { _ccKMSKeyARN = Nothing
-    , _ccNotification = Nothing
-    , _ccForwardingAddressId = Nothing
-    , _ccSnowballType = Nothing
-    , _ccDescription = Nothing
-    , _ccJobType = pJobType_
-    , _ccResources = pResources_
-    , _ccAddressId = pAddressId_
-    , _ccRoleARN = pRoleARN_
-    , _ccShippingOption = pShippingOption_
-    }
-
-
--- | The @KmsKeyARN@ value that you want to associate with this cluster. @KmsKeyARN@ values are created by using the <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey> API action in AWS Key Management Service (AWS KMS).
-ccKMSKeyARN :: Lens' CreateCluster (Maybe Text)
-ccKMSKeyARN = lens _ccKMSKeyARN (\ s a -> s{_ccKMSKeyARN = a})
-
--- | The Amazon Simple Notification Service (Amazon SNS) notification settings for this cluster.
-ccNotification :: Lens' CreateCluster (Maybe Notification)
-ccNotification = lens _ccNotification (\ s a -> s{_ccNotification = a})
-
--- | The forwarding address ID for a cluster. This field is not supported in most regions.
-ccForwardingAddressId :: Lens' CreateCluster (Maybe Text)
-ccForwardingAddressId = lens _ccForwardingAddressId (\ s a -> s{_ccForwardingAddressId = a})
-
--- | The type of AWS Snowball appliance to use for this cluster. Currently, the only supported appliance type for cluster jobs is @EDGE@ .
-ccSnowballType :: Lens' CreateCluster (Maybe SnowballType)
-ccSnowballType = lens _ccSnowballType (\ s a -> s{_ccSnowballType = a})
-
--- | An optional description of this specific cluster, for example @Environmental Data Cluster-01@ .
-ccDescription :: Lens' CreateCluster (Maybe Text)
-ccDescription = lens _ccDescription (\ s a -> s{_ccDescription = a})
-
--- | The type of job for this cluster. Currently, the only job type supported for clusters is @LOCAL_USE@ .
-ccJobType :: Lens' CreateCluster JobType
-ccJobType = lens _ccJobType (\ s a -> s{_ccJobType = a})
-
--- | The resources associated with the cluster job. These resources include Amazon S3 buckets and optional AWS Lambda functions written in the Python language.
-ccResources :: Lens' CreateCluster JobResource
-ccResources = lens _ccResources (\ s a -> s{_ccResources = a})
-
--- | The ID for the address that you want the cluster shipped to.
-ccAddressId :: Lens' CreateCluster Text
-ccAddressId = lens _ccAddressId (\ s a -> s{_ccAddressId = a})
-
--- | The @RoleARN@ that you want to associate with this cluster. @RoleArn@ values are created by using the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> API action in AWS Identity and Access Management (IAM).
-ccRoleARN :: Lens' CreateCluster Text
-ccRoleARN = lens _ccRoleARN (\ s a -> s{_ccRoleARN = a})
-
--- | The shipping speed for each node in this cluster. This speed doesn't dictate how soon you'll get each Snowball Edge appliance, rather it represents how quickly each appliance moves to its destination while in transit. Regional shipping speeds are as follows:     * In Australia, you have access to express shipping. Typically, appliances shipped express are delivered in about a day.     * In the European Union (EU), you have access to express shipping. Typically, Snowball Edges shipped express are delivered in about a day. In addition, most countries in the EU have access to standard shipping, which typically takes less than a week, one way.     * In India, Snowball Edges are delivered in one to seven days.     * In the US, you have access to one-day shipping and two-day shipping.
-ccShippingOption :: Lens' CreateCluster ShippingOption
-ccShippingOption = lens _ccShippingOption (\ s a -> s{_ccShippingOption = a})
-
-instance AWSRequest CreateCluster where
-        type Rs CreateCluster = CreateClusterResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateClusterResponse' <$>
-                   (x .?> "ClusterId") <*> (pure (fromEnum s)))
-
-instance Hashable CreateCluster where
-
-instance NFData CreateCluster where
-
-instance ToHeaders CreateCluster where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.CreateCluster" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateCluster where
-        toJSON CreateCluster'{..}
-          = object
-              (catMaybes
-                 [("KmsKeyARN" .=) <$> _ccKMSKeyARN,
-                  ("Notification" .=) <$> _ccNotification,
-                  ("ForwardingAddressId" .=) <$>
-                    _ccForwardingAddressId,
-                  ("SnowballType" .=) <$> _ccSnowballType,
-                  ("Description" .=) <$> _ccDescription,
-                  Just ("JobType" .= _ccJobType),
-                  Just ("Resources" .= _ccResources),
-                  Just ("AddressId" .= _ccAddressId),
-                  Just ("RoleARN" .= _ccRoleARN),
-                  Just ("ShippingOption" .= _ccShippingOption)])
-
-instance ToPath CreateCluster where
-        toPath = const "/"
-
-instance ToQuery CreateCluster where
-        toQuery = const mempty
-
--- | /See:/ 'createClusterResponse' smart constructor.
-data CreateClusterResponse = CreateClusterResponse'
-  { _crersClusterId      :: !(Maybe Text)
-  , _crersResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateClusterResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crersClusterId' - The automatically generated ID for a cluster.
---
--- * 'crersResponseStatus' - -- | The response status code.
-createClusterResponse
-    :: Int -- ^ 'crersResponseStatus'
-    -> CreateClusterResponse
-createClusterResponse pResponseStatus_ =
-  CreateClusterResponse'
-    {_crersClusterId = Nothing, _crersResponseStatus = pResponseStatus_}
-
-
--- | The automatically generated ID for a cluster.
-crersClusterId :: Lens' CreateClusterResponse (Maybe Text)
-crersClusterId = lens _crersClusterId (\ s a -> s{_crersClusterId = a})
-
--- | -- | The response status code.
-crersResponseStatus :: Lens' CreateClusterResponse Int
-crersResponseStatus = lens _crersResponseStatus (\ s a -> s{_crersResponseStatus = a})
-
-instance NFData CreateClusterResponse where
diff --git a/gen/Network/AWS/Snowball/CreateJob.hs b/gen/Network/AWS/Snowball/CreateJob.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/CreateJob.hs
+++ /dev/null
@@ -1,247 +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.Snowball.CreateJob
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Creates a job to import or export data between Amazon S3 and your on-premises data center. Your AWS account must have the right trust policies and permissions in place to create a job for Snowball. If you're creating a job for a node in a cluster, you only need to provide the @clusterId@ value; the other job attributes are inherited from the cluster.
---
---
-module Network.AWS.Snowball.CreateJob
-    (
-    -- * Creating a Request
-      createJob
-    , CreateJob
-    -- * Request Lenses
-    , cjJobType
-    , cjKMSKeyARN
-    , cjNotification
-    , cjForwardingAddressId
-    , cjAddressId
-    , cjSnowballType
-    , cjShippingOption
-    , cjResources
-    , cjClusterId
-    , cjDescription
-    , cjRoleARN
-    , cjSnowballCapacityPreference
-
-    -- * Destructuring the Response
-    , createJobResponse
-    , CreateJobResponse
-    -- * Response Lenses
-    , cjrsJobId
-    , cjrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'createJob' smart constructor.
-data CreateJob = CreateJob'
-  { _cjJobType                    :: !(Maybe JobType)
-  , _cjKMSKeyARN                  :: !(Maybe Text)
-  , _cjNotification               :: !(Maybe Notification)
-  , _cjForwardingAddressId        :: !(Maybe Text)
-  , _cjAddressId                  :: !(Maybe Text)
-  , _cjSnowballType               :: !(Maybe SnowballType)
-  , _cjShippingOption             :: !(Maybe ShippingOption)
-  , _cjResources                  :: !(Maybe JobResource)
-  , _cjClusterId                  :: !(Maybe Text)
-  , _cjDescription                :: !(Maybe Text)
-  , _cjRoleARN                    :: !(Maybe Text)
-  , _cjSnowballCapacityPreference :: !(Maybe SnowballCapacity)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateJob' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cjJobType' - Defines the type of job that you're creating.
---
--- * 'cjKMSKeyARN' - The @KmsKeyARN@ that you want to associate with this job. @KmsKeyARN@ s are created using the <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey> AWS Key Management Service (KMS) API action.
---
--- * 'cjNotification' - Defines the Amazon Simple Notification Service (Amazon SNS) notification settings for this job.
---
--- * 'cjForwardingAddressId' - The forwarding address ID for a job. This field is not supported in most regions.
---
--- * 'cjAddressId' - The ID for the address that you want the Snowball shipped to.
---
--- * 'cjSnowballType' - The type of AWS Snowball appliance to use for this job. Currently, the only supported appliance type for cluster jobs is @EDGE@ .
---
--- * 'cjShippingOption' - The shipping speed for this job. This speed doesn't dictate how soon you'll get the Snowball, rather it represents how quickly the Snowball moves to its destination while in transit. Regional shipping speeds are as follows:     * In Australia, you have access to express shipping. Typically, Snowballs shipped express are delivered in about a day.     * In the European Union (EU), you have access to express shipping. Typically, Snowballs shipped express are delivered in about a day. In addition, most countries in the EU have access to standard shipping, which typically takes less than a week, one way.     * In India, Snowballs are delivered in one to seven days.     * In the US, you have access to one-day shipping and two-day shipping.
---
--- * 'cjResources' - Defines the Amazon S3 buckets associated with this job. With @IMPORT@ jobs, you specify the bucket or buckets that your transferred data will be imported into. With @EXPORT@ jobs, you specify the bucket or buckets that your transferred data will be exported from. Optionally, you can also specify a @KeyRange@ value. If you choose to export a range, you define the length of the range by providing either an inclusive @BeginMarker@ value, an inclusive @EndMarker@ value, or both. Ranges are UTF-8 binary sorted.
---
--- * 'cjClusterId' - The ID of a cluster. If you're creating a job for a node in a cluster, you need to provide only this @clusterId@ value. The other job attributes are inherited from the cluster.
---
--- * 'cjDescription' - Defines an optional description of this specific job, for example @Important Photos 2016-08-11@ .
---
--- * 'cjRoleARN' - The @RoleARN@ that you want to associate with this job. @RoleArn@ s are created using the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> AWS Identity and Access Management (IAM) API action.
---
--- * 'cjSnowballCapacityPreference' - If your job is being created in one of the US regions, you have the option of specifying what size Snowball you'd like for this job. In all other regions, Snowballs come with 80 TB in storage capacity.
-createJob
-    :: CreateJob
-createJob =
-  CreateJob'
-    { _cjJobType = Nothing
-    , _cjKMSKeyARN = Nothing
-    , _cjNotification = Nothing
-    , _cjForwardingAddressId = Nothing
-    , _cjAddressId = Nothing
-    , _cjSnowballType = Nothing
-    , _cjShippingOption = Nothing
-    , _cjResources = Nothing
-    , _cjClusterId = Nothing
-    , _cjDescription = Nothing
-    , _cjRoleARN = Nothing
-    , _cjSnowballCapacityPreference = Nothing
-    }
-
-
--- | Defines the type of job that you're creating.
-cjJobType :: Lens' CreateJob (Maybe JobType)
-cjJobType = lens _cjJobType (\ s a -> s{_cjJobType = a})
-
--- | The @KmsKeyARN@ that you want to associate with this job. @KmsKeyARN@ s are created using the <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey> AWS Key Management Service (KMS) API action.
-cjKMSKeyARN :: Lens' CreateJob (Maybe Text)
-cjKMSKeyARN = lens _cjKMSKeyARN (\ s a -> s{_cjKMSKeyARN = a})
-
--- | Defines the Amazon Simple Notification Service (Amazon SNS) notification settings for this job.
-cjNotification :: Lens' CreateJob (Maybe Notification)
-cjNotification = lens _cjNotification (\ s a -> s{_cjNotification = a})
-
--- | The forwarding address ID for a job. This field is not supported in most regions.
-cjForwardingAddressId :: Lens' CreateJob (Maybe Text)
-cjForwardingAddressId = lens _cjForwardingAddressId (\ s a -> s{_cjForwardingAddressId = a})
-
--- | The ID for the address that you want the Snowball shipped to.
-cjAddressId :: Lens' CreateJob (Maybe Text)
-cjAddressId = lens _cjAddressId (\ s a -> s{_cjAddressId = a})
-
--- | The type of AWS Snowball appliance to use for this job. Currently, the only supported appliance type for cluster jobs is @EDGE@ .
-cjSnowballType :: Lens' CreateJob (Maybe SnowballType)
-cjSnowballType = lens _cjSnowballType (\ s a -> s{_cjSnowballType = a})
-
--- | The shipping speed for this job. This speed doesn't dictate how soon you'll get the Snowball, rather it represents how quickly the Snowball moves to its destination while in transit. Regional shipping speeds are as follows:     * In Australia, you have access to express shipping. Typically, Snowballs shipped express are delivered in about a day.     * In the European Union (EU), you have access to express shipping. Typically, Snowballs shipped express are delivered in about a day. In addition, most countries in the EU have access to standard shipping, which typically takes less than a week, one way.     * In India, Snowballs are delivered in one to seven days.     * In the US, you have access to one-day shipping and two-day shipping.
-cjShippingOption :: Lens' CreateJob (Maybe ShippingOption)
-cjShippingOption = lens _cjShippingOption (\ s a -> s{_cjShippingOption = a})
-
--- | Defines the Amazon S3 buckets associated with this job. With @IMPORT@ jobs, you specify the bucket or buckets that your transferred data will be imported into. With @EXPORT@ jobs, you specify the bucket or buckets that your transferred data will be exported from. Optionally, you can also specify a @KeyRange@ value. If you choose to export a range, you define the length of the range by providing either an inclusive @BeginMarker@ value, an inclusive @EndMarker@ value, or both. Ranges are UTF-8 binary sorted.
-cjResources :: Lens' CreateJob (Maybe JobResource)
-cjResources = lens _cjResources (\ s a -> s{_cjResources = a})
-
--- | The ID of a cluster. If you're creating a job for a node in a cluster, you need to provide only this @clusterId@ value. The other job attributes are inherited from the cluster.
-cjClusterId :: Lens' CreateJob (Maybe Text)
-cjClusterId = lens _cjClusterId (\ s a -> s{_cjClusterId = a})
-
--- | Defines an optional description of this specific job, for example @Important Photos 2016-08-11@ .
-cjDescription :: Lens' CreateJob (Maybe Text)
-cjDescription = lens _cjDescription (\ s a -> s{_cjDescription = a})
-
--- | The @RoleARN@ that you want to associate with this job. @RoleArn@ s are created using the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> AWS Identity and Access Management (IAM) API action.
-cjRoleARN :: Lens' CreateJob (Maybe Text)
-cjRoleARN = lens _cjRoleARN (\ s a -> s{_cjRoleARN = a})
-
--- | If your job is being created in one of the US regions, you have the option of specifying what size Snowball you'd like for this job. In all other regions, Snowballs come with 80 TB in storage capacity.
-cjSnowballCapacityPreference :: Lens' CreateJob (Maybe SnowballCapacity)
-cjSnowballCapacityPreference = lens _cjSnowballCapacityPreference (\ s a -> s{_cjSnowballCapacityPreference = a})
-
-instance AWSRequest CreateJob where
-        type Rs CreateJob = CreateJobResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateJobResponse' <$>
-                   (x .?> "JobId") <*> (pure (fromEnum s)))
-
-instance Hashable CreateJob where
-
-instance NFData CreateJob where
-
-instance ToHeaders CreateJob where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.CreateJob" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateJob where
-        toJSON CreateJob'{..}
-          = object
-              (catMaybes
-                 [("JobType" .=) <$> _cjJobType,
-                  ("KmsKeyARN" .=) <$> _cjKMSKeyARN,
-                  ("Notification" .=) <$> _cjNotification,
-                  ("ForwardingAddressId" .=) <$>
-                    _cjForwardingAddressId,
-                  ("AddressId" .=) <$> _cjAddressId,
-                  ("SnowballType" .=) <$> _cjSnowballType,
-                  ("ShippingOption" .=) <$> _cjShippingOption,
-                  ("Resources" .=) <$> _cjResources,
-                  ("ClusterId" .=) <$> _cjClusterId,
-                  ("Description" .=) <$> _cjDescription,
-                  ("RoleARN" .=) <$> _cjRoleARN,
-                  ("SnowballCapacityPreference" .=) <$>
-                    _cjSnowballCapacityPreference])
-
-instance ToPath CreateJob where
-        toPath = const "/"
-
-instance ToQuery CreateJob where
-        toQuery = const mempty
-
--- | /See:/ 'createJobResponse' smart constructor.
-data CreateJobResponse = CreateJobResponse'
-  { _cjrsJobId          :: !(Maybe Text)
-  , _cjrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateJobResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cjrsJobId' - The automatically generated ID for a job, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
---
--- * 'cjrsResponseStatus' - -- | The response status code.
-createJobResponse
-    :: Int -- ^ 'cjrsResponseStatus'
-    -> CreateJobResponse
-createJobResponse pResponseStatus_ =
-  CreateJobResponse'
-    {_cjrsJobId = Nothing, _cjrsResponseStatus = pResponseStatus_}
-
-
--- | The automatically generated ID for a job, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-cjrsJobId :: Lens' CreateJobResponse (Maybe Text)
-cjrsJobId = lens _cjrsJobId (\ s a -> s{_cjrsJobId = a})
-
--- | -- | The response status code.
-cjrsResponseStatus :: Lens' CreateJobResponse Int
-cjrsResponseStatus = lens _cjrsResponseStatus (\ s a -> s{_cjrsResponseStatus = a})
-
-instance NFData CreateJobResponse where
diff --git a/gen/Network/AWS/Snowball/DescribeAddress.hs b/gen/Network/AWS/Snowball/DescribeAddress.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/DescribeAddress.hs
+++ /dev/null
@@ -1,132 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Snowball.DescribeAddress
--- 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)
---
--- Takes an @AddressId@ and returns specific details about that address in the form of an @Address@ object.
---
---
-module Network.AWS.Snowball.DescribeAddress
-    (
-    -- * Creating a Request
-      describeAddress
-    , DescribeAddress
-    -- * Request Lenses
-    , daAddressId
-
-    -- * Destructuring the Response
-    , describeAddressResponse
-    , DescribeAddressResponse
-    -- * Response Lenses
-    , darsAddress
-    , darsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'describeAddress' smart constructor.
-newtype DescribeAddress = DescribeAddress'
-  { _daAddressId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'daAddressId' - The automatically generated ID for a specific address.
-describeAddress
-    :: Text -- ^ 'daAddressId'
-    -> DescribeAddress
-describeAddress pAddressId_ = DescribeAddress' {_daAddressId = pAddressId_}
-
-
--- | The automatically generated ID for a specific address.
-daAddressId :: Lens' DescribeAddress Text
-daAddressId = lens _daAddressId (\ s a -> s{_daAddressId = a})
-
-instance AWSRequest DescribeAddress where
-        type Rs DescribeAddress = DescribeAddressResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeAddressResponse' <$>
-                   (x .?> "Address") <*> (pure (fromEnum s)))
-
-instance Hashable DescribeAddress where
-
-instance NFData DescribeAddress where
-
-instance ToHeaders DescribeAddress where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.DescribeAddress"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeAddress where
-        toJSON DescribeAddress'{..}
-          = object
-              (catMaybes [Just ("AddressId" .= _daAddressId)])
-
-instance ToPath DescribeAddress where
-        toPath = const "/"
-
-instance ToQuery DescribeAddress where
-        toQuery = const mempty
-
--- | /See:/ 'describeAddressResponse' smart constructor.
-data DescribeAddressResponse = DescribeAddressResponse'
-  { _darsAddress        :: !(Maybe Address)
-  , _darsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeAddressResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'darsAddress' - The address that you want the Snowball or Snowballs associated with a specific job to be shipped to.
---
--- * 'darsResponseStatus' - -- | The response status code.
-describeAddressResponse
-    :: Int -- ^ 'darsResponseStatus'
-    -> DescribeAddressResponse
-describeAddressResponse pResponseStatus_ =
-  DescribeAddressResponse'
-    {_darsAddress = Nothing, _darsResponseStatus = pResponseStatus_}
-
-
--- | The address that you want the Snowball or Snowballs associated with a specific job to be shipped to.
-darsAddress :: Lens' DescribeAddressResponse (Maybe Address)
-darsAddress = lens _darsAddress (\ s a -> s{_darsAddress = a})
-
--- | -- | The response status code.
-darsResponseStatus :: Lens' DescribeAddressResponse Int
-darsResponseStatus = lens _darsResponseStatus (\ s a -> s{_darsResponseStatus = a})
-
-instance NFData DescribeAddressResponse where
diff --git a/gen/Network/AWS/Snowball/DescribeAddresses.hs b/gen/Network/AWS/Snowball/DescribeAddresses.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/DescribeAddresses.hs
+++ /dev/null
@@ -1,165 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Snowball.DescribeAddresses
--- 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 a specified number of @ADDRESS@ objects. Calling this API in one of the US regions will return addresses from the list of all addresses associated with this account in all US regions.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.Snowball.DescribeAddresses
-    (
-    -- * Creating a Request
-      describeAddresses
-    , DescribeAddresses
-    -- * Request Lenses
-    , daNextToken
-    , daMaxResults
-
-    -- * Destructuring the Response
-    , describeAddressesResponse
-    , DescribeAddressesResponse
-    -- * Response Lenses
-    , drsAddresses
-    , drsNextToken
-    , drsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'describeAddresses' smart constructor.
-data DescribeAddresses = DescribeAddresses'
-  { _daNextToken  :: !(Maybe Text)
-  , _daMaxResults :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeAddresses' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'daNextToken' - HTTP requests are stateless. To identify what object comes "next" in the list of @ADDRESS@ objects, you have the option of specifying a value for @NextToken@ as the starting point for your list of returned addresses.
---
--- * 'daMaxResults' - The number of @ADDRESS@ objects to return.
-describeAddresses
-    :: DescribeAddresses
-describeAddresses =
-  DescribeAddresses' {_daNextToken = Nothing, _daMaxResults = Nothing}
-
-
--- | HTTP requests are stateless. To identify what object comes "next" in the list of @ADDRESS@ objects, you have the option of specifying a value for @NextToken@ as the starting point for your list of returned addresses.
-daNextToken :: Lens' DescribeAddresses (Maybe Text)
-daNextToken = lens _daNextToken (\ s a -> s{_daNextToken = a})
-
--- | The number of @ADDRESS@ objects to return.
-daMaxResults :: Lens' DescribeAddresses (Maybe Natural)
-daMaxResults = lens _daMaxResults (\ s a -> s{_daMaxResults = a}) . mapping _Nat
-
-instance AWSPager DescribeAddresses where
-        page rq rs
-          | stop (rs ^. drsNextToken) = Nothing
-          | stop (rs ^. drsAddresses) = Nothing
-          | otherwise =
-            Just $ rq & daNextToken .~ rs ^. drsNextToken
-
-instance AWSRequest DescribeAddresses where
-        type Rs DescribeAddresses = DescribeAddressesResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeAddressesResponse' <$>
-                   (x .?> "Addresses" .!@ mempty) <*>
-                     (x .?> "NextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeAddresses where
-
-instance NFData DescribeAddresses where
-
-instance ToHeaders DescribeAddresses where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.DescribeAddresses"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeAddresses where
-        toJSON DescribeAddresses'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _daNextToken,
-                  ("MaxResults" .=) <$> _daMaxResults])
-
-instance ToPath DescribeAddresses where
-        toPath = const "/"
-
-instance ToQuery DescribeAddresses where
-        toQuery = const mempty
-
--- | /See:/ 'describeAddressesResponse' smart constructor.
-data DescribeAddressesResponse = DescribeAddressesResponse'
-  { _drsAddresses      :: !(Maybe [Address])
-  , _drsNextToken      :: !(Maybe Text)
-  , _drsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeAddressesResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drsAddresses' - The Snowball shipping addresses that were created for this account.
---
--- * 'drsNextToken' - HTTP requests are stateless. If you use the automatically generated @NextToken@ value in your next @DescribeAddresses@ call, your list of returned addresses will start from this point in the array.
---
--- * 'drsResponseStatus' - -- | The response status code.
-describeAddressesResponse
-    :: Int -- ^ 'drsResponseStatus'
-    -> DescribeAddressesResponse
-describeAddressesResponse pResponseStatus_ =
-  DescribeAddressesResponse'
-    { _drsAddresses = Nothing
-    , _drsNextToken = Nothing
-    , _drsResponseStatus = pResponseStatus_
-    }
-
-
--- | The Snowball shipping addresses that were created for this account.
-drsAddresses :: Lens' DescribeAddressesResponse [Address]
-drsAddresses = lens _drsAddresses (\ s a -> s{_drsAddresses = a}) . _Default . _Coerce
-
--- | HTTP requests are stateless. If you use the automatically generated @NextToken@ value in your next @DescribeAddresses@ call, your list of returned addresses will start from this point in the array.
-drsNextToken :: Lens' DescribeAddressesResponse (Maybe Text)
-drsNextToken = lens _drsNextToken (\ s a -> s{_drsNextToken = a})
-
--- | -- | The response status code.
-drsResponseStatus :: Lens' DescribeAddressesResponse Int
-drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a})
-
-instance NFData DescribeAddressesResponse where
diff --git a/gen/Network/AWS/Snowball/DescribeCluster.hs b/gen/Network/AWS/Snowball/DescribeCluster.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/DescribeCluster.hs
+++ /dev/null
@@ -1,132 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Snowball.DescribeCluster
--- 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 a specific cluster including shipping information, cluster status, and other important metadata.
---
---
-module Network.AWS.Snowball.DescribeCluster
-    (
-    -- * Creating a Request
-      describeCluster
-    , DescribeCluster
-    -- * Request Lenses
-    , dcClusterId
-
-    -- * Destructuring the Response
-    , describeClusterResponse
-    , DescribeClusterResponse
-    -- * Response Lenses
-    , dcrsClusterMetadata
-    , dcrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'describeCluster' smart constructor.
-newtype DescribeCluster = DescribeCluster'
-  { _dcClusterId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeCluster' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcClusterId' - The automatically generated ID for a cluster.
-describeCluster
-    :: Text -- ^ 'dcClusterId'
-    -> DescribeCluster
-describeCluster pClusterId_ = DescribeCluster' {_dcClusterId = pClusterId_}
-
-
--- | The automatically generated ID for a cluster.
-dcClusterId :: Lens' DescribeCluster Text
-dcClusterId = lens _dcClusterId (\ s a -> s{_dcClusterId = a})
-
-instance AWSRequest DescribeCluster where
-        type Rs DescribeCluster = DescribeClusterResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeClusterResponse' <$>
-                   (x .?> "ClusterMetadata") <*> (pure (fromEnum s)))
-
-instance Hashable DescribeCluster where
-
-instance NFData DescribeCluster where
-
-instance ToHeaders DescribeCluster where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.DescribeCluster"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeCluster where
-        toJSON DescribeCluster'{..}
-          = object
-              (catMaybes [Just ("ClusterId" .= _dcClusterId)])
-
-instance ToPath DescribeCluster where
-        toPath = const "/"
-
-instance ToQuery DescribeCluster where
-        toQuery = const mempty
-
--- | /See:/ 'describeClusterResponse' smart constructor.
-data DescribeClusterResponse = DescribeClusterResponse'
-  { _dcrsClusterMetadata :: !(Maybe ClusterMetadata)
-  , _dcrsResponseStatus  :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeClusterResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcrsClusterMetadata' - Information about a specific cluster, including shipping information, cluster status, and other important metadata.
---
--- * 'dcrsResponseStatus' - -- | The response status code.
-describeClusterResponse
-    :: Int -- ^ 'dcrsResponseStatus'
-    -> DescribeClusterResponse
-describeClusterResponse pResponseStatus_ =
-  DescribeClusterResponse'
-    {_dcrsClusterMetadata = Nothing, _dcrsResponseStatus = pResponseStatus_}
-
-
--- | Information about a specific cluster, including shipping information, cluster status, and other important metadata.
-dcrsClusterMetadata :: Lens' DescribeClusterResponse (Maybe ClusterMetadata)
-dcrsClusterMetadata = lens _dcrsClusterMetadata (\ s a -> s{_dcrsClusterMetadata = a})
-
--- | -- | The response status code.
-dcrsResponseStatus :: Lens' DescribeClusterResponse Int
-dcrsResponseStatus = lens _dcrsResponseStatus (\ s a -> s{_dcrsResponseStatus = a})
-
-instance NFData DescribeClusterResponse where
diff --git a/gen/Network/AWS/Snowball/DescribeJob.hs b/gen/Network/AWS/Snowball/DescribeJob.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/DescribeJob.hs
+++ /dev/null
@@ -1,144 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Snowball.DescribeJob
--- 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 a specific job including shipping information, job status, and other important metadata.
---
---
-module Network.AWS.Snowball.DescribeJob
-    (
-    -- * Creating a Request
-      describeJob
-    , DescribeJob
-    -- * Request Lenses
-    , djJobId
-
-    -- * Destructuring the Response
-    , describeJobResponse
-    , DescribeJobResponse
-    -- * Response Lenses
-    , djrsJobMetadata
-    , djrsSubJobMetadata
-    , djrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'describeJob' smart constructor.
-newtype DescribeJob = DescribeJob'
-  { _djJobId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeJob' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'djJobId' - The automatically generated ID for a job, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-describeJob
-    :: Text -- ^ 'djJobId'
-    -> DescribeJob
-describeJob pJobId_ = DescribeJob' {_djJobId = pJobId_}
-
-
--- | The automatically generated ID for a job, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-djJobId :: Lens' DescribeJob Text
-djJobId = lens _djJobId (\ s a -> s{_djJobId = a})
-
-instance AWSRequest DescribeJob where
-        type Rs DescribeJob = DescribeJobResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 DescribeJobResponse' <$>
-                   (x .?> "JobMetadata") <*>
-                     (x .?> "SubJobMetadata" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable DescribeJob where
-
-instance NFData DescribeJob where
-
-instance ToHeaders DescribeJob where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.DescribeJob" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DescribeJob where
-        toJSON DescribeJob'{..}
-          = object (catMaybes [Just ("JobId" .= _djJobId)])
-
-instance ToPath DescribeJob where
-        toPath = const "/"
-
-instance ToQuery DescribeJob where
-        toQuery = const mempty
-
--- | /See:/ 'describeJobResponse' smart constructor.
-data DescribeJobResponse = DescribeJobResponse'
-  { _djrsJobMetadata    :: !(Maybe JobMetadata)
-  , _djrsSubJobMetadata :: !(Maybe [JobMetadata])
-  , _djrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DescribeJobResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'djrsJobMetadata' - Information about a specific job, including shipping information, job status, and other important metadata.
---
--- * 'djrsSubJobMetadata' - Information about a specific job part (in the case of an export job), including shipping information, job status, and other important metadata.
---
--- * 'djrsResponseStatus' - -- | The response status code.
-describeJobResponse
-    :: Int -- ^ 'djrsResponseStatus'
-    -> DescribeJobResponse
-describeJobResponse pResponseStatus_ =
-  DescribeJobResponse'
-    { _djrsJobMetadata = Nothing
-    , _djrsSubJobMetadata = Nothing
-    , _djrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Information about a specific job, including shipping information, job status, and other important metadata.
-djrsJobMetadata :: Lens' DescribeJobResponse (Maybe JobMetadata)
-djrsJobMetadata = lens _djrsJobMetadata (\ s a -> s{_djrsJobMetadata = a})
-
--- | Information about a specific job part (in the case of an export job), including shipping information, job status, and other important metadata.
-djrsSubJobMetadata :: Lens' DescribeJobResponse [JobMetadata]
-djrsSubJobMetadata = lens _djrsSubJobMetadata (\ s a -> s{_djrsSubJobMetadata = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-djrsResponseStatus :: Lens' DescribeJobResponse Int
-djrsResponseStatus = lens _djrsResponseStatus (\ s a -> s{_djrsResponseStatus = a})
-
-instance NFData DescribeJobResponse where
diff --git a/gen/Network/AWS/Snowball/GetJobManifest.hs b/gen/Network/AWS/Snowball/GetJobManifest.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/GetJobManifest.hs
+++ /dev/null
@@ -1,137 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Snowball.GetJobManifest
--- 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 a link to an Amazon S3 presigned URL for the manifest file associated with the specified @JobId@ value. You can access the manifest file for up to 60 minutes after this request has been made. To access the manifest file after 60 minutes have passed, you'll have to make another call to the @GetJobManifest@ action.
---
---
--- The manifest is an encrypted file that you can download after your job enters the @WithCustomer@ status. The manifest is decrypted by using the @UnlockCode@ code value, when you pass both values to the Snowball through the Snowball client when the client is started for the first time.
---
--- As a best practice, we recommend that you don't save a copy of an @UnlockCode@ value in the same location as the manifest file for that job. Saving these separately helps prevent unauthorized parties from gaining access to the Snowball associated with that job.
---
--- The credentials of a given job, including its manifest file and unlock code, expire 90 days after the job is created.
---
-module Network.AWS.Snowball.GetJobManifest
-    (
-    -- * Creating a Request
-      getJobManifest
-    , GetJobManifest
-    -- * Request Lenses
-    , gjmJobId
-
-    -- * Destructuring the Response
-    , getJobManifestResponse
-    , GetJobManifestResponse
-    -- * Response Lenses
-    , gjmrsManifestURI
-    , gjmrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'getJobManifest' smart constructor.
-newtype GetJobManifest = GetJobManifest'
-  { _gjmJobId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetJobManifest' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gjmJobId' - The ID for a job that you want to get the manifest file for, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-getJobManifest
-    :: Text -- ^ 'gjmJobId'
-    -> GetJobManifest
-getJobManifest pJobId_ = GetJobManifest' {_gjmJobId = pJobId_}
-
-
--- | The ID for a job that you want to get the manifest file for, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-gjmJobId :: Lens' GetJobManifest Text
-gjmJobId = lens _gjmJobId (\ s a -> s{_gjmJobId = a})
-
-instance AWSRequest GetJobManifest where
-        type Rs GetJobManifest = GetJobManifestResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetJobManifestResponse' <$>
-                   (x .?> "ManifestURI") <*> (pure (fromEnum s)))
-
-instance Hashable GetJobManifest where
-
-instance NFData GetJobManifest where
-
-instance ToHeaders GetJobManifest where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.GetJobManifest"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetJobManifest where
-        toJSON GetJobManifest'{..}
-          = object (catMaybes [Just ("JobId" .= _gjmJobId)])
-
-instance ToPath GetJobManifest where
-        toPath = const "/"
-
-instance ToQuery GetJobManifest where
-        toQuery = const mempty
-
--- | /See:/ 'getJobManifestResponse' smart constructor.
-data GetJobManifestResponse = GetJobManifestResponse'
-  { _gjmrsManifestURI    :: !(Maybe Text)
-  , _gjmrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetJobManifestResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gjmrsManifestURI' - The Amazon S3 presigned URL for the manifest file associated with the specified @JobId@ value.
---
--- * 'gjmrsResponseStatus' - -- | The response status code.
-getJobManifestResponse
-    :: Int -- ^ 'gjmrsResponseStatus'
-    -> GetJobManifestResponse
-getJobManifestResponse pResponseStatus_ =
-  GetJobManifestResponse'
-    {_gjmrsManifestURI = Nothing, _gjmrsResponseStatus = pResponseStatus_}
-
-
--- | The Amazon S3 presigned URL for the manifest file associated with the specified @JobId@ value.
-gjmrsManifestURI :: Lens' GetJobManifestResponse (Maybe Text)
-gjmrsManifestURI = lens _gjmrsManifestURI (\ s a -> s{_gjmrsManifestURI = a})
-
--- | -- | The response status code.
-gjmrsResponseStatus :: Lens' GetJobManifestResponse Int
-gjmrsResponseStatus = lens _gjmrsResponseStatus (\ s a -> s{_gjmrsResponseStatus = a})
-
-instance NFData GetJobManifestResponse where
diff --git a/gen/Network/AWS/Snowball/GetJobUnlockCode.hs b/gen/Network/AWS/Snowball/GetJobUnlockCode.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/GetJobUnlockCode.hs
+++ /dev/null
@@ -1,135 +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.Snowball.GetJobUnlockCode
--- 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 the @UnlockCode@ code value for the specified job. A particular @UnlockCode@ value can be accessed for up to 90 days after the associated job has been created.
---
---
--- The @UnlockCode@ value is a 29-character code with 25 alphanumeric characters and 4 hyphens. This code is used to decrypt the manifest file when it is passed along with the manifest to the Snowball through the Snowball client when the client is started for the first time.
---
--- As a best practice, we recommend that you don't save a copy of the @UnlockCode@ in the same location as the manifest file for that job. Saving these separately helps prevent unauthorized parties from gaining access to the Snowball associated with that job.
---
-module Network.AWS.Snowball.GetJobUnlockCode
-    (
-    -- * Creating a Request
-      getJobUnlockCode
-    , GetJobUnlockCode
-    -- * Request Lenses
-    , gjucJobId
-
-    -- * Destructuring the Response
-    , getJobUnlockCodeResponse
-    , GetJobUnlockCodeResponse
-    -- * Response Lenses
-    , gjucrsUnlockCode
-    , gjucrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'getJobUnlockCode' smart constructor.
-newtype GetJobUnlockCode = GetJobUnlockCode'
-  { _gjucJobId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetJobUnlockCode' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gjucJobId' - The ID for the job that you want to get the @UnlockCode@ value for, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-getJobUnlockCode
-    :: Text -- ^ 'gjucJobId'
-    -> GetJobUnlockCode
-getJobUnlockCode pJobId_ = GetJobUnlockCode' {_gjucJobId = pJobId_}
-
-
--- | The ID for the job that you want to get the @UnlockCode@ value for, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-gjucJobId :: Lens' GetJobUnlockCode Text
-gjucJobId = lens _gjucJobId (\ s a -> s{_gjucJobId = a})
-
-instance AWSRequest GetJobUnlockCode where
-        type Rs GetJobUnlockCode = GetJobUnlockCodeResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetJobUnlockCodeResponse' <$>
-                   (x .?> "UnlockCode") <*> (pure (fromEnum s)))
-
-instance Hashable GetJobUnlockCode where
-
-instance NFData GetJobUnlockCode where
-
-instance ToHeaders GetJobUnlockCode where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.GetJobUnlockCode"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetJobUnlockCode where
-        toJSON GetJobUnlockCode'{..}
-          = object (catMaybes [Just ("JobId" .= _gjucJobId)])
-
-instance ToPath GetJobUnlockCode where
-        toPath = const "/"
-
-instance ToQuery GetJobUnlockCode where
-        toQuery = const mempty
-
--- | /See:/ 'getJobUnlockCodeResponse' smart constructor.
-data GetJobUnlockCodeResponse = GetJobUnlockCodeResponse'
-  { _gjucrsUnlockCode     :: !(Maybe Text)
-  , _gjucrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetJobUnlockCodeResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gjucrsUnlockCode' - The @UnlockCode@ value for the specified job. The @UnlockCode@ value can be accessed for up to 90 days after the job has been created.
---
--- * 'gjucrsResponseStatus' - -- | The response status code.
-getJobUnlockCodeResponse
-    :: Int -- ^ 'gjucrsResponseStatus'
-    -> GetJobUnlockCodeResponse
-getJobUnlockCodeResponse pResponseStatus_ =
-  GetJobUnlockCodeResponse'
-    {_gjucrsUnlockCode = Nothing, _gjucrsResponseStatus = pResponseStatus_}
-
-
--- | The @UnlockCode@ value for the specified job. The @UnlockCode@ value can be accessed for up to 90 days after the job has been created.
-gjucrsUnlockCode :: Lens' GetJobUnlockCodeResponse (Maybe Text)
-gjucrsUnlockCode = lens _gjucrsUnlockCode (\ s a -> s{_gjucrsUnlockCode = a})
-
--- | -- | The response status code.
-gjucrsResponseStatus :: Lens' GetJobUnlockCodeResponse Int
-gjucrsResponseStatus = lens _gjucrsResponseStatus (\ s a -> s{_gjucrsResponseStatus = a})
-
-instance NFData GetJobUnlockCodeResponse where
diff --git a/gen/Network/AWS/Snowball/GetSnowballUsage.hs b/gen/Network/AWS/Snowball/GetSnowballUsage.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/GetSnowballUsage.hs
+++ /dev/null
@@ -1,134 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Snowball.GetSnowballUsage
--- 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 Snowball service limit for your account, and also the number of Snowballs your account has in use.
---
---
--- The default service limit for the number of Snowballs that you can have at one time is 1. If you want to increase your service limit, contact AWS Support.
---
-module Network.AWS.Snowball.GetSnowballUsage
-    (
-    -- * Creating a Request
-      getSnowballUsage
-    , GetSnowballUsage
-
-    -- * Destructuring the Response
-    , getSnowballUsageResponse
-    , GetSnowballUsageResponse
-    -- * Response Lenses
-    , gsursSnowballsInUse
-    , gsursSnowballLimit
-    , gsursResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'getSnowballUsage' smart constructor.
-data GetSnowballUsage =
-  GetSnowballUsage'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetSnowballUsage' with the minimum fields required to make a request.
---
-getSnowballUsage
-    :: GetSnowballUsage
-getSnowballUsage = GetSnowballUsage'
-
-
-instance AWSRequest GetSnowballUsage where
-        type Rs GetSnowballUsage = GetSnowballUsageResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetSnowballUsageResponse' <$>
-                   (x .?> "SnowballsInUse") <*> (x .?> "SnowballLimit")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetSnowballUsage where
-
-instance NFData GetSnowballUsage where
-
-instance ToHeaders GetSnowballUsage where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.GetSnowballUsage"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetSnowballUsage where
-        toJSON = const (Object mempty)
-
-instance ToPath GetSnowballUsage where
-        toPath = const "/"
-
-instance ToQuery GetSnowballUsage where
-        toQuery = const mempty
-
--- | /See:/ 'getSnowballUsageResponse' smart constructor.
-data GetSnowballUsageResponse = GetSnowballUsageResponse'
-  { _gsursSnowballsInUse :: !(Maybe Int)
-  , _gsursSnowballLimit  :: !(Maybe Int)
-  , _gsursResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetSnowballUsageResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gsursSnowballsInUse' - The number of Snowballs that this account is currently using.
---
--- * 'gsursSnowballLimit' - The service limit for number of Snowballs this account can have at once. The default service limit is 1 (one).
---
--- * 'gsursResponseStatus' - -- | The response status code.
-getSnowballUsageResponse
-    :: Int -- ^ 'gsursResponseStatus'
-    -> GetSnowballUsageResponse
-getSnowballUsageResponse pResponseStatus_ =
-  GetSnowballUsageResponse'
-    { _gsursSnowballsInUse = Nothing
-    , _gsursSnowballLimit = Nothing
-    , _gsursResponseStatus = pResponseStatus_
-    }
-
-
--- | The number of Snowballs that this account is currently using.
-gsursSnowballsInUse :: Lens' GetSnowballUsageResponse (Maybe Int)
-gsursSnowballsInUse = lens _gsursSnowballsInUse (\ s a -> s{_gsursSnowballsInUse = a})
-
--- | The service limit for number of Snowballs this account can have at once. The default service limit is 1 (one).
-gsursSnowballLimit :: Lens' GetSnowballUsageResponse (Maybe Int)
-gsursSnowballLimit = lens _gsursSnowballLimit (\ s a -> s{_gsursSnowballLimit = a})
-
--- | -- | The response status code.
-gsursResponseStatus :: Lens' GetSnowballUsageResponse Int
-gsursResponseStatus = lens _gsursResponseStatus (\ s a -> s{_gsursResponseStatus = a})
-
-instance NFData GetSnowballUsageResponse where
diff --git a/gen/Network/AWS/Snowball/ListClusterJobs.hs b/gen/Network/AWS/Snowball/ListClusterJobs.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/ListClusterJobs.hs
+++ /dev/null
@@ -1,169 +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.Snowball.ListClusterJobs
--- 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 an array of @JobListEntry@ objects of the specified length. Each @JobListEntry@ object is for a job in the specified cluster and contains a job's state, a job's ID, and other information.
---
---
-module Network.AWS.Snowball.ListClusterJobs
-    (
-    -- * Creating a Request
-      listClusterJobs
-    , ListClusterJobs
-    -- * Request Lenses
-    , lcjNextToken
-    , lcjMaxResults
-    , lcjClusterId
-
-    -- * Destructuring the Response
-    , listClusterJobsResponse
-    , ListClusterJobsResponse
-    -- * Response Lenses
-    , lcjrsJobListEntries
-    , lcjrsNextToken
-    , lcjrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'listClusterJobs' smart constructor.
-data ListClusterJobs = ListClusterJobs'
-  { _lcjNextToken  :: !(Maybe Text)
-  , _lcjMaxResults :: !(Maybe Nat)
-  , _lcjClusterId  :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListClusterJobs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lcjNextToken' - HTTP requests are stateless. To identify what object comes "next" in the list of @JobListEntry@ objects, you have the option of specifying @NextToken@ as the starting point for your returned list.
---
--- * 'lcjMaxResults' - The number of @JobListEntry@ objects to return.
---
--- * 'lcjClusterId' - The 39-character ID for the cluster that you want to list, for example @CID123e4567-e89b-12d3-a456-426655440000@ .
-listClusterJobs
-    :: Text -- ^ 'lcjClusterId'
-    -> ListClusterJobs
-listClusterJobs pClusterId_ =
-  ListClusterJobs'
-    { _lcjNextToken = Nothing
-    , _lcjMaxResults = Nothing
-    , _lcjClusterId = pClusterId_
-    }
-
-
--- | HTTP requests are stateless. To identify what object comes "next" in the list of @JobListEntry@ objects, you have the option of specifying @NextToken@ as the starting point for your returned list.
-lcjNextToken :: Lens' ListClusterJobs (Maybe Text)
-lcjNextToken = lens _lcjNextToken (\ s a -> s{_lcjNextToken = a})
-
--- | The number of @JobListEntry@ objects to return.
-lcjMaxResults :: Lens' ListClusterJobs (Maybe Natural)
-lcjMaxResults = lens _lcjMaxResults (\ s a -> s{_lcjMaxResults = a}) . mapping _Nat
-
--- | The 39-character ID for the cluster that you want to list, for example @CID123e4567-e89b-12d3-a456-426655440000@ .
-lcjClusterId :: Lens' ListClusterJobs Text
-lcjClusterId = lens _lcjClusterId (\ s a -> s{_lcjClusterId = a})
-
-instance AWSRequest ListClusterJobs where
-        type Rs ListClusterJobs = ListClusterJobsResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListClusterJobsResponse' <$>
-                   (x .?> "JobListEntries" .!@ mempty) <*>
-                     (x .?> "NextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListClusterJobs where
-
-instance NFData ListClusterJobs where
-
-instance ToHeaders ListClusterJobs where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.ListClusterJobs"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListClusterJobs where
-        toJSON ListClusterJobs'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _lcjNextToken,
-                  ("MaxResults" .=) <$> _lcjMaxResults,
-                  Just ("ClusterId" .= _lcjClusterId)])
-
-instance ToPath ListClusterJobs where
-        toPath = const "/"
-
-instance ToQuery ListClusterJobs where
-        toQuery = const mempty
-
--- | /See:/ 'listClusterJobsResponse' smart constructor.
-data ListClusterJobsResponse = ListClusterJobsResponse'
-  { _lcjrsJobListEntries :: !(Maybe [JobListEntry])
-  , _lcjrsNextToken      :: !(Maybe Text)
-  , _lcjrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListClusterJobsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lcjrsJobListEntries' - Each @JobListEntry@ object contains a job's state, a job's ID, and a value that indicates whether the job is a job part, in the case of export jobs.
---
--- * 'lcjrsNextToken' - HTTP requests are stateless. If you use the automatically generated @NextToken@ value in your next @ListClusterJobsResult@ call, your list of returned jobs will start from this point in the array.
---
--- * 'lcjrsResponseStatus' - -- | The response status code.
-listClusterJobsResponse
-    :: Int -- ^ 'lcjrsResponseStatus'
-    -> ListClusterJobsResponse
-listClusterJobsResponse pResponseStatus_ =
-  ListClusterJobsResponse'
-    { _lcjrsJobListEntries = Nothing
-    , _lcjrsNextToken = Nothing
-    , _lcjrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Each @JobListEntry@ object contains a job's state, a job's ID, and a value that indicates whether the job is a job part, in the case of export jobs.
-lcjrsJobListEntries :: Lens' ListClusterJobsResponse [JobListEntry]
-lcjrsJobListEntries = lens _lcjrsJobListEntries (\ s a -> s{_lcjrsJobListEntries = a}) . _Default . _Coerce
-
--- | HTTP requests are stateless. If you use the automatically generated @NextToken@ value in your next @ListClusterJobsResult@ call, your list of returned jobs will start from this point in the array.
-lcjrsNextToken :: Lens' ListClusterJobsResponse (Maybe Text)
-lcjrsNextToken = lens _lcjrsNextToken (\ s a -> s{_lcjrsNextToken = a})
-
--- | -- | The response status code.
-lcjrsResponseStatus :: Lens' ListClusterJobsResponse Int
-lcjrsResponseStatus = lens _lcjrsResponseStatus (\ s a -> s{_lcjrsResponseStatus = a})
-
-instance NFData ListClusterJobsResponse where
diff --git a/gen/Network/AWS/Snowball/ListClusters.hs b/gen/Network/AWS/Snowball/ListClusters.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/ListClusters.hs
+++ /dev/null
@@ -1,154 +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.Snowball.ListClusters
--- 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 an array of @ClusterListEntry@ objects of the specified length. Each @ClusterListEntry@ object contains a cluster's state, a cluster's ID, and other important status information.
---
---
-module Network.AWS.Snowball.ListClusters
-    (
-    -- * Creating a Request
-      listClusters
-    , ListClusters
-    -- * Request Lenses
-    , lcNextToken
-    , lcMaxResults
-
-    -- * Destructuring the Response
-    , listClustersResponse
-    , ListClustersResponse
-    -- * Response Lenses
-    , lcrsClusterListEntries
-    , lcrsNextToken
-    , lcrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'listClusters' smart constructor.
-data ListClusters = ListClusters'
-  { _lcNextToken  :: !(Maybe Text)
-  , _lcMaxResults :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListClusters' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lcNextToken' - HTTP requests are stateless. To identify what object comes "next" in the list of @ClusterListEntry@ objects, you have the option of specifying @NextToken@ as the starting point for your returned list.
---
--- * 'lcMaxResults' - The number of @ClusterListEntry@ objects to return.
-listClusters
-    :: ListClusters
-listClusters = ListClusters' {_lcNextToken = Nothing, _lcMaxResults = Nothing}
-
-
--- | HTTP requests are stateless. To identify what object comes "next" in the list of @ClusterListEntry@ objects, you have the option of specifying @NextToken@ as the starting point for your returned list.
-lcNextToken :: Lens' ListClusters (Maybe Text)
-lcNextToken = lens _lcNextToken (\ s a -> s{_lcNextToken = a})
-
--- | The number of @ClusterListEntry@ objects to return.
-lcMaxResults :: Lens' ListClusters (Maybe Natural)
-lcMaxResults = lens _lcMaxResults (\ s a -> s{_lcMaxResults = a}) . mapping _Nat
-
-instance AWSRequest ListClusters where
-        type Rs ListClusters = ListClustersResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListClustersResponse' <$>
-                   (x .?> "ClusterListEntries" .!@ mempty) <*>
-                     (x .?> "NextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListClusters where
-
-instance NFData ListClusters where
-
-instance ToHeaders ListClusters where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.ListClusters" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListClusters where
-        toJSON ListClusters'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _lcNextToken,
-                  ("MaxResults" .=) <$> _lcMaxResults])
-
-instance ToPath ListClusters where
-        toPath = const "/"
-
-instance ToQuery ListClusters where
-        toQuery = const mempty
-
--- | /See:/ 'listClustersResponse' smart constructor.
-data ListClustersResponse = ListClustersResponse'
-  { _lcrsClusterListEntries :: !(Maybe [ClusterListEntry])
-  , _lcrsNextToken          :: !(Maybe Text)
-  , _lcrsResponseStatus     :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListClustersResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lcrsClusterListEntries' - Each @ClusterListEntry@ object contains a cluster's state, a cluster's ID, and other important status information.
---
--- * 'lcrsNextToken' - HTTP requests are stateless. If you use the automatically generated @NextToken@ value in your next @ClusterListEntry@ call, your list of returned clusters will start from this point in the array.
---
--- * 'lcrsResponseStatus' - -- | The response status code.
-listClustersResponse
-    :: Int -- ^ 'lcrsResponseStatus'
-    -> ListClustersResponse
-listClustersResponse pResponseStatus_ =
-  ListClustersResponse'
-    { _lcrsClusterListEntries = Nothing
-    , _lcrsNextToken = Nothing
-    , _lcrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Each @ClusterListEntry@ object contains a cluster's state, a cluster's ID, and other important status information.
-lcrsClusterListEntries :: Lens' ListClustersResponse [ClusterListEntry]
-lcrsClusterListEntries = lens _lcrsClusterListEntries (\ s a -> s{_lcrsClusterListEntries = a}) . _Default . _Coerce
-
--- | HTTP requests are stateless. If you use the automatically generated @NextToken@ value in your next @ClusterListEntry@ call, your list of returned clusters will start from this point in the array.
-lcrsNextToken :: Lens' ListClustersResponse (Maybe Text)
-lcrsNextToken = lens _lcrsNextToken (\ s a -> s{_lcrsNextToken = a})
-
--- | -- | The response status code.
-lcrsResponseStatus :: Lens' ListClustersResponse Int
-lcrsResponseStatus = lens _lcrsResponseStatus (\ s a -> s{_lcrsResponseStatus = a})
-
-instance NFData ListClustersResponse where
diff --git a/gen/Network/AWS/Snowball/ListJobs.hs b/gen/Network/AWS/Snowball/ListJobs.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/ListJobs.hs
+++ /dev/null
@@ -1,164 +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.Snowball.ListJobs
--- 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 an array of @JobListEntry@ objects of the specified length. Each @JobListEntry@ object contains a job's state, a job's ID, and a value that indicates whether the job is a job part, in the case of export jobs. Calling this API action in one of the US regions will return jobs from the list of all jobs associated with this account in all US regions.
---
---
---
--- This operation returns paginated results.
-module Network.AWS.Snowball.ListJobs
-    (
-    -- * Creating a Request
-      listJobs
-    , ListJobs
-    -- * Request Lenses
-    , ljNextToken
-    , ljMaxResults
-
-    -- * Destructuring the Response
-    , listJobsResponse
-    , ListJobsResponse
-    -- * Response Lenses
-    , ljrsJobListEntries
-    , ljrsNextToken
-    , ljrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'listJobs' smart constructor.
-data ListJobs = ListJobs'
-  { _ljNextToken  :: !(Maybe Text)
-  , _ljMaxResults :: !(Maybe Nat)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListJobs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ljNextToken' - HTTP requests are stateless. To identify what object comes "next" in the list of @JobListEntry@ objects, you have the option of specifying @NextToken@ as the starting point for your returned list.
---
--- * 'ljMaxResults' - The number of @JobListEntry@ objects to return.
-listJobs
-    :: ListJobs
-listJobs = ListJobs' {_ljNextToken = Nothing, _ljMaxResults = Nothing}
-
-
--- | HTTP requests are stateless. To identify what object comes "next" in the list of @JobListEntry@ objects, you have the option of specifying @NextToken@ as the starting point for your returned list.
-ljNextToken :: Lens' ListJobs (Maybe Text)
-ljNextToken = lens _ljNextToken (\ s a -> s{_ljNextToken = a})
-
--- | The number of @JobListEntry@ objects to return.
-ljMaxResults :: Lens' ListJobs (Maybe Natural)
-ljMaxResults = lens _ljMaxResults (\ s a -> s{_ljMaxResults = a}) . mapping _Nat
-
-instance AWSPager ListJobs where
-        page rq rs
-          | stop (rs ^. ljrsNextToken) = Nothing
-          | stop (rs ^. ljrsJobListEntries) = Nothing
-          | otherwise =
-            Just $ rq & ljNextToken .~ rs ^. ljrsNextToken
-
-instance AWSRequest ListJobs where
-        type Rs ListJobs = ListJobsResponse
-        request = postJSON snowball
-        response
-          = receiveJSON
-              (\ s h x ->
-                 ListJobsResponse' <$>
-                   (x .?> "JobListEntries" .!@ mempty) <*>
-                     (x .?> "NextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable ListJobs where
-
-instance NFData ListJobs where
-
-instance ToHeaders ListJobs where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.ListJobs" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ListJobs where
-        toJSON ListJobs'{..}
-          = object
-              (catMaybes
-                 [("NextToken" .=) <$> _ljNextToken,
-                  ("MaxResults" .=) <$> _ljMaxResults])
-
-instance ToPath ListJobs where
-        toPath = const "/"
-
-instance ToQuery ListJobs where
-        toQuery = const mempty
-
--- | /See:/ 'listJobsResponse' smart constructor.
-data ListJobsResponse = ListJobsResponse'
-  { _ljrsJobListEntries :: !(Maybe [JobListEntry])
-  , _ljrsNextToken      :: !(Maybe Text)
-  , _ljrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ListJobsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ljrsJobListEntries' - Each @JobListEntry@ object contains a job's state, a job's ID, and a value that indicates whether the job is a job part, in the case of export jobs.
---
--- * 'ljrsNextToken' - HTTP requests are stateless. If you use this automatically generated @NextToken@ value in your next @ListJobs@ call, your returned @JobListEntry@ objects will start from this point in the array.
---
--- * 'ljrsResponseStatus' - -- | The response status code.
-listJobsResponse
-    :: Int -- ^ 'ljrsResponseStatus'
-    -> ListJobsResponse
-listJobsResponse pResponseStatus_ =
-  ListJobsResponse'
-    { _ljrsJobListEntries = Nothing
-    , _ljrsNextToken = Nothing
-    , _ljrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Each @JobListEntry@ object contains a job's state, a job's ID, and a value that indicates whether the job is a job part, in the case of export jobs.
-ljrsJobListEntries :: Lens' ListJobsResponse [JobListEntry]
-ljrsJobListEntries = lens _ljrsJobListEntries (\ s a -> s{_ljrsJobListEntries = a}) . _Default . _Coerce
-
--- | HTTP requests are stateless. If you use this automatically generated @NextToken@ value in your next @ListJobs@ call, your returned @JobListEntry@ objects will start from this point in the array.
-ljrsNextToken :: Lens' ListJobsResponse (Maybe Text)
-ljrsNextToken = lens _ljrsNextToken (\ s a -> s{_ljrsNextToken = a})
-
--- | -- | The response status code.
-ljrsResponseStatus :: Lens' ListJobsResponse Int
-ljrsResponseStatus = lens _ljrsResponseStatus (\ s a -> s{_ljrsResponseStatus = a})
-
-instance NFData ListJobsResponse where
diff --git a/gen/Network/AWS/Snowball/Types.hs b/gen/Network/AWS/Snowball/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/Types.hs
+++ /dev/null
@@ -1,292 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.Snowball.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.Snowball.Types
-    (
-    -- * Service Configuration
-      snowball
-
-    -- * Errors
-    , _InvalidResourceException
-    , _UnsupportedAddressException
-    , _KMSRequestFailedException
-    , _InvalidJobStateException
-    , _InvalidInputCombinationException
-    , _InvalidNextTokenException
-    , _InvalidAddressException
-    , _ClusterLimitExceededException
-
-    -- * ClusterState
-    , ClusterState (..)
-
-    -- * JobState
-    , JobState (..)
-
-    -- * JobType
-    , JobType (..)
-
-    -- * ShippingOption
-    , ShippingOption (..)
-
-    -- * SnowballCapacity
-    , SnowballCapacity (..)
-
-    -- * SnowballType
-    , SnowballType (..)
-
-    -- * Address
-    , Address
-    , address
-    , aIsRestricted
-    , aStreet3
-    , aLandmark
-    , aPostalCode
-    , aCountry
-    , aStateOrProvince
-    , aStreet2
-    , aAddressId
-    , aCity
-    , aPhoneNumber
-    , aCompany
-    , aName
-    , aPrefectureOrDistrict
-    , aStreet1
-
-    -- * ClusterListEntry
-    , ClusterListEntry
-    , clusterListEntry
-    , cleClusterState
-    , cleClusterId
-    , cleCreationDate
-    , cleDescription
-
-    -- * ClusterMetadata
-    , ClusterMetadata
-    , clusterMetadata
-    , cmJobType
-    , cmKMSKeyARN
-    , cmClusterState
-    , cmNotification
-    , cmForwardingAddressId
-    , cmAddressId
-    , cmSnowballType
-    , cmShippingOption
-    , cmResources
-    , cmClusterId
-    , cmCreationDate
-    , cmDescription
-    , cmRoleARN
-
-    -- * DataTransfer
-    , DataTransfer
-    , dataTransfer
-    , dtTotalObjects
-    , dtTotalBytes
-    , dtObjectsTransferred
-    , dtBytesTransferred
-
-    -- * EventTriggerDefinition
-    , EventTriggerDefinition
-    , eventTriggerDefinition
-    , etdEventResourceARN
-
-    -- * JobListEntry
-    , JobListEntry
-    , jobListEntry
-    , jleJobType
-    , jleJobId
-    , jleJobState
-    , jleSnowballType
-    , jleCreationDate
-    , jleDescription
-    , jleIsMaster
-
-    -- * JobLogs
-    , JobLogs
-    , jobLogs
-    , jlJobFailureLogURI
-    , jlJobCompletionReportURI
-    , jlJobSuccessLogURI
-
-    -- * JobMetadata
-    , JobMetadata
-    , jobMetadata
-    , jmJobType
-    , jmKMSKeyARN
-    , jmJobId
-    , jmJobLogInfo
-    , jmNotification
-    , jmJobState
-    , jmForwardingAddressId
-    , jmShippingDetails
-    , jmAddressId
-    , jmSnowballType
-    , jmDataTransferProgress
-    , jmResources
-    , jmClusterId
-    , jmCreationDate
-    , jmDescription
-    , jmRoleARN
-    , jmSnowballCapacityPreference
-
-    -- * JobResource
-    , JobResource
-    , jobResource
-    , jrLambdaResources
-    , jrS3Resources
-
-    -- * KeyRange
-    , KeyRange
-    , keyRange
-    , krEndMarker
-    , krBeginMarker
-
-    -- * LambdaResource
-    , LambdaResource
-    , lambdaResource
-    , lrEventTriggers
-    , lrLambdaARN
-
-    -- * Notification
-    , Notification
-    , notification
-    , nNotifyAll
-    , nSNSTopicARN
-    , nJobStatesToNotify
-
-    -- * S3Resource
-    , S3Resource
-    , s3Resource
-    , srKeyRange
-    , srBucketARN
-
-    -- * Shipment
-    , Shipment
-    , shipment
-    , sStatus
-    , sTrackingNumber
-
-    -- * ShippingDetails
-    , ShippingDetails
-    , shippingDetails
-    , sdShippingOption
-    , sdOutboundShipment
-    , sdInboundShipment
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-import Network.AWS.Snowball.Types.Product
-import Network.AWS.Snowball.Types.Sum
-
--- | API version @2016-06-30@ of the Amazon Import/Export Snowball SDK configuration.
-snowball :: Service
-snowball =
-  Service
-    { _svcAbbrev = "Snowball"
-    , _svcSigner = v4
-    , _svcPrefix = "snowball"
-    , _svcVersion = "2016-06-30"
-    , _svcEndpoint = defaultEndpoint snowball
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "Snowball"
-    , _svcRetry = retry
-    }
-  where
-    retry =
-      Exponential
-        { _retryBase = 5.0e-2
-        , _retryGrowth = 2
-        , _retryAttempts = 5
-        , _retryCheck = check
-        }
-    check e
-      | has (hasCode "ThrottledException" . hasStatus 400) e =
-        Just "throttled_exception"
-      | has (hasStatus 429) e = Just "too_many_requests"
-      | has (hasCode "ThrottlingException" . hasStatus 400) e =
-        Just "throttling_exception"
-      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
-      | has (hasStatus 504) e = Just "gateway_timeout"
-      | has (hasCode "RequestThrottledException" . hasStatus 400) e =
-        Just "request_throttled_exception"
-      | has (hasStatus 502) e = Just "bad_gateway"
-      | has (hasStatus 503) e = Just "service_unavailable"
-      | has (hasStatus 500) e = Just "general_server_error"
-      | has (hasStatus 509) e = Just "limit_exceeded"
-      | otherwise = Nothing
-
-
--- | The specified resource can't be found. Check the information you provided in your last request, and try again.
---
---
-_InvalidResourceException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidResourceException =
-  _MatchServiceError snowball "InvalidResourceException"
-
-
--- | The address is either outside the serviceable area for your region, or an error occurred. Check the address with your region's carrier and try again. If the issue persists, contact AWS Support.
---
---
-_UnsupportedAddressException :: AsError a => Getting (First ServiceError) a ServiceError
-_UnsupportedAddressException =
-  _MatchServiceError snowball "UnsupportedAddressException"
-
-
--- | The provided AWS Key Management Service key lacks the permissions to perform the specified 'CreateJob' or 'UpdateJob' action.
---
---
-_KMSRequestFailedException :: AsError a => Getting (First ServiceError) a ServiceError
-_KMSRequestFailedException =
-  _MatchServiceError snowball "KMSRequestFailedException"
-
-
--- | The action can't be performed because the job's current state doesn't allow that action to be performed.
---
---
-_InvalidJobStateException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidJobStateException =
-  _MatchServiceError snowball "InvalidJobStateException"
-
-
--- | Job or cluster creation failed. One ore more inputs were invalid. Confirm that the 'CreateClusterRequest$SnowballType' value supports your 'CreateJobRequest$JobType' , and try again.
---
---
-_InvalidInputCombinationException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidInputCombinationException =
-  _MatchServiceError snowball "InvalidInputCombinationException"
-
-
--- | The @NextToken@ string was altered unexpectedly, and the operation has stopped. Run the operation without changing the @NextToken@ string, and try again.
---
---
-_InvalidNextTokenException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidNextTokenException =
-  _MatchServiceError snowball "InvalidNextTokenException"
-
-
--- | The address provided was invalid. Check the address with your region's carrier, and try again.
---
---
-_InvalidAddressException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidAddressException = _MatchServiceError snowball "InvalidAddressException"
-
-
--- | Job creation failed. Currently, clusters support five nodes. If you have less than five nodes for your cluster and you have more nodes to create for this cluster, try again and create jobs until your cluster has exactly five notes.
---
---
-_ClusterLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
-_ClusterLimitExceededException =
-  _MatchServiceError snowball "ClusterLimitExceededException"
-
diff --git a/gen/Network/AWS/Snowball/Types/Product.hs b/gen/Network/AWS/Snowball/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/Types/Product.hs
+++ /dev/null
@@ -1,1207 +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.Snowball.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.Snowball.Types.Product where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Snowball.Types.Sum
-
--- | The address that you want the Snowball or Snowballs associated with a specific job to be shipped to. Addresses are validated at the time of creation. The address you provide must be located within the serviceable area of your region. Although no individual elements of the @Address@ are required, if the address is invalid or unsupported, then an exception is thrown.
---
---
---
--- /See:/ 'address' smart constructor.
-data Address = Address'
-  { _aIsRestricted         :: !(Maybe Bool)
-  , _aStreet3              :: !(Maybe Text)
-  , _aLandmark             :: !(Maybe Text)
-  , _aPostalCode           :: !(Maybe Text)
-  , _aCountry              :: !(Maybe Text)
-  , _aStateOrProvince      :: !(Maybe Text)
-  , _aStreet2              :: !(Maybe Text)
-  , _aAddressId            :: !(Maybe Text)
-  , _aCity                 :: !(Maybe Text)
-  , _aPhoneNumber          :: !(Maybe Text)
-  , _aCompany              :: !(Maybe Text)
-  , _aName                 :: !(Maybe Text)
-  , _aPrefectureOrDistrict :: !(Maybe Text)
-  , _aStreet1              :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Address' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'aIsRestricted' - If the address you are creating is a primary address, then set this option to true. This field is not supported in most regions.
---
--- * 'aStreet3' - The third line in a street address that a Snowball is to be delivered to.
---
--- * 'aLandmark' - This field is no longer used and the value is ignored.
---
--- * 'aPostalCode' - The postal code in an address that a Snowball is to be delivered to.
---
--- * 'aCountry' - The country in an address that a Snowball is to be delivered to.
---
--- * 'aStateOrProvince' - The state or province in an address that a Snowball is to be delivered to.
---
--- * 'aStreet2' - The second line in a street address that a Snowball is to be delivered to.
---
--- * 'aAddressId' - The unique ID for an address.
---
--- * 'aCity' - The city in an address that a Snowball is to be delivered to.
---
--- * 'aPhoneNumber' - The phone number associated with an address that a Snowball is to be delivered to.
---
--- * 'aCompany' - The name of the company to receive a Snowball at an address.
---
--- * 'aName' - The name of a person to receive a Snowball at an address.
---
--- * 'aPrefectureOrDistrict' - This field is no longer used and the value is ignored.
---
--- * 'aStreet1' - The first line in a street address that a Snowball is to be delivered to.
-address
-    :: Address
-address =
-  Address'
-    { _aIsRestricted = Nothing
-    , _aStreet3 = Nothing
-    , _aLandmark = Nothing
-    , _aPostalCode = Nothing
-    , _aCountry = Nothing
-    , _aStateOrProvince = Nothing
-    , _aStreet2 = Nothing
-    , _aAddressId = Nothing
-    , _aCity = Nothing
-    , _aPhoneNumber = Nothing
-    , _aCompany = Nothing
-    , _aName = Nothing
-    , _aPrefectureOrDistrict = Nothing
-    , _aStreet1 = Nothing
-    }
-
-
--- | If the address you are creating is a primary address, then set this option to true. This field is not supported in most regions.
-aIsRestricted :: Lens' Address (Maybe Bool)
-aIsRestricted = lens _aIsRestricted (\ s a -> s{_aIsRestricted = a})
-
--- | The third line in a street address that a Snowball is to be delivered to.
-aStreet3 :: Lens' Address (Maybe Text)
-aStreet3 = lens _aStreet3 (\ s a -> s{_aStreet3 = a})
-
--- | This field is no longer used and the value is ignored.
-aLandmark :: Lens' Address (Maybe Text)
-aLandmark = lens _aLandmark (\ s a -> s{_aLandmark = a})
-
--- | The postal code in an address that a Snowball is to be delivered to.
-aPostalCode :: Lens' Address (Maybe Text)
-aPostalCode = lens _aPostalCode (\ s a -> s{_aPostalCode = a})
-
--- | The country in an address that a Snowball is to be delivered to.
-aCountry :: Lens' Address (Maybe Text)
-aCountry = lens _aCountry (\ s a -> s{_aCountry = a})
-
--- | The state or province in an address that a Snowball is to be delivered to.
-aStateOrProvince :: Lens' Address (Maybe Text)
-aStateOrProvince = lens _aStateOrProvince (\ s a -> s{_aStateOrProvince = a})
-
--- | The second line in a street address that a Snowball is to be delivered to.
-aStreet2 :: Lens' Address (Maybe Text)
-aStreet2 = lens _aStreet2 (\ s a -> s{_aStreet2 = a})
-
--- | The unique ID for an address.
-aAddressId :: Lens' Address (Maybe Text)
-aAddressId = lens _aAddressId (\ s a -> s{_aAddressId = a})
-
--- | The city in an address that a Snowball is to be delivered to.
-aCity :: Lens' Address (Maybe Text)
-aCity = lens _aCity (\ s a -> s{_aCity = a})
-
--- | The phone number associated with an address that a Snowball is to be delivered to.
-aPhoneNumber :: Lens' Address (Maybe Text)
-aPhoneNumber = lens _aPhoneNumber (\ s a -> s{_aPhoneNumber = a})
-
--- | The name of the company to receive a Snowball at an address.
-aCompany :: Lens' Address (Maybe Text)
-aCompany = lens _aCompany (\ s a -> s{_aCompany = a})
-
--- | The name of a person to receive a Snowball at an address.
-aName :: Lens' Address (Maybe Text)
-aName = lens _aName (\ s a -> s{_aName = a})
-
--- | This field is no longer used and the value is ignored.
-aPrefectureOrDistrict :: Lens' Address (Maybe Text)
-aPrefectureOrDistrict = lens _aPrefectureOrDistrict (\ s a -> s{_aPrefectureOrDistrict = a})
-
--- | The first line in a street address that a Snowball is to be delivered to.
-aStreet1 :: Lens' Address (Maybe Text)
-aStreet1 = lens _aStreet1 (\ s a -> s{_aStreet1 = a})
-
-instance FromJSON Address where
-        parseJSON
-          = withObject "Address"
-              (\ x ->
-                 Address' <$>
-                   (x .:? "IsRestricted") <*> (x .:? "Street3") <*>
-                     (x .:? "Landmark")
-                     <*> (x .:? "PostalCode")
-                     <*> (x .:? "Country")
-                     <*> (x .:? "StateOrProvince")
-                     <*> (x .:? "Street2")
-                     <*> (x .:? "AddressId")
-                     <*> (x .:? "City")
-                     <*> (x .:? "PhoneNumber")
-                     <*> (x .:? "Company")
-                     <*> (x .:? "Name")
-                     <*> (x .:? "PrefectureOrDistrict")
-                     <*> (x .:? "Street1"))
-
-instance Hashable Address where
-
-instance NFData Address where
-
-instance ToJSON Address where
-        toJSON Address'{..}
-          = object
-              (catMaybes
-                 [("IsRestricted" .=) <$> _aIsRestricted,
-                  ("Street3" .=) <$> _aStreet3,
-                  ("Landmark" .=) <$> _aLandmark,
-                  ("PostalCode" .=) <$> _aPostalCode,
-                  ("Country" .=) <$> _aCountry,
-                  ("StateOrProvince" .=) <$> _aStateOrProvince,
-                  ("Street2" .=) <$> _aStreet2,
-                  ("AddressId" .=) <$> _aAddressId,
-                  ("City" .=) <$> _aCity,
-                  ("PhoneNumber" .=) <$> _aPhoneNumber,
-                  ("Company" .=) <$> _aCompany, ("Name" .=) <$> _aName,
-                  ("PrefectureOrDistrict" .=) <$>
-                    _aPrefectureOrDistrict,
-                  ("Street1" .=) <$> _aStreet1])
-
--- | Contains a cluster's state, a cluster's ID, and other important information.
---
---
---
--- /See:/ 'clusterListEntry' smart constructor.
-data ClusterListEntry = ClusterListEntry'
-  { _cleClusterState :: !(Maybe ClusterState)
-  , _cleClusterId    :: !(Maybe Text)
-  , _cleCreationDate :: !(Maybe POSIX)
-  , _cleDescription  :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ClusterListEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cleClusterState' - The current state of this cluster. For information about the state of a specific node, see 'JobListEntry$JobState' .
---
--- * 'cleClusterId' - The 39-character ID for the cluster that you want to list, for example @CID123e4567-e89b-12d3-a456-426655440000@ .
---
--- * 'cleCreationDate' - The creation date for this cluster.
---
--- * 'cleDescription' - Defines an optional description of the cluster, for example @Environmental Data Cluster-01@ .
-clusterListEntry
-    :: ClusterListEntry
-clusterListEntry =
-  ClusterListEntry'
-    { _cleClusterState = Nothing
-    , _cleClusterId = Nothing
-    , _cleCreationDate = Nothing
-    , _cleDescription = Nothing
-    }
-
-
--- | The current state of this cluster. For information about the state of a specific node, see 'JobListEntry$JobState' .
-cleClusterState :: Lens' ClusterListEntry (Maybe ClusterState)
-cleClusterState = lens _cleClusterState (\ s a -> s{_cleClusterState = a})
-
--- | The 39-character ID for the cluster that you want to list, for example @CID123e4567-e89b-12d3-a456-426655440000@ .
-cleClusterId :: Lens' ClusterListEntry (Maybe Text)
-cleClusterId = lens _cleClusterId (\ s a -> s{_cleClusterId = a})
-
--- | The creation date for this cluster.
-cleCreationDate :: Lens' ClusterListEntry (Maybe UTCTime)
-cleCreationDate = lens _cleCreationDate (\ s a -> s{_cleCreationDate = a}) . mapping _Time
-
--- | Defines an optional description of the cluster, for example @Environmental Data Cluster-01@ .
-cleDescription :: Lens' ClusterListEntry (Maybe Text)
-cleDescription = lens _cleDescription (\ s a -> s{_cleDescription = a})
-
-instance FromJSON ClusterListEntry where
-        parseJSON
-          = withObject "ClusterListEntry"
-              (\ x ->
-                 ClusterListEntry' <$>
-                   (x .:? "ClusterState") <*> (x .:? "ClusterId") <*>
-                     (x .:? "CreationDate")
-                     <*> (x .:? "Description"))
-
-instance Hashable ClusterListEntry where
-
-instance NFData ClusterListEntry where
-
--- | Contains metadata about a specific cluster.
---
---
---
--- /See:/ 'clusterMetadata' smart constructor.
-data ClusterMetadata = ClusterMetadata'
-  { _cmJobType             :: !(Maybe JobType)
-  , _cmKMSKeyARN           :: !(Maybe Text)
-  , _cmClusterState        :: !(Maybe ClusterState)
-  , _cmNotification        :: !(Maybe Notification)
-  , _cmForwardingAddressId :: !(Maybe Text)
-  , _cmAddressId           :: !(Maybe Text)
-  , _cmSnowballType        :: !(Maybe SnowballType)
-  , _cmShippingOption      :: !(Maybe ShippingOption)
-  , _cmResources           :: !(Maybe JobResource)
-  , _cmClusterId           :: !(Maybe Text)
-  , _cmCreationDate        :: !(Maybe POSIX)
-  , _cmDescription         :: !(Maybe Text)
-  , _cmRoleARN             :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ClusterMetadata' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cmJobType' - The type of job for this cluster. Currently, the only job type supported for clusters is @LOCAL_USE@ .
---
--- * 'cmKMSKeyARN' - The @KmsKeyARN@ Amazon Resource Name (ARN) associated with this cluster. This ARN was created using the <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey> API action in AWS Key Management Service (AWS KMS).
---
--- * 'cmClusterState' - The current status of the cluster.
---
--- * 'cmNotification' - The Amazon Simple Notification Service (Amazon SNS) notification settings for this cluster.
---
--- * 'cmForwardingAddressId' - The ID of the address that you want a cluster shipped to, after it will be shipped to its primary address. This field is not supported in most regions.
---
--- * 'cmAddressId' - The automatically generated ID for a specific address.
---
--- * 'cmSnowballType' - The type of AWS Snowball appliance to use for this cluster. Currently, the only supported appliance type for cluster jobs is @EDGE@ .
---
--- * 'cmShippingOption' - The shipping speed for each node in this cluster. This speed doesn't dictate how soon you'll get each Snowball Edge appliance, rather it represents how quickly each appliance moves to its destination while in transit. Regional shipping speeds are as follows:     * In Australia, you have access to express shipping. Typically, appliances shipped express are delivered in about a day.     * In the European Union (EU), you have access to express shipping. Typically, Snowball Edges shipped express are delivered in about a day. In addition, most countries in the EU have access to standard shipping, which typically takes less than a week, one way.     * In India, Snowball Edges are delivered in one to seven days.     * In the US, you have access to one-day shipping and two-day shipping.
---
--- * 'cmResources' - The arrays of 'JobResource' objects that can include updated 'S3Resource' objects or 'LambdaResource' objects.
---
--- * 'cmClusterId' - The automatically generated ID for a cluster.
---
--- * 'cmCreationDate' - The creation date for this cluster.
---
--- * 'cmDescription' - The optional description of the cluster.
---
--- * 'cmRoleARN' - The role ARN associated with this cluster. This ARN was created using the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> API action in AWS Identity and Access Management (IAM).
-clusterMetadata
-    :: ClusterMetadata
-clusterMetadata =
-  ClusterMetadata'
-    { _cmJobType = Nothing
-    , _cmKMSKeyARN = Nothing
-    , _cmClusterState = Nothing
-    , _cmNotification = Nothing
-    , _cmForwardingAddressId = Nothing
-    , _cmAddressId = Nothing
-    , _cmSnowballType = Nothing
-    , _cmShippingOption = Nothing
-    , _cmResources = Nothing
-    , _cmClusterId = Nothing
-    , _cmCreationDate = Nothing
-    , _cmDescription = Nothing
-    , _cmRoleARN = Nothing
-    }
-
-
--- | The type of job for this cluster. Currently, the only job type supported for clusters is @LOCAL_USE@ .
-cmJobType :: Lens' ClusterMetadata (Maybe JobType)
-cmJobType = lens _cmJobType (\ s a -> s{_cmJobType = a})
-
--- | The @KmsKeyARN@ Amazon Resource Name (ARN) associated with this cluster. This ARN was created using the <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey> API action in AWS Key Management Service (AWS KMS).
-cmKMSKeyARN :: Lens' ClusterMetadata (Maybe Text)
-cmKMSKeyARN = lens _cmKMSKeyARN (\ s a -> s{_cmKMSKeyARN = a})
-
--- | The current status of the cluster.
-cmClusterState :: Lens' ClusterMetadata (Maybe ClusterState)
-cmClusterState = lens _cmClusterState (\ s a -> s{_cmClusterState = a})
-
--- | The Amazon Simple Notification Service (Amazon SNS) notification settings for this cluster.
-cmNotification :: Lens' ClusterMetadata (Maybe Notification)
-cmNotification = lens _cmNotification (\ s a -> s{_cmNotification = a})
-
--- | The ID of the address that you want a cluster shipped to, after it will be shipped to its primary address. This field is not supported in most regions.
-cmForwardingAddressId :: Lens' ClusterMetadata (Maybe Text)
-cmForwardingAddressId = lens _cmForwardingAddressId (\ s a -> s{_cmForwardingAddressId = a})
-
--- | The automatically generated ID for a specific address.
-cmAddressId :: Lens' ClusterMetadata (Maybe Text)
-cmAddressId = lens _cmAddressId (\ s a -> s{_cmAddressId = a})
-
--- | The type of AWS Snowball appliance to use for this cluster. Currently, the only supported appliance type for cluster jobs is @EDGE@ .
-cmSnowballType :: Lens' ClusterMetadata (Maybe SnowballType)
-cmSnowballType = lens _cmSnowballType (\ s a -> s{_cmSnowballType = a})
-
--- | The shipping speed for each node in this cluster. This speed doesn't dictate how soon you'll get each Snowball Edge appliance, rather it represents how quickly each appliance moves to its destination while in transit. Regional shipping speeds are as follows:     * In Australia, you have access to express shipping. Typically, appliances shipped express are delivered in about a day.     * In the European Union (EU), you have access to express shipping. Typically, Snowball Edges shipped express are delivered in about a day. In addition, most countries in the EU have access to standard shipping, which typically takes less than a week, one way.     * In India, Snowball Edges are delivered in one to seven days.     * In the US, you have access to one-day shipping and two-day shipping.
-cmShippingOption :: Lens' ClusterMetadata (Maybe ShippingOption)
-cmShippingOption = lens _cmShippingOption (\ s a -> s{_cmShippingOption = a})
-
--- | The arrays of 'JobResource' objects that can include updated 'S3Resource' objects or 'LambdaResource' objects.
-cmResources :: Lens' ClusterMetadata (Maybe JobResource)
-cmResources = lens _cmResources (\ s a -> s{_cmResources = a})
-
--- | The automatically generated ID for a cluster.
-cmClusterId :: Lens' ClusterMetadata (Maybe Text)
-cmClusterId = lens _cmClusterId (\ s a -> s{_cmClusterId = a})
-
--- | The creation date for this cluster.
-cmCreationDate :: Lens' ClusterMetadata (Maybe UTCTime)
-cmCreationDate = lens _cmCreationDate (\ s a -> s{_cmCreationDate = a}) . mapping _Time
-
--- | The optional description of the cluster.
-cmDescription :: Lens' ClusterMetadata (Maybe Text)
-cmDescription = lens _cmDescription (\ s a -> s{_cmDescription = a})
-
--- | The role ARN associated with this cluster. This ARN was created using the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> API action in AWS Identity and Access Management (IAM).
-cmRoleARN :: Lens' ClusterMetadata (Maybe Text)
-cmRoleARN = lens _cmRoleARN (\ s a -> s{_cmRoleARN = a})
-
-instance FromJSON ClusterMetadata where
-        parseJSON
-          = withObject "ClusterMetadata"
-              (\ x ->
-                 ClusterMetadata' <$>
-                   (x .:? "JobType") <*> (x .:? "KmsKeyARN") <*>
-                     (x .:? "ClusterState")
-                     <*> (x .:? "Notification")
-                     <*> (x .:? "ForwardingAddressId")
-                     <*> (x .:? "AddressId")
-                     <*> (x .:? "SnowballType")
-                     <*> (x .:? "ShippingOption")
-                     <*> (x .:? "Resources")
-                     <*> (x .:? "ClusterId")
-                     <*> (x .:? "CreationDate")
-                     <*> (x .:? "Description")
-                     <*> (x .:? "RoleARN"))
-
-instance Hashable ClusterMetadata where
-
-instance NFData ClusterMetadata where
-
--- | Defines the real-time status of a Snowball's data transfer while the appliance is at AWS. This data is only available while a job has a @JobState@ value of @InProgress@ , for both import and export jobs.
---
---
---
--- /See:/ 'dataTransfer' smart constructor.
-data DataTransfer = DataTransfer'
-  { _dtTotalObjects       :: !(Maybe Integer)
-  , _dtTotalBytes         :: !(Maybe Integer)
-  , _dtObjectsTransferred :: !(Maybe Integer)
-  , _dtBytesTransferred   :: !(Maybe Integer)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DataTransfer' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dtTotalObjects' - The total number of objects for a transfer between a Snowball and Amazon S3. This value is set to 0 (zero) until all the keys that will be transferred have been listed.
---
--- * 'dtTotalBytes' - The total bytes of data for a transfer between a Snowball and Amazon S3. This value is set to 0 (zero) until all the keys that will be transferred have been listed.
---
--- * 'dtObjectsTransferred' - The number of objects transferred between a Snowball and Amazon S3.
---
--- * 'dtBytesTransferred' - The number of bytes transferred between a Snowball and Amazon S3.
-dataTransfer
-    :: DataTransfer
-dataTransfer =
-  DataTransfer'
-    { _dtTotalObjects = Nothing
-    , _dtTotalBytes = Nothing
-    , _dtObjectsTransferred = Nothing
-    , _dtBytesTransferred = Nothing
-    }
-
-
--- | The total number of objects for a transfer between a Snowball and Amazon S3. This value is set to 0 (zero) until all the keys that will be transferred have been listed.
-dtTotalObjects :: Lens' DataTransfer (Maybe Integer)
-dtTotalObjects = lens _dtTotalObjects (\ s a -> s{_dtTotalObjects = a})
-
--- | The total bytes of data for a transfer between a Snowball and Amazon S3. This value is set to 0 (zero) until all the keys that will be transferred have been listed.
-dtTotalBytes :: Lens' DataTransfer (Maybe Integer)
-dtTotalBytes = lens _dtTotalBytes (\ s a -> s{_dtTotalBytes = a})
-
--- | The number of objects transferred between a Snowball and Amazon S3.
-dtObjectsTransferred :: Lens' DataTransfer (Maybe Integer)
-dtObjectsTransferred = lens _dtObjectsTransferred (\ s a -> s{_dtObjectsTransferred = a})
-
--- | The number of bytes transferred between a Snowball and Amazon S3.
-dtBytesTransferred :: Lens' DataTransfer (Maybe Integer)
-dtBytesTransferred = lens _dtBytesTransferred (\ s a -> s{_dtBytesTransferred = a})
-
-instance FromJSON DataTransfer where
-        parseJSON
-          = withObject "DataTransfer"
-              (\ x ->
-                 DataTransfer' <$>
-                   (x .:? "TotalObjects") <*> (x .:? "TotalBytes") <*>
-                     (x .:? "ObjectsTransferred")
-                     <*> (x .:? "BytesTransferred"))
-
-instance Hashable DataTransfer where
-
-instance NFData DataTransfer where
-
--- | The container for the 'EventTriggerDefinition$EventResourceARN' .
---
---
---
--- /See:/ 'eventTriggerDefinition' smart constructor.
-newtype EventTriggerDefinition = EventTriggerDefinition'
-  { _etdEventResourceARN :: Maybe Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'EventTriggerDefinition' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'etdEventResourceARN' - The Amazon Resource Name (ARN) for any local Amazon S3 resource that is an AWS Lambda function's event trigger associated with this job.
-eventTriggerDefinition
-    :: EventTriggerDefinition
-eventTriggerDefinition =
-  EventTriggerDefinition' {_etdEventResourceARN = Nothing}
-
-
--- | The Amazon Resource Name (ARN) for any local Amazon S3 resource that is an AWS Lambda function's event trigger associated with this job.
-etdEventResourceARN :: Lens' EventTriggerDefinition (Maybe Text)
-etdEventResourceARN = lens _etdEventResourceARN (\ s a -> s{_etdEventResourceARN = a})
-
-instance FromJSON EventTriggerDefinition where
-        parseJSON
-          = withObject "EventTriggerDefinition"
-              (\ x ->
-                 EventTriggerDefinition' <$>
-                   (x .:? "EventResourceARN"))
-
-instance Hashable EventTriggerDefinition where
-
-instance NFData EventTriggerDefinition where
-
-instance ToJSON EventTriggerDefinition where
-        toJSON EventTriggerDefinition'{..}
-          = object
-              (catMaybes
-                 [("EventResourceARN" .=) <$> _etdEventResourceARN])
-
--- | Each @JobListEntry@ object contains a job's state, a job's ID, and a value that indicates whether the job is a job part, in the case of an export job.
---
---
---
--- /See:/ 'jobListEntry' smart constructor.
-data JobListEntry = JobListEntry'
-  { _jleJobType      :: !(Maybe JobType)
-  , _jleJobId        :: !(Maybe Text)
-  , _jleJobState     :: !(Maybe JobState)
-  , _jleSnowballType :: !(Maybe SnowballType)
-  , _jleCreationDate :: !(Maybe POSIX)
-  , _jleDescription  :: !(Maybe Text)
-  , _jleIsMaster     :: !(Maybe Bool)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'JobListEntry' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jleJobType' - The type of job.
---
--- * 'jleJobId' - The automatically generated ID for a job, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
---
--- * 'jleJobState' - The current state of this job.
---
--- * 'jleSnowballType' - The type of appliance used with this job.
---
--- * 'jleCreationDate' - The creation date for this job.
---
--- * 'jleDescription' - The optional description of this specific job, for example @Important Photos 2016-08-11@ .
---
--- * 'jleIsMaster' - A value that indicates that this job is a master job. A master job represents a successful request to create an export job. Master jobs aren't associated with any Snowballs. Instead, each master job will have at least one job part, and each job part is associated with a Snowball. It might take some time before the job parts associated with a particular master job are listed, because they are created after the master job is created.
-jobListEntry
-    :: JobListEntry
-jobListEntry =
-  JobListEntry'
-    { _jleJobType = Nothing
-    , _jleJobId = Nothing
-    , _jleJobState = Nothing
-    , _jleSnowballType = Nothing
-    , _jleCreationDate = Nothing
-    , _jleDescription = Nothing
-    , _jleIsMaster = Nothing
-    }
-
-
--- | The type of job.
-jleJobType :: Lens' JobListEntry (Maybe JobType)
-jleJobType = lens _jleJobType (\ s a -> s{_jleJobType = a})
-
--- | The automatically generated ID for a job, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-jleJobId :: Lens' JobListEntry (Maybe Text)
-jleJobId = lens _jleJobId (\ s a -> s{_jleJobId = a})
-
--- | The current state of this job.
-jleJobState :: Lens' JobListEntry (Maybe JobState)
-jleJobState = lens _jleJobState (\ s a -> s{_jleJobState = a})
-
--- | The type of appliance used with this job.
-jleSnowballType :: Lens' JobListEntry (Maybe SnowballType)
-jleSnowballType = lens _jleSnowballType (\ s a -> s{_jleSnowballType = a})
-
--- | The creation date for this job.
-jleCreationDate :: Lens' JobListEntry (Maybe UTCTime)
-jleCreationDate = lens _jleCreationDate (\ s a -> s{_jleCreationDate = a}) . mapping _Time
-
--- | The optional description of this specific job, for example @Important Photos 2016-08-11@ .
-jleDescription :: Lens' JobListEntry (Maybe Text)
-jleDescription = lens _jleDescription (\ s a -> s{_jleDescription = a})
-
--- | A value that indicates that this job is a master job. A master job represents a successful request to create an export job. Master jobs aren't associated with any Snowballs. Instead, each master job will have at least one job part, and each job part is associated with a Snowball. It might take some time before the job parts associated with a particular master job are listed, because they are created after the master job is created.
-jleIsMaster :: Lens' JobListEntry (Maybe Bool)
-jleIsMaster = lens _jleIsMaster (\ s a -> s{_jleIsMaster = a})
-
-instance FromJSON JobListEntry where
-        parseJSON
-          = withObject "JobListEntry"
-              (\ x ->
-                 JobListEntry' <$>
-                   (x .:? "JobType") <*> (x .:? "JobId") <*>
-                     (x .:? "JobState")
-                     <*> (x .:? "SnowballType")
-                     <*> (x .:? "CreationDate")
-                     <*> (x .:? "Description")
-                     <*> (x .:? "IsMaster"))
-
-instance Hashable JobListEntry where
-
-instance NFData JobListEntry where
-
--- | Contains job logs. Whenever Snowball is used to import data into or export data out of Amazon S3, you'll have the option of downloading a PDF job report. Job logs are returned as a part of the response syntax of the @DescribeJob@ action in the @JobMetadata@ data type. The job logs can be accessed for up to 60 minutes after this request has been made. To access any of the job logs after 60 minutes have passed, you'll have to make another call to the @DescribeJob@ action.
---
---
--- For import jobs, the PDF job report becomes available at the end of the import process. For export jobs, your job report typically becomes available while the Snowball for your job part is being delivered to you.
---
--- The job report provides you insight into the state of your Amazon S3 data transfer. The report includes details about your job or job part for your records.
---
--- For deeper visibility into the status of your transferred objects, you can look at the two associated logs: a success log and a failure log. The logs are saved in comma-separated value (CSV) format, and the name of each log includes the ID of the job or job part that the log describes.
---
---
--- /See:/ 'jobLogs' smart constructor.
-data JobLogs = JobLogs'
-  { _jlJobFailureLogURI       :: !(Maybe Text)
-  , _jlJobCompletionReportURI :: !(Maybe Text)
-  , _jlJobSuccessLogURI       :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'JobLogs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jlJobFailureLogURI' - A link to an Amazon S3 presigned URL where the job failure log is located.
---
--- * 'jlJobCompletionReportURI' - A link to an Amazon S3 presigned URL where the job completion report is located.
---
--- * 'jlJobSuccessLogURI' - A link to an Amazon S3 presigned URL where the job success log is located.
-jobLogs
-    :: JobLogs
-jobLogs =
-  JobLogs'
-    { _jlJobFailureLogURI = Nothing
-    , _jlJobCompletionReportURI = Nothing
-    , _jlJobSuccessLogURI = Nothing
-    }
-
-
--- | A link to an Amazon S3 presigned URL where the job failure log is located.
-jlJobFailureLogURI :: Lens' JobLogs (Maybe Text)
-jlJobFailureLogURI = lens _jlJobFailureLogURI (\ s a -> s{_jlJobFailureLogURI = a})
-
--- | A link to an Amazon S3 presigned URL where the job completion report is located.
-jlJobCompletionReportURI :: Lens' JobLogs (Maybe Text)
-jlJobCompletionReportURI = lens _jlJobCompletionReportURI (\ s a -> s{_jlJobCompletionReportURI = a})
-
--- | A link to an Amazon S3 presigned URL where the job success log is located.
-jlJobSuccessLogURI :: Lens' JobLogs (Maybe Text)
-jlJobSuccessLogURI = lens _jlJobSuccessLogURI (\ s a -> s{_jlJobSuccessLogURI = a})
-
-instance FromJSON JobLogs where
-        parseJSON
-          = withObject "JobLogs"
-              (\ x ->
-                 JobLogs' <$>
-                   (x .:? "JobFailureLogURI") <*>
-                     (x .:? "JobCompletionReportURI")
-                     <*> (x .:? "JobSuccessLogURI"))
-
-instance Hashable JobLogs where
-
-instance NFData JobLogs where
-
--- | Contains information about a specific job including shipping information, job status, and other important metadata. This information is returned as a part of the response syntax of the @DescribeJob@ action.
---
---
---
--- /See:/ 'jobMetadata' smart constructor.
-data JobMetadata = JobMetadata'
-  { _jmJobType                    :: !(Maybe JobType)
-  , _jmKMSKeyARN                  :: !(Maybe Text)
-  , _jmJobId                      :: !(Maybe Text)
-  , _jmJobLogInfo                 :: !(Maybe JobLogs)
-  , _jmNotification               :: !(Maybe Notification)
-  , _jmJobState                   :: !(Maybe JobState)
-  , _jmForwardingAddressId        :: !(Maybe Text)
-  , _jmShippingDetails            :: !(Maybe ShippingDetails)
-  , _jmAddressId                  :: !(Maybe Text)
-  , _jmSnowballType               :: !(Maybe SnowballType)
-  , _jmDataTransferProgress       :: !(Maybe DataTransfer)
-  , _jmResources                  :: !(Maybe JobResource)
-  , _jmClusterId                  :: !(Maybe Text)
-  , _jmCreationDate               :: !(Maybe POSIX)
-  , _jmDescription                :: !(Maybe Text)
-  , _jmRoleARN                    :: !(Maybe Text)
-  , _jmSnowballCapacityPreference :: !(Maybe SnowballCapacity)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'JobMetadata' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jmJobType' - The type of job.
---
--- * 'jmKMSKeyARN' - The Amazon Resource Name (ARN) for the AWS Key Management Service (AWS KMS) key associated with this job. This ARN was created using the <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey> API action in AWS KMS.
---
--- * 'jmJobId' - The automatically generated ID for a job, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
---
--- * 'jmJobLogInfo' - Links to Amazon S3 presigned URLs for the job report and logs. For import jobs, the PDF job report becomes available at the end of the import process. For export jobs, your job report typically becomes available while the Snowball for your job part is being delivered to you.
---
--- * 'jmNotification' - The Amazon Simple Notification Service (Amazon SNS) notification settings associated with a specific job. The @Notification@ object is returned as a part of the response syntax of the @DescribeJob@ action in the @JobMetadata@ data type.
---
--- * 'jmJobState' - The current status of the jobs.
---
--- * 'jmForwardingAddressId' - The ID of the address that you want a job shipped to, after it will be shipped to its primary address. This field is not supported in most regions.
---
--- * 'jmShippingDetails' - A job's shipping information, including inbound and outbound tracking numbers and shipping speed options.
---
--- * 'jmAddressId' - The ID for the address that you want the Snowball shipped to.
---
--- * 'jmSnowballType' - The type of appliance used with this job.
---
--- * 'jmDataTransferProgress' - A value that defines the real-time status of a Snowball's data transfer while the appliance is at AWS. This data is only available while a job has a @JobState@ value of @InProgress@ , for both import and export jobs.
---
--- * 'jmResources' - An array of @S3Resource@ objects. Each @S3Resource@ object represents an Amazon S3 bucket that your transferred data will be exported from or imported into.
---
--- * 'jmClusterId' - The 39-character ID for the cluster, for example @CID123e4567-e89b-12d3-a456-426655440000@ .
---
--- * 'jmCreationDate' - The creation date for this job.
---
--- * 'jmDescription' - The description of the job, provided at job creation.
---
--- * 'jmRoleARN' - The role ARN associated with this job. This ARN was created using the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> API action in AWS Identity and Access Management (IAM).
---
--- * 'jmSnowballCapacityPreference' - The Snowball capacity preference for this job, specified at job creation. In US regions, you can choose between 50 TB and 80 TB Snowballs. All other regions use 80 TB capacity Snowballs.
-jobMetadata
-    :: JobMetadata
-jobMetadata =
-  JobMetadata'
-    { _jmJobType = Nothing
-    , _jmKMSKeyARN = Nothing
-    , _jmJobId = Nothing
-    , _jmJobLogInfo = Nothing
-    , _jmNotification = Nothing
-    , _jmJobState = Nothing
-    , _jmForwardingAddressId = Nothing
-    , _jmShippingDetails = Nothing
-    , _jmAddressId = Nothing
-    , _jmSnowballType = Nothing
-    , _jmDataTransferProgress = Nothing
-    , _jmResources = Nothing
-    , _jmClusterId = Nothing
-    , _jmCreationDate = Nothing
-    , _jmDescription = Nothing
-    , _jmRoleARN = Nothing
-    , _jmSnowballCapacityPreference = Nothing
-    }
-
-
--- | The type of job.
-jmJobType :: Lens' JobMetadata (Maybe JobType)
-jmJobType = lens _jmJobType (\ s a -> s{_jmJobType = a})
-
--- | The Amazon Resource Name (ARN) for the AWS Key Management Service (AWS KMS) key associated with this job. This ARN was created using the <http://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html CreateKey> API action in AWS KMS.
-jmKMSKeyARN :: Lens' JobMetadata (Maybe Text)
-jmKMSKeyARN = lens _jmKMSKeyARN (\ s a -> s{_jmKMSKeyARN = a})
-
--- | The automatically generated ID for a job, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-jmJobId :: Lens' JobMetadata (Maybe Text)
-jmJobId = lens _jmJobId (\ s a -> s{_jmJobId = a})
-
--- | Links to Amazon S3 presigned URLs for the job report and logs. For import jobs, the PDF job report becomes available at the end of the import process. For export jobs, your job report typically becomes available while the Snowball for your job part is being delivered to you.
-jmJobLogInfo :: Lens' JobMetadata (Maybe JobLogs)
-jmJobLogInfo = lens _jmJobLogInfo (\ s a -> s{_jmJobLogInfo = a})
-
--- | The Amazon Simple Notification Service (Amazon SNS) notification settings associated with a specific job. The @Notification@ object is returned as a part of the response syntax of the @DescribeJob@ action in the @JobMetadata@ data type.
-jmNotification :: Lens' JobMetadata (Maybe Notification)
-jmNotification = lens _jmNotification (\ s a -> s{_jmNotification = a})
-
--- | The current status of the jobs.
-jmJobState :: Lens' JobMetadata (Maybe JobState)
-jmJobState = lens _jmJobState (\ s a -> s{_jmJobState = a})
-
--- | The ID of the address that you want a job shipped to, after it will be shipped to its primary address. This field is not supported in most regions.
-jmForwardingAddressId :: Lens' JobMetadata (Maybe Text)
-jmForwardingAddressId = lens _jmForwardingAddressId (\ s a -> s{_jmForwardingAddressId = a})
-
--- | A job's shipping information, including inbound and outbound tracking numbers and shipping speed options.
-jmShippingDetails :: Lens' JobMetadata (Maybe ShippingDetails)
-jmShippingDetails = lens _jmShippingDetails (\ s a -> s{_jmShippingDetails = a})
-
--- | The ID for the address that you want the Snowball shipped to.
-jmAddressId :: Lens' JobMetadata (Maybe Text)
-jmAddressId = lens _jmAddressId (\ s a -> s{_jmAddressId = a})
-
--- | The type of appliance used with this job.
-jmSnowballType :: Lens' JobMetadata (Maybe SnowballType)
-jmSnowballType = lens _jmSnowballType (\ s a -> s{_jmSnowballType = a})
-
--- | A value that defines the real-time status of a Snowball's data transfer while the appliance is at AWS. This data is only available while a job has a @JobState@ value of @InProgress@ , for both import and export jobs.
-jmDataTransferProgress :: Lens' JobMetadata (Maybe DataTransfer)
-jmDataTransferProgress = lens _jmDataTransferProgress (\ s a -> s{_jmDataTransferProgress = a})
-
--- | An array of @S3Resource@ objects. Each @S3Resource@ object represents an Amazon S3 bucket that your transferred data will be exported from or imported into.
-jmResources :: Lens' JobMetadata (Maybe JobResource)
-jmResources = lens _jmResources (\ s a -> s{_jmResources = a})
-
--- | The 39-character ID for the cluster, for example @CID123e4567-e89b-12d3-a456-426655440000@ .
-jmClusterId :: Lens' JobMetadata (Maybe Text)
-jmClusterId = lens _jmClusterId (\ s a -> s{_jmClusterId = a})
-
--- | The creation date for this job.
-jmCreationDate :: Lens' JobMetadata (Maybe UTCTime)
-jmCreationDate = lens _jmCreationDate (\ s a -> s{_jmCreationDate = a}) . mapping _Time
-
--- | The description of the job, provided at job creation.
-jmDescription :: Lens' JobMetadata (Maybe Text)
-jmDescription = lens _jmDescription (\ s a -> s{_jmDescription = a})
-
--- | The role ARN associated with this job. This ARN was created using the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> API action in AWS Identity and Access Management (IAM).
-jmRoleARN :: Lens' JobMetadata (Maybe Text)
-jmRoleARN = lens _jmRoleARN (\ s a -> s{_jmRoleARN = a})
-
--- | The Snowball capacity preference for this job, specified at job creation. In US regions, you can choose between 50 TB and 80 TB Snowballs. All other regions use 80 TB capacity Snowballs.
-jmSnowballCapacityPreference :: Lens' JobMetadata (Maybe SnowballCapacity)
-jmSnowballCapacityPreference = lens _jmSnowballCapacityPreference (\ s a -> s{_jmSnowballCapacityPreference = a})
-
-instance FromJSON JobMetadata where
-        parseJSON
-          = withObject "JobMetadata"
-              (\ x ->
-                 JobMetadata' <$>
-                   (x .:? "JobType") <*> (x .:? "KmsKeyARN") <*>
-                     (x .:? "JobId")
-                     <*> (x .:? "JobLogInfo")
-                     <*> (x .:? "Notification")
-                     <*> (x .:? "JobState")
-                     <*> (x .:? "ForwardingAddressId")
-                     <*> (x .:? "ShippingDetails")
-                     <*> (x .:? "AddressId")
-                     <*> (x .:? "SnowballType")
-                     <*> (x .:? "DataTransferProgress")
-                     <*> (x .:? "Resources")
-                     <*> (x .:? "ClusterId")
-                     <*> (x .:? "CreationDate")
-                     <*> (x .:? "Description")
-                     <*> (x .:? "RoleARN")
-                     <*> (x .:? "SnowballCapacityPreference"))
-
-instance Hashable JobMetadata where
-
-instance NFData JobMetadata where
-
--- | Contains an array of @S3Resource@ objects. Each @S3Resource@ object represents an Amazon S3 bucket that your transferred data will be exported from or imported into.
---
---
---
--- /See:/ 'jobResource' smart constructor.
-data JobResource = JobResource'
-  { _jrLambdaResources :: !(Maybe [LambdaResource])
-  , _jrS3Resources     :: !(Maybe [S3Resource])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'JobResource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'jrLambdaResources' - The Python-language Lambda functions for this job.
---
--- * 'jrS3Resources' - An array of @S3Resource@ objects.
-jobResource
-    :: JobResource
-jobResource =
-  JobResource' {_jrLambdaResources = Nothing, _jrS3Resources = Nothing}
-
-
--- | The Python-language Lambda functions for this job.
-jrLambdaResources :: Lens' JobResource [LambdaResource]
-jrLambdaResources = lens _jrLambdaResources (\ s a -> s{_jrLambdaResources = a}) . _Default . _Coerce
-
--- | An array of @S3Resource@ objects.
-jrS3Resources :: Lens' JobResource [S3Resource]
-jrS3Resources = lens _jrS3Resources (\ s a -> s{_jrS3Resources = a}) . _Default . _Coerce
-
-instance FromJSON JobResource where
-        parseJSON
-          = withObject "JobResource"
-              (\ x ->
-                 JobResource' <$>
-                   (x .:? "LambdaResources" .!= mempty) <*>
-                     (x .:? "S3Resources" .!= mempty))
-
-instance Hashable JobResource where
-
-instance NFData JobResource where
-
-instance ToJSON JobResource where
-        toJSON JobResource'{..}
-          = object
-              (catMaybes
-                 [("LambdaResources" .=) <$> _jrLambdaResources,
-                  ("S3Resources" .=) <$> _jrS3Resources])
-
--- | Contains a key range. For export jobs, a @S3Resource@ object can have an optional @KeyRange@ value. The length of the range is defined at job creation, and has either an inclusive @BeginMarker@ , an inclusive @EndMarker@ , or both. Ranges are UTF-8 binary sorted.
---
---
---
--- /See:/ 'keyRange' smart constructor.
-data KeyRange = KeyRange'
-  { _krEndMarker   :: !(Maybe Text)
-  , _krBeginMarker :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'KeyRange' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'krEndMarker' - The key that ends an optional key range for an export job. Ranges are inclusive and UTF-8 binary sorted.
---
--- * 'krBeginMarker' - The key that starts an optional key range for an export job. Ranges are inclusive and UTF-8 binary sorted.
-keyRange
-    :: KeyRange
-keyRange = KeyRange' {_krEndMarker = Nothing, _krBeginMarker = Nothing}
-
-
--- | The key that ends an optional key range for an export job. Ranges are inclusive and UTF-8 binary sorted.
-krEndMarker :: Lens' KeyRange (Maybe Text)
-krEndMarker = lens _krEndMarker (\ s a -> s{_krEndMarker = a})
-
--- | The key that starts an optional key range for an export job. Ranges are inclusive and UTF-8 binary sorted.
-krBeginMarker :: Lens' KeyRange (Maybe Text)
-krBeginMarker = lens _krBeginMarker (\ s a -> s{_krBeginMarker = a})
-
-instance FromJSON KeyRange where
-        parseJSON
-          = withObject "KeyRange"
-              (\ x ->
-                 KeyRange' <$>
-                   (x .:? "EndMarker") <*> (x .:? "BeginMarker"))
-
-instance Hashable KeyRange where
-
-instance NFData KeyRange where
-
-instance ToJSON KeyRange where
-        toJSON KeyRange'{..}
-          = object
-              (catMaybes
-                 [("EndMarker" .=) <$> _krEndMarker,
-                  ("BeginMarker" .=) <$> _krBeginMarker])
-
--- | Identifies
---
---
---
--- /See:/ 'lambdaResource' smart constructor.
-data LambdaResource = LambdaResource'
-  { _lrEventTriggers :: !(Maybe [EventTriggerDefinition])
-  , _lrLambdaARN     :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'LambdaResource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'lrEventTriggers' - The array of ARNs for 'S3Resource' objects to trigger the 'LambdaResource' objects associated with this job.
---
--- * 'lrLambdaARN' - An Amazon Resource Name (ARN) that represents an AWS Lambda function to be triggered by PUT object actions on the associated local Amazon S3 resource.
-lambdaResource
-    :: LambdaResource
-lambdaResource =
-  LambdaResource' {_lrEventTriggers = Nothing, _lrLambdaARN = Nothing}
-
-
--- | The array of ARNs for 'S3Resource' objects to trigger the 'LambdaResource' objects associated with this job.
-lrEventTriggers :: Lens' LambdaResource [EventTriggerDefinition]
-lrEventTriggers = lens _lrEventTriggers (\ s a -> s{_lrEventTriggers = a}) . _Default . _Coerce
-
--- | An Amazon Resource Name (ARN) that represents an AWS Lambda function to be triggered by PUT object actions on the associated local Amazon S3 resource.
-lrLambdaARN :: Lens' LambdaResource (Maybe Text)
-lrLambdaARN = lens _lrLambdaARN (\ s a -> s{_lrLambdaARN = a})
-
-instance FromJSON LambdaResource where
-        parseJSON
-          = withObject "LambdaResource"
-              (\ x ->
-                 LambdaResource' <$>
-                   (x .:? "EventTriggers" .!= mempty) <*>
-                     (x .:? "LambdaArn"))
-
-instance Hashable LambdaResource where
-
-instance NFData LambdaResource where
-
-instance ToJSON LambdaResource where
-        toJSON LambdaResource'{..}
-          = object
-              (catMaybes
-                 [("EventTriggers" .=) <$> _lrEventTriggers,
-                  ("LambdaArn" .=) <$> _lrLambdaARN])
-
--- | The Amazon Simple Notification Service (Amazon SNS) notification settings associated with a specific job. The @Notification@ object is returned as a part of the response syntax of the @DescribeJob@ action in the @JobMetadata@ data type.
---
---
--- When the notification settings are defined during job creation, you can choose to notify based on a specific set of job states using the @JobStatesToNotify@ array of strings, or you can specify that you want to have Amazon SNS notifications sent out for all job states with @NotifyAll@ set to true.
---
---
--- /See:/ 'notification' smart constructor.
-data Notification = Notification'
-  { _nNotifyAll         :: !(Maybe Bool)
-  , _nSNSTopicARN       :: !(Maybe Text)
-  , _nJobStatesToNotify :: !(Maybe [JobState])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Notification' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'nNotifyAll' - Any change in job state will trigger a notification for this job.
---
--- * 'nSNSTopicARN' - The new SNS @TopicArn@ that you want to associate with this job. You can create Amazon Resource Names (ARNs) for topics by using the <http://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html CreateTopic> Amazon SNS API action. You can subscribe email addresses to an Amazon SNS topic through the AWS Management Console, or by using the <http://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html Subscribe> AWS Simple Notification Service (SNS) API action.
---
--- * 'nJobStatesToNotify' - The list of job states that will trigger a notification for this job.
-notification
-    :: Notification
-notification =
-  Notification'
-    { _nNotifyAll = Nothing
-    , _nSNSTopicARN = Nothing
-    , _nJobStatesToNotify = Nothing
-    }
-
-
--- | Any change in job state will trigger a notification for this job.
-nNotifyAll :: Lens' Notification (Maybe Bool)
-nNotifyAll = lens _nNotifyAll (\ s a -> s{_nNotifyAll = a})
-
--- | The new SNS @TopicArn@ that you want to associate with this job. You can create Amazon Resource Names (ARNs) for topics by using the <http://docs.aws.amazon.com/sns/latest/api/API_CreateTopic.html CreateTopic> Amazon SNS API action. You can subscribe email addresses to an Amazon SNS topic through the AWS Management Console, or by using the <http://docs.aws.amazon.com/sns/latest/api/API_Subscribe.html Subscribe> AWS Simple Notification Service (SNS) API action.
-nSNSTopicARN :: Lens' Notification (Maybe Text)
-nSNSTopicARN = lens _nSNSTopicARN (\ s a -> s{_nSNSTopicARN = a})
-
--- | The list of job states that will trigger a notification for this job.
-nJobStatesToNotify :: Lens' Notification [JobState]
-nJobStatesToNotify = lens _nJobStatesToNotify (\ s a -> s{_nJobStatesToNotify = a}) . _Default . _Coerce
-
-instance FromJSON Notification where
-        parseJSON
-          = withObject "Notification"
-              (\ x ->
-                 Notification' <$>
-                   (x .:? "NotifyAll") <*> (x .:? "SnsTopicARN") <*>
-                     (x .:? "JobStatesToNotify" .!= mempty))
-
-instance Hashable Notification where
-
-instance NFData Notification where
-
-instance ToJSON Notification where
-        toJSON Notification'{..}
-          = object
-              (catMaybes
-                 [("NotifyAll" .=) <$> _nNotifyAll,
-                  ("SnsTopicARN" .=) <$> _nSNSTopicARN,
-                  ("JobStatesToNotify" .=) <$> _nJobStatesToNotify])
-
--- | Each @S3Resource@ object represents an Amazon S3 bucket that your transferred data will be exported from or imported into. For export jobs, this object can have an optional @KeyRange@ value. The length of the range is defined at job creation, and has either an inclusive @BeginMarker@ , an inclusive @EndMarker@ , or both. Ranges are UTF-8 binary sorted.
---
---
---
--- /See:/ 's3Resource' smart constructor.
-data S3Resource = S3Resource'
-  { _srKeyRange  :: !(Maybe KeyRange)
-  , _srBucketARN :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'S3Resource' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'srKeyRange' - For export jobs, you can provide an optional @KeyRange@ within a specific Amazon S3 bucket. The length of the range is defined at job creation, and has either an inclusive @BeginMarker@ , an inclusive @EndMarker@ , or both. Ranges are UTF-8 binary sorted.
---
--- * 'srBucketARN' - The Amazon Resource Name (ARN) of an Amazon S3 bucket.
-s3Resource
-    :: S3Resource
-s3Resource = S3Resource' {_srKeyRange = Nothing, _srBucketARN = Nothing}
-
-
--- | For export jobs, you can provide an optional @KeyRange@ within a specific Amazon S3 bucket. The length of the range is defined at job creation, and has either an inclusive @BeginMarker@ , an inclusive @EndMarker@ , or both. Ranges are UTF-8 binary sorted.
-srKeyRange :: Lens' S3Resource (Maybe KeyRange)
-srKeyRange = lens _srKeyRange (\ s a -> s{_srKeyRange = a})
-
--- | The Amazon Resource Name (ARN) of an Amazon S3 bucket.
-srBucketARN :: Lens' S3Resource (Maybe Text)
-srBucketARN = lens _srBucketARN (\ s a -> s{_srBucketARN = a})
-
-instance FromJSON S3Resource where
-        parseJSON
-          = withObject "S3Resource"
-              (\ x ->
-                 S3Resource' <$>
-                   (x .:? "KeyRange") <*> (x .:? "BucketArn"))
-
-instance Hashable S3Resource where
-
-instance NFData S3Resource where
-
-instance ToJSON S3Resource where
-        toJSON S3Resource'{..}
-          = object
-              (catMaybes
-                 [("KeyRange" .=) <$> _srKeyRange,
-                  ("BucketArn" .=) <$> _srBucketARN])
-
--- | The @Status@ and @TrackingNumber@ information for an inbound or outbound shipment.
---
---
---
--- /See:/ 'shipment' smart constructor.
-data Shipment = Shipment'
-  { _sStatus         :: !(Maybe Text)
-  , _sTrackingNumber :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Shipment' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sStatus' - Status information for a shipment.
---
--- * 'sTrackingNumber' - The tracking number for this job. Using this tracking number with your region's carrier's website, you can track a Snowball as the carrier transports it. For India, the carrier is Amazon Logistics. For all other regions, UPS is the carrier.
-shipment
-    :: Shipment
-shipment = Shipment' {_sStatus = Nothing, _sTrackingNumber = Nothing}
-
-
--- | Status information for a shipment.
-sStatus :: Lens' Shipment (Maybe Text)
-sStatus = lens _sStatus (\ s a -> s{_sStatus = a})
-
--- | The tracking number for this job. Using this tracking number with your region's carrier's website, you can track a Snowball as the carrier transports it. For India, the carrier is Amazon Logistics. For all other regions, UPS is the carrier.
-sTrackingNumber :: Lens' Shipment (Maybe Text)
-sTrackingNumber = lens _sTrackingNumber (\ s a -> s{_sTrackingNumber = a})
-
-instance FromJSON Shipment where
-        parseJSON
-          = withObject "Shipment"
-              (\ x ->
-                 Shipment' <$>
-                   (x .:? "Status") <*> (x .:? "TrackingNumber"))
-
-instance Hashable Shipment where
-
-instance NFData Shipment where
-
--- | A job's shipping information, including inbound and outbound tracking numbers and shipping speed options.
---
---
---
--- /See:/ 'shippingDetails' smart constructor.
-data ShippingDetails = ShippingDetails'
-  { _sdShippingOption   :: !(Maybe ShippingOption)
-  , _sdOutboundShipment :: !(Maybe Shipment)
-  , _sdInboundShipment  :: !(Maybe Shipment)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ShippingDetails' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sdShippingOption' - The shipping speed for a particular job. This speed doesn't dictate how soon you'll get the Snowball from the job's creation date. This speed represents how quickly it moves to its destination while in transit. Regional shipping speeds are as follows:     * In Australia, you have access to express shipping. Typically, Snowballs shipped express are delivered in about a day.     * In the European Union (EU), you have access to express shipping. Typically, Snowballs shipped express are delivered in about a day. In addition, most countries in the EU have access to standard shipping, which typically takes less than a week, one way.     * In India, Snowballs are delivered in one to seven days.     * In the United States of America (US), you have access to one-day shipping and two-day shipping.
---
--- * 'sdOutboundShipment' - The @Status@ and @TrackingNumber@ values for a Snowball being delivered to the address that you specified for a particular job.
---
--- * 'sdInboundShipment' - The @Status@ and @TrackingNumber@ values for a Snowball being returned to AWS for a particular job.
-shippingDetails
-    :: ShippingDetails
-shippingDetails =
-  ShippingDetails'
-    { _sdShippingOption = Nothing
-    , _sdOutboundShipment = Nothing
-    , _sdInboundShipment = Nothing
-    }
-
-
--- | The shipping speed for a particular job. This speed doesn't dictate how soon you'll get the Snowball from the job's creation date. This speed represents how quickly it moves to its destination while in transit. Regional shipping speeds are as follows:     * In Australia, you have access to express shipping. Typically, Snowballs shipped express are delivered in about a day.     * In the European Union (EU), you have access to express shipping. Typically, Snowballs shipped express are delivered in about a day. In addition, most countries in the EU have access to standard shipping, which typically takes less than a week, one way.     * In India, Snowballs are delivered in one to seven days.     * In the United States of America (US), you have access to one-day shipping and two-day shipping.
-sdShippingOption :: Lens' ShippingDetails (Maybe ShippingOption)
-sdShippingOption = lens _sdShippingOption (\ s a -> s{_sdShippingOption = a})
-
--- | The @Status@ and @TrackingNumber@ values for a Snowball being delivered to the address that you specified for a particular job.
-sdOutboundShipment :: Lens' ShippingDetails (Maybe Shipment)
-sdOutboundShipment = lens _sdOutboundShipment (\ s a -> s{_sdOutboundShipment = a})
-
--- | The @Status@ and @TrackingNumber@ values for a Snowball being returned to AWS for a particular job.
-sdInboundShipment :: Lens' ShippingDetails (Maybe Shipment)
-sdInboundShipment = lens _sdInboundShipment (\ s a -> s{_sdInboundShipment = a})
-
-instance FromJSON ShippingDetails where
-        parseJSON
-          = withObject "ShippingDetails"
-              (\ x ->
-                 ShippingDetails' <$>
-                   (x .:? "ShippingOption") <*>
-                     (x .:? "OutboundShipment")
-                     <*> (x .:? "InboundShipment"))
-
-instance Hashable ShippingDetails where
-
-instance NFData ShippingDetails where
diff --git a/gen/Network/AWS/Snowball/Types/Sum.hs b/gen/Network/AWS/Snowball/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/Types/Sum.hs
+++ /dev/null
@@ -1,251 +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.Snowball.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.Snowball.Types.Sum where
-
-import Network.AWS.Prelude
-
-data ClusterState
-  = AwaitingQuorum
-  | Cancelled
-  | Complete
-  | InUse
-  | Pending
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ClusterState where
-    parser = takeLowerText >>= \case
-        "awaitingquorum" -> pure AwaitingQuorum
-        "cancelled" -> pure Cancelled
-        "complete" -> pure Complete
-        "inuse" -> pure InUse
-        "pending" -> pure Pending
-        e -> fromTextError $ "Failure parsing ClusterState from value: '" <> e
-           <> "'. Accepted values: awaitingquorum, cancelled, complete, inuse, pending"
-
-instance ToText ClusterState where
-    toText = \case
-        AwaitingQuorum -> "AwaitingQuorum"
-        Cancelled -> "Cancelled"
-        Complete -> "Complete"
-        InUse -> "InUse"
-        Pending -> "Pending"
-
-instance Hashable     ClusterState
-instance NFData       ClusterState
-instance ToByteString ClusterState
-instance ToQuery      ClusterState
-instance ToHeader     ClusterState
-
-instance FromJSON ClusterState where
-    parseJSON = parseJSONText "ClusterState"
-
-data JobState
-  = JSCancelled
-  | JSComplete
-  | JSInProgress
-  | JSInTransitToAWS
-  | JSInTransitToCustomer
-  | JSListing
-  | JSNew
-  | JSPending
-  | JSPreparingAppliance
-  | JSPreparingShipment
-  | JSWithAWS
-  | JSWithCustomer
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText JobState where
-    parser = takeLowerText >>= \case
-        "cancelled" -> pure JSCancelled
-        "complete" -> pure JSComplete
-        "inprogress" -> pure JSInProgress
-        "intransittoaws" -> pure JSInTransitToAWS
-        "intransittocustomer" -> pure JSInTransitToCustomer
-        "listing" -> pure JSListing
-        "new" -> pure JSNew
-        "pending" -> pure JSPending
-        "preparingappliance" -> pure JSPreparingAppliance
-        "preparingshipment" -> pure JSPreparingShipment
-        "withaws" -> pure JSWithAWS
-        "withcustomer" -> pure JSWithCustomer
-        e -> fromTextError $ "Failure parsing JobState from value: '" <> e
-           <> "'. Accepted values: cancelled, complete, inprogress, intransittoaws, intransittocustomer, listing, new, pending, preparingappliance, preparingshipment, withaws, withcustomer"
-
-instance ToText JobState where
-    toText = \case
-        JSCancelled -> "Cancelled"
-        JSComplete -> "Complete"
-        JSInProgress -> "InProgress"
-        JSInTransitToAWS -> "InTransitToAWS"
-        JSInTransitToCustomer -> "InTransitToCustomer"
-        JSListing -> "Listing"
-        JSNew -> "New"
-        JSPending -> "Pending"
-        JSPreparingAppliance -> "PreparingAppliance"
-        JSPreparingShipment -> "PreparingShipment"
-        JSWithAWS -> "WithAWS"
-        JSWithCustomer -> "WithCustomer"
-
-instance Hashable     JobState
-instance NFData       JobState
-instance ToByteString JobState
-instance ToQuery      JobState
-instance ToHeader     JobState
-
-instance ToJSON JobState where
-    toJSON = toJSONText
-
-instance FromJSON JobState where
-    parseJSON = parseJSONText "JobState"
-
-data JobType
-  = Export
-  | Import
-  | LocalUse
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText JobType where
-    parser = takeLowerText >>= \case
-        "export" -> pure Export
-        "import" -> pure Import
-        "local_use" -> pure LocalUse
-        e -> fromTextError $ "Failure parsing JobType from value: '" <> e
-           <> "'. Accepted values: export, import, local_use"
-
-instance ToText JobType where
-    toText = \case
-        Export -> "EXPORT"
-        Import -> "IMPORT"
-        LocalUse -> "LOCAL_USE"
-
-instance Hashable     JobType
-instance NFData       JobType
-instance ToByteString JobType
-instance ToQuery      JobType
-instance ToHeader     JobType
-
-instance ToJSON JobType where
-    toJSON = toJSONText
-
-instance FromJSON JobType where
-    parseJSON = parseJSONText "JobType"
-
-data ShippingOption
-  = SOExpress
-  | SONextDay
-  | SOSecondDay
-  | SOStandard
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ShippingOption where
-    parser = takeLowerText >>= \case
-        "express" -> pure SOExpress
-        "next_day" -> pure SONextDay
-        "second_day" -> pure SOSecondDay
-        "standard" -> pure SOStandard
-        e -> fromTextError $ "Failure parsing ShippingOption from value: '" <> e
-           <> "'. Accepted values: express, next_day, second_day, standard"
-
-instance ToText ShippingOption where
-    toText = \case
-        SOExpress -> "EXPRESS"
-        SONextDay -> "NEXT_DAY"
-        SOSecondDay -> "SECOND_DAY"
-        SOStandard -> "STANDARD"
-
-instance Hashable     ShippingOption
-instance NFData       ShippingOption
-instance ToByteString ShippingOption
-instance ToQuery      ShippingOption
-instance ToHeader     ShippingOption
-
-instance ToJSON ShippingOption where
-    toJSON = toJSONText
-
-instance FromJSON ShippingOption where
-    parseJSON = parseJSONText "ShippingOption"
-
-data SnowballCapacity
-  = NoPreference
-  | T100
-  | T50
-  | T80
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText SnowballCapacity where
-    parser = takeLowerText >>= \case
-        "nopreference" -> pure NoPreference
-        "t100" -> pure T100
-        "t50" -> pure T50
-        "t80" -> pure T80
-        e -> fromTextError $ "Failure parsing SnowballCapacity from value: '" <> e
-           <> "'. Accepted values: nopreference, t100, t50, t80"
-
-instance ToText SnowballCapacity where
-    toText = \case
-        NoPreference -> "NoPreference"
-        T100 -> "T100"
-        T50 -> "T50"
-        T80 -> "T80"
-
-instance Hashable     SnowballCapacity
-instance NFData       SnowballCapacity
-instance ToByteString SnowballCapacity
-instance ToQuery      SnowballCapacity
-instance ToHeader     SnowballCapacity
-
-instance ToJSON SnowballCapacity where
-    toJSON = toJSONText
-
-instance FromJSON SnowballCapacity where
-    parseJSON = parseJSONText "SnowballCapacity"
-
-data SnowballType
-  = Edge
-  | Standard
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText SnowballType where
-    parser = takeLowerText >>= \case
-        "edge" -> pure Edge
-        "standard" -> pure Standard
-        e -> fromTextError $ "Failure parsing SnowballType from value: '" <> e
-           <> "'. Accepted values: edge, standard"
-
-instance ToText SnowballType where
-    toText = \case
-        Edge -> "EDGE"
-        Standard -> "STANDARD"
-
-instance Hashable     SnowballType
-instance NFData       SnowballType
-instance ToByteString SnowballType
-instance ToQuery      SnowballType
-instance ToHeader     SnowballType
-
-instance ToJSON SnowballType where
-    toJSON = toJSONText
-
-instance FromJSON SnowballType where
-    parseJSON = parseJSONText "SnowballType"
diff --git a/gen/Network/AWS/Snowball/UpdateCluster.hs b/gen/Network/AWS/Snowball/UpdateCluster.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/UpdateCluster.hs
+++ /dev/null
@@ -1,197 +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.Snowball.UpdateCluster
--- 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)
---
--- While a cluster's @ClusterState@ value is in the @AwaitingQuorum@ state, you can update some of the information associated with a cluster. Once the cluster changes to a different job state, usually 60 minutes after the cluster being created, this action is no longer available.
---
---
-module Network.AWS.Snowball.UpdateCluster
-    (
-    -- * Creating a Request
-      updateCluster
-    , UpdateCluster
-    -- * Request Lenses
-    , ucNotification
-    , ucForwardingAddressId
-    , ucAddressId
-    , ucShippingOption
-    , ucResources
-    , ucDescription
-    , ucRoleARN
-    , ucClusterId
-
-    -- * Destructuring the Response
-    , updateClusterResponse
-    , UpdateClusterResponse
-    -- * Response Lenses
-    , ucrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'updateCluster' smart constructor.
-data UpdateCluster = UpdateCluster'
-  { _ucNotification        :: !(Maybe Notification)
-  , _ucForwardingAddressId :: !(Maybe Text)
-  , _ucAddressId           :: !(Maybe Text)
-  , _ucShippingOption      :: !(Maybe ShippingOption)
-  , _ucResources           :: !(Maybe JobResource)
-  , _ucDescription         :: !(Maybe Text)
-  , _ucRoleARN             :: !(Maybe Text)
-  , _ucClusterId           :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateCluster' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ucNotification' - The new or updated 'Notification' object.
---
--- * 'ucForwardingAddressId' - The updated ID for the forwarding address for a cluster. This field is not supported in most regions.
---
--- * 'ucAddressId' - The ID of the updated 'Address' object.
---
--- * 'ucShippingOption' - The updated shipping option value of this cluster's 'ShippingDetails' object.
---
--- * 'ucResources' - The updated arrays of 'JobResource' objects that can include updated 'S3Resource' objects or 'LambdaResource' objects.
---
--- * 'ucDescription' - The updated description of this cluster.
---
--- * 'ucRoleARN' - The new role Amazon Resource Name (ARN) that you want to associate with this cluster. To create a role ARN, use the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> API action in AWS Identity and Access Management (IAM).
---
--- * 'ucClusterId' - The cluster ID of the cluster that you want to update, for example @CID123e4567-e89b-12d3-a456-426655440000@ .
-updateCluster
-    :: Text -- ^ 'ucClusterId'
-    -> UpdateCluster
-updateCluster pClusterId_ =
-  UpdateCluster'
-    { _ucNotification = Nothing
-    , _ucForwardingAddressId = Nothing
-    , _ucAddressId = Nothing
-    , _ucShippingOption = Nothing
-    , _ucResources = Nothing
-    , _ucDescription = Nothing
-    , _ucRoleARN = Nothing
-    , _ucClusterId = pClusterId_
-    }
-
-
--- | The new or updated 'Notification' object.
-ucNotification :: Lens' UpdateCluster (Maybe Notification)
-ucNotification = lens _ucNotification (\ s a -> s{_ucNotification = a})
-
--- | The updated ID for the forwarding address for a cluster. This field is not supported in most regions.
-ucForwardingAddressId :: Lens' UpdateCluster (Maybe Text)
-ucForwardingAddressId = lens _ucForwardingAddressId (\ s a -> s{_ucForwardingAddressId = a})
-
--- | The ID of the updated 'Address' object.
-ucAddressId :: Lens' UpdateCluster (Maybe Text)
-ucAddressId = lens _ucAddressId (\ s a -> s{_ucAddressId = a})
-
--- | The updated shipping option value of this cluster's 'ShippingDetails' object.
-ucShippingOption :: Lens' UpdateCluster (Maybe ShippingOption)
-ucShippingOption = lens _ucShippingOption (\ s a -> s{_ucShippingOption = a})
-
--- | The updated arrays of 'JobResource' objects that can include updated 'S3Resource' objects or 'LambdaResource' objects.
-ucResources :: Lens' UpdateCluster (Maybe JobResource)
-ucResources = lens _ucResources (\ s a -> s{_ucResources = a})
-
--- | The updated description of this cluster.
-ucDescription :: Lens' UpdateCluster (Maybe Text)
-ucDescription = lens _ucDescription (\ s a -> s{_ucDescription = a})
-
--- | The new role Amazon Resource Name (ARN) that you want to associate with this cluster. To create a role ARN, use the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> API action in AWS Identity and Access Management (IAM).
-ucRoleARN :: Lens' UpdateCluster (Maybe Text)
-ucRoleARN = lens _ucRoleARN (\ s a -> s{_ucRoleARN = a})
-
--- | The cluster ID of the cluster that you want to update, for example @CID123e4567-e89b-12d3-a456-426655440000@ .
-ucClusterId :: Lens' UpdateCluster Text
-ucClusterId = lens _ucClusterId (\ s a -> s{_ucClusterId = a})
-
-instance AWSRequest UpdateCluster where
-        type Rs UpdateCluster = UpdateClusterResponse
-        request = postJSON snowball
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateClusterResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UpdateCluster where
-
-instance NFData UpdateCluster where
-
-instance ToHeaders UpdateCluster where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.UpdateCluster" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateCluster where
-        toJSON UpdateCluster'{..}
-          = object
-              (catMaybes
-                 [("Notification" .=) <$> _ucNotification,
-                  ("ForwardingAddressId" .=) <$>
-                    _ucForwardingAddressId,
-                  ("AddressId" .=) <$> _ucAddressId,
-                  ("ShippingOption" .=) <$> _ucShippingOption,
-                  ("Resources" .=) <$> _ucResources,
-                  ("Description" .=) <$> _ucDescription,
-                  ("RoleARN" .=) <$> _ucRoleARN,
-                  Just ("ClusterId" .= _ucClusterId)])
-
-instance ToPath UpdateCluster where
-        toPath = const "/"
-
-instance ToQuery UpdateCluster where
-        toQuery = const mempty
-
--- | /See:/ 'updateClusterResponse' smart constructor.
-newtype UpdateClusterResponse = UpdateClusterResponse'
-  { _ucrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateClusterResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ucrsResponseStatus' - -- | The response status code.
-updateClusterResponse
-    :: Int -- ^ 'ucrsResponseStatus'
-    -> UpdateClusterResponse
-updateClusterResponse pResponseStatus_ =
-  UpdateClusterResponse' {_ucrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-ucrsResponseStatus :: Lens' UpdateClusterResponse Int
-ucrsResponseStatus = lens _ucrsResponseStatus (\ s a -> s{_ucrsResponseStatus = a})
-
-instance NFData UpdateClusterResponse where
diff --git a/gen/Network/AWS/Snowball/UpdateJob.hs b/gen/Network/AWS/Snowball/UpdateJob.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/UpdateJob.hs
+++ /dev/null
@@ -1,208 +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.Snowball.UpdateJob
--- 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)
---
--- While a job's @JobState@ value is @New@ , you can update some of the information associated with a job. Once the job changes to a different job state, usually within 60 minutes of the job being created, this action is no longer available.
---
---
-module Network.AWS.Snowball.UpdateJob
-    (
-    -- * Creating a Request
-      updateJob
-    , UpdateJob
-    -- * Request Lenses
-    , ujNotification
-    , ujForwardingAddressId
-    , ujAddressId
-    , ujShippingOption
-    , ujResources
-    , ujDescription
-    , ujRoleARN
-    , ujSnowballCapacityPreference
-    , ujJobId
-
-    -- * Destructuring the Response
-    , updateJobResponse
-    , UpdateJobResponse
-    -- * Response Lenses
-    , ujrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.Snowball.Types
-import Network.AWS.Snowball.Types.Product
-
--- | /See:/ 'updateJob' smart constructor.
-data UpdateJob = UpdateJob'
-  { _ujNotification               :: !(Maybe Notification)
-  , _ujForwardingAddressId        :: !(Maybe Text)
-  , _ujAddressId                  :: !(Maybe Text)
-  , _ujShippingOption             :: !(Maybe ShippingOption)
-  , _ujResources                  :: !(Maybe JobResource)
-  , _ujDescription                :: !(Maybe Text)
-  , _ujRoleARN                    :: !(Maybe Text)
-  , _ujSnowballCapacityPreference :: !(Maybe SnowballCapacity)
-  , _ujJobId                      :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateJob' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ujNotification' - The new or updated 'Notification' object.
---
--- * 'ujForwardingAddressId' - The updated ID for the forwarding address for a job. This field is not supported in most regions.
---
--- * 'ujAddressId' - The ID of the updated 'Address' object.
---
--- * 'ujShippingOption' - The updated shipping option value of this job's 'ShippingDetails' object.
---
--- * 'ujResources' - The updated 'S3Resource' object (for a single Amazon S3 bucket or key range), or the updated 'JobResource' object (for multiple buckets or key ranges).
---
--- * 'ujDescription' - The updated description of this job's 'JobMetadata' object.
---
--- * 'ujRoleARN' - The new role Amazon Resource Name (ARN) that you want to associate with this job. To create a role ARN, use the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> AWS Identity and Access Management (IAM) API action.
---
--- * 'ujSnowballCapacityPreference' - The updated @SnowballCapacityPreference@ of this job's 'JobMetadata' object. The 50 TB Snowballs are only available in the US regions.
---
--- * 'ujJobId' - The job ID of the job that you want to update, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-updateJob
-    :: Text -- ^ 'ujJobId'
-    -> UpdateJob
-updateJob pJobId_ =
-  UpdateJob'
-    { _ujNotification = Nothing
-    , _ujForwardingAddressId = Nothing
-    , _ujAddressId = Nothing
-    , _ujShippingOption = Nothing
-    , _ujResources = Nothing
-    , _ujDescription = Nothing
-    , _ujRoleARN = Nothing
-    , _ujSnowballCapacityPreference = Nothing
-    , _ujJobId = pJobId_
-    }
-
-
--- | The new or updated 'Notification' object.
-ujNotification :: Lens' UpdateJob (Maybe Notification)
-ujNotification = lens _ujNotification (\ s a -> s{_ujNotification = a})
-
--- | The updated ID for the forwarding address for a job. This field is not supported in most regions.
-ujForwardingAddressId :: Lens' UpdateJob (Maybe Text)
-ujForwardingAddressId = lens _ujForwardingAddressId (\ s a -> s{_ujForwardingAddressId = a})
-
--- | The ID of the updated 'Address' object.
-ujAddressId :: Lens' UpdateJob (Maybe Text)
-ujAddressId = lens _ujAddressId (\ s a -> s{_ujAddressId = a})
-
--- | The updated shipping option value of this job's 'ShippingDetails' object.
-ujShippingOption :: Lens' UpdateJob (Maybe ShippingOption)
-ujShippingOption = lens _ujShippingOption (\ s a -> s{_ujShippingOption = a})
-
--- | The updated 'S3Resource' object (for a single Amazon S3 bucket or key range), or the updated 'JobResource' object (for multiple buckets or key ranges).
-ujResources :: Lens' UpdateJob (Maybe JobResource)
-ujResources = lens _ujResources (\ s a -> s{_ujResources = a})
-
--- | The updated description of this job's 'JobMetadata' object.
-ujDescription :: Lens' UpdateJob (Maybe Text)
-ujDescription = lens _ujDescription (\ s a -> s{_ujDescription = a})
-
--- | The new role Amazon Resource Name (ARN) that you want to associate with this job. To create a role ARN, use the <http://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html CreateRole> AWS Identity and Access Management (IAM) API action.
-ujRoleARN :: Lens' UpdateJob (Maybe Text)
-ujRoleARN = lens _ujRoleARN (\ s a -> s{_ujRoleARN = a})
-
--- | The updated @SnowballCapacityPreference@ of this job's 'JobMetadata' object. The 50 TB Snowballs are only available in the US regions.
-ujSnowballCapacityPreference :: Lens' UpdateJob (Maybe SnowballCapacity)
-ujSnowballCapacityPreference = lens _ujSnowballCapacityPreference (\ s a -> s{_ujSnowballCapacityPreference = a})
-
--- | The job ID of the job that you want to update, for example @JID123e4567-e89b-12d3-a456-426655440000@ .
-ujJobId :: Lens' UpdateJob Text
-ujJobId = lens _ujJobId (\ s a -> s{_ujJobId = a})
-
-instance AWSRequest UpdateJob where
-        type Rs UpdateJob = UpdateJobResponse
-        request = postJSON snowball
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateJobResponse' <$> (pure (fromEnum s)))
-
-instance Hashable UpdateJob where
-
-instance NFData UpdateJob where
-
-instance ToHeaders UpdateJob where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSIESnowballJobManagementService.UpdateJob" ::
-                       ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateJob where
-        toJSON UpdateJob'{..}
-          = object
-              (catMaybes
-                 [("Notification" .=) <$> _ujNotification,
-                  ("ForwardingAddressId" .=) <$>
-                    _ujForwardingAddressId,
-                  ("AddressId" .=) <$> _ujAddressId,
-                  ("ShippingOption" .=) <$> _ujShippingOption,
-                  ("Resources" .=) <$> _ujResources,
-                  ("Description" .=) <$> _ujDescription,
-                  ("RoleARN" .=) <$> _ujRoleARN,
-                  ("SnowballCapacityPreference" .=) <$>
-                    _ujSnowballCapacityPreference,
-                  Just ("JobId" .= _ujJobId)])
-
-instance ToPath UpdateJob where
-        toPath = const "/"
-
-instance ToQuery UpdateJob where
-        toQuery = const mempty
-
--- | /See:/ 'updateJobResponse' smart constructor.
-newtype UpdateJobResponse = UpdateJobResponse'
-  { _ujrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateJobResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'ujrsResponseStatus' - -- | The response status code.
-updateJobResponse
-    :: Int -- ^ 'ujrsResponseStatus'
-    -> UpdateJobResponse
-updateJobResponse pResponseStatus_ =
-  UpdateJobResponse' {_ujrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-ujrsResponseStatus :: Lens' UpdateJobResponse Int
-ujrsResponseStatus = lens _ujrsResponseStatus (\ s a -> s{_ujrsResponseStatus = a})
-
-instance NFData UpdateJobResponse where
diff --git a/gen/Network/AWS/Snowball/Waiters.hs b/gen/Network/AWS/Snowball/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/Snowball/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.Snowball.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.Snowball.Waiters where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Snowball.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.Snowball
+import Test.Amazonka.Snowball.Internal
 import Test.Tasty
-import Test.AWS.Snowball
-import Test.AWS.Snowball.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "Snowball"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "Snowball"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/Gen/Snowball.hs b/test/Test/AWS/Gen/Snowball.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/Snowball.hs
+++ /dev/null
@@ -1,345 +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.Snowball
--- 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.Snowball where
-
-import Data.Proxy
-import Network.AWS.Snowball
-import Test.AWS.Fixture
-import Test.AWS.Prelude
-import Test.AWS.Snowball.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"
---         [ requestCancelCluster $
---             cancelCluster
---
---         , requestDescribeCluster $
---             describeCluster
---
---         , requestCreateAddress $
---             createAddress
---
---         , requestGetSnowballUsage $
---             getSnowballUsage
---
---         , requestDescribeAddresses $
---             describeAddresses
---
---         , requestUpdateCluster $
---             updateCluster
---
---         , requestCreateJob $
---             createJob
---
---         , requestGetJobManifest $
---             getJobManifest
---
---         , requestCreateCluster $
---             createCluster
---
---         , requestListJobs $
---             listJobs
---
---         , requestUpdateJob $
---             updateJob
---
---         , requestGetJobUnlockCode $
---             getJobUnlockCode
---
---         , requestListClusterJobs $
---             listClusterJobs
---
---         , requestDescribeJob $
---             describeJob
---
---         , requestListClusters $
---             listClusters
---
---         , requestDescribeAddress $
---             describeAddress
---
---         , requestCancelJob $
---             cancelJob
---
---           ]
-
---     , testGroup "response"
---         [ responseCancelCluster $
---             cancelClusterResponse
---
---         , responseDescribeCluster $
---             describeClusterResponse
---
---         , responseCreateAddress $
---             createAddressResponse
---
---         , responseGetSnowballUsage $
---             getSnowballUsageResponse
---
---         , responseDescribeAddresses $
---             describeAddressesResponse
---
---         , responseUpdateCluster $
---             updateClusterResponse
---
---         , responseCreateJob $
---             createJobResponse
---
---         , responseGetJobManifest $
---             getJobManifestResponse
---
---         , responseCreateCluster $
---             createClusterResponse
---
---         , responseListJobs $
---             listJobsResponse
---
---         , responseUpdateJob $
---             updateJobResponse
---
---         , responseGetJobUnlockCode $
---             getJobUnlockCodeResponse
---
---         , responseListClusterJobs $
---             listClusterJobsResponse
---
---         , responseDescribeJob $
---             describeJobResponse
---
---         , responseListClusters $
---             listClustersResponse
---
---         , responseDescribeAddress $
---             describeAddressResponse
---
---         , responseCancelJob $
---             cancelJobResponse
---
---           ]
---     ]
-
--- Requests
-
-requestCancelCluster :: CancelCluster -> TestTree
-requestCancelCluster = req
-    "CancelCluster"
-    "fixture/CancelCluster.yaml"
-
-requestDescribeCluster :: DescribeCluster -> TestTree
-requestDescribeCluster = req
-    "DescribeCluster"
-    "fixture/DescribeCluster.yaml"
-
-requestCreateAddress :: CreateAddress -> TestTree
-requestCreateAddress = req
-    "CreateAddress"
-    "fixture/CreateAddress.yaml"
-
-requestGetSnowballUsage :: GetSnowballUsage -> TestTree
-requestGetSnowballUsage = req
-    "GetSnowballUsage"
-    "fixture/GetSnowballUsage.yaml"
-
-requestDescribeAddresses :: DescribeAddresses -> TestTree
-requestDescribeAddresses = req
-    "DescribeAddresses"
-    "fixture/DescribeAddresses.yaml"
-
-requestUpdateCluster :: UpdateCluster -> TestTree
-requestUpdateCluster = req
-    "UpdateCluster"
-    "fixture/UpdateCluster.yaml"
-
-requestCreateJob :: CreateJob -> TestTree
-requestCreateJob = req
-    "CreateJob"
-    "fixture/CreateJob.yaml"
-
-requestGetJobManifest :: GetJobManifest -> TestTree
-requestGetJobManifest = req
-    "GetJobManifest"
-    "fixture/GetJobManifest.yaml"
-
-requestCreateCluster :: CreateCluster -> TestTree
-requestCreateCluster = req
-    "CreateCluster"
-    "fixture/CreateCluster.yaml"
-
-requestListJobs :: ListJobs -> TestTree
-requestListJobs = req
-    "ListJobs"
-    "fixture/ListJobs.yaml"
-
-requestUpdateJob :: UpdateJob -> TestTree
-requestUpdateJob = req
-    "UpdateJob"
-    "fixture/UpdateJob.yaml"
-
-requestGetJobUnlockCode :: GetJobUnlockCode -> TestTree
-requestGetJobUnlockCode = req
-    "GetJobUnlockCode"
-    "fixture/GetJobUnlockCode.yaml"
-
-requestListClusterJobs :: ListClusterJobs -> TestTree
-requestListClusterJobs = req
-    "ListClusterJobs"
-    "fixture/ListClusterJobs.yaml"
-
-requestDescribeJob :: DescribeJob -> TestTree
-requestDescribeJob = req
-    "DescribeJob"
-    "fixture/DescribeJob.yaml"
-
-requestListClusters :: ListClusters -> TestTree
-requestListClusters = req
-    "ListClusters"
-    "fixture/ListClusters.yaml"
-
-requestDescribeAddress :: DescribeAddress -> TestTree
-requestDescribeAddress = req
-    "DescribeAddress"
-    "fixture/DescribeAddress.yaml"
-
-requestCancelJob :: CancelJob -> TestTree
-requestCancelJob = req
-    "CancelJob"
-    "fixture/CancelJob.yaml"
-
--- Responses
-
-responseCancelCluster :: CancelClusterResponse -> TestTree
-responseCancelCluster = res
-    "CancelClusterResponse"
-    "fixture/CancelClusterResponse.proto"
-    snowball
-    (Proxy :: Proxy CancelCluster)
-
-responseDescribeCluster :: DescribeClusterResponse -> TestTree
-responseDescribeCluster = res
-    "DescribeClusterResponse"
-    "fixture/DescribeClusterResponse.proto"
-    snowball
-    (Proxy :: Proxy DescribeCluster)
-
-responseCreateAddress :: CreateAddressResponse -> TestTree
-responseCreateAddress = res
-    "CreateAddressResponse"
-    "fixture/CreateAddressResponse.proto"
-    snowball
-    (Proxy :: Proxy CreateAddress)
-
-responseGetSnowballUsage :: GetSnowballUsageResponse -> TestTree
-responseGetSnowballUsage = res
-    "GetSnowballUsageResponse"
-    "fixture/GetSnowballUsageResponse.proto"
-    snowball
-    (Proxy :: Proxy GetSnowballUsage)
-
-responseDescribeAddresses :: DescribeAddressesResponse -> TestTree
-responseDescribeAddresses = res
-    "DescribeAddressesResponse"
-    "fixture/DescribeAddressesResponse.proto"
-    snowball
-    (Proxy :: Proxy DescribeAddresses)
-
-responseUpdateCluster :: UpdateClusterResponse -> TestTree
-responseUpdateCluster = res
-    "UpdateClusterResponse"
-    "fixture/UpdateClusterResponse.proto"
-    snowball
-    (Proxy :: Proxy UpdateCluster)
-
-responseCreateJob :: CreateJobResponse -> TestTree
-responseCreateJob = res
-    "CreateJobResponse"
-    "fixture/CreateJobResponse.proto"
-    snowball
-    (Proxy :: Proxy CreateJob)
-
-responseGetJobManifest :: GetJobManifestResponse -> TestTree
-responseGetJobManifest = res
-    "GetJobManifestResponse"
-    "fixture/GetJobManifestResponse.proto"
-    snowball
-    (Proxy :: Proxy GetJobManifest)
-
-responseCreateCluster :: CreateClusterResponse -> TestTree
-responseCreateCluster = res
-    "CreateClusterResponse"
-    "fixture/CreateClusterResponse.proto"
-    snowball
-    (Proxy :: Proxy CreateCluster)
-
-responseListJobs :: ListJobsResponse -> TestTree
-responseListJobs = res
-    "ListJobsResponse"
-    "fixture/ListJobsResponse.proto"
-    snowball
-    (Proxy :: Proxy ListJobs)
-
-responseUpdateJob :: UpdateJobResponse -> TestTree
-responseUpdateJob = res
-    "UpdateJobResponse"
-    "fixture/UpdateJobResponse.proto"
-    snowball
-    (Proxy :: Proxy UpdateJob)
-
-responseGetJobUnlockCode :: GetJobUnlockCodeResponse -> TestTree
-responseGetJobUnlockCode = res
-    "GetJobUnlockCodeResponse"
-    "fixture/GetJobUnlockCodeResponse.proto"
-    snowball
-    (Proxy :: Proxy GetJobUnlockCode)
-
-responseListClusterJobs :: ListClusterJobsResponse -> TestTree
-responseListClusterJobs = res
-    "ListClusterJobsResponse"
-    "fixture/ListClusterJobsResponse.proto"
-    snowball
-    (Proxy :: Proxy ListClusterJobs)
-
-responseDescribeJob :: DescribeJobResponse -> TestTree
-responseDescribeJob = res
-    "DescribeJobResponse"
-    "fixture/DescribeJobResponse.proto"
-    snowball
-    (Proxy :: Proxy DescribeJob)
-
-responseListClusters :: ListClustersResponse -> TestTree
-responseListClusters = res
-    "ListClustersResponse"
-    "fixture/ListClustersResponse.proto"
-    snowball
-    (Proxy :: Proxy ListClusters)
-
-responseDescribeAddress :: DescribeAddressResponse -> TestTree
-responseDescribeAddress = res
-    "DescribeAddressResponse"
-    "fixture/DescribeAddressResponse.proto"
-    snowball
-    (Proxy :: Proxy DescribeAddress)
-
-responseCancelJob :: CancelJobResponse -> TestTree
-responseCancelJob = res
-    "CancelJobResponse"
-    "fixture/CancelJobResponse.proto"
-    snowball
-    (Proxy :: Proxy CancelJob)
diff --git a/test/Test/AWS/Snowball.hs b/test/Test/AWS/Snowball.hs
deleted file mode 100644
--- a/test/Test/AWS/Snowball.hs
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Test.AWS.Snowball
--- 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.Snowball where
-
-import Test.AWS.Prelude
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/Snowball/Internal.hs b/test/Test/AWS/Snowball/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/Snowball/Internal.hs
+++ /dev/null
@@ -1,17 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Test.AWS.Snowball.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.Snowball.Internal where
-
-import Test.AWS.Prelude
diff --git a/test/Test/Amazonka/Gen/Snowball.hs b/test/Test/Amazonka/Gen/Snowball.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/Snowball.hs
@@ -0,0 +1,538 @@
+{-# 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.Snowball
+-- 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.Snowball where
+
+import Amazonka.Snowball
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.Snowball.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"
+--         [ requestCancelCluster $
+--             newCancelCluster
+--
+--         , requestCancelJob $
+--             newCancelJob
+--
+--         , requestCreateAddress $
+--             newCreateAddress
+--
+--         , requestCreateCluster $
+--             newCreateCluster
+--
+--         , requestCreateJob $
+--             newCreateJob
+--
+--         , requestCreateLongTermPricing $
+--             newCreateLongTermPricing
+--
+--         , requestCreateReturnShippingLabel $
+--             newCreateReturnShippingLabel
+--
+--         , requestDescribeAddress $
+--             newDescribeAddress
+--
+--         , requestDescribeAddresses $
+--             newDescribeAddresses
+--
+--         , requestDescribeCluster $
+--             newDescribeCluster
+--
+--         , requestDescribeJob $
+--             newDescribeJob
+--
+--         , requestDescribeReturnShippingLabel $
+--             newDescribeReturnShippingLabel
+--
+--         , requestGetJobManifest $
+--             newGetJobManifest
+--
+--         , requestGetJobUnlockCode $
+--             newGetJobUnlockCode
+--
+--         , requestGetSnowballUsage $
+--             newGetSnowballUsage
+--
+--         , requestGetSoftwareUpdates $
+--             newGetSoftwareUpdates
+--
+--         , requestListClusterJobs $
+--             newListClusterJobs
+--
+--         , requestListClusters $
+--             newListClusters
+--
+--         , requestListCompatibleImages $
+--             newListCompatibleImages
+--
+--         , requestListJobs $
+--             newListJobs
+--
+--         , requestListLongTermPricing $
+--             newListLongTermPricing
+--
+--         , requestUpdateCluster $
+--             newUpdateCluster
+--
+--         , requestUpdateJob $
+--             newUpdateJob
+--
+--         , requestUpdateJobShipmentState $
+--             newUpdateJobShipmentState
+--
+--         , requestUpdateLongTermPricing $
+--             newUpdateLongTermPricing
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCancelCluster $
+--             newCancelClusterResponse
+--
+--         , responseCancelJob $
+--             newCancelJobResponse
+--
+--         , responseCreateAddress $
+--             newCreateAddressResponse
+--
+--         , responseCreateCluster $
+--             newCreateClusterResponse
+--
+--         , responseCreateJob $
+--             newCreateJobResponse
+--
+--         , responseCreateLongTermPricing $
+--             newCreateLongTermPricingResponse
+--
+--         , responseCreateReturnShippingLabel $
+--             newCreateReturnShippingLabelResponse
+--
+--         , responseDescribeAddress $
+--             newDescribeAddressResponse
+--
+--         , responseDescribeAddresses $
+--             newDescribeAddressesResponse
+--
+--         , responseDescribeCluster $
+--             newDescribeClusterResponse
+--
+--         , responseDescribeJob $
+--             newDescribeJobResponse
+--
+--         , responseDescribeReturnShippingLabel $
+--             newDescribeReturnShippingLabelResponse
+--
+--         , responseGetJobManifest $
+--             newGetJobManifestResponse
+--
+--         , responseGetJobUnlockCode $
+--             newGetJobUnlockCodeResponse
+--
+--         , responseGetSnowballUsage $
+--             newGetSnowballUsageResponse
+--
+--         , responseGetSoftwareUpdates $
+--             newGetSoftwareUpdatesResponse
+--
+--         , responseListClusterJobs $
+--             newListClusterJobsResponse
+--
+--         , responseListClusters $
+--             newListClustersResponse
+--
+--         , responseListCompatibleImages $
+--             newListCompatibleImagesResponse
+--
+--         , responseListJobs $
+--             newListJobsResponse
+--
+--         , responseListLongTermPricing $
+--             newListLongTermPricingResponse
+--
+--         , responseUpdateCluster $
+--             newUpdateClusterResponse
+--
+--         , responseUpdateJob $
+--             newUpdateJobResponse
+--
+--         , responseUpdateJobShipmentState $
+--             newUpdateJobShipmentStateResponse
+--
+--         , responseUpdateLongTermPricing $
+--             newUpdateLongTermPricingResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCancelCluster :: CancelCluster -> TestTree
+requestCancelCluster =
+  req
+    "CancelCluster"
+    "fixture/CancelCluster.yaml"
+
+requestCancelJob :: CancelJob -> TestTree
+requestCancelJob =
+  req
+    "CancelJob"
+    "fixture/CancelJob.yaml"
+
+requestCreateAddress :: CreateAddress -> TestTree
+requestCreateAddress =
+  req
+    "CreateAddress"
+    "fixture/CreateAddress.yaml"
+
+requestCreateCluster :: CreateCluster -> TestTree
+requestCreateCluster =
+  req
+    "CreateCluster"
+    "fixture/CreateCluster.yaml"
+
+requestCreateJob :: CreateJob -> TestTree
+requestCreateJob =
+  req
+    "CreateJob"
+    "fixture/CreateJob.yaml"
+
+requestCreateLongTermPricing :: CreateLongTermPricing -> TestTree
+requestCreateLongTermPricing =
+  req
+    "CreateLongTermPricing"
+    "fixture/CreateLongTermPricing.yaml"
+
+requestCreateReturnShippingLabel :: CreateReturnShippingLabel -> TestTree
+requestCreateReturnShippingLabel =
+  req
+    "CreateReturnShippingLabel"
+    "fixture/CreateReturnShippingLabel.yaml"
+
+requestDescribeAddress :: DescribeAddress -> TestTree
+requestDescribeAddress =
+  req
+    "DescribeAddress"
+    "fixture/DescribeAddress.yaml"
+
+requestDescribeAddresses :: DescribeAddresses -> TestTree
+requestDescribeAddresses =
+  req
+    "DescribeAddresses"
+    "fixture/DescribeAddresses.yaml"
+
+requestDescribeCluster :: DescribeCluster -> TestTree
+requestDescribeCluster =
+  req
+    "DescribeCluster"
+    "fixture/DescribeCluster.yaml"
+
+requestDescribeJob :: DescribeJob -> TestTree
+requestDescribeJob =
+  req
+    "DescribeJob"
+    "fixture/DescribeJob.yaml"
+
+requestDescribeReturnShippingLabel :: DescribeReturnShippingLabel -> TestTree
+requestDescribeReturnShippingLabel =
+  req
+    "DescribeReturnShippingLabel"
+    "fixture/DescribeReturnShippingLabel.yaml"
+
+requestGetJobManifest :: GetJobManifest -> TestTree
+requestGetJobManifest =
+  req
+    "GetJobManifest"
+    "fixture/GetJobManifest.yaml"
+
+requestGetJobUnlockCode :: GetJobUnlockCode -> TestTree
+requestGetJobUnlockCode =
+  req
+    "GetJobUnlockCode"
+    "fixture/GetJobUnlockCode.yaml"
+
+requestGetSnowballUsage :: GetSnowballUsage -> TestTree
+requestGetSnowballUsage =
+  req
+    "GetSnowballUsage"
+    "fixture/GetSnowballUsage.yaml"
+
+requestGetSoftwareUpdates :: GetSoftwareUpdates -> TestTree
+requestGetSoftwareUpdates =
+  req
+    "GetSoftwareUpdates"
+    "fixture/GetSoftwareUpdates.yaml"
+
+requestListClusterJobs :: ListClusterJobs -> TestTree
+requestListClusterJobs =
+  req
+    "ListClusterJobs"
+    "fixture/ListClusterJobs.yaml"
+
+requestListClusters :: ListClusters -> TestTree
+requestListClusters =
+  req
+    "ListClusters"
+    "fixture/ListClusters.yaml"
+
+requestListCompatibleImages :: ListCompatibleImages -> TestTree
+requestListCompatibleImages =
+  req
+    "ListCompatibleImages"
+    "fixture/ListCompatibleImages.yaml"
+
+requestListJobs :: ListJobs -> TestTree
+requestListJobs =
+  req
+    "ListJobs"
+    "fixture/ListJobs.yaml"
+
+requestListLongTermPricing :: ListLongTermPricing -> TestTree
+requestListLongTermPricing =
+  req
+    "ListLongTermPricing"
+    "fixture/ListLongTermPricing.yaml"
+
+requestUpdateCluster :: UpdateCluster -> TestTree
+requestUpdateCluster =
+  req
+    "UpdateCluster"
+    "fixture/UpdateCluster.yaml"
+
+requestUpdateJob :: UpdateJob -> TestTree
+requestUpdateJob =
+  req
+    "UpdateJob"
+    "fixture/UpdateJob.yaml"
+
+requestUpdateJobShipmentState :: UpdateJobShipmentState -> TestTree
+requestUpdateJobShipmentState =
+  req
+    "UpdateJobShipmentState"
+    "fixture/UpdateJobShipmentState.yaml"
+
+requestUpdateLongTermPricing :: UpdateLongTermPricing -> TestTree
+requestUpdateLongTermPricing =
+  req
+    "UpdateLongTermPricing"
+    "fixture/UpdateLongTermPricing.yaml"
+
+-- Responses
+
+responseCancelCluster :: CancelClusterResponse -> TestTree
+responseCancelCluster =
+  res
+    "CancelClusterResponse"
+    "fixture/CancelClusterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelCluster)
+
+responseCancelJob :: CancelJobResponse -> TestTree
+responseCancelJob =
+  res
+    "CancelJobResponse"
+    "fixture/CancelJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CancelJob)
+
+responseCreateAddress :: CreateAddressResponse -> TestTree
+responseCreateAddress =
+  res
+    "CreateAddressResponse"
+    "fixture/CreateAddressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateAddress)
+
+responseCreateCluster :: CreateClusterResponse -> TestTree
+responseCreateCluster =
+  res
+    "CreateClusterResponse"
+    "fixture/CreateClusterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateCluster)
+
+responseCreateJob :: CreateJobResponse -> TestTree
+responseCreateJob =
+  res
+    "CreateJobResponse"
+    "fixture/CreateJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateJob)
+
+responseCreateLongTermPricing :: CreateLongTermPricingResponse -> TestTree
+responseCreateLongTermPricing =
+  res
+    "CreateLongTermPricingResponse"
+    "fixture/CreateLongTermPricingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateLongTermPricing)
+
+responseCreateReturnShippingLabel :: CreateReturnShippingLabelResponse -> TestTree
+responseCreateReturnShippingLabel =
+  res
+    "CreateReturnShippingLabelResponse"
+    "fixture/CreateReturnShippingLabelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateReturnShippingLabel)
+
+responseDescribeAddress :: DescribeAddressResponse -> TestTree
+responseDescribeAddress =
+  res
+    "DescribeAddressResponse"
+    "fixture/DescribeAddressResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAddress)
+
+responseDescribeAddresses :: DescribeAddressesResponse -> TestTree
+responseDescribeAddresses =
+  res
+    "DescribeAddressesResponse"
+    "fixture/DescribeAddressesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeAddresses)
+
+responseDescribeCluster :: DescribeClusterResponse -> TestTree
+responseDescribeCluster =
+  res
+    "DescribeClusterResponse"
+    "fixture/DescribeClusterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeCluster)
+
+responseDescribeJob :: DescribeJobResponse -> TestTree
+responseDescribeJob =
+  res
+    "DescribeJobResponse"
+    "fixture/DescribeJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeJob)
+
+responseDescribeReturnShippingLabel :: DescribeReturnShippingLabelResponse -> TestTree
+responseDescribeReturnShippingLabel =
+  res
+    "DescribeReturnShippingLabelResponse"
+    "fixture/DescribeReturnShippingLabelResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DescribeReturnShippingLabel)
+
+responseGetJobManifest :: GetJobManifestResponse -> TestTree
+responseGetJobManifest =
+  res
+    "GetJobManifestResponse"
+    "fixture/GetJobManifestResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetJobManifest)
+
+responseGetJobUnlockCode :: GetJobUnlockCodeResponse -> TestTree
+responseGetJobUnlockCode =
+  res
+    "GetJobUnlockCodeResponse"
+    "fixture/GetJobUnlockCodeResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetJobUnlockCode)
+
+responseGetSnowballUsage :: GetSnowballUsageResponse -> TestTree
+responseGetSnowballUsage =
+  res
+    "GetSnowballUsageResponse"
+    "fixture/GetSnowballUsageResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSnowballUsage)
+
+responseGetSoftwareUpdates :: GetSoftwareUpdatesResponse -> TestTree
+responseGetSoftwareUpdates =
+  res
+    "GetSoftwareUpdatesResponse"
+    "fixture/GetSoftwareUpdatesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetSoftwareUpdates)
+
+responseListClusterJobs :: ListClusterJobsResponse -> TestTree
+responseListClusterJobs =
+  res
+    "ListClusterJobsResponse"
+    "fixture/ListClusterJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListClusterJobs)
+
+responseListClusters :: ListClustersResponse -> TestTree
+responseListClusters =
+  res
+    "ListClustersResponse"
+    "fixture/ListClustersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListClusters)
+
+responseListCompatibleImages :: ListCompatibleImagesResponse -> TestTree
+responseListCompatibleImages =
+  res
+    "ListCompatibleImagesResponse"
+    "fixture/ListCompatibleImagesResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListCompatibleImages)
+
+responseListJobs :: ListJobsResponse -> TestTree
+responseListJobs =
+  res
+    "ListJobsResponse"
+    "fixture/ListJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListJobs)
+
+responseListLongTermPricing :: ListLongTermPricingResponse -> TestTree
+responseListLongTermPricing =
+  res
+    "ListLongTermPricingResponse"
+    "fixture/ListLongTermPricingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListLongTermPricing)
+
+responseUpdateCluster :: UpdateClusterResponse -> TestTree
+responseUpdateCluster =
+  res
+    "UpdateClusterResponse"
+    "fixture/UpdateClusterResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateCluster)
+
+responseUpdateJob :: UpdateJobResponse -> TestTree
+responseUpdateJob =
+  res
+    "UpdateJobResponse"
+    "fixture/UpdateJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateJob)
+
+responseUpdateJobShipmentState :: UpdateJobShipmentStateResponse -> TestTree
+responseUpdateJobShipmentState =
+  res
+    "UpdateJobShipmentStateResponse"
+    "fixture/UpdateJobShipmentStateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateJobShipmentState)
+
+responseUpdateLongTermPricing :: UpdateLongTermPricingResponse -> TestTree
+responseUpdateLongTermPricing =
+  res
+    "UpdateLongTermPricingResponse"
+    "fixture/UpdateLongTermPricingResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateLongTermPricing)
diff --git a/test/Test/Amazonka/Snowball.hs b/test/Test/Amazonka/Snowball.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Snowball.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.Snowball
+-- 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.Snowball
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/Snowball/Internal.hs b/test/Test/Amazonka/Snowball/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Snowball/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.Snowball.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.Snowball.Internal where
