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-10-24@ 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.SMS](http://hackage.haskell.org/package/amazonka-sms/docs/Network-AWS-SMS.html)
+See [Amazonka.SMS](http://hackage.haskell.org/package/amazonka-sms/docs/Amazonka-SMS.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-sms.cabal b/amazonka-sms.cabal
--- a/amazonka-sms.cabal
+++ b/amazonka-sms.cabal
@@ -1,96 +1,166 @@
-name:                  amazonka-sms
-version:               1.6.1
-synopsis:              Amazon Server Migration Service 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-sms
+version:            2.0
+synopsis:           Amazon Server Migration Service 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.SMS" or <https://aws.amazon.com/documentation/ the AWS documentation>
-    to get started.
+  Derived from API version @2016-10-24@ 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.SMS.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.SMS" 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-sms
+  type:     git
+  location: git://github.com/brendanhay/amazonka.git
+  subdir:   amazonka-sms
 
 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.SMS
-        , Network.AWS.SMS.CreateReplicationJob
-        , Network.AWS.SMS.DeleteReplicationJob
-        , Network.AWS.SMS.DeleteServerCatalog
-        , Network.AWS.SMS.DisassociateConnector
-        , Network.AWS.SMS.GetConnectors
-        , Network.AWS.SMS.GetReplicationJobs
-        , Network.AWS.SMS.GetReplicationRuns
-        , Network.AWS.SMS.GetServers
-        , Network.AWS.SMS.ImportServerCatalog
-        , Network.AWS.SMS.StartOnDemandReplicationRun
-        , Network.AWS.SMS.Types
-        , Network.AWS.SMS.UpdateReplicationJob
-        , Network.AWS.SMS.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.SMS.Types.Product
-        , Network.AWS.SMS.Types.Sum
+  exposed-modules:
+    Amazonka.SMS
+    Amazonka.SMS.CreateApp
+    Amazonka.SMS.CreateReplicationJob
+    Amazonka.SMS.DeleteApp
+    Amazonka.SMS.DeleteAppLaunchConfiguration
+    Amazonka.SMS.DeleteAppReplicationConfiguration
+    Amazonka.SMS.DeleteAppValidationConfiguration
+    Amazonka.SMS.DeleteReplicationJob
+    Amazonka.SMS.DeleteServerCatalog
+    Amazonka.SMS.DisassociateConnector
+    Amazonka.SMS.GenerateChangeSet
+    Amazonka.SMS.GenerateTemplate
+    Amazonka.SMS.GetApp
+    Amazonka.SMS.GetAppLaunchConfiguration
+    Amazonka.SMS.GetAppReplicationConfiguration
+    Amazonka.SMS.GetAppValidationConfiguration
+    Amazonka.SMS.GetAppValidationOutput
+    Amazonka.SMS.GetConnectors
+    Amazonka.SMS.GetReplicationJobs
+    Amazonka.SMS.GetReplicationRuns
+    Amazonka.SMS.GetServers
+    Amazonka.SMS.ImportAppCatalog
+    Amazonka.SMS.ImportServerCatalog
+    Amazonka.SMS.LaunchApp
+    Amazonka.SMS.Lens
+    Amazonka.SMS.ListApps
+    Amazonka.SMS.NotifyAppValidationOutput
+    Amazonka.SMS.PutAppLaunchConfiguration
+    Amazonka.SMS.PutAppReplicationConfiguration
+    Amazonka.SMS.PutAppValidationConfiguration
+    Amazonka.SMS.StartAppReplication
+    Amazonka.SMS.StartOnDemandAppReplication
+    Amazonka.SMS.StartOnDemandReplicationRun
+    Amazonka.SMS.StopAppReplication
+    Amazonka.SMS.TerminateApp
+    Amazonka.SMS.Types
+    Amazonka.SMS.Types.AppLaunchConfigurationStatus
+    Amazonka.SMS.Types.AppLaunchStatus
+    Amazonka.SMS.Types.AppReplicationConfigurationStatus
+    Amazonka.SMS.Types.AppReplicationStatus
+    Amazonka.SMS.Types.AppStatus
+    Amazonka.SMS.Types.AppSummary
+    Amazonka.SMS.Types.AppValidationConfiguration
+    Amazonka.SMS.Types.AppValidationOutput
+    Amazonka.SMS.Types.AppValidationStrategy
+    Amazonka.SMS.Types.Connector
+    Amazonka.SMS.Types.ConnectorCapability
+    Amazonka.SMS.Types.ConnectorStatus
+    Amazonka.SMS.Types.LaunchDetails
+    Amazonka.SMS.Types.LicenseType
+    Amazonka.SMS.Types.NotificationContext
+    Amazonka.SMS.Types.OutputFormat
+    Amazonka.SMS.Types.ReplicationJob
+    Amazonka.SMS.Types.ReplicationJobState
+    Amazonka.SMS.Types.ReplicationRun
+    Amazonka.SMS.Types.ReplicationRunStageDetails
+    Amazonka.SMS.Types.ReplicationRunState
+    Amazonka.SMS.Types.ReplicationRunType
+    Amazonka.SMS.Types.S3Location
+    Amazonka.SMS.Types.ScriptType
+    Amazonka.SMS.Types.Server
+    Amazonka.SMS.Types.ServerCatalogStatus
+    Amazonka.SMS.Types.ServerGroup
+    Amazonka.SMS.Types.ServerGroupLaunchConfiguration
+    Amazonka.SMS.Types.ServerGroupReplicationConfiguration
+    Amazonka.SMS.Types.ServerGroupValidationConfiguration
+    Amazonka.SMS.Types.ServerLaunchConfiguration
+    Amazonka.SMS.Types.ServerReplicationConfiguration
+    Amazonka.SMS.Types.ServerReplicationParameters
+    Amazonka.SMS.Types.ServerType
+    Amazonka.SMS.Types.ServerValidationConfiguration
+    Amazonka.SMS.Types.ServerValidationOutput
+    Amazonka.SMS.Types.ServerValidationStrategy
+    Amazonka.SMS.Types.Source
+    Amazonka.SMS.Types.SSMOutput
+    Amazonka.SMS.Types.SSMValidationParameters
+    Amazonka.SMS.Types.Tag
+    Amazonka.SMS.Types.UserData
+    Amazonka.SMS.Types.UserDataValidationParameters
+    Amazonka.SMS.Types.ValidationOutput
+    Amazonka.SMS.Types.ValidationStatus
+    Amazonka.SMS.Types.VmManagerType
+    Amazonka.SMS.Types.VmServer
+    Amazonka.SMS.Types.VmServerAddress
+    Amazonka.SMS.UpdateApp
+    Amazonka.SMS.UpdateReplicationJob
+    Amazonka.SMS.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-sms-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.SMS
-        , Test.AWS.Gen.SMS
-        , Test.AWS.SMS.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.SMS
+    Test.Amazonka.SMS
+    Test.Amazonka.SMS.Internal
 
-    build-depends:
-          amazonka-core == 1.6.1.*
-        , amazonka-test == 1.6.1.*
-        , amazonka-sms
-        , base
-        , bytestring
-        , tasty
-        , tasty-hunit
-        , text
-        , time
-        , unordered-containers
+  build-depends:
+    , amazonka-core         >=2.0 && <2.1
+    , amazonka-sms
+    , amazonka-test         >=2.0 && <2.1
+    , base
+    , bytestring
+    , case-insensitive
+    , tasty
+    , tasty-hunit
+    , text
+    , time
+    , unordered-containers
diff --git a/fixture/CreateApp.yaml b/fixture/CreateApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/CreateAppResponse.proto b/fixture/CreateAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAppResponse.proto
diff --git a/fixture/DeleteApp.yaml b/fixture/DeleteApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/DeleteAppLaunchConfiguration.yaml b/fixture/DeleteAppLaunchConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppLaunchConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/DeleteAppLaunchConfigurationResponse.proto b/fixture/DeleteAppLaunchConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppLaunchConfigurationResponse.proto
diff --git a/fixture/DeleteAppReplicationConfiguration.yaml b/fixture/DeleteAppReplicationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppReplicationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/DeleteAppReplicationConfigurationResponse.proto b/fixture/DeleteAppReplicationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppReplicationConfigurationResponse.proto
diff --git a/fixture/DeleteAppResponse.proto b/fixture/DeleteAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppResponse.proto
diff --git a/fixture/DeleteAppValidationConfiguration.yaml b/fixture/DeleteAppValidationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppValidationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/DeleteAppValidationConfigurationResponse.proto b/fixture/DeleteAppValidationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAppValidationConfigurationResponse.proto
diff --git a/fixture/GenerateChangeSet.yaml b/fixture/GenerateChangeSet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GenerateChangeSet.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/GenerateChangeSetResponse.proto b/fixture/GenerateChangeSetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GenerateChangeSetResponse.proto
diff --git a/fixture/GenerateTemplate.yaml b/fixture/GenerateTemplate.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GenerateTemplate.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/GenerateTemplateResponse.proto b/fixture/GenerateTemplateResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GenerateTemplateResponse.proto
diff --git a/fixture/GetApp.yaml b/fixture/GetApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/GetAppLaunchConfiguration.yaml b/fixture/GetAppLaunchConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppLaunchConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/GetAppLaunchConfigurationResponse.proto b/fixture/GetAppLaunchConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppLaunchConfigurationResponse.proto
diff --git a/fixture/GetAppReplicationConfiguration.yaml b/fixture/GetAppReplicationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppReplicationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/GetAppReplicationConfigurationResponse.proto b/fixture/GetAppReplicationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppReplicationConfigurationResponse.proto
diff --git a/fixture/GetAppResponse.proto b/fixture/GetAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppResponse.proto
diff --git a/fixture/GetAppValidationConfiguration.yaml b/fixture/GetAppValidationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppValidationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/GetAppValidationConfigurationResponse.proto b/fixture/GetAppValidationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppValidationConfigurationResponse.proto
diff --git a/fixture/GetAppValidationOutput.yaml b/fixture/GetAppValidationOutput.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppValidationOutput.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/GetAppValidationOutputResponse.proto b/fixture/GetAppValidationOutputResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetAppValidationOutputResponse.proto
diff --git a/fixture/ImportAppCatalog.yaml b/fixture/ImportAppCatalog.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportAppCatalog.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/ImportAppCatalogResponse.proto b/fixture/ImportAppCatalogResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportAppCatalogResponse.proto
diff --git a/fixture/LaunchApp.yaml b/fixture/LaunchApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/LaunchApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/LaunchAppResponse.proto b/fixture/LaunchAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/LaunchAppResponse.proto
diff --git a/fixture/ListApps.yaml b/fixture/ListApps.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListApps.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/ListAppsResponse.proto b/fixture/ListAppsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAppsResponse.proto
diff --git a/fixture/NotifyAppValidationOutput.yaml b/fixture/NotifyAppValidationOutput.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/NotifyAppValidationOutput.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/NotifyAppValidationOutputResponse.proto b/fixture/NotifyAppValidationOutputResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/NotifyAppValidationOutputResponse.proto
diff --git a/fixture/PutAppLaunchConfiguration.yaml b/fixture/PutAppLaunchConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutAppLaunchConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/PutAppLaunchConfigurationResponse.proto b/fixture/PutAppLaunchConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutAppLaunchConfigurationResponse.proto
diff --git a/fixture/PutAppReplicationConfiguration.yaml b/fixture/PutAppReplicationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutAppReplicationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/PutAppReplicationConfigurationResponse.proto b/fixture/PutAppReplicationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutAppReplicationConfigurationResponse.proto
diff --git a/fixture/PutAppValidationConfiguration.yaml b/fixture/PutAppValidationConfiguration.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutAppValidationConfiguration.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/PutAppValidationConfigurationResponse.proto b/fixture/PutAppValidationConfigurationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutAppValidationConfigurationResponse.proto
diff --git a/fixture/StartAppReplication.yaml b/fixture/StartAppReplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartAppReplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/StartAppReplicationResponse.proto b/fixture/StartAppReplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartAppReplicationResponse.proto
diff --git a/fixture/StartOnDemandAppReplication.yaml b/fixture/StartOnDemandAppReplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartOnDemandAppReplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/StartOnDemandAppReplicationResponse.proto b/fixture/StartOnDemandAppReplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartOnDemandAppReplicationResponse.proto
diff --git a/fixture/StopAppReplication.yaml b/fixture/StopAppReplication.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopAppReplication.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/StopAppReplicationResponse.proto b/fixture/StopAppReplicationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopAppReplicationResponse.proto
diff --git a/fixture/TerminateApp.yaml b/fixture/TerminateApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TerminateApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/TerminateAppResponse.proto b/fixture/TerminateAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TerminateAppResponse.proto
diff --git a/fixture/UpdateApp.yaml b/fixture/UpdateApp.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateApp.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/sms/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  sms.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/UpdateAppResponse.proto b/fixture/UpdateAppResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAppResponse.proto
diff --git a/gen/Amazonka/SMS.hs b/gen/Amazonka/SMS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS.hs
@@ -0,0 +1,531 @@
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Amazonka.SMS
+-- 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-10-24@ of the AWS service descriptions, licensed under Apache 2.0.
+--
+-- __Product update__
+--
+-- We recommend
+-- <http://aws.amazon.com/application-migration-service Amazon Web Services Application Migration Service>
+-- (Amazon Web Services MGN) as the primary migration service for
+-- lift-and-shift migrations. If Amazon Web Services MGN is unavailable in
+-- a specific Amazon Web Services Region, you can use the Server Migration
+-- Service APIs through March 2023.
+--
+-- Server Migration Service (Server Migration Service) makes it easier and
+-- faster for you to migrate your on-premises workloads to Amazon Web
+-- Services. To learn more about Server Migration Service, see the
+-- following resources:
+--
+-- -   <http://aws.amazon.com/server-migration-service/ Server Migration Service product page>
+--
+-- -   <https://docs.aws.amazon.com/server-migration-service/latest/userguide/ Server Migration Service User Guide>
+module Amazonka.SMS
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    -- $errors
+
+    -- ** DryRunOperationException
+    _DryRunOperationException,
+
+    -- ** InternalError
+    _InternalError,
+
+    -- ** InvalidParameterException
+    _InvalidParameterException,
+
+    -- ** MissingRequiredParameterException
+    _MissingRequiredParameterException,
+
+    -- ** NoConnectorsAvailableException
+    _NoConnectorsAvailableException,
+
+    -- ** OperationNotPermittedException
+    _OperationNotPermittedException,
+
+    -- ** ReplicationJobAlreadyExistsException
+    _ReplicationJobAlreadyExistsException,
+
+    -- ** ReplicationJobNotFoundException
+    _ReplicationJobNotFoundException,
+
+    -- ** ReplicationRunLimitExceededException
+    _ReplicationRunLimitExceededException,
+
+    -- ** ServerCannotBeReplicatedException
+    _ServerCannotBeReplicatedException,
+
+    -- ** TemporarilyUnavailableException
+    _TemporarilyUnavailableException,
+
+    -- ** UnauthorizedOperationException
+    _UnauthorizedOperationException,
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateApp
+    CreateApp (CreateApp'),
+    newCreateApp,
+    CreateAppResponse (CreateAppResponse'),
+    newCreateAppResponse,
+
+    -- ** CreateReplicationJob
+    CreateReplicationJob (CreateReplicationJob'),
+    newCreateReplicationJob,
+    CreateReplicationJobResponse (CreateReplicationJobResponse'),
+    newCreateReplicationJobResponse,
+
+    -- ** DeleteApp
+    DeleteApp (DeleteApp'),
+    newDeleteApp,
+    DeleteAppResponse (DeleteAppResponse'),
+    newDeleteAppResponse,
+
+    -- ** DeleteAppLaunchConfiguration
+    DeleteAppLaunchConfiguration (DeleteAppLaunchConfiguration'),
+    newDeleteAppLaunchConfiguration,
+    DeleteAppLaunchConfigurationResponse (DeleteAppLaunchConfigurationResponse'),
+    newDeleteAppLaunchConfigurationResponse,
+
+    -- ** DeleteAppReplicationConfiguration
+    DeleteAppReplicationConfiguration (DeleteAppReplicationConfiguration'),
+    newDeleteAppReplicationConfiguration,
+    DeleteAppReplicationConfigurationResponse (DeleteAppReplicationConfigurationResponse'),
+    newDeleteAppReplicationConfigurationResponse,
+
+    -- ** DeleteAppValidationConfiguration
+    DeleteAppValidationConfiguration (DeleteAppValidationConfiguration'),
+    newDeleteAppValidationConfiguration,
+    DeleteAppValidationConfigurationResponse (DeleteAppValidationConfigurationResponse'),
+    newDeleteAppValidationConfigurationResponse,
+
+    -- ** DeleteReplicationJob
+    DeleteReplicationJob (DeleteReplicationJob'),
+    newDeleteReplicationJob,
+    DeleteReplicationJobResponse (DeleteReplicationJobResponse'),
+    newDeleteReplicationJobResponse,
+
+    -- ** DeleteServerCatalog
+    DeleteServerCatalog (DeleteServerCatalog'),
+    newDeleteServerCatalog,
+    DeleteServerCatalogResponse (DeleteServerCatalogResponse'),
+    newDeleteServerCatalogResponse,
+
+    -- ** DisassociateConnector
+    DisassociateConnector (DisassociateConnector'),
+    newDisassociateConnector,
+    DisassociateConnectorResponse (DisassociateConnectorResponse'),
+    newDisassociateConnectorResponse,
+
+    -- ** GenerateChangeSet
+    GenerateChangeSet (GenerateChangeSet'),
+    newGenerateChangeSet,
+    GenerateChangeSetResponse (GenerateChangeSetResponse'),
+    newGenerateChangeSetResponse,
+
+    -- ** GenerateTemplate
+    GenerateTemplate (GenerateTemplate'),
+    newGenerateTemplate,
+    GenerateTemplateResponse (GenerateTemplateResponse'),
+    newGenerateTemplateResponse,
+
+    -- ** GetApp
+    GetApp (GetApp'),
+    newGetApp,
+    GetAppResponse (GetAppResponse'),
+    newGetAppResponse,
+
+    -- ** GetAppLaunchConfiguration
+    GetAppLaunchConfiguration (GetAppLaunchConfiguration'),
+    newGetAppLaunchConfiguration,
+    GetAppLaunchConfigurationResponse (GetAppLaunchConfigurationResponse'),
+    newGetAppLaunchConfigurationResponse,
+
+    -- ** GetAppReplicationConfiguration
+    GetAppReplicationConfiguration (GetAppReplicationConfiguration'),
+    newGetAppReplicationConfiguration,
+    GetAppReplicationConfigurationResponse (GetAppReplicationConfigurationResponse'),
+    newGetAppReplicationConfigurationResponse,
+
+    -- ** GetAppValidationConfiguration
+    GetAppValidationConfiguration (GetAppValidationConfiguration'),
+    newGetAppValidationConfiguration,
+    GetAppValidationConfigurationResponse (GetAppValidationConfigurationResponse'),
+    newGetAppValidationConfigurationResponse,
+
+    -- ** GetAppValidationOutput
+    GetAppValidationOutput (GetAppValidationOutput'),
+    newGetAppValidationOutput,
+    GetAppValidationOutputResponse (GetAppValidationOutputResponse'),
+    newGetAppValidationOutputResponse,
+
+    -- ** GetConnectors (Paginated)
+    GetConnectors (GetConnectors'),
+    newGetConnectors,
+    GetConnectorsResponse (GetConnectorsResponse'),
+    newGetConnectorsResponse,
+
+    -- ** GetReplicationJobs (Paginated)
+    GetReplicationJobs (GetReplicationJobs'),
+    newGetReplicationJobs,
+    GetReplicationJobsResponse (GetReplicationJobsResponse'),
+    newGetReplicationJobsResponse,
+
+    -- ** GetReplicationRuns (Paginated)
+    GetReplicationRuns (GetReplicationRuns'),
+    newGetReplicationRuns,
+    GetReplicationRunsResponse (GetReplicationRunsResponse'),
+    newGetReplicationRunsResponse,
+
+    -- ** GetServers (Paginated)
+    GetServers (GetServers'),
+    newGetServers,
+    GetServersResponse (GetServersResponse'),
+    newGetServersResponse,
+
+    -- ** ImportAppCatalog
+    ImportAppCatalog (ImportAppCatalog'),
+    newImportAppCatalog,
+    ImportAppCatalogResponse (ImportAppCatalogResponse'),
+    newImportAppCatalogResponse,
+
+    -- ** ImportServerCatalog
+    ImportServerCatalog (ImportServerCatalog'),
+    newImportServerCatalog,
+    ImportServerCatalogResponse (ImportServerCatalogResponse'),
+    newImportServerCatalogResponse,
+
+    -- ** LaunchApp
+    LaunchApp (LaunchApp'),
+    newLaunchApp,
+    LaunchAppResponse (LaunchAppResponse'),
+    newLaunchAppResponse,
+
+    -- ** ListApps (Paginated)
+    ListApps (ListApps'),
+    newListApps,
+    ListAppsResponse (ListAppsResponse'),
+    newListAppsResponse,
+
+    -- ** NotifyAppValidationOutput
+    NotifyAppValidationOutput (NotifyAppValidationOutput'),
+    newNotifyAppValidationOutput,
+    NotifyAppValidationOutputResponse (NotifyAppValidationOutputResponse'),
+    newNotifyAppValidationOutputResponse,
+
+    -- ** PutAppLaunchConfiguration
+    PutAppLaunchConfiguration (PutAppLaunchConfiguration'),
+    newPutAppLaunchConfiguration,
+    PutAppLaunchConfigurationResponse (PutAppLaunchConfigurationResponse'),
+    newPutAppLaunchConfigurationResponse,
+
+    -- ** PutAppReplicationConfiguration
+    PutAppReplicationConfiguration (PutAppReplicationConfiguration'),
+    newPutAppReplicationConfiguration,
+    PutAppReplicationConfigurationResponse (PutAppReplicationConfigurationResponse'),
+    newPutAppReplicationConfigurationResponse,
+
+    -- ** PutAppValidationConfiguration
+    PutAppValidationConfiguration (PutAppValidationConfiguration'),
+    newPutAppValidationConfiguration,
+    PutAppValidationConfigurationResponse (PutAppValidationConfigurationResponse'),
+    newPutAppValidationConfigurationResponse,
+
+    -- ** StartAppReplication
+    StartAppReplication (StartAppReplication'),
+    newStartAppReplication,
+    StartAppReplicationResponse (StartAppReplicationResponse'),
+    newStartAppReplicationResponse,
+
+    -- ** StartOnDemandAppReplication
+    StartOnDemandAppReplication (StartOnDemandAppReplication'),
+    newStartOnDemandAppReplication,
+    StartOnDemandAppReplicationResponse (StartOnDemandAppReplicationResponse'),
+    newStartOnDemandAppReplicationResponse,
+
+    -- ** StartOnDemandReplicationRun
+    StartOnDemandReplicationRun (StartOnDemandReplicationRun'),
+    newStartOnDemandReplicationRun,
+    StartOnDemandReplicationRunResponse (StartOnDemandReplicationRunResponse'),
+    newStartOnDemandReplicationRunResponse,
+
+    -- ** StopAppReplication
+    StopAppReplication (StopAppReplication'),
+    newStopAppReplication,
+    StopAppReplicationResponse (StopAppReplicationResponse'),
+    newStopAppReplicationResponse,
+
+    -- ** TerminateApp
+    TerminateApp (TerminateApp'),
+    newTerminateApp,
+    TerminateAppResponse (TerminateAppResponse'),
+    newTerminateAppResponse,
+
+    -- ** UpdateApp
+    UpdateApp (UpdateApp'),
+    newUpdateApp,
+    UpdateAppResponse (UpdateAppResponse'),
+    newUpdateAppResponse,
+
+    -- ** UpdateReplicationJob
+    UpdateReplicationJob (UpdateReplicationJob'),
+    newUpdateReplicationJob,
+    UpdateReplicationJobResponse (UpdateReplicationJobResponse'),
+    newUpdateReplicationJobResponse,
+
+    -- * Types
+
+    -- ** AppLaunchConfigurationStatus
+    AppLaunchConfigurationStatus (..),
+
+    -- ** AppLaunchStatus
+    AppLaunchStatus (..),
+
+    -- ** AppReplicationConfigurationStatus
+    AppReplicationConfigurationStatus (..),
+
+    -- ** AppReplicationStatus
+    AppReplicationStatus (..),
+
+    -- ** AppStatus
+    AppStatus (..),
+
+    -- ** AppValidationStrategy
+    AppValidationStrategy (..),
+
+    -- ** ConnectorCapability
+    ConnectorCapability (..),
+
+    -- ** ConnectorStatus
+    ConnectorStatus (..),
+
+    -- ** LicenseType
+    LicenseType (..),
+
+    -- ** OutputFormat
+    OutputFormat (..),
+
+    -- ** ReplicationJobState
+    ReplicationJobState (..),
+
+    -- ** ReplicationRunState
+    ReplicationRunState (..),
+
+    -- ** ReplicationRunType
+    ReplicationRunType (..),
+
+    -- ** ScriptType
+    ScriptType (..),
+
+    -- ** ServerCatalogStatus
+    ServerCatalogStatus (..),
+
+    -- ** ServerType
+    ServerType (..),
+
+    -- ** ServerValidationStrategy
+    ServerValidationStrategy (..),
+
+    -- ** ValidationStatus
+    ValidationStatus (..),
+
+    -- ** VmManagerType
+    VmManagerType (..),
+
+    -- ** AppSummary
+    AppSummary (AppSummary'),
+    newAppSummary,
+
+    -- ** AppValidationConfiguration
+    AppValidationConfiguration (AppValidationConfiguration'),
+    newAppValidationConfiguration,
+
+    -- ** AppValidationOutput
+    AppValidationOutput (AppValidationOutput'),
+    newAppValidationOutput,
+
+    -- ** Connector
+    Connector (Connector'),
+    newConnector,
+
+    -- ** LaunchDetails
+    LaunchDetails (LaunchDetails'),
+    newLaunchDetails,
+
+    -- ** NotificationContext
+    NotificationContext (NotificationContext'),
+    newNotificationContext,
+
+    -- ** ReplicationJob
+    ReplicationJob (ReplicationJob'),
+    newReplicationJob,
+
+    -- ** ReplicationRun
+    ReplicationRun (ReplicationRun'),
+    newReplicationRun,
+
+    -- ** ReplicationRunStageDetails
+    ReplicationRunStageDetails (ReplicationRunStageDetails'),
+    newReplicationRunStageDetails,
+
+    -- ** S3Location
+    S3Location (S3Location'),
+    newS3Location,
+
+    -- ** SSMOutput
+    SSMOutput (SSMOutput'),
+    newSSMOutput,
+
+    -- ** SSMValidationParameters
+    SSMValidationParameters (SSMValidationParameters'),
+    newSSMValidationParameters,
+
+    -- ** Server
+    Server (Server'),
+    newServer,
+
+    -- ** ServerGroup
+    ServerGroup (ServerGroup'),
+    newServerGroup,
+
+    -- ** ServerGroupLaunchConfiguration
+    ServerGroupLaunchConfiguration (ServerGroupLaunchConfiguration'),
+    newServerGroupLaunchConfiguration,
+
+    -- ** ServerGroupReplicationConfiguration
+    ServerGroupReplicationConfiguration (ServerGroupReplicationConfiguration'),
+    newServerGroupReplicationConfiguration,
+
+    -- ** ServerGroupValidationConfiguration
+    ServerGroupValidationConfiguration (ServerGroupValidationConfiguration'),
+    newServerGroupValidationConfiguration,
+
+    -- ** ServerLaunchConfiguration
+    ServerLaunchConfiguration (ServerLaunchConfiguration'),
+    newServerLaunchConfiguration,
+
+    -- ** ServerReplicationConfiguration
+    ServerReplicationConfiguration (ServerReplicationConfiguration'),
+    newServerReplicationConfiguration,
+
+    -- ** ServerReplicationParameters
+    ServerReplicationParameters (ServerReplicationParameters'),
+    newServerReplicationParameters,
+
+    -- ** ServerValidationConfiguration
+    ServerValidationConfiguration (ServerValidationConfiguration'),
+    newServerValidationConfiguration,
+
+    -- ** ServerValidationOutput
+    ServerValidationOutput (ServerValidationOutput'),
+    newServerValidationOutput,
+
+    -- ** Source
+    Source (Source'),
+    newSource,
+
+    -- ** Tag
+    Tag (Tag'),
+    newTag,
+
+    -- ** UserData
+    UserData (UserData'),
+    newUserData,
+
+    -- ** UserDataValidationParameters
+    UserDataValidationParameters (UserDataValidationParameters'),
+    newUserDataValidationParameters,
+
+    -- ** ValidationOutput
+    ValidationOutput (ValidationOutput'),
+    newValidationOutput,
+
+    -- ** VmServer
+    VmServer (VmServer'),
+    newVmServer,
+
+    -- ** VmServerAddress
+    VmServerAddress (VmServerAddress'),
+    newVmServerAddress,
+  )
+where
+
+import Amazonka.SMS.CreateApp
+import Amazonka.SMS.CreateReplicationJob
+import Amazonka.SMS.DeleteApp
+import Amazonka.SMS.DeleteAppLaunchConfiguration
+import Amazonka.SMS.DeleteAppReplicationConfiguration
+import Amazonka.SMS.DeleteAppValidationConfiguration
+import Amazonka.SMS.DeleteReplicationJob
+import Amazonka.SMS.DeleteServerCatalog
+import Amazonka.SMS.DisassociateConnector
+import Amazonka.SMS.GenerateChangeSet
+import Amazonka.SMS.GenerateTemplate
+import Amazonka.SMS.GetApp
+import Amazonka.SMS.GetAppLaunchConfiguration
+import Amazonka.SMS.GetAppReplicationConfiguration
+import Amazonka.SMS.GetAppValidationConfiguration
+import Amazonka.SMS.GetAppValidationOutput
+import Amazonka.SMS.GetConnectors
+import Amazonka.SMS.GetReplicationJobs
+import Amazonka.SMS.GetReplicationRuns
+import Amazonka.SMS.GetServers
+import Amazonka.SMS.ImportAppCatalog
+import Amazonka.SMS.ImportServerCatalog
+import Amazonka.SMS.LaunchApp
+import Amazonka.SMS.Lens
+import Amazonka.SMS.ListApps
+import Amazonka.SMS.NotifyAppValidationOutput
+import Amazonka.SMS.PutAppLaunchConfiguration
+import Amazonka.SMS.PutAppReplicationConfiguration
+import Amazonka.SMS.PutAppValidationConfiguration
+import Amazonka.SMS.StartAppReplication
+import Amazonka.SMS.StartOnDemandAppReplication
+import Amazonka.SMS.StartOnDemandReplicationRun
+import Amazonka.SMS.StopAppReplication
+import Amazonka.SMS.TerminateApp
+import Amazonka.SMS.Types
+import Amazonka.SMS.UpdateApp
+import Amazonka.SMS.UpdateReplicationJob
+import Amazonka.SMS.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 'SMS'.
+
+-- $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/SMS/CreateApp.hs b/gen/Amazonka/SMS/CreateApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/CreateApp.hs
@@ -0,0 +1,264 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.CreateApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an application. An application consists of one or more server
+-- groups. Each server group contain one or more servers.
+module Amazonka.SMS.CreateApp
+  ( -- * Creating a Request
+    CreateApp (..),
+    newCreateApp,
+
+    -- * Request Lenses
+    createApp_clientToken,
+    createApp_description,
+    createApp_name,
+    createApp_roleName,
+    createApp_serverGroups,
+    createApp_tags,
+
+    -- * Destructuring the Response
+    CreateAppResponse (..),
+    newCreateAppResponse,
+
+    -- * Response Lenses
+    createAppResponse_appSummary,
+    createAppResponse_serverGroups,
+    createAppResponse_tags,
+    createAppResponse_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.SMS.Types
+
+-- | /See:/ 'newCreateApp' smart constructor.
+data CreateApp = CreateApp'
+  { -- | A unique, case-sensitive identifier that you provide to ensure the
+    -- idempotency of application creation.
+    clientToken :: Prelude.Maybe Prelude.Text,
+    -- | The description of the new application
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The name of the new application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The name of the service role in the customer\'s account to be used by
+    -- Server Migration Service.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | The server groups to include in the application.
+    serverGroups :: Prelude.Maybe [ServerGroup],
+    -- | The tags to be associated with the application.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateApp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'clientToken', 'createApp_clientToken' - A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of application creation.
+--
+-- 'description', 'createApp_description' - The description of the new application
+--
+-- 'name', 'createApp_name' - The name of the new application.
+--
+-- 'roleName', 'createApp_roleName' - The name of the service role in the customer\'s account to be used by
+-- Server Migration Service.
+--
+-- 'serverGroups', 'createApp_serverGroups' - The server groups to include in the application.
+--
+-- 'tags', 'createApp_tags' - The tags to be associated with the application.
+newCreateApp ::
+  CreateApp
+newCreateApp =
+  CreateApp'
+    { clientToken = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleName = Prelude.Nothing,
+      serverGroups = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | A unique, case-sensitive identifier that you provide to ensure the
+-- idempotency of application creation.
+createApp_clientToken :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_clientToken = Lens.lens (\CreateApp' {clientToken} -> clientToken) (\s@CreateApp' {} a -> s {clientToken = a} :: CreateApp)
+
+-- | The description of the new application
+createApp_description :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_description = Lens.lens (\CreateApp' {description} -> description) (\s@CreateApp' {} a -> s {description = a} :: CreateApp)
+
+-- | The name of the new application.
+createApp_name :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_name = Lens.lens (\CreateApp' {name} -> name) (\s@CreateApp' {} a -> s {name = a} :: CreateApp)
+
+-- | The name of the service role in the customer\'s account to be used by
+-- Server Migration Service.
+createApp_roleName :: Lens.Lens' CreateApp (Prelude.Maybe Prelude.Text)
+createApp_roleName = Lens.lens (\CreateApp' {roleName} -> roleName) (\s@CreateApp' {} a -> s {roleName = a} :: CreateApp)
+
+-- | The server groups to include in the application.
+createApp_serverGroups :: Lens.Lens' CreateApp (Prelude.Maybe [ServerGroup])
+createApp_serverGroups = Lens.lens (\CreateApp' {serverGroups} -> serverGroups) (\s@CreateApp' {} a -> s {serverGroups = a} :: CreateApp) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to be associated with the application.
+createApp_tags :: Lens.Lens' CreateApp (Prelude.Maybe [Tag])
+createApp_tags = Lens.lens (\CreateApp' {tags} -> tags) (\s@CreateApp' {} a -> s {tags = a} :: CreateApp) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest CreateApp where
+  type AWSResponse CreateApp = CreateAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateAppResponse'
+            Prelude.<$> (x Data..?> "appSummary")
+            Prelude.<*> (x Data..?> "serverGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateApp where
+  hashWithSalt _salt CreateApp' {..} =
+    _salt
+      `Prelude.hashWithSalt` clientToken
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` serverGroups
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData CreateApp where
+  rnf CreateApp' {..} =
+    Prelude.rnf clientToken
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf serverGroups
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders CreateApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.CreateApp" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateApp where
+  toJSON CreateApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("clientToken" Data..=) Prelude.<$> clientToken,
+            ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name,
+            ("roleName" Data..=) Prelude.<$> roleName,
+            ("serverGroups" Data..=) Prelude.<$> serverGroups,
+            ("tags" Data..=) Prelude.<$> tags
+          ]
+      )
+
+instance Data.ToPath CreateApp where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateAppResponse' smart constructor.
+data CreateAppResponse = CreateAppResponse'
+  { -- | A summary description of the application.
+    appSummary :: Prelude.Maybe AppSummary,
+    -- | The server groups included in the application.
+    serverGroups :: Prelude.Maybe [ServerGroup],
+    -- | The tags associated with the application.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateAppResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appSummary', 'createAppResponse_appSummary' - A summary description of the application.
+--
+-- 'serverGroups', 'createAppResponse_serverGroups' - The server groups included in the application.
+--
+-- 'tags', 'createAppResponse_tags' - The tags associated with the application.
+--
+-- 'httpStatus', 'createAppResponse_httpStatus' - The response's http status code.
+newCreateAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateAppResponse
+newCreateAppResponse pHttpStatus_ =
+  CreateAppResponse'
+    { appSummary = Prelude.Nothing,
+      serverGroups = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A summary description of the application.
+createAppResponse_appSummary :: Lens.Lens' CreateAppResponse (Prelude.Maybe AppSummary)
+createAppResponse_appSummary = Lens.lens (\CreateAppResponse' {appSummary} -> appSummary) (\s@CreateAppResponse' {} a -> s {appSummary = a} :: CreateAppResponse)
+
+-- | The server groups included in the application.
+createAppResponse_serverGroups :: Lens.Lens' CreateAppResponse (Prelude.Maybe [ServerGroup])
+createAppResponse_serverGroups = Lens.lens (\CreateAppResponse' {serverGroups} -> serverGroups) (\s@CreateAppResponse' {} a -> s {serverGroups = a} :: CreateAppResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags associated with the application.
+createAppResponse_tags :: Lens.Lens' CreateAppResponse (Prelude.Maybe [Tag])
+createAppResponse_tags = Lens.lens (\CreateAppResponse' {tags} -> tags) (\s@CreateAppResponse' {} a -> s {tags = a} :: CreateAppResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+createAppResponse_httpStatus :: Lens.Lens' CreateAppResponse Prelude.Int
+createAppResponse_httpStatus = Lens.lens (\CreateAppResponse' {httpStatus} -> httpStatus) (\s@CreateAppResponse' {} a -> s {httpStatus = a} :: CreateAppResponse)
+
+instance Prelude.NFData CreateAppResponse where
+  rnf CreateAppResponse' {..} =
+    Prelude.rnf appSummary
+      `Prelude.seq` Prelude.rnf serverGroups
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/CreateReplicationJob.hs b/gen/Amazonka/SMS/CreateReplicationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/CreateReplicationJob.hs
@@ -0,0 +1,342 @@
+{-# 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.SMS.CreateReplicationJob
+-- 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 replication job. The replication job schedules periodic
+-- replication runs to replicate your server to Amazon Web Services. Each
+-- replication run creates an Amazon Machine Image (AMI).
+module Amazonka.SMS.CreateReplicationJob
+  ( -- * Creating a Request
+    CreateReplicationJob (..),
+    newCreateReplicationJob,
+
+    -- * Request Lenses
+    createReplicationJob_description,
+    createReplicationJob_encrypted,
+    createReplicationJob_frequency,
+    createReplicationJob_kmsKeyId,
+    createReplicationJob_licenseType,
+    createReplicationJob_numberOfRecentAmisToKeep,
+    createReplicationJob_roleName,
+    createReplicationJob_runOnce,
+    createReplicationJob_serverId,
+    createReplicationJob_seedReplicationTime,
+
+    -- * Destructuring the Response
+    CreateReplicationJobResponse (..),
+    newCreateReplicationJobResponse,
+
+    -- * Response Lenses
+    createReplicationJobResponse_replicationJobId,
+    createReplicationJobResponse_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.SMS.Types
+
+-- | /See:/ 'newCreateReplicationJob' smart constructor.
+data CreateReplicationJob = CreateReplicationJob'
+  { -- | The description of the replication job.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the replication job produces encrypted AMIs.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The time between consecutive replication runs, in hours.
+    frequency :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
+    -- This value can be any of the following:
+    --
+    -- -   KMS key ID
+    --
+    -- -   KMS key alias
+    --
+    -- -   ARN referring to the KMS key ID
+    --
+    -- -   ARN referring to the KMS key alias
+    --
+    -- If encrypted is /true/ but a KMS key ID is not specified, the
+    -- customer\'s default KMS key for Amazon EBS is used.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The license type to be used for the AMI created by a successful
+    -- replication run.
+    licenseType :: Prelude.Maybe LicenseType,
+    -- | The maximum number of SMS-created AMIs to retain. The oldest is deleted
+    -- after the maximum number is reached and a new AMI is created.
+    numberOfRecentAmisToKeep :: Prelude.Maybe Prelude.Int,
+    -- | The name of the IAM role to be used by the Server Migration Service.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to run the replication job one time.
+    runOnce :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the server.
+    serverId :: Prelude.Text,
+    -- | The seed replication time.
+    seedReplicationTime :: Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'CreateReplicationJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'createReplicationJob_description' - The description of the replication job.
+--
+-- 'encrypted', 'createReplicationJob_encrypted' - Indicates whether the replication job produces encrypted AMIs.
+--
+-- 'frequency', 'createReplicationJob_frequency' - The time between consecutive replication runs, in hours.
+--
+-- 'kmsKeyId', 'createReplicationJob_kmsKeyId' - The ID of the KMS key for replication jobs that produce encrypted AMIs.
+-- This value can be any of the following:
+--
+-- -   KMS key ID
+--
+-- -   KMS key alias
+--
+-- -   ARN referring to the KMS key ID
+--
+-- -   ARN referring to the KMS key alias
+--
+-- If encrypted is /true/ but a KMS key ID is not specified, the
+-- customer\'s default KMS key for Amazon EBS is used.
+--
+-- 'licenseType', 'createReplicationJob_licenseType' - The license type to be used for the AMI created by a successful
+-- replication run.
+--
+-- 'numberOfRecentAmisToKeep', 'createReplicationJob_numberOfRecentAmisToKeep' - The maximum number of SMS-created AMIs to retain. The oldest is deleted
+-- after the maximum number is reached and a new AMI is created.
+--
+-- 'roleName', 'createReplicationJob_roleName' - The name of the IAM role to be used by the Server Migration Service.
+--
+-- 'runOnce', 'createReplicationJob_runOnce' - Indicates whether to run the replication job one time.
+--
+-- 'serverId', 'createReplicationJob_serverId' - The ID of the server.
+--
+-- 'seedReplicationTime', 'createReplicationJob_seedReplicationTime' - The seed replication time.
+newCreateReplicationJob ::
+  -- | 'serverId'
+  Prelude.Text ->
+  -- | 'seedReplicationTime'
+  Prelude.UTCTime ->
+  CreateReplicationJob
+newCreateReplicationJob
+  pServerId_
+  pSeedReplicationTime_ =
+    CreateReplicationJob'
+      { description =
+          Prelude.Nothing,
+        encrypted = Prelude.Nothing,
+        frequency = Prelude.Nothing,
+        kmsKeyId = Prelude.Nothing,
+        licenseType = Prelude.Nothing,
+        numberOfRecentAmisToKeep = Prelude.Nothing,
+        roleName = Prelude.Nothing,
+        runOnce = Prelude.Nothing,
+        serverId = pServerId_,
+        seedReplicationTime =
+          Data._Time Lens.# pSeedReplicationTime_
+      }
+
+-- | The description of the replication job.
+createReplicationJob_description :: Lens.Lens' CreateReplicationJob (Prelude.Maybe Prelude.Text)
+createReplicationJob_description = Lens.lens (\CreateReplicationJob' {description} -> description) (\s@CreateReplicationJob' {} a -> s {description = a} :: CreateReplicationJob)
+
+-- | Indicates whether the replication job produces encrypted AMIs.
+createReplicationJob_encrypted :: Lens.Lens' CreateReplicationJob (Prelude.Maybe Prelude.Bool)
+createReplicationJob_encrypted = Lens.lens (\CreateReplicationJob' {encrypted} -> encrypted) (\s@CreateReplicationJob' {} a -> s {encrypted = a} :: CreateReplicationJob)
+
+-- | The time between consecutive replication runs, in hours.
+createReplicationJob_frequency :: Lens.Lens' CreateReplicationJob (Prelude.Maybe Prelude.Int)
+createReplicationJob_frequency = Lens.lens (\CreateReplicationJob' {frequency} -> frequency) (\s@CreateReplicationJob' {} a -> s {frequency = a} :: CreateReplicationJob)
+
+-- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
+-- This value can be any of the following:
+--
+-- -   KMS key ID
+--
+-- -   KMS key alias
+--
+-- -   ARN referring to the KMS key ID
+--
+-- -   ARN referring to the KMS key alias
+--
+-- If encrypted is /true/ but a KMS key ID is not specified, the
+-- customer\'s default KMS key for Amazon EBS is used.
+createReplicationJob_kmsKeyId :: Lens.Lens' CreateReplicationJob (Prelude.Maybe Prelude.Text)
+createReplicationJob_kmsKeyId = Lens.lens (\CreateReplicationJob' {kmsKeyId} -> kmsKeyId) (\s@CreateReplicationJob' {} a -> s {kmsKeyId = a} :: CreateReplicationJob)
+
+-- | The license type to be used for the AMI created by a successful
+-- replication run.
+createReplicationJob_licenseType :: Lens.Lens' CreateReplicationJob (Prelude.Maybe LicenseType)
+createReplicationJob_licenseType = Lens.lens (\CreateReplicationJob' {licenseType} -> licenseType) (\s@CreateReplicationJob' {} a -> s {licenseType = a} :: CreateReplicationJob)
+
+-- | The maximum number of SMS-created AMIs to retain. The oldest is deleted
+-- after the maximum number is reached and a new AMI is created.
+createReplicationJob_numberOfRecentAmisToKeep :: Lens.Lens' CreateReplicationJob (Prelude.Maybe Prelude.Int)
+createReplicationJob_numberOfRecentAmisToKeep = Lens.lens (\CreateReplicationJob' {numberOfRecentAmisToKeep} -> numberOfRecentAmisToKeep) (\s@CreateReplicationJob' {} a -> s {numberOfRecentAmisToKeep = a} :: CreateReplicationJob)
+
+-- | The name of the IAM role to be used by the Server Migration Service.
+createReplicationJob_roleName :: Lens.Lens' CreateReplicationJob (Prelude.Maybe Prelude.Text)
+createReplicationJob_roleName = Lens.lens (\CreateReplicationJob' {roleName} -> roleName) (\s@CreateReplicationJob' {} a -> s {roleName = a} :: CreateReplicationJob)
+
+-- | Indicates whether to run the replication job one time.
+createReplicationJob_runOnce :: Lens.Lens' CreateReplicationJob (Prelude.Maybe Prelude.Bool)
+createReplicationJob_runOnce = Lens.lens (\CreateReplicationJob' {runOnce} -> runOnce) (\s@CreateReplicationJob' {} a -> s {runOnce = a} :: CreateReplicationJob)
+
+-- | The ID of the server.
+createReplicationJob_serverId :: Lens.Lens' CreateReplicationJob Prelude.Text
+createReplicationJob_serverId = Lens.lens (\CreateReplicationJob' {serverId} -> serverId) (\s@CreateReplicationJob' {} a -> s {serverId = a} :: CreateReplicationJob)
+
+-- | The seed replication time.
+createReplicationJob_seedReplicationTime :: Lens.Lens' CreateReplicationJob Prelude.UTCTime
+createReplicationJob_seedReplicationTime = Lens.lens (\CreateReplicationJob' {seedReplicationTime} -> seedReplicationTime) (\s@CreateReplicationJob' {} a -> s {seedReplicationTime = a} :: CreateReplicationJob) Prelude.. Data._Time
+
+instance Core.AWSRequest CreateReplicationJob where
+  type
+    AWSResponse CreateReplicationJob =
+      CreateReplicationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          CreateReplicationJobResponse'
+            Prelude.<$> (x Data..?> "replicationJobId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable CreateReplicationJob where
+  hashWithSalt _salt CreateReplicationJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` frequency
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` licenseType
+      `Prelude.hashWithSalt` numberOfRecentAmisToKeep
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` runOnce
+      `Prelude.hashWithSalt` serverId
+      `Prelude.hashWithSalt` seedReplicationTime
+
+instance Prelude.NFData CreateReplicationJob where
+  rnf CreateReplicationJob' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf frequency
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf licenseType
+      `Prelude.seq` Prelude.rnf numberOfRecentAmisToKeep
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf runOnce
+      `Prelude.seq` Prelude.rnf serverId
+      `Prelude.seq` Prelude.rnf seedReplicationTime
+
+instance Data.ToHeaders CreateReplicationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.CreateReplicationJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON CreateReplicationJob where
+  toJSON CreateReplicationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("encrypted" Data..=) Prelude.<$> encrypted,
+            ("frequency" Data..=) Prelude.<$> frequency,
+            ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("licenseType" Data..=) Prelude.<$> licenseType,
+            ("numberOfRecentAmisToKeep" Data..=)
+              Prelude.<$> numberOfRecentAmisToKeep,
+            ("roleName" Data..=) Prelude.<$> roleName,
+            ("runOnce" Data..=) Prelude.<$> runOnce,
+            Prelude.Just ("serverId" Data..= serverId),
+            Prelude.Just
+              ("seedReplicationTime" Data..= seedReplicationTime)
+          ]
+      )
+
+instance Data.ToPath CreateReplicationJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery CreateReplicationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newCreateReplicationJobResponse' smart constructor.
+data CreateReplicationJobResponse = CreateReplicationJobResponse'
+  { -- | The unique identifier of the replication job.
+    replicationJobId :: 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 'CreateReplicationJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replicationJobId', 'createReplicationJobResponse_replicationJobId' - The unique identifier of the replication job.
+--
+-- 'httpStatus', 'createReplicationJobResponse_httpStatus' - The response's http status code.
+newCreateReplicationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  CreateReplicationJobResponse
+newCreateReplicationJobResponse pHttpStatus_ =
+  CreateReplicationJobResponse'
+    { replicationJobId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The unique identifier of the replication job.
+createReplicationJobResponse_replicationJobId :: Lens.Lens' CreateReplicationJobResponse (Prelude.Maybe Prelude.Text)
+createReplicationJobResponse_replicationJobId = Lens.lens (\CreateReplicationJobResponse' {replicationJobId} -> replicationJobId) (\s@CreateReplicationJobResponse' {} a -> s {replicationJobId = a} :: CreateReplicationJobResponse)
+
+-- | The response's http status code.
+createReplicationJobResponse_httpStatus :: Lens.Lens' CreateReplicationJobResponse Prelude.Int
+createReplicationJobResponse_httpStatus = Lens.lens (\CreateReplicationJobResponse' {httpStatus} -> httpStatus) (\s@CreateReplicationJobResponse' {} a -> s {httpStatus = a} :: CreateReplicationJobResponse)
+
+instance Prelude.NFData CreateReplicationJobResponse where
+  rnf CreateReplicationJobResponse' {..} =
+    Prelude.rnf replicationJobId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/DeleteApp.hs b/gen/Amazonka/SMS/DeleteApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/DeleteApp.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.SMS.DeleteApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified application. Optionally deletes the launched stack
+-- associated with the application and all Server Migration Service
+-- replication jobs for servers in the application.
+module Amazonka.SMS.DeleteApp
+  ( -- * Creating a Request
+    DeleteApp (..),
+    newDeleteApp,
+
+    -- * Request Lenses
+    deleteApp_appId,
+    deleteApp_forceStopAppReplication,
+    deleteApp_forceTerminateApp,
+
+    -- * Destructuring the Response
+    DeleteAppResponse (..),
+    newDeleteAppResponse,
+
+    -- * Response Lenses
+    deleteAppResponse_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.SMS.Types
+
+-- | /See:/ 'newDeleteApp' smart constructor.
+data DeleteApp = DeleteApp'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to stop all replication jobs corresponding to the
+    -- servers in the application while deleting the application.
+    forceStopAppReplication :: Prelude.Maybe Prelude.Bool,
+    -- | Indicates whether to terminate the stack corresponding to the
+    -- application while deleting the application.
+    forceTerminateApp :: Prelude.Maybe Prelude.Bool
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteApp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteApp_appId' - The ID of the application.
+--
+-- 'forceStopAppReplication', 'deleteApp_forceStopAppReplication' - Indicates whether to stop all replication jobs corresponding to the
+-- servers in the application while deleting the application.
+--
+-- 'forceTerminateApp', 'deleteApp_forceTerminateApp' - Indicates whether to terminate the stack corresponding to the
+-- application while deleting the application.
+newDeleteApp ::
+  DeleteApp
+newDeleteApp =
+  DeleteApp'
+    { appId = Prelude.Nothing,
+      forceStopAppReplication = Prelude.Nothing,
+      forceTerminateApp = Prelude.Nothing
+    }
+
+-- | The ID of the application.
+deleteApp_appId :: Lens.Lens' DeleteApp (Prelude.Maybe Prelude.Text)
+deleteApp_appId = Lens.lens (\DeleteApp' {appId} -> appId) (\s@DeleteApp' {} a -> s {appId = a} :: DeleteApp)
+
+-- | Indicates whether to stop all replication jobs corresponding to the
+-- servers in the application while deleting the application.
+deleteApp_forceStopAppReplication :: Lens.Lens' DeleteApp (Prelude.Maybe Prelude.Bool)
+deleteApp_forceStopAppReplication = Lens.lens (\DeleteApp' {forceStopAppReplication} -> forceStopAppReplication) (\s@DeleteApp' {} a -> s {forceStopAppReplication = a} :: DeleteApp)
+
+-- | Indicates whether to terminate the stack corresponding to the
+-- application while deleting the application.
+deleteApp_forceTerminateApp :: Lens.Lens' DeleteApp (Prelude.Maybe Prelude.Bool)
+deleteApp_forceTerminateApp = Lens.lens (\DeleteApp' {forceTerminateApp} -> forceTerminateApp) (\s@DeleteApp' {} a -> s {forceTerminateApp = a} :: DeleteApp)
+
+instance Core.AWSRequest DeleteApp where
+  type AWSResponse DeleteApp = DeleteAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteApp where
+  hashWithSalt _salt DeleteApp' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` forceStopAppReplication
+      `Prelude.hashWithSalt` forceTerminateApp
+
+instance Prelude.NFData DeleteApp where
+  rnf DeleteApp' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf forceStopAppReplication
+      `Prelude.seq` Prelude.rnf forceTerminateApp
+
+instance Data.ToHeaders DeleteApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.DeleteApp" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteApp where
+  toJSON DeleteApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appId" Data..=) Prelude.<$> appId,
+            ("forceStopAppReplication" Data..=)
+              Prelude.<$> forceStopAppReplication,
+            ("forceTerminateApp" Data..=)
+              Prelude.<$> forceTerminateApp
+          ]
+      )
+
+instance Data.ToPath DeleteApp where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAppResponse' smart constructor.
+data DeleteAppResponse = DeleteAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAppResponse_httpStatus' - The response's http status code.
+newDeleteAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAppResponse
+newDeleteAppResponse pHttpStatus_ =
+  DeleteAppResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+deleteAppResponse_httpStatus :: Lens.Lens' DeleteAppResponse Prelude.Int
+deleteAppResponse_httpStatus = Lens.lens (\DeleteAppResponse' {httpStatus} -> httpStatus) (\s@DeleteAppResponse' {} a -> s {httpStatus = a} :: DeleteAppResponse)
+
+instance Prelude.NFData DeleteAppResponse where
+  rnf DeleteAppResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/DeleteAppLaunchConfiguration.hs b/gen/Amazonka/SMS/DeleteAppLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/DeleteAppLaunchConfiguration.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.DeleteAppLaunchConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the launch configuration for the specified application.
+module Amazonka.SMS.DeleteAppLaunchConfiguration
+  ( -- * Creating a Request
+    DeleteAppLaunchConfiguration (..),
+    newDeleteAppLaunchConfiguration,
+
+    -- * Request Lenses
+    deleteAppLaunchConfiguration_appId,
+
+    -- * Destructuring the Response
+    DeleteAppLaunchConfigurationResponse (..),
+    newDeleteAppLaunchConfigurationResponse,
+
+    -- * Response Lenses
+    deleteAppLaunchConfigurationResponse_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.SMS.Types
+
+-- | /See:/ 'newDeleteAppLaunchConfiguration' smart constructor.
+data DeleteAppLaunchConfiguration = DeleteAppLaunchConfiguration'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppLaunchConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteAppLaunchConfiguration_appId' - The ID of the application.
+newDeleteAppLaunchConfiguration ::
+  DeleteAppLaunchConfiguration
+newDeleteAppLaunchConfiguration =
+  DeleteAppLaunchConfiguration'
+    { appId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the application.
+deleteAppLaunchConfiguration_appId :: Lens.Lens' DeleteAppLaunchConfiguration (Prelude.Maybe Prelude.Text)
+deleteAppLaunchConfiguration_appId = Lens.lens (\DeleteAppLaunchConfiguration' {appId} -> appId) (\s@DeleteAppLaunchConfiguration' {} a -> s {appId = a} :: DeleteAppLaunchConfiguration)
+
+instance Core.AWSRequest DeleteAppLaunchConfiguration where
+  type
+    AWSResponse DeleteAppLaunchConfiguration =
+      DeleteAppLaunchConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAppLaunchConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteAppLaunchConfiguration
+  where
+  hashWithSalt _salt DeleteAppLaunchConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData DeleteAppLaunchConfiguration where
+  rnf DeleteAppLaunchConfiguration' {..} =
+    Prelude.rnf appId
+
+instance Data.ToHeaders DeleteAppLaunchConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.DeleteAppLaunchConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAppLaunchConfiguration where
+  toJSON DeleteAppLaunchConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("appId" Data..=) Prelude.<$> appId]
+      )
+
+instance Data.ToPath DeleteAppLaunchConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteAppLaunchConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAppLaunchConfigurationResponse' smart constructor.
+data DeleteAppLaunchConfigurationResponse = DeleteAppLaunchConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppLaunchConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAppLaunchConfigurationResponse_httpStatus' - The response's http status code.
+newDeleteAppLaunchConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAppLaunchConfigurationResponse
+newDeleteAppLaunchConfigurationResponse pHttpStatus_ =
+  DeleteAppLaunchConfigurationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteAppLaunchConfigurationResponse_httpStatus :: Lens.Lens' DeleteAppLaunchConfigurationResponse Prelude.Int
+deleteAppLaunchConfigurationResponse_httpStatus = Lens.lens (\DeleteAppLaunchConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeleteAppLaunchConfigurationResponse' {} a -> s {httpStatus = a} :: DeleteAppLaunchConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeleteAppLaunchConfigurationResponse
+  where
+  rnf DeleteAppLaunchConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/DeleteAppReplicationConfiguration.hs b/gen/Amazonka/SMS/DeleteAppReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/DeleteAppReplicationConfiguration.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.DeleteAppReplicationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the replication configuration for the specified application.
+module Amazonka.SMS.DeleteAppReplicationConfiguration
+  ( -- * Creating a Request
+    DeleteAppReplicationConfiguration (..),
+    newDeleteAppReplicationConfiguration,
+
+    -- * Request Lenses
+    deleteAppReplicationConfiguration_appId,
+
+    -- * Destructuring the Response
+    DeleteAppReplicationConfigurationResponse (..),
+    newDeleteAppReplicationConfigurationResponse,
+
+    -- * Response Lenses
+    deleteAppReplicationConfigurationResponse_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.SMS.Types
+
+-- | /See:/ 'newDeleteAppReplicationConfiguration' smart constructor.
+data DeleteAppReplicationConfiguration = DeleteAppReplicationConfiguration'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppReplicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteAppReplicationConfiguration_appId' - The ID of the application.
+newDeleteAppReplicationConfiguration ::
+  DeleteAppReplicationConfiguration
+newDeleteAppReplicationConfiguration =
+  DeleteAppReplicationConfiguration'
+    { appId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the application.
+deleteAppReplicationConfiguration_appId :: Lens.Lens' DeleteAppReplicationConfiguration (Prelude.Maybe Prelude.Text)
+deleteAppReplicationConfiguration_appId = Lens.lens (\DeleteAppReplicationConfiguration' {appId} -> appId) (\s@DeleteAppReplicationConfiguration' {} a -> s {appId = a} :: DeleteAppReplicationConfiguration)
+
+instance
+  Core.AWSRequest
+    DeleteAppReplicationConfiguration
+  where
+  type
+    AWSResponse DeleteAppReplicationConfiguration =
+      DeleteAppReplicationConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAppReplicationConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteAppReplicationConfiguration
+  where
+  hashWithSalt
+    _salt
+    DeleteAppReplicationConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` appId
+
+instance
+  Prelude.NFData
+    DeleteAppReplicationConfiguration
+  where
+  rnf DeleteAppReplicationConfiguration' {..} =
+    Prelude.rnf appId
+
+instance
+  Data.ToHeaders
+    DeleteAppReplicationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.DeleteAppReplicationConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance
+  Data.ToJSON
+    DeleteAppReplicationConfiguration
+  where
+  toJSON DeleteAppReplicationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("appId" Data..=) Prelude.<$> appId]
+      )
+
+instance
+  Data.ToPath
+    DeleteAppReplicationConfiguration
+  where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteAppReplicationConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAppReplicationConfigurationResponse' smart constructor.
+data DeleteAppReplicationConfigurationResponse = DeleteAppReplicationConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppReplicationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAppReplicationConfigurationResponse_httpStatus' - The response's http status code.
+newDeleteAppReplicationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAppReplicationConfigurationResponse
+newDeleteAppReplicationConfigurationResponse
+  pHttpStatus_ =
+    DeleteAppReplicationConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteAppReplicationConfigurationResponse_httpStatus :: Lens.Lens' DeleteAppReplicationConfigurationResponse Prelude.Int
+deleteAppReplicationConfigurationResponse_httpStatus = Lens.lens (\DeleteAppReplicationConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeleteAppReplicationConfigurationResponse' {} a -> s {httpStatus = a} :: DeleteAppReplicationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeleteAppReplicationConfigurationResponse
+  where
+  rnf DeleteAppReplicationConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/DeleteAppValidationConfiguration.hs b/gen/Amazonka/SMS/DeleteAppValidationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/DeleteAppValidationConfiguration.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.DeleteAppValidationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the validation configuration for the specified application.
+module Amazonka.SMS.DeleteAppValidationConfiguration
+  ( -- * Creating a Request
+    DeleteAppValidationConfiguration (..),
+    newDeleteAppValidationConfiguration,
+
+    -- * Request Lenses
+    deleteAppValidationConfiguration_appId,
+
+    -- * Destructuring the Response
+    DeleteAppValidationConfigurationResponse (..),
+    newDeleteAppValidationConfigurationResponse,
+
+    -- * Response Lenses
+    deleteAppValidationConfigurationResponse_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.SMS.Types
+
+-- | /See:/ 'newDeleteAppValidationConfiguration' smart constructor.
+data DeleteAppValidationConfiguration = DeleteAppValidationConfiguration'
+  { -- | The ID of the application.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppValidationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'deleteAppValidationConfiguration_appId' - The ID of the application.
+newDeleteAppValidationConfiguration ::
+  -- | 'appId'
+  Prelude.Text ->
+  DeleteAppValidationConfiguration
+newDeleteAppValidationConfiguration pAppId_ =
+  DeleteAppValidationConfiguration' {appId = pAppId_}
+
+-- | The ID of the application.
+deleteAppValidationConfiguration_appId :: Lens.Lens' DeleteAppValidationConfiguration Prelude.Text
+deleteAppValidationConfiguration_appId = Lens.lens (\DeleteAppValidationConfiguration' {appId} -> appId) (\s@DeleteAppValidationConfiguration' {} a -> s {appId = a} :: DeleteAppValidationConfiguration)
+
+instance
+  Core.AWSRequest
+    DeleteAppValidationConfiguration
+  where
+  type
+    AWSResponse DeleteAppValidationConfiguration =
+      DeleteAppValidationConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteAppValidationConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    DeleteAppValidationConfiguration
+  where
+  hashWithSalt
+    _salt
+    DeleteAppValidationConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` appId
+
+instance
+  Prelude.NFData
+    DeleteAppValidationConfiguration
+  where
+  rnf DeleteAppValidationConfiguration' {..} =
+    Prelude.rnf appId
+
+instance
+  Data.ToHeaders
+    DeleteAppValidationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.DeleteAppValidationConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteAppValidationConfiguration where
+  toJSON DeleteAppValidationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("appId" Data..= appId)]
+      )
+
+instance Data.ToPath DeleteAppValidationConfiguration where
+  toPath = Prelude.const "/"
+
+instance
+  Data.ToQuery
+    DeleteAppValidationConfiguration
+  where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteAppValidationConfigurationResponse' smart constructor.
+data DeleteAppValidationConfigurationResponse = DeleteAppValidationConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteAppValidationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteAppValidationConfigurationResponse_httpStatus' - The response's http status code.
+newDeleteAppValidationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteAppValidationConfigurationResponse
+newDeleteAppValidationConfigurationResponse
+  pHttpStatus_ =
+    DeleteAppValidationConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+deleteAppValidationConfigurationResponse_httpStatus :: Lens.Lens' DeleteAppValidationConfigurationResponse Prelude.Int
+deleteAppValidationConfigurationResponse_httpStatus = Lens.lens (\DeleteAppValidationConfigurationResponse' {httpStatus} -> httpStatus) (\s@DeleteAppValidationConfigurationResponse' {} a -> s {httpStatus = a} :: DeleteAppValidationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    DeleteAppValidationConfigurationResponse
+  where
+  rnf DeleteAppValidationConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/DeleteReplicationJob.hs b/gen/Amazonka/SMS/DeleteReplicationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/DeleteReplicationJob.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.DeleteReplicationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes the specified replication job.
+--
+-- After you delete a replication job, there are no further replication
+-- runs. Amazon Web Services deletes the contents of the Amazon S3 bucket
+-- used to store Server Migration Service artifacts. The AMIs created by
+-- the replication runs are not deleted.
+module Amazonka.SMS.DeleteReplicationJob
+  ( -- * Creating a Request
+    DeleteReplicationJob (..),
+    newDeleteReplicationJob,
+
+    -- * Request Lenses
+    deleteReplicationJob_replicationJobId,
+
+    -- * Destructuring the Response
+    DeleteReplicationJobResponse (..),
+    newDeleteReplicationJobResponse,
+
+    -- * Response Lenses
+    deleteReplicationJobResponse_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.SMS.Types
+
+-- | /See:/ 'newDeleteReplicationJob' smart constructor.
+data DeleteReplicationJob = DeleteReplicationJob'
+  { -- | The ID of the replication job.
+    replicationJobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteReplicationJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replicationJobId', 'deleteReplicationJob_replicationJobId' - The ID of the replication job.
+newDeleteReplicationJob ::
+  -- | 'replicationJobId'
+  Prelude.Text ->
+  DeleteReplicationJob
+newDeleteReplicationJob pReplicationJobId_ =
+  DeleteReplicationJob'
+    { replicationJobId =
+        pReplicationJobId_
+    }
+
+-- | The ID of the replication job.
+deleteReplicationJob_replicationJobId :: Lens.Lens' DeleteReplicationJob Prelude.Text
+deleteReplicationJob_replicationJobId = Lens.lens (\DeleteReplicationJob' {replicationJobId} -> replicationJobId) (\s@DeleteReplicationJob' {} a -> s {replicationJobId = a} :: DeleteReplicationJob)
+
+instance Core.AWSRequest DeleteReplicationJob where
+  type
+    AWSResponse DeleteReplicationJob =
+      DeleteReplicationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteReplicationJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteReplicationJob where
+  hashWithSalt _salt DeleteReplicationJob' {..} =
+    _salt `Prelude.hashWithSalt` replicationJobId
+
+instance Prelude.NFData DeleteReplicationJob where
+  rnf DeleteReplicationJob' {..} =
+    Prelude.rnf replicationJobId
+
+instance Data.ToHeaders DeleteReplicationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.DeleteReplicationJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteReplicationJob where
+  toJSON DeleteReplicationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ Prelude.Just
+              ("replicationJobId" Data..= replicationJobId)
+          ]
+      )
+
+instance Data.ToPath DeleteReplicationJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteReplicationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteReplicationJobResponse' smart constructor.
+data DeleteReplicationJobResponse = DeleteReplicationJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteReplicationJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteReplicationJobResponse_httpStatus' - The response's http status code.
+newDeleteReplicationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteReplicationJobResponse
+newDeleteReplicationJobResponse pHttpStatus_ =
+  DeleteReplicationJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteReplicationJobResponse_httpStatus :: Lens.Lens' DeleteReplicationJobResponse Prelude.Int
+deleteReplicationJobResponse_httpStatus = Lens.lens (\DeleteReplicationJobResponse' {httpStatus} -> httpStatus) (\s@DeleteReplicationJobResponse' {} a -> s {httpStatus = a} :: DeleteReplicationJobResponse)
+
+instance Prelude.NFData DeleteReplicationJobResponse where
+  rnf DeleteReplicationJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/DeleteServerCatalog.hs b/gen/Amazonka/SMS/DeleteServerCatalog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/DeleteServerCatalog.hs
@@ -0,0 +1,136 @@
+{-# 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.SMS.DeleteServerCatalog
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes all servers from your server catalog.
+module Amazonka.SMS.DeleteServerCatalog
+  ( -- * Creating a Request
+    DeleteServerCatalog (..),
+    newDeleteServerCatalog,
+
+    -- * Destructuring the Response
+    DeleteServerCatalogResponse (..),
+    newDeleteServerCatalogResponse,
+
+    -- * Response Lenses
+    deleteServerCatalogResponse_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.SMS.Types
+
+-- | /See:/ 'newDeleteServerCatalog' smart constructor.
+data DeleteServerCatalog = DeleteServerCatalog'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteServerCatalog' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newDeleteServerCatalog ::
+  DeleteServerCatalog
+newDeleteServerCatalog = DeleteServerCatalog'
+
+instance Core.AWSRequest DeleteServerCatalog where
+  type
+    AWSResponse DeleteServerCatalog =
+      DeleteServerCatalogResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DeleteServerCatalogResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DeleteServerCatalog where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData DeleteServerCatalog where
+  rnf _ = ()
+
+instance Data.ToHeaders DeleteServerCatalog where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.DeleteServerCatalog" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DeleteServerCatalog where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath DeleteServerCatalog where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DeleteServerCatalog where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDeleteServerCatalogResponse' smart constructor.
+data DeleteServerCatalogResponse = DeleteServerCatalogResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DeleteServerCatalogResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'deleteServerCatalogResponse_httpStatus' - The response's http status code.
+newDeleteServerCatalogResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DeleteServerCatalogResponse
+newDeleteServerCatalogResponse pHttpStatus_ =
+  DeleteServerCatalogResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+deleteServerCatalogResponse_httpStatus :: Lens.Lens' DeleteServerCatalogResponse Prelude.Int
+deleteServerCatalogResponse_httpStatus = Lens.lens (\DeleteServerCatalogResponse' {httpStatus} -> httpStatus) (\s@DeleteServerCatalogResponse' {} a -> s {httpStatus = a} :: DeleteServerCatalogResponse)
+
+instance Prelude.NFData DeleteServerCatalogResponse where
+  rnf DeleteServerCatalogResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/DisassociateConnector.hs b/gen/Amazonka/SMS/DisassociateConnector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/DisassociateConnector.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.DisassociateConnector
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Disassociates the specified connector from Server Migration Service.
+--
+-- After you disassociate a connector, it is no longer available to support
+-- replication jobs.
+module Amazonka.SMS.DisassociateConnector
+  ( -- * Creating a Request
+    DisassociateConnector (..),
+    newDisassociateConnector,
+
+    -- * Request Lenses
+    disassociateConnector_connectorId,
+
+    -- * Destructuring the Response
+    DisassociateConnectorResponse (..),
+    newDisassociateConnectorResponse,
+
+    -- * Response Lenses
+    disassociateConnectorResponse_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.SMS.Types
+
+-- | /See:/ 'newDisassociateConnector' smart constructor.
+data DisassociateConnector = DisassociateConnector'
+  { -- | The ID of the connector.
+    connectorId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateConnector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectorId', 'disassociateConnector_connectorId' - The ID of the connector.
+newDisassociateConnector ::
+  -- | 'connectorId'
+  Prelude.Text ->
+  DisassociateConnector
+newDisassociateConnector pConnectorId_ =
+  DisassociateConnector' {connectorId = pConnectorId_}
+
+-- | The ID of the connector.
+disassociateConnector_connectorId :: Lens.Lens' DisassociateConnector Prelude.Text
+disassociateConnector_connectorId = Lens.lens (\DisassociateConnector' {connectorId} -> connectorId) (\s@DisassociateConnector' {} a -> s {connectorId = a} :: DisassociateConnector)
+
+instance Core.AWSRequest DisassociateConnector where
+  type
+    AWSResponse DisassociateConnector =
+      DisassociateConnectorResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          DisassociateConnectorResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable DisassociateConnector where
+  hashWithSalt _salt DisassociateConnector' {..} =
+    _salt `Prelude.hashWithSalt` connectorId
+
+instance Prelude.NFData DisassociateConnector where
+  rnf DisassociateConnector' {..} =
+    Prelude.rnf connectorId
+
+instance Data.ToHeaders DisassociateConnector where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.DisassociateConnector" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON DisassociateConnector where
+  toJSON DisassociateConnector' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("connectorId" Data..= connectorId)]
+      )
+
+instance Data.ToPath DisassociateConnector where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery DisassociateConnector where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newDisassociateConnectorResponse' smart constructor.
+data DisassociateConnectorResponse = DisassociateConnectorResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'DisassociateConnectorResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'disassociateConnectorResponse_httpStatus' - The response's http status code.
+newDisassociateConnectorResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  DisassociateConnectorResponse
+newDisassociateConnectorResponse pHttpStatus_ =
+  DisassociateConnectorResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+disassociateConnectorResponse_httpStatus :: Lens.Lens' DisassociateConnectorResponse Prelude.Int
+disassociateConnectorResponse_httpStatus = Lens.lens (\DisassociateConnectorResponse' {httpStatus} -> httpStatus) (\s@DisassociateConnectorResponse' {} a -> s {httpStatus = a} :: DisassociateConnectorResponse)
+
+instance Prelude.NFData DisassociateConnectorResponse where
+  rnf DisassociateConnectorResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GenerateChangeSet.hs b/gen/Amazonka/SMS/GenerateChangeSet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GenerateChangeSet.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.GenerateChangeSet
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates a target change set for a currently launched stack and writes
+-- it to an Amazon S3 object in the customer’s Amazon S3 bucket.
+module Amazonka.SMS.GenerateChangeSet
+  ( -- * Creating a Request
+    GenerateChangeSet (..),
+    newGenerateChangeSet,
+
+    -- * Request Lenses
+    generateChangeSet_appId,
+    generateChangeSet_changesetFormat,
+
+    -- * Destructuring the Response
+    GenerateChangeSetResponse (..),
+    newGenerateChangeSetResponse,
+
+    -- * Response Lenses
+    generateChangeSetResponse_s3Location,
+    generateChangeSetResponse_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.SMS.Types
+
+-- | /See:/ 'newGenerateChangeSet' smart constructor.
+data GenerateChangeSet = GenerateChangeSet'
+  { -- | The ID of the application associated with the change set.
+    appId :: Prelude.Maybe Prelude.Text,
+    -- | The format for the change set.
+    changesetFormat :: Prelude.Maybe OutputFormat
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GenerateChangeSet' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'generateChangeSet_appId' - The ID of the application associated with the change set.
+--
+-- 'changesetFormat', 'generateChangeSet_changesetFormat' - The format for the change set.
+newGenerateChangeSet ::
+  GenerateChangeSet
+newGenerateChangeSet =
+  GenerateChangeSet'
+    { appId = Prelude.Nothing,
+      changesetFormat = Prelude.Nothing
+    }
+
+-- | The ID of the application associated with the change set.
+generateChangeSet_appId :: Lens.Lens' GenerateChangeSet (Prelude.Maybe Prelude.Text)
+generateChangeSet_appId = Lens.lens (\GenerateChangeSet' {appId} -> appId) (\s@GenerateChangeSet' {} a -> s {appId = a} :: GenerateChangeSet)
+
+-- | The format for the change set.
+generateChangeSet_changesetFormat :: Lens.Lens' GenerateChangeSet (Prelude.Maybe OutputFormat)
+generateChangeSet_changesetFormat = Lens.lens (\GenerateChangeSet' {changesetFormat} -> changesetFormat) (\s@GenerateChangeSet' {} a -> s {changesetFormat = a} :: GenerateChangeSet)
+
+instance Core.AWSRequest GenerateChangeSet where
+  type
+    AWSResponse GenerateChangeSet =
+      GenerateChangeSetResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GenerateChangeSetResponse'
+            Prelude.<$> (x Data..?> "s3Location")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GenerateChangeSet where
+  hashWithSalt _salt GenerateChangeSet' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` changesetFormat
+
+instance Prelude.NFData GenerateChangeSet where
+  rnf GenerateChangeSet' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf changesetFormat
+
+instance Data.ToHeaders GenerateChangeSet where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GenerateChangeSet" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GenerateChangeSet where
+  toJSON GenerateChangeSet' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appId" Data..=) Prelude.<$> appId,
+            ("changesetFormat" Data..=)
+              Prelude.<$> changesetFormat
+          ]
+      )
+
+instance Data.ToPath GenerateChangeSet where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GenerateChangeSet where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGenerateChangeSetResponse' smart constructor.
+data GenerateChangeSetResponse = GenerateChangeSetResponse'
+  { -- | The location of the Amazon S3 object.
+    s3Location :: Prelude.Maybe S3Location,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GenerateChangeSetResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Location', 'generateChangeSetResponse_s3Location' - The location of the Amazon S3 object.
+--
+-- 'httpStatus', 'generateChangeSetResponse_httpStatus' - The response's http status code.
+newGenerateChangeSetResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GenerateChangeSetResponse
+newGenerateChangeSetResponse pHttpStatus_ =
+  GenerateChangeSetResponse'
+    { s3Location =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The location of the Amazon S3 object.
+generateChangeSetResponse_s3Location :: Lens.Lens' GenerateChangeSetResponse (Prelude.Maybe S3Location)
+generateChangeSetResponse_s3Location = Lens.lens (\GenerateChangeSetResponse' {s3Location} -> s3Location) (\s@GenerateChangeSetResponse' {} a -> s {s3Location = a} :: GenerateChangeSetResponse)
+
+-- | The response's http status code.
+generateChangeSetResponse_httpStatus :: Lens.Lens' GenerateChangeSetResponse Prelude.Int
+generateChangeSetResponse_httpStatus = Lens.lens (\GenerateChangeSetResponse' {httpStatus} -> httpStatus) (\s@GenerateChangeSetResponse' {} a -> s {httpStatus = a} :: GenerateChangeSetResponse)
+
+instance Prelude.NFData GenerateChangeSetResponse where
+  rnf GenerateChangeSetResponse' {..} =
+    Prelude.rnf s3Location
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GenerateTemplate.hs b/gen/Amazonka/SMS/GenerateTemplate.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GenerateTemplate.hs
@@ -0,0 +1,187 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.GenerateTemplate
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Generates an CloudFormation template based on the current launch
+-- configuration and writes it to an Amazon S3 object in the customer’s
+-- Amazon S3 bucket.
+module Amazonka.SMS.GenerateTemplate
+  ( -- * Creating a Request
+    GenerateTemplate (..),
+    newGenerateTemplate,
+
+    -- * Request Lenses
+    generateTemplate_appId,
+    generateTemplate_templateFormat,
+
+    -- * Destructuring the Response
+    GenerateTemplateResponse (..),
+    newGenerateTemplateResponse,
+
+    -- * Response Lenses
+    generateTemplateResponse_s3Location,
+    generateTemplateResponse_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.SMS.Types
+
+-- | /See:/ 'newGenerateTemplate' smart constructor.
+data GenerateTemplate = GenerateTemplate'
+  { -- | The ID of the application associated with the CloudFormation template.
+    appId :: Prelude.Maybe Prelude.Text,
+    -- | The format for generating the CloudFormation template.
+    templateFormat :: Prelude.Maybe OutputFormat
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GenerateTemplate' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'generateTemplate_appId' - The ID of the application associated with the CloudFormation template.
+--
+-- 'templateFormat', 'generateTemplate_templateFormat' - The format for generating the CloudFormation template.
+newGenerateTemplate ::
+  GenerateTemplate
+newGenerateTemplate =
+  GenerateTemplate'
+    { appId = Prelude.Nothing,
+      templateFormat = Prelude.Nothing
+    }
+
+-- | The ID of the application associated with the CloudFormation template.
+generateTemplate_appId :: Lens.Lens' GenerateTemplate (Prelude.Maybe Prelude.Text)
+generateTemplate_appId = Lens.lens (\GenerateTemplate' {appId} -> appId) (\s@GenerateTemplate' {} a -> s {appId = a} :: GenerateTemplate)
+
+-- | The format for generating the CloudFormation template.
+generateTemplate_templateFormat :: Lens.Lens' GenerateTemplate (Prelude.Maybe OutputFormat)
+generateTemplate_templateFormat = Lens.lens (\GenerateTemplate' {templateFormat} -> templateFormat) (\s@GenerateTemplate' {} a -> s {templateFormat = a} :: GenerateTemplate)
+
+instance Core.AWSRequest GenerateTemplate where
+  type
+    AWSResponse GenerateTemplate =
+      GenerateTemplateResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GenerateTemplateResponse'
+            Prelude.<$> (x Data..?> "s3Location")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GenerateTemplate where
+  hashWithSalt _salt GenerateTemplate' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` templateFormat
+
+instance Prelude.NFData GenerateTemplate where
+  rnf GenerateTemplate' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf templateFormat
+
+instance Data.ToHeaders GenerateTemplate where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GenerateTemplate" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GenerateTemplate where
+  toJSON GenerateTemplate' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appId" Data..=) Prelude.<$> appId,
+            ("templateFormat" Data..=)
+              Prelude.<$> templateFormat
+          ]
+      )
+
+instance Data.ToPath GenerateTemplate where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GenerateTemplate where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGenerateTemplateResponse' smart constructor.
+data GenerateTemplateResponse = GenerateTemplateResponse'
+  { -- | The location of the Amazon S3 object.
+    s3Location :: Prelude.Maybe S3Location,
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GenerateTemplateResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Location', 'generateTemplateResponse_s3Location' - The location of the Amazon S3 object.
+--
+-- 'httpStatus', 'generateTemplateResponse_httpStatus' - The response's http status code.
+newGenerateTemplateResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GenerateTemplateResponse
+newGenerateTemplateResponse pHttpStatus_ =
+  GenerateTemplateResponse'
+    { s3Location =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The location of the Amazon S3 object.
+generateTemplateResponse_s3Location :: Lens.Lens' GenerateTemplateResponse (Prelude.Maybe S3Location)
+generateTemplateResponse_s3Location = Lens.lens (\GenerateTemplateResponse' {s3Location} -> s3Location) (\s@GenerateTemplateResponse' {} a -> s {s3Location = a} :: GenerateTemplateResponse)
+
+-- | The response's http status code.
+generateTemplateResponse_httpStatus :: Lens.Lens' GenerateTemplateResponse Prelude.Int
+generateTemplateResponse_httpStatus = Lens.lens (\GenerateTemplateResponse' {httpStatus} -> httpStatus) (\s@GenerateTemplateResponse' {} a -> s {httpStatus = a} :: GenerateTemplateResponse)
+
+instance Prelude.NFData GenerateTemplateResponse where
+  rnf GenerateTemplateResponse' {..} =
+    Prelude.rnf s3Location
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GetApp.hs b/gen/Amazonka/SMS/GetApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GetApp.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.GetApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve information about the specified application.
+module Amazonka.SMS.GetApp
+  ( -- * Creating a Request
+    GetApp (..),
+    newGetApp,
+
+    -- * Request Lenses
+    getApp_appId,
+
+    -- * Destructuring the Response
+    GetAppResponse (..),
+    newGetAppResponse,
+
+    -- * Response Lenses
+    getAppResponse_appSummary,
+    getAppResponse_serverGroups,
+    getAppResponse_tags,
+    getAppResponse_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.SMS.Types
+
+-- | /See:/ 'newGetApp' smart constructor.
+data GetApp = GetApp'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetApp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getApp_appId' - The ID of the application.
+newGetApp ::
+  GetApp
+newGetApp = GetApp' {appId = Prelude.Nothing}
+
+-- | The ID of the application.
+getApp_appId :: Lens.Lens' GetApp (Prelude.Maybe Prelude.Text)
+getApp_appId = Lens.lens (\GetApp' {appId} -> appId) (\s@GetApp' {} a -> s {appId = a} :: GetApp)
+
+instance Core.AWSRequest GetApp where
+  type AWSResponse GetApp = GetAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAppResponse'
+            Prelude.<$> (x Data..?> "appSummary")
+            Prelude.<*> (x Data..?> "serverGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetApp where
+  hashWithSalt _salt GetApp' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData GetApp where
+  rnf GetApp' {..} = Prelude.rnf appId
+
+instance Data.ToHeaders GetApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GetApp" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetApp where
+  toJSON GetApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("appId" Data..=) Prelude.<$> appId]
+      )
+
+instance Data.ToPath GetApp where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAppResponse' smart constructor.
+data GetAppResponse = GetAppResponse'
+  { -- | Information about the application.
+    appSummary :: Prelude.Maybe AppSummary,
+    -- | The server groups that belong to the application.
+    serverGroups :: Prelude.Maybe [ServerGroup],
+    -- | The tags associated with the application.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appSummary', 'getAppResponse_appSummary' - Information about the application.
+--
+-- 'serverGroups', 'getAppResponse_serverGroups' - The server groups that belong to the application.
+--
+-- 'tags', 'getAppResponse_tags' - The tags associated with the application.
+--
+-- 'httpStatus', 'getAppResponse_httpStatus' - The response's http status code.
+newGetAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAppResponse
+newGetAppResponse pHttpStatus_ =
+  GetAppResponse'
+    { appSummary = Prelude.Nothing,
+      serverGroups = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the application.
+getAppResponse_appSummary :: Lens.Lens' GetAppResponse (Prelude.Maybe AppSummary)
+getAppResponse_appSummary = Lens.lens (\GetAppResponse' {appSummary} -> appSummary) (\s@GetAppResponse' {} a -> s {appSummary = a} :: GetAppResponse)
+
+-- | The server groups that belong to the application.
+getAppResponse_serverGroups :: Lens.Lens' GetAppResponse (Prelude.Maybe [ServerGroup])
+getAppResponse_serverGroups = Lens.lens (\GetAppResponse' {serverGroups} -> serverGroups) (\s@GetAppResponse' {} a -> s {serverGroups = a} :: GetAppResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags associated with the application.
+getAppResponse_tags :: Lens.Lens' GetAppResponse (Prelude.Maybe [Tag])
+getAppResponse_tags = Lens.lens (\GetAppResponse' {tags} -> tags) (\s@GetAppResponse' {} a -> s {tags = a} :: GetAppResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getAppResponse_httpStatus :: Lens.Lens' GetAppResponse Prelude.Int
+getAppResponse_httpStatus = Lens.lens (\GetAppResponse' {httpStatus} -> httpStatus) (\s@GetAppResponse' {} a -> s {httpStatus = a} :: GetAppResponse)
+
+instance Prelude.NFData GetAppResponse where
+  rnf GetAppResponse' {..} =
+    Prelude.rnf appSummary
+      `Prelude.seq` Prelude.rnf serverGroups
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GetAppLaunchConfiguration.hs b/gen/Amazonka/SMS/GetAppLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GetAppLaunchConfiguration.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.SMS.GetAppLaunchConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the application launch configuration associated with the
+-- specified application.
+module Amazonka.SMS.GetAppLaunchConfiguration
+  ( -- * Creating a Request
+    GetAppLaunchConfiguration (..),
+    newGetAppLaunchConfiguration,
+
+    -- * Request Lenses
+    getAppLaunchConfiguration_appId,
+
+    -- * Destructuring the Response
+    GetAppLaunchConfigurationResponse (..),
+    newGetAppLaunchConfigurationResponse,
+
+    -- * Response Lenses
+    getAppLaunchConfigurationResponse_appId,
+    getAppLaunchConfigurationResponse_autoLaunch,
+    getAppLaunchConfigurationResponse_roleName,
+    getAppLaunchConfigurationResponse_serverGroupLaunchConfigurations,
+    getAppLaunchConfigurationResponse_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.SMS.Types
+
+-- | /See:/ 'newGetAppLaunchConfiguration' smart constructor.
+data GetAppLaunchConfiguration = GetAppLaunchConfiguration'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppLaunchConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getAppLaunchConfiguration_appId' - The ID of the application.
+newGetAppLaunchConfiguration ::
+  GetAppLaunchConfiguration
+newGetAppLaunchConfiguration =
+  GetAppLaunchConfiguration' {appId = Prelude.Nothing}
+
+-- | The ID of the application.
+getAppLaunchConfiguration_appId :: Lens.Lens' GetAppLaunchConfiguration (Prelude.Maybe Prelude.Text)
+getAppLaunchConfiguration_appId = Lens.lens (\GetAppLaunchConfiguration' {appId} -> appId) (\s@GetAppLaunchConfiguration' {} a -> s {appId = a} :: GetAppLaunchConfiguration)
+
+instance Core.AWSRequest GetAppLaunchConfiguration where
+  type
+    AWSResponse GetAppLaunchConfiguration =
+      GetAppLaunchConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAppLaunchConfigurationResponse'
+            Prelude.<$> (x Data..?> "appId")
+            Prelude.<*> (x Data..?> "autoLaunch")
+            Prelude.<*> (x Data..?> "roleName")
+            Prelude.<*> ( x
+                            Data..?> "serverGroupLaunchConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAppLaunchConfiguration where
+  hashWithSalt _salt GetAppLaunchConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData GetAppLaunchConfiguration where
+  rnf GetAppLaunchConfiguration' {..} =
+    Prelude.rnf appId
+
+instance Data.ToHeaders GetAppLaunchConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GetAppLaunchConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAppLaunchConfiguration where
+  toJSON GetAppLaunchConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("appId" Data..=) Prelude.<$> appId]
+      )
+
+instance Data.ToPath GetAppLaunchConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAppLaunchConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAppLaunchConfigurationResponse' smart constructor.
+data GetAppLaunchConfigurationResponse = GetAppLaunchConfigurationResponse'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the application is configured to launch automatically
+    -- after replication is complete.
+    autoLaunch :: Prelude.Maybe Prelude.Bool,
+    -- | The name of the service role in the customer\'s account that
+    -- CloudFormation uses to launch the application.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | The launch configurations for server groups in this application.
+    serverGroupLaunchConfigurations :: Prelude.Maybe [ServerGroupLaunchConfiguration],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppLaunchConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getAppLaunchConfigurationResponse_appId' - The ID of the application.
+--
+-- 'autoLaunch', 'getAppLaunchConfigurationResponse_autoLaunch' - Indicates whether the application is configured to launch automatically
+-- after replication is complete.
+--
+-- 'roleName', 'getAppLaunchConfigurationResponse_roleName' - The name of the service role in the customer\'s account that
+-- CloudFormation uses to launch the application.
+--
+-- 'serverGroupLaunchConfigurations', 'getAppLaunchConfigurationResponse_serverGroupLaunchConfigurations' - The launch configurations for server groups in this application.
+--
+-- 'httpStatus', 'getAppLaunchConfigurationResponse_httpStatus' - The response's http status code.
+newGetAppLaunchConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAppLaunchConfigurationResponse
+newGetAppLaunchConfigurationResponse pHttpStatus_ =
+  GetAppLaunchConfigurationResponse'
+    { appId =
+        Prelude.Nothing,
+      autoLaunch = Prelude.Nothing,
+      roleName = Prelude.Nothing,
+      serverGroupLaunchConfigurations =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the application.
+getAppLaunchConfigurationResponse_appId :: Lens.Lens' GetAppLaunchConfigurationResponse (Prelude.Maybe Prelude.Text)
+getAppLaunchConfigurationResponse_appId = Lens.lens (\GetAppLaunchConfigurationResponse' {appId} -> appId) (\s@GetAppLaunchConfigurationResponse' {} a -> s {appId = a} :: GetAppLaunchConfigurationResponse)
+
+-- | Indicates whether the application is configured to launch automatically
+-- after replication is complete.
+getAppLaunchConfigurationResponse_autoLaunch :: Lens.Lens' GetAppLaunchConfigurationResponse (Prelude.Maybe Prelude.Bool)
+getAppLaunchConfigurationResponse_autoLaunch = Lens.lens (\GetAppLaunchConfigurationResponse' {autoLaunch} -> autoLaunch) (\s@GetAppLaunchConfigurationResponse' {} a -> s {autoLaunch = a} :: GetAppLaunchConfigurationResponse)
+
+-- | The name of the service role in the customer\'s account that
+-- CloudFormation uses to launch the application.
+getAppLaunchConfigurationResponse_roleName :: Lens.Lens' GetAppLaunchConfigurationResponse (Prelude.Maybe Prelude.Text)
+getAppLaunchConfigurationResponse_roleName = Lens.lens (\GetAppLaunchConfigurationResponse' {roleName} -> roleName) (\s@GetAppLaunchConfigurationResponse' {} a -> s {roleName = a} :: GetAppLaunchConfigurationResponse)
+
+-- | The launch configurations for server groups in this application.
+getAppLaunchConfigurationResponse_serverGroupLaunchConfigurations :: Lens.Lens' GetAppLaunchConfigurationResponse (Prelude.Maybe [ServerGroupLaunchConfiguration])
+getAppLaunchConfigurationResponse_serverGroupLaunchConfigurations = Lens.lens (\GetAppLaunchConfigurationResponse' {serverGroupLaunchConfigurations} -> serverGroupLaunchConfigurations) (\s@GetAppLaunchConfigurationResponse' {} a -> s {serverGroupLaunchConfigurations = a} :: GetAppLaunchConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getAppLaunchConfigurationResponse_httpStatus :: Lens.Lens' GetAppLaunchConfigurationResponse Prelude.Int
+getAppLaunchConfigurationResponse_httpStatus = Lens.lens (\GetAppLaunchConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetAppLaunchConfigurationResponse' {} a -> s {httpStatus = a} :: GetAppLaunchConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetAppLaunchConfigurationResponse
+  where
+  rnf GetAppLaunchConfigurationResponse' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf autoLaunch
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf serverGroupLaunchConfigurations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GetAppReplicationConfiguration.hs b/gen/Amazonka/SMS/GetAppReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GetAppReplicationConfiguration.hs
@@ -0,0 +1,195 @@
+{-# 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.SMS.GetAppReplicationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the application replication configuration associated with the
+-- specified application.
+module Amazonka.SMS.GetAppReplicationConfiguration
+  ( -- * Creating a Request
+    GetAppReplicationConfiguration (..),
+    newGetAppReplicationConfiguration,
+
+    -- * Request Lenses
+    getAppReplicationConfiguration_appId,
+
+    -- * Destructuring the Response
+    GetAppReplicationConfigurationResponse (..),
+    newGetAppReplicationConfigurationResponse,
+
+    -- * Response Lenses
+    getAppReplicationConfigurationResponse_serverGroupReplicationConfigurations,
+    getAppReplicationConfigurationResponse_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.SMS.Types
+
+-- | /See:/ 'newGetAppReplicationConfiguration' smart constructor.
+data GetAppReplicationConfiguration = GetAppReplicationConfiguration'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppReplicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getAppReplicationConfiguration_appId' - The ID of the application.
+newGetAppReplicationConfiguration ::
+  GetAppReplicationConfiguration
+newGetAppReplicationConfiguration =
+  GetAppReplicationConfiguration'
+    { appId =
+        Prelude.Nothing
+    }
+
+-- | The ID of the application.
+getAppReplicationConfiguration_appId :: Lens.Lens' GetAppReplicationConfiguration (Prelude.Maybe Prelude.Text)
+getAppReplicationConfiguration_appId = Lens.lens (\GetAppReplicationConfiguration' {appId} -> appId) (\s@GetAppReplicationConfiguration' {} a -> s {appId = a} :: GetAppReplicationConfiguration)
+
+instance
+  Core.AWSRequest
+    GetAppReplicationConfiguration
+  where
+  type
+    AWSResponse GetAppReplicationConfiguration =
+      GetAppReplicationConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAppReplicationConfigurationResponse'
+            Prelude.<$> ( x
+                            Data..?> "serverGroupReplicationConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetAppReplicationConfiguration
+  where
+  hashWithSalt
+    _salt
+    GetAppReplicationConfiguration' {..} =
+      _salt `Prelude.hashWithSalt` appId
+
+instance
+  Prelude.NFData
+    GetAppReplicationConfiguration
+  where
+  rnf GetAppReplicationConfiguration' {..} =
+    Prelude.rnf appId
+
+instance
+  Data.ToHeaders
+    GetAppReplicationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GetAppReplicationConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAppReplicationConfiguration where
+  toJSON GetAppReplicationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("appId" Data..=) Prelude.<$> appId]
+      )
+
+instance Data.ToPath GetAppReplicationConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAppReplicationConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAppReplicationConfigurationResponse' smart constructor.
+data GetAppReplicationConfigurationResponse = GetAppReplicationConfigurationResponse'
+  { -- | The replication configurations associated with server groups in this
+    -- application.
+    serverGroupReplicationConfigurations :: Prelude.Maybe [ServerGroupReplicationConfiguration],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppReplicationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serverGroupReplicationConfigurations', 'getAppReplicationConfigurationResponse_serverGroupReplicationConfigurations' - The replication configurations associated with server groups in this
+-- application.
+--
+-- 'httpStatus', 'getAppReplicationConfigurationResponse_httpStatus' - The response's http status code.
+newGetAppReplicationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAppReplicationConfigurationResponse
+newGetAppReplicationConfigurationResponse
+  pHttpStatus_ =
+    GetAppReplicationConfigurationResponse'
+      { serverGroupReplicationConfigurations =
+          Prelude.Nothing,
+        httpStatus = pHttpStatus_
+      }
+
+-- | The replication configurations associated with server groups in this
+-- application.
+getAppReplicationConfigurationResponse_serverGroupReplicationConfigurations :: Lens.Lens' GetAppReplicationConfigurationResponse (Prelude.Maybe [ServerGroupReplicationConfiguration])
+getAppReplicationConfigurationResponse_serverGroupReplicationConfigurations = Lens.lens (\GetAppReplicationConfigurationResponse' {serverGroupReplicationConfigurations} -> serverGroupReplicationConfigurations) (\s@GetAppReplicationConfigurationResponse' {} a -> s {serverGroupReplicationConfigurations = a} :: GetAppReplicationConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getAppReplicationConfigurationResponse_httpStatus :: Lens.Lens' GetAppReplicationConfigurationResponse Prelude.Int
+getAppReplicationConfigurationResponse_httpStatus = Lens.lens (\GetAppReplicationConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetAppReplicationConfigurationResponse' {} a -> s {httpStatus = a} :: GetAppReplicationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetAppReplicationConfigurationResponse
+  where
+  rnf GetAppReplicationConfigurationResponse' {..} =
+    Prelude.rnf serverGroupReplicationConfigurations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GetAppValidationConfiguration.hs b/gen/Amazonka/SMS/GetAppValidationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GetAppValidationConfiguration.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.SMS.GetAppValidationConfiguration
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a configuration for validating an
+-- application.
+module Amazonka.SMS.GetAppValidationConfiguration
+  ( -- * Creating a Request
+    GetAppValidationConfiguration (..),
+    newGetAppValidationConfiguration,
+
+    -- * Request Lenses
+    getAppValidationConfiguration_appId,
+
+    -- * Destructuring the Response
+    GetAppValidationConfigurationResponse (..),
+    newGetAppValidationConfigurationResponse,
+
+    -- * Response Lenses
+    getAppValidationConfigurationResponse_appValidationConfigurations,
+    getAppValidationConfigurationResponse_serverGroupValidationConfigurations,
+    getAppValidationConfigurationResponse_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.SMS.Types
+
+-- | /See:/ 'newGetAppValidationConfiguration' smart constructor.
+data GetAppValidationConfiguration = GetAppValidationConfiguration'
+  { -- | The ID of the application.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppValidationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getAppValidationConfiguration_appId' - The ID of the application.
+newGetAppValidationConfiguration ::
+  -- | 'appId'
+  Prelude.Text ->
+  GetAppValidationConfiguration
+newGetAppValidationConfiguration pAppId_ =
+  GetAppValidationConfiguration' {appId = pAppId_}
+
+-- | The ID of the application.
+getAppValidationConfiguration_appId :: Lens.Lens' GetAppValidationConfiguration Prelude.Text
+getAppValidationConfiguration_appId = Lens.lens (\GetAppValidationConfiguration' {appId} -> appId) (\s@GetAppValidationConfiguration' {} a -> s {appId = a} :: GetAppValidationConfiguration)
+
+instance
+  Core.AWSRequest
+    GetAppValidationConfiguration
+  where
+  type
+    AWSResponse GetAppValidationConfiguration =
+      GetAppValidationConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAppValidationConfigurationResponse'
+            Prelude.<$> ( x
+                            Data..?> "appValidationConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> ( x
+                            Data..?> "serverGroupValidationConfigurations"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    GetAppValidationConfiguration
+  where
+  hashWithSalt _salt GetAppValidationConfiguration' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData GetAppValidationConfiguration where
+  rnf GetAppValidationConfiguration' {..} =
+    Prelude.rnf appId
+
+instance Data.ToHeaders GetAppValidationConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GetAppValidationConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAppValidationConfiguration where
+  toJSON GetAppValidationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("appId" Data..= appId)]
+      )
+
+instance Data.ToPath GetAppValidationConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAppValidationConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAppValidationConfigurationResponse' smart constructor.
+data GetAppValidationConfigurationResponse = GetAppValidationConfigurationResponse'
+  { -- | The configuration for application validation.
+    appValidationConfigurations :: Prelude.Maybe [AppValidationConfiguration],
+    -- | The configuration for instance validation.
+    serverGroupValidationConfigurations :: Prelude.Maybe [ServerGroupValidationConfiguration],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppValidationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appValidationConfigurations', 'getAppValidationConfigurationResponse_appValidationConfigurations' - The configuration for application validation.
+--
+-- 'serverGroupValidationConfigurations', 'getAppValidationConfigurationResponse_serverGroupValidationConfigurations' - The configuration for instance validation.
+--
+-- 'httpStatus', 'getAppValidationConfigurationResponse_httpStatus' - The response's http status code.
+newGetAppValidationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAppValidationConfigurationResponse
+newGetAppValidationConfigurationResponse pHttpStatus_ =
+  GetAppValidationConfigurationResponse'
+    { appValidationConfigurations =
+        Prelude.Nothing,
+      serverGroupValidationConfigurations =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The configuration for application validation.
+getAppValidationConfigurationResponse_appValidationConfigurations :: Lens.Lens' GetAppValidationConfigurationResponse (Prelude.Maybe [AppValidationConfiguration])
+getAppValidationConfigurationResponse_appValidationConfigurations = Lens.lens (\GetAppValidationConfigurationResponse' {appValidationConfigurations} -> appValidationConfigurations) (\s@GetAppValidationConfigurationResponse' {} a -> s {appValidationConfigurations = a} :: GetAppValidationConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration for instance validation.
+getAppValidationConfigurationResponse_serverGroupValidationConfigurations :: Lens.Lens' GetAppValidationConfigurationResponse (Prelude.Maybe [ServerGroupValidationConfiguration])
+getAppValidationConfigurationResponse_serverGroupValidationConfigurations = Lens.lens (\GetAppValidationConfigurationResponse' {serverGroupValidationConfigurations} -> serverGroupValidationConfigurations) (\s@GetAppValidationConfigurationResponse' {} a -> s {serverGroupValidationConfigurations = a} :: GetAppValidationConfigurationResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getAppValidationConfigurationResponse_httpStatus :: Lens.Lens' GetAppValidationConfigurationResponse Prelude.Int
+getAppValidationConfigurationResponse_httpStatus = Lens.lens (\GetAppValidationConfigurationResponse' {httpStatus} -> httpStatus) (\s@GetAppValidationConfigurationResponse' {} a -> s {httpStatus = a} :: GetAppValidationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    GetAppValidationConfigurationResponse
+  where
+  rnf GetAppValidationConfigurationResponse' {..} =
+    Prelude.rnf appValidationConfigurations
+      `Prelude.seq` Prelude.rnf serverGroupValidationConfigurations
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GetAppValidationOutput.hs b/gen/Amazonka/SMS/GetAppValidationOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GetAppValidationOutput.hs
@@ -0,0 +1,174 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.GetAppValidationOutput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves output from validating an application.
+module Amazonka.SMS.GetAppValidationOutput
+  ( -- * Creating a Request
+    GetAppValidationOutput (..),
+    newGetAppValidationOutput,
+
+    -- * Request Lenses
+    getAppValidationOutput_appId,
+
+    -- * Destructuring the Response
+    GetAppValidationOutputResponse (..),
+    newGetAppValidationOutputResponse,
+
+    -- * Response Lenses
+    getAppValidationOutputResponse_validationOutputList,
+    getAppValidationOutputResponse_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.SMS.Types
+
+-- | /See:/ 'newGetAppValidationOutput' smart constructor.
+data GetAppValidationOutput = GetAppValidationOutput'
+  { -- | The ID of the application.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppValidationOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'getAppValidationOutput_appId' - The ID of the application.
+newGetAppValidationOutput ::
+  -- | 'appId'
+  Prelude.Text ->
+  GetAppValidationOutput
+newGetAppValidationOutput pAppId_ =
+  GetAppValidationOutput' {appId = pAppId_}
+
+-- | The ID of the application.
+getAppValidationOutput_appId :: Lens.Lens' GetAppValidationOutput Prelude.Text
+getAppValidationOutput_appId = Lens.lens (\GetAppValidationOutput' {appId} -> appId) (\s@GetAppValidationOutput' {} a -> s {appId = a} :: GetAppValidationOutput)
+
+instance Core.AWSRequest GetAppValidationOutput where
+  type
+    AWSResponse GetAppValidationOutput =
+      GetAppValidationOutputResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetAppValidationOutputResponse'
+            Prelude.<$> ( x
+                            Data..?> "validationOutputList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetAppValidationOutput where
+  hashWithSalt _salt GetAppValidationOutput' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData GetAppValidationOutput where
+  rnf GetAppValidationOutput' {..} = Prelude.rnf appId
+
+instance Data.ToHeaders GetAppValidationOutput where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GetAppValidationOutput" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetAppValidationOutput where
+  toJSON GetAppValidationOutput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [Prelude.Just ("appId" Data..= appId)]
+      )
+
+instance Data.ToPath GetAppValidationOutput where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetAppValidationOutput where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetAppValidationOutputResponse' smart constructor.
+data GetAppValidationOutputResponse = GetAppValidationOutputResponse'
+  { -- | The validation output.
+    validationOutputList :: Prelude.Maybe [ValidationOutput],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetAppValidationOutputResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'validationOutputList', 'getAppValidationOutputResponse_validationOutputList' - The validation output.
+--
+-- 'httpStatus', 'getAppValidationOutputResponse_httpStatus' - The response's http status code.
+newGetAppValidationOutputResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetAppValidationOutputResponse
+newGetAppValidationOutputResponse pHttpStatus_ =
+  GetAppValidationOutputResponse'
+    { validationOutputList =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The validation output.
+getAppValidationOutputResponse_validationOutputList :: Lens.Lens' GetAppValidationOutputResponse (Prelude.Maybe [ValidationOutput])
+getAppValidationOutputResponse_validationOutputList = Lens.lens (\GetAppValidationOutputResponse' {validationOutputList} -> validationOutputList) (\s@GetAppValidationOutputResponse' {} a -> s {validationOutputList = a} :: GetAppValidationOutputResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getAppValidationOutputResponse_httpStatus :: Lens.Lens' GetAppValidationOutputResponse Prelude.Int
+getAppValidationOutputResponse_httpStatus = Lens.lens (\GetAppValidationOutputResponse' {httpStatus} -> httpStatus) (\s@GetAppValidationOutputResponse' {} a -> s {httpStatus = a} :: GetAppValidationOutputResponse)
+
+instance
+  Prelude.NFData
+    GetAppValidationOutputResponse
+  where
+  rnf GetAppValidationOutputResponse' {..} =
+    Prelude.rnf validationOutputList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GetConnectors.hs b/gen/Amazonka/SMS/GetConnectors.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GetConnectors.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.GetConnectors
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the connectors registered with the Server Migration Service.
+--
+-- This operation returns paginated results.
+module Amazonka.SMS.GetConnectors
+  ( -- * Creating a Request
+    GetConnectors (..),
+    newGetConnectors,
+
+    -- * Request Lenses
+    getConnectors_maxResults,
+    getConnectors_nextToken,
+
+    -- * Destructuring the Response
+    GetConnectorsResponse (..),
+    newGetConnectorsResponse,
+
+    -- * Response Lenses
+    getConnectorsResponse_connectorList,
+    getConnectorsResponse_nextToken,
+    getConnectorsResponse_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.SMS.Types
+
+-- | /See:/ 'newGetConnectors' smart constructor.
+data GetConnectors = GetConnectors'
+  { -- | The maximum number of results to return in a single call. The default
+    -- value is 50. To retrieve the remaining results, make another call with
+    -- the returned @NextToken@ value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetConnectors' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getConnectors_maxResults' - The maximum number of results to return in a single call. The default
+-- value is 50. To retrieve the remaining results, make another call with
+-- the returned @NextToken@ value.
+--
+-- 'nextToken', 'getConnectors_nextToken' - The token for the next set of results.
+newGetConnectors ::
+  GetConnectors
+newGetConnectors =
+  GetConnectors'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in a single call. The default
+-- value is 50. To retrieve the remaining results, make another call with
+-- the returned @NextToken@ value.
+getConnectors_maxResults :: Lens.Lens' GetConnectors (Prelude.Maybe Prelude.Int)
+getConnectors_maxResults = Lens.lens (\GetConnectors' {maxResults} -> maxResults) (\s@GetConnectors' {} a -> s {maxResults = a} :: GetConnectors)
+
+-- | The token for the next set of results.
+getConnectors_nextToken :: Lens.Lens' GetConnectors (Prelude.Maybe Prelude.Text)
+getConnectors_nextToken = Lens.lens (\GetConnectors' {nextToken} -> nextToken) (\s@GetConnectors' {} a -> s {nextToken = a} :: GetConnectors)
+
+instance Core.AWSPager GetConnectors where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getConnectorsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getConnectorsResponse_connectorList
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getConnectors_nextToken
+          Lens..~ rs
+          Lens.^? getConnectorsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetConnectors where
+  type
+    AWSResponse GetConnectors =
+      GetConnectorsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetConnectorsResponse'
+            Prelude.<$> (x Data..?> "connectorList" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetConnectors where
+  hashWithSalt _salt GetConnectors' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData GetConnectors where
+  rnf GetConnectors' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders GetConnectors where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GetConnectors" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetConnectors where
+  toJSON GetConnectors' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath GetConnectors where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetConnectors where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetConnectorsResponse' smart constructor.
+data GetConnectorsResponse = GetConnectorsResponse'
+  { -- | Information about the registered connectors.
+    connectorList :: Prelude.Maybe [Connector],
+    -- | The token required to retrieve the next set of results. This value is
+    -- null when there are no more results to return.
+    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 'GetConnectorsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'connectorList', 'getConnectorsResponse_connectorList' - Information about the registered connectors.
+--
+-- 'nextToken', 'getConnectorsResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- null when there are no more results to return.
+--
+-- 'httpStatus', 'getConnectorsResponse_httpStatus' - The response's http status code.
+newGetConnectorsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetConnectorsResponse
+newGetConnectorsResponse pHttpStatus_ =
+  GetConnectorsResponse'
+    { connectorList =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | Information about the registered connectors.
+getConnectorsResponse_connectorList :: Lens.Lens' GetConnectorsResponse (Prelude.Maybe [Connector])
+getConnectorsResponse_connectorList = Lens.lens (\GetConnectorsResponse' {connectorList} -> connectorList) (\s@GetConnectorsResponse' {} a -> s {connectorList = a} :: GetConnectorsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token required to retrieve the next set of results. This value is
+-- null when there are no more results to return.
+getConnectorsResponse_nextToken :: Lens.Lens' GetConnectorsResponse (Prelude.Maybe Prelude.Text)
+getConnectorsResponse_nextToken = Lens.lens (\GetConnectorsResponse' {nextToken} -> nextToken) (\s@GetConnectorsResponse' {} a -> s {nextToken = a} :: GetConnectorsResponse)
+
+-- | The response's http status code.
+getConnectorsResponse_httpStatus :: Lens.Lens' GetConnectorsResponse Prelude.Int
+getConnectorsResponse_httpStatus = Lens.lens (\GetConnectorsResponse' {httpStatus} -> httpStatus) (\s@GetConnectorsResponse' {} a -> s {httpStatus = a} :: GetConnectorsResponse)
+
+instance Prelude.NFData GetConnectorsResponse where
+  rnf GetConnectorsResponse' {..} =
+    Prelude.rnf connectorList
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GetReplicationJobs.hs b/gen/Amazonka/SMS/GetReplicationJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GetReplicationJobs.hs
@@ -0,0 +1,246 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.GetReplicationJobs
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the specified replication job or all of your replication jobs.
+--
+-- This operation returns paginated results.
+module Amazonka.SMS.GetReplicationJobs
+  ( -- * Creating a Request
+    GetReplicationJobs (..),
+    newGetReplicationJobs,
+
+    -- * Request Lenses
+    getReplicationJobs_maxResults,
+    getReplicationJobs_nextToken,
+    getReplicationJobs_replicationJobId,
+
+    -- * Destructuring the Response
+    GetReplicationJobsResponse (..),
+    newGetReplicationJobsResponse,
+
+    -- * Response Lenses
+    getReplicationJobsResponse_nextToken,
+    getReplicationJobsResponse_replicationJobList,
+    getReplicationJobsResponse_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.SMS.Types
+
+-- | /See:/ 'newGetReplicationJobs' smart constructor.
+data GetReplicationJobs = GetReplicationJobs'
+  { -- | The maximum number of results to return in a single call. The default
+    -- value is 50. To retrieve the remaining results, make another call with
+    -- the returned @NextToken@ value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the replication job.
+    replicationJobId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReplicationJobs' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getReplicationJobs_maxResults' - The maximum number of results to return in a single call. The default
+-- value is 50. To retrieve the remaining results, make another call with
+-- the returned @NextToken@ value.
+--
+-- 'nextToken', 'getReplicationJobs_nextToken' - The token for the next set of results.
+--
+-- 'replicationJobId', 'getReplicationJobs_replicationJobId' - The ID of the replication job.
+newGetReplicationJobs ::
+  GetReplicationJobs
+newGetReplicationJobs =
+  GetReplicationJobs'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      replicationJobId = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in a single call. The default
+-- value is 50. To retrieve the remaining results, make another call with
+-- the returned @NextToken@ value.
+getReplicationJobs_maxResults :: Lens.Lens' GetReplicationJobs (Prelude.Maybe Prelude.Int)
+getReplicationJobs_maxResults = Lens.lens (\GetReplicationJobs' {maxResults} -> maxResults) (\s@GetReplicationJobs' {} a -> s {maxResults = a} :: GetReplicationJobs)
+
+-- | The token for the next set of results.
+getReplicationJobs_nextToken :: Lens.Lens' GetReplicationJobs (Prelude.Maybe Prelude.Text)
+getReplicationJobs_nextToken = Lens.lens (\GetReplicationJobs' {nextToken} -> nextToken) (\s@GetReplicationJobs' {} a -> s {nextToken = a} :: GetReplicationJobs)
+
+-- | The ID of the replication job.
+getReplicationJobs_replicationJobId :: Lens.Lens' GetReplicationJobs (Prelude.Maybe Prelude.Text)
+getReplicationJobs_replicationJobId = Lens.lens (\GetReplicationJobs' {replicationJobId} -> replicationJobId) (\s@GetReplicationJobs' {} a -> s {replicationJobId = a} :: GetReplicationJobs)
+
+instance Core.AWSPager GetReplicationJobs where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getReplicationJobsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getReplicationJobsResponse_replicationJobList
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getReplicationJobs_nextToken
+          Lens..~ rs
+          Lens.^? getReplicationJobsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetReplicationJobs where
+  type
+    AWSResponse GetReplicationJobs =
+      GetReplicationJobsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetReplicationJobsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> ( x
+                            Data..?> "replicationJobList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetReplicationJobs where
+  hashWithSalt _salt GetReplicationJobs' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` replicationJobId
+
+instance Prelude.NFData GetReplicationJobs where
+  rnf GetReplicationJobs' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf replicationJobId
+
+instance Data.ToHeaders GetReplicationJobs where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GetReplicationJobs" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetReplicationJobs where
+  toJSON GetReplicationJobs' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("replicationJobId" Data..=)
+              Prelude.<$> replicationJobId
+          ]
+      )
+
+instance Data.ToPath GetReplicationJobs where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetReplicationJobs where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetReplicationJobsResponse' smart constructor.
+data GetReplicationJobsResponse = GetReplicationJobsResponse'
+  { -- | The token required to retrieve the next set of results. This value is
+    -- null when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the replication jobs.
+    replicationJobList :: Prelude.Maybe [ReplicationJob],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReplicationJobsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getReplicationJobsResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- null when there are no more results to return.
+--
+-- 'replicationJobList', 'getReplicationJobsResponse_replicationJobList' - Information about the replication jobs.
+--
+-- 'httpStatus', 'getReplicationJobsResponse_httpStatus' - The response's http status code.
+newGetReplicationJobsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetReplicationJobsResponse
+newGetReplicationJobsResponse pHttpStatus_ =
+  GetReplicationJobsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      replicationJobList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token required to retrieve the next set of results. This value is
+-- null when there are no more results to return.
+getReplicationJobsResponse_nextToken :: Lens.Lens' GetReplicationJobsResponse (Prelude.Maybe Prelude.Text)
+getReplicationJobsResponse_nextToken = Lens.lens (\GetReplicationJobsResponse' {nextToken} -> nextToken) (\s@GetReplicationJobsResponse' {} a -> s {nextToken = a} :: GetReplicationJobsResponse)
+
+-- | Information about the replication jobs.
+getReplicationJobsResponse_replicationJobList :: Lens.Lens' GetReplicationJobsResponse (Prelude.Maybe [ReplicationJob])
+getReplicationJobsResponse_replicationJobList = Lens.lens (\GetReplicationJobsResponse' {replicationJobList} -> replicationJobList) (\s@GetReplicationJobsResponse' {} a -> s {replicationJobList = a} :: GetReplicationJobsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getReplicationJobsResponse_httpStatus :: Lens.Lens' GetReplicationJobsResponse Prelude.Int
+getReplicationJobsResponse_httpStatus = Lens.lens (\GetReplicationJobsResponse' {httpStatus} -> httpStatus) (\s@GetReplicationJobsResponse' {} a -> s {httpStatus = a} :: GetReplicationJobsResponse)
+
+instance Prelude.NFData GetReplicationJobsResponse where
+  rnf GetReplicationJobsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf replicationJobList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GetReplicationRuns.hs b/gen/Amazonka/SMS/GetReplicationRuns.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GetReplicationRuns.hs
@@ -0,0 +1,260 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.GetReplicationRuns
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the replication runs for the specified replication job.
+--
+-- This operation returns paginated results.
+module Amazonka.SMS.GetReplicationRuns
+  ( -- * Creating a Request
+    GetReplicationRuns (..),
+    newGetReplicationRuns,
+
+    -- * Request Lenses
+    getReplicationRuns_maxResults,
+    getReplicationRuns_nextToken,
+    getReplicationRuns_replicationJobId,
+
+    -- * Destructuring the Response
+    GetReplicationRunsResponse (..),
+    newGetReplicationRunsResponse,
+
+    -- * Response Lenses
+    getReplicationRunsResponse_nextToken,
+    getReplicationRunsResponse_replicationJob,
+    getReplicationRunsResponse_replicationRunList,
+    getReplicationRunsResponse_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.SMS.Types
+
+-- | /See:/ 'newGetReplicationRuns' smart constructor.
+data GetReplicationRuns = GetReplicationRuns'
+  { -- | The maximum number of results to return in a single call. The default
+    -- value is 50. To retrieve the remaining results, make another call with
+    -- the returned @NextToken@ value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the replication job.
+    replicationJobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReplicationRuns' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getReplicationRuns_maxResults' - The maximum number of results to return in a single call. The default
+-- value is 50. To retrieve the remaining results, make another call with
+-- the returned @NextToken@ value.
+--
+-- 'nextToken', 'getReplicationRuns_nextToken' - The token for the next set of results.
+--
+-- 'replicationJobId', 'getReplicationRuns_replicationJobId' - The ID of the replication job.
+newGetReplicationRuns ::
+  -- | 'replicationJobId'
+  Prelude.Text ->
+  GetReplicationRuns
+newGetReplicationRuns pReplicationJobId_ =
+  GetReplicationRuns'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      replicationJobId = pReplicationJobId_
+    }
+
+-- | The maximum number of results to return in a single call. The default
+-- value is 50. To retrieve the remaining results, make another call with
+-- the returned @NextToken@ value.
+getReplicationRuns_maxResults :: Lens.Lens' GetReplicationRuns (Prelude.Maybe Prelude.Int)
+getReplicationRuns_maxResults = Lens.lens (\GetReplicationRuns' {maxResults} -> maxResults) (\s@GetReplicationRuns' {} a -> s {maxResults = a} :: GetReplicationRuns)
+
+-- | The token for the next set of results.
+getReplicationRuns_nextToken :: Lens.Lens' GetReplicationRuns (Prelude.Maybe Prelude.Text)
+getReplicationRuns_nextToken = Lens.lens (\GetReplicationRuns' {nextToken} -> nextToken) (\s@GetReplicationRuns' {} a -> s {nextToken = a} :: GetReplicationRuns)
+
+-- | The ID of the replication job.
+getReplicationRuns_replicationJobId :: Lens.Lens' GetReplicationRuns Prelude.Text
+getReplicationRuns_replicationJobId = Lens.lens (\GetReplicationRuns' {replicationJobId} -> replicationJobId) (\s@GetReplicationRuns' {} a -> s {replicationJobId = a} :: GetReplicationRuns)
+
+instance Core.AWSPager GetReplicationRuns where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getReplicationRunsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getReplicationRunsResponse_replicationRunList
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getReplicationRuns_nextToken
+          Lens..~ rs
+          Lens.^? getReplicationRunsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetReplicationRuns where
+  type
+    AWSResponse GetReplicationRuns =
+      GetReplicationRunsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetReplicationRunsResponse'
+            Prelude.<$> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "replicationJob")
+            Prelude.<*> ( x
+                            Data..?> "replicationRunList"
+                            Core..!@ Prelude.mempty
+                        )
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetReplicationRuns where
+  hashWithSalt _salt GetReplicationRuns' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` replicationJobId
+
+instance Prelude.NFData GetReplicationRuns where
+  rnf GetReplicationRuns' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf replicationJobId
+
+instance Data.ToHeaders GetReplicationRuns where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GetReplicationRuns" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetReplicationRuns where
+  toJSON GetReplicationRuns' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            Prelude.Just
+              ("replicationJobId" Data..= replicationJobId)
+          ]
+      )
+
+instance Data.ToPath GetReplicationRuns where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetReplicationRuns where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetReplicationRunsResponse' smart constructor.
+data GetReplicationRunsResponse = GetReplicationRunsResponse'
+  { -- | The token required to retrieve the next set of results. This value is
+    -- null when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | Information about the replication job.
+    replicationJob :: Prelude.Maybe ReplicationJob,
+    -- | Information about the replication runs.
+    replicationRunList :: Prelude.Maybe [ReplicationRun],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetReplicationRunsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'nextToken', 'getReplicationRunsResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- null when there are no more results to return.
+--
+-- 'replicationJob', 'getReplicationRunsResponse_replicationJob' - Information about the replication job.
+--
+-- 'replicationRunList', 'getReplicationRunsResponse_replicationRunList' - Information about the replication runs.
+--
+-- 'httpStatus', 'getReplicationRunsResponse_httpStatus' - The response's http status code.
+newGetReplicationRunsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetReplicationRunsResponse
+newGetReplicationRunsResponse pHttpStatus_ =
+  GetReplicationRunsResponse'
+    { nextToken =
+        Prelude.Nothing,
+      replicationJob = Prelude.Nothing,
+      replicationRunList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The token required to retrieve the next set of results. This value is
+-- null when there are no more results to return.
+getReplicationRunsResponse_nextToken :: Lens.Lens' GetReplicationRunsResponse (Prelude.Maybe Prelude.Text)
+getReplicationRunsResponse_nextToken = Lens.lens (\GetReplicationRunsResponse' {nextToken} -> nextToken) (\s@GetReplicationRunsResponse' {} a -> s {nextToken = a} :: GetReplicationRunsResponse)
+
+-- | Information about the replication job.
+getReplicationRunsResponse_replicationJob :: Lens.Lens' GetReplicationRunsResponse (Prelude.Maybe ReplicationJob)
+getReplicationRunsResponse_replicationJob = Lens.lens (\GetReplicationRunsResponse' {replicationJob} -> replicationJob) (\s@GetReplicationRunsResponse' {} a -> s {replicationJob = a} :: GetReplicationRunsResponse)
+
+-- | Information about the replication runs.
+getReplicationRunsResponse_replicationRunList :: Lens.Lens' GetReplicationRunsResponse (Prelude.Maybe [ReplicationRun])
+getReplicationRunsResponse_replicationRunList = Lens.lens (\GetReplicationRunsResponse' {replicationRunList} -> replicationRunList) (\s@GetReplicationRunsResponse' {} a -> s {replicationRunList = a} :: GetReplicationRunsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getReplicationRunsResponse_httpStatus :: Lens.Lens' GetReplicationRunsResponse Prelude.Int
+getReplicationRunsResponse_httpStatus = Lens.lens (\GetReplicationRunsResponse' {httpStatus} -> httpStatus) (\s@GetReplicationRunsResponse' {} a -> s {httpStatus = a} :: GetReplicationRunsResponse)
+
+instance Prelude.NFData GetReplicationRunsResponse where
+  rnf GetReplicationRunsResponse' {..} =
+    Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf replicationJob
+      `Prelude.seq` Prelude.rnf replicationRunList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/GetServers.hs b/gen/Amazonka/SMS/GetServers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/GetServers.hs
@@ -0,0 +1,268 @@
+{-# 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.SMS.GetServers
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Describes the servers in your server catalog.
+--
+-- Before you can describe your servers, you must import them using
+-- ImportServerCatalog.
+--
+-- This operation returns paginated results.
+module Amazonka.SMS.GetServers
+  ( -- * Creating a Request
+    GetServers (..),
+    newGetServers,
+
+    -- * Request Lenses
+    getServers_maxResults,
+    getServers_nextToken,
+    getServers_vmServerAddressList,
+
+    -- * Destructuring the Response
+    GetServersResponse (..),
+    newGetServersResponse,
+
+    -- * Response Lenses
+    getServersResponse_lastModifiedOn,
+    getServersResponse_nextToken,
+    getServersResponse_serverCatalogStatus,
+    getServersResponse_serverList,
+    getServersResponse_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.SMS.Types
+
+-- | /See:/ 'newGetServers' smart constructor.
+data GetServers = GetServers'
+  { -- | The maximum number of results to return in a single call. The default
+    -- value is 50. To retrieve the remaining results, make another call with
+    -- the returned @NextToken@ value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The server addresses.
+    vmServerAddressList :: Prelude.Maybe [VmServerAddress]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetServers' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'getServers_maxResults' - The maximum number of results to return in a single call. The default
+-- value is 50. To retrieve the remaining results, make another call with
+-- the returned @NextToken@ value.
+--
+-- 'nextToken', 'getServers_nextToken' - The token for the next set of results.
+--
+-- 'vmServerAddressList', 'getServers_vmServerAddressList' - The server addresses.
+newGetServers ::
+  GetServers
+newGetServers =
+  GetServers'
+    { maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      vmServerAddressList = Prelude.Nothing
+    }
+
+-- | The maximum number of results to return in a single call. The default
+-- value is 50. To retrieve the remaining results, make another call with
+-- the returned @NextToken@ value.
+getServers_maxResults :: Lens.Lens' GetServers (Prelude.Maybe Prelude.Int)
+getServers_maxResults = Lens.lens (\GetServers' {maxResults} -> maxResults) (\s@GetServers' {} a -> s {maxResults = a} :: GetServers)
+
+-- | The token for the next set of results.
+getServers_nextToken :: Lens.Lens' GetServers (Prelude.Maybe Prelude.Text)
+getServers_nextToken = Lens.lens (\GetServers' {nextToken} -> nextToken) (\s@GetServers' {} a -> s {nextToken = a} :: GetServers)
+
+-- | The server addresses.
+getServers_vmServerAddressList :: Lens.Lens' GetServers (Prelude.Maybe [VmServerAddress])
+getServers_vmServerAddressList = Lens.lens (\GetServers' {vmServerAddressList} -> vmServerAddressList) (\s@GetServers' {} a -> s {vmServerAddressList = a} :: GetServers) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSPager GetServers where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? getServersResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? getServersResponse_serverList
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& getServers_nextToken
+          Lens..~ rs
+          Lens.^? getServersResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest GetServers where
+  type AWSResponse GetServers = GetServersResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          GetServersResponse'
+            Prelude.<$> (x Data..?> "lastModifiedOn")
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (x Data..?> "serverCatalogStatus")
+            Prelude.<*> (x Data..?> "serverList" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable GetServers where
+  hashWithSalt _salt GetServers' {..} =
+    _salt
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+      `Prelude.hashWithSalt` vmServerAddressList
+
+instance Prelude.NFData GetServers where
+  rnf GetServers' {..} =
+    Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf vmServerAddressList
+
+instance Data.ToHeaders GetServers where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.GetServers" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON GetServers where
+  toJSON GetServers' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken,
+            ("vmServerAddressList" Data..=)
+              Prelude.<$> vmServerAddressList
+          ]
+      )
+
+instance Data.ToPath GetServers where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery GetServers where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newGetServersResponse' smart constructor.
+data GetServersResponse = GetServersResponse'
+  { -- | The time when the server was last modified.
+    lastModifiedOn :: Prelude.Maybe Data.POSIX,
+    -- | The token required to retrieve the next set of results. This value is
+    -- null when there are no more results to return.
+    nextToken :: Prelude.Maybe Prelude.Text,
+    -- | The status of the server catalog.
+    serverCatalogStatus :: Prelude.Maybe ServerCatalogStatus,
+    -- | Information about the servers.
+    serverList :: Prelude.Maybe [Server],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'GetServersResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'lastModifiedOn', 'getServersResponse_lastModifiedOn' - The time when the server was last modified.
+--
+-- 'nextToken', 'getServersResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- null when there are no more results to return.
+--
+-- 'serverCatalogStatus', 'getServersResponse_serverCatalogStatus' - The status of the server catalog.
+--
+-- 'serverList', 'getServersResponse_serverList' - Information about the servers.
+--
+-- 'httpStatus', 'getServersResponse_httpStatus' - The response's http status code.
+newGetServersResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  GetServersResponse
+newGetServersResponse pHttpStatus_ =
+  GetServersResponse'
+    { lastModifiedOn =
+        Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      serverCatalogStatus = Prelude.Nothing,
+      serverList = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The time when the server was last modified.
+getServersResponse_lastModifiedOn :: Lens.Lens' GetServersResponse (Prelude.Maybe Prelude.UTCTime)
+getServersResponse_lastModifiedOn = Lens.lens (\GetServersResponse' {lastModifiedOn} -> lastModifiedOn) (\s@GetServersResponse' {} a -> s {lastModifiedOn = a} :: GetServersResponse) Prelude.. Lens.mapping Data._Time
+
+-- | The token required to retrieve the next set of results. This value is
+-- null when there are no more results to return.
+getServersResponse_nextToken :: Lens.Lens' GetServersResponse (Prelude.Maybe Prelude.Text)
+getServersResponse_nextToken = Lens.lens (\GetServersResponse' {nextToken} -> nextToken) (\s@GetServersResponse' {} a -> s {nextToken = a} :: GetServersResponse)
+
+-- | The status of the server catalog.
+getServersResponse_serverCatalogStatus :: Lens.Lens' GetServersResponse (Prelude.Maybe ServerCatalogStatus)
+getServersResponse_serverCatalogStatus = Lens.lens (\GetServersResponse' {serverCatalogStatus} -> serverCatalogStatus) (\s@GetServersResponse' {} a -> s {serverCatalogStatus = a} :: GetServersResponse)
+
+-- | Information about the servers.
+getServersResponse_serverList :: Lens.Lens' GetServersResponse (Prelude.Maybe [Server])
+getServersResponse_serverList = Lens.lens (\GetServersResponse' {serverList} -> serverList) (\s@GetServersResponse' {} a -> s {serverList = a} :: GetServersResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+getServersResponse_httpStatus :: Lens.Lens' GetServersResponse Prelude.Int
+getServersResponse_httpStatus = Lens.lens (\GetServersResponse' {httpStatus} -> httpStatus) (\s@GetServersResponse' {} a -> s {httpStatus = a} :: GetServersResponse)
+
+instance Prelude.NFData GetServersResponse where
+  rnf GetServersResponse' {..} =
+    Prelude.rnf lastModifiedOn
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf serverCatalogStatus
+      `Prelude.seq` Prelude.rnf serverList
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/ImportAppCatalog.hs b/gen/Amazonka/SMS/ImportAppCatalog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/ImportAppCatalog.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.ImportAppCatalog
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Allows application import from Migration Hub.
+module Amazonka.SMS.ImportAppCatalog
+  ( -- * Creating a Request
+    ImportAppCatalog (..),
+    newImportAppCatalog,
+
+    -- * Request Lenses
+    importAppCatalog_roleName,
+
+    -- * Destructuring the Response
+    ImportAppCatalogResponse (..),
+    newImportAppCatalogResponse,
+
+    -- * Response Lenses
+    importAppCatalogResponse_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.SMS.Types
+
+-- | /See:/ 'newImportAppCatalog' smart constructor.
+data ImportAppCatalog = ImportAppCatalog'
+  { -- | The name of the service role. If you omit this parameter, we create a
+    -- service-linked role for Migration Hub in your account. Otherwise, the
+    -- role that you provide must have the
+    -- <https://docs.aws.amazon.com/migrationhub/latest/ug/new-customer-setup.html#sms-managed policy and trust policy>
+    -- described in the /Migration Hub User Guide/.
+    roleName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAppCatalog' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'roleName', 'importAppCatalog_roleName' - The name of the service role. If you omit this parameter, we create a
+-- service-linked role for Migration Hub in your account. Otherwise, the
+-- role that you provide must have the
+-- <https://docs.aws.amazon.com/migrationhub/latest/ug/new-customer-setup.html#sms-managed policy and trust policy>
+-- described in the /Migration Hub User Guide/.
+newImportAppCatalog ::
+  ImportAppCatalog
+newImportAppCatalog =
+  ImportAppCatalog' {roleName = Prelude.Nothing}
+
+-- | The name of the service role. If you omit this parameter, we create a
+-- service-linked role for Migration Hub in your account. Otherwise, the
+-- role that you provide must have the
+-- <https://docs.aws.amazon.com/migrationhub/latest/ug/new-customer-setup.html#sms-managed policy and trust policy>
+-- described in the /Migration Hub User Guide/.
+importAppCatalog_roleName :: Lens.Lens' ImportAppCatalog (Prelude.Maybe Prelude.Text)
+importAppCatalog_roleName = Lens.lens (\ImportAppCatalog' {roleName} -> roleName) (\s@ImportAppCatalog' {} a -> s {roleName = a} :: ImportAppCatalog)
+
+instance Core.AWSRequest ImportAppCatalog where
+  type
+    AWSResponse ImportAppCatalog =
+      ImportAppCatalogResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ImportAppCatalogResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportAppCatalog where
+  hashWithSalt _salt ImportAppCatalog' {..} =
+    _salt `Prelude.hashWithSalt` roleName
+
+instance Prelude.NFData ImportAppCatalog where
+  rnf ImportAppCatalog' {..} = Prelude.rnf roleName
+
+instance Data.ToHeaders ImportAppCatalog where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.ImportAppCatalog" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportAppCatalog where
+  toJSON ImportAppCatalog' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("roleName" Data..=) Prelude.<$> roleName]
+      )
+
+instance Data.ToPath ImportAppCatalog where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportAppCatalog where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newImportAppCatalogResponse' smart constructor.
+data ImportAppCatalogResponse = ImportAppCatalogResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportAppCatalogResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'importAppCatalogResponse_httpStatus' - The response's http status code.
+newImportAppCatalogResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportAppCatalogResponse
+newImportAppCatalogResponse pHttpStatus_ =
+  ImportAppCatalogResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+importAppCatalogResponse_httpStatus :: Lens.Lens' ImportAppCatalogResponse Prelude.Int
+importAppCatalogResponse_httpStatus = Lens.lens (\ImportAppCatalogResponse' {httpStatus} -> httpStatus) (\s@ImportAppCatalogResponse' {} a -> s {httpStatus = a} :: ImportAppCatalogResponse)
+
+instance Prelude.NFData ImportAppCatalogResponse where
+  rnf ImportAppCatalogResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/ImportServerCatalog.hs b/gen/Amazonka/SMS/ImportServerCatalog.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/ImportServerCatalog.hs
@@ -0,0 +1,140 @@
+{-# 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.SMS.ImportServerCatalog
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gathers a complete list of on-premises servers. Connectors must be
+-- installed and monitoring all servers to import.
+--
+-- This call returns immediately, but might take additional time to
+-- retrieve all the servers.
+module Amazonka.SMS.ImportServerCatalog
+  ( -- * Creating a Request
+    ImportServerCatalog (..),
+    newImportServerCatalog,
+
+    -- * Destructuring the Response
+    ImportServerCatalogResponse (..),
+    newImportServerCatalogResponse,
+
+    -- * Response Lenses
+    importServerCatalogResponse_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.SMS.Types
+
+-- | /See:/ 'newImportServerCatalog' smart constructor.
+data ImportServerCatalog = ImportServerCatalog'
+  {
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportServerCatalog' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+newImportServerCatalog ::
+  ImportServerCatalog
+newImportServerCatalog = ImportServerCatalog'
+
+instance Core.AWSRequest ImportServerCatalog where
+  type
+    AWSResponse ImportServerCatalog =
+      ImportServerCatalogResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          ImportServerCatalogResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ImportServerCatalog where
+  hashWithSalt _salt _ =
+    _salt `Prelude.hashWithSalt` ()
+
+instance Prelude.NFData ImportServerCatalog where
+  rnf _ = ()
+
+instance Data.ToHeaders ImportServerCatalog where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.ImportServerCatalog" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ImportServerCatalog where
+  toJSON = Prelude.const (Data.Object Prelude.mempty)
+
+instance Data.ToPath ImportServerCatalog where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ImportServerCatalog where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newImportServerCatalogResponse' smart constructor.
+data ImportServerCatalogResponse = ImportServerCatalogResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ImportServerCatalogResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'importServerCatalogResponse_httpStatus' - The response's http status code.
+newImportServerCatalogResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ImportServerCatalogResponse
+newImportServerCatalogResponse pHttpStatus_ =
+  ImportServerCatalogResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+importServerCatalogResponse_httpStatus :: Lens.Lens' ImportServerCatalogResponse Prelude.Int
+importServerCatalogResponse_httpStatus = Lens.lens (\ImportServerCatalogResponse' {httpStatus} -> httpStatus) (\s@ImportServerCatalogResponse' {} a -> s {httpStatus = a} :: ImportServerCatalogResponse)
+
+instance Prelude.NFData ImportServerCatalogResponse where
+  rnf ImportServerCatalogResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/LaunchApp.hs b/gen/Amazonka/SMS/LaunchApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/LaunchApp.hs
@@ -0,0 +1,147 @@
+{-# 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.SMS.LaunchApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Launches the specified application as a stack in CloudFormation.
+module Amazonka.SMS.LaunchApp
+  ( -- * Creating a Request
+    LaunchApp (..),
+    newLaunchApp,
+
+    -- * Request Lenses
+    launchApp_appId,
+
+    -- * Destructuring the Response
+    LaunchAppResponse (..),
+    newLaunchAppResponse,
+
+    -- * Response Lenses
+    launchAppResponse_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.SMS.Types
+
+-- | /See:/ 'newLaunchApp' smart constructor.
+data LaunchApp = LaunchApp'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchApp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'launchApp_appId' - The ID of the application.
+newLaunchApp ::
+  LaunchApp
+newLaunchApp = LaunchApp' {appId = Prelude.Nothing}
+
+-- | The ID of the application.
+launchApp_appId :: Lens.Lens' LaunchApp (Prelude.Maybe Prelude.Text)
+launchApp_appId = Lens.lens (\LaunchApp' {appId} -> appId) (\s@LaunchApp' {} a -> s {appId = a} :: LaunchApp)
+
+instance Core.AWSRequest LaunchApp where
+  type AWSResponse LaunchApp = LaunchAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          LaunchAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable LaunchApp where
+  hashWithSalt _salt LaunchApp' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData LaunchApp where
+  rnf LaunchApp' {..} = Prelude.rnf appId
+
+instance Data.ToHeaders LaunchApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.LaunchApp" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON LaunchApp where
+  toJSON LaunchApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("appId" Data..=) Prelude.<$> appId]
+      )
+
+instance Data.ToPath LaunchApp where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery LaunchApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newLaunchAppResponse' smart constructor.
+data LaunchAppResponse = LaunchAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchAppResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'launchAppResponse_httpStatus' - The response's http status code.
+newLaunchAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  LaunchAppResponse
+newLaunchAppResponse pHttpStatus_ =
+  LaunchAppResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+launchAppResponse_httpStatus :: Lens.Lens' LaunchAppResponse Prelude.Int
+launchAppResponse_httpStatus = Lens.lens (\LaunchAppResponse' {httpStatus} -> httpStatus) (\s@LaunchAppResponse' {} a -> s {httpStatus = a} :: LaunchAppResponse)
+
+instance Prelude.NFData LaunchAppResponse where
+  rnf LaunchAppResponse' {..} = Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/Lens.hs b/gen/Amazonka/SMS/Lens.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Lens.hs
@@ -0,0 +1,505 @@
+{-# 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.SMS.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.SMS.Lens
+  ( -- * Operations
+
+    -- ** CreateApp
+    createApp_clientToken,
+    createApp_description,
+    createApp_name,
+    createApp_roleName,
+    createApp_serverGroups,
+    createApp_tags,
+    createAppResponse_appSummary,
+    createAppResponse_serverGroups,
+    createAppResponse_tags,
+    createAppResponse_httpStatus,
+
+    -- ** CreateReplicationJob
+    createReplicationJob_description,
+    createReplicationJob_encrypted,
+    createReplicationJob_frequency,
+    createReplicationJob_kmsKeyId,
+    createReplicationJob_licenseType,
+    createReplicationJob_numberOfRecentAmisToKeep,
+    createReplicationJob_roleName,
+    createReplicationJob_runOnce,
+    createReplicationJob_serverId,
+    createReplicationJob_seedReplicationTime,
+    createReplicationJobResponse_replicationJobId,
+    createReplicationJobResponse_httpStatus,
+
+    -- ** DeleteApp
+    deleteApp_appId,
+    deleteApp_forceStopAppReplication,
+    deleteApp_forceTerminateApp,
+    deleteAppResponse_httpStatus,
+
+    -- ** DeleteAppLaunchConfiguration
+    deleteAppLaunchConfiguration_appId,
+    deleteAppLaunchConfigurationResponse_httpStatus,
+
+    -- ** DeleteAppReplicationConfiguration
+    deleteAppReplicationConfiguration_appId,
+    deleteAppReplicationConfigurationResponse_httpStatus,
+
+    -- ** DeleteAppValidationConfiguration
+    deleteAppValidationConfiguration_appId,
+    deleteAppValidationConfigurationResponse_httpStatus,
+
+    -- ** DeleteReplicationJob
+    deleteReplicationJob_replicationJobId,
+    deleteReplicationJobResponse_httpStatus,
+
+    -- ** DeleteServerCatalog
+    deleteServerCatalogResponse_httpStatus,
+
+    -- ** DisassociateConnector
+    disassociateConnector_connectorId,
+    disassociateConnectorResponse_httpStatus,
+
+    -- ** GenerateChangeSet
+    generateChangeSet_appId,
+    generateChangeSet_changesetFormat,
+    generateChangeSetResponse_s3Location,
+    generateChangeSetResponse_httpStatus,
+
+    -- ** GenerateTemplate
+    generateTemplate_appId,
+    generateTemplate_templateFormat,
+    generateTemplateResponse_s3Location,
+    generateTemplateResponse_httpStatus,
+
+    -- ** GetApp
+    getApp_appId,
+    getAppResponse_appSummary,
+    getAppResponse_serverGroups,
+    getAppResponse_tags,
+    getAppResponse_httpStatus,
+
+    -- ** GetAppLaunchConfiguration
+    getAppLaunchConfiguration_appId,
+    getAppLaunchConfigurationResponse_appId,
+    getAppLaunchConfigurationResponse_autoLaunch,
+    getAppLaunchConfigurationResponse_roleName,
+    getAppLaunchConfigurationResponse_serverGroupLaunchConfigurations,
+    getAppLaunchConfigurationResponse_httpStatus,
+
+    -- ** GetAppReplicationConfiguration
+    getAppReplicationConfiguration_appId,
+    getAppReplicationConfigurationResponse_serverGroupReplicationConfigurations,
+    getAppReplicationConfigurationResponse_httpStatus,
+
+    -- ** GetAppValidationConfiguration
+    getAppValidationConfiguration_appId,
+    getAppValidationConfigurationResponse_appValidationConfigurations,
+    getAppValidationConfigurationResponse_serverGroupValidationConfigurations,
+    getAppValidationConfigurationResponse_httpStatus,
+
+    -- ** GetAppValidationOutput
+    getAppValidationOutput_appId,
+    getAppValidationOutputResponse_validationOutputList,
+    getAppValidationOutputResponse_httpStatus,
+
+    -- ** GetConnectors
+    getConnectors_maxResults,
+    getConnectors_nextToken,
+    getConnectorsResponse_connectorList,
+    getConnectorsResponse_nextToken,
+    getConnectorsResponse_httpStatus,
+
+    -- ** GetReplicationJobs
+    getReplicationJobs_maxResults,
+    getReplicationJobs_nextToken,
+    getReplicationJobs_replicationJobId,
+    getReplicationJobsResponse_nextToken,
+    getReplicationJobsResponse_replicationJobList,
+    getReplicationJobsResponse_httpStatus,
+
+    -- ** GetReplicationRuns
+    getReplicationRuns_maxResults,
+    getReplicationRuns_nextToken,
+    getReplicationRuns_replicationJobId,
+    getReplicationRunsResponse_nextToken,
+    getReplicationRunsResponse_replicationJob,
+    getReplicationRunsResponse_replicationRunList,
+    getReplicationRunsResponse_httpStatus,
+
+    -- ** GetServers
+    getServers_maxResults,
+    getServers_nextToken,
+    getServers_vmServerAddressList,
+    getServersResponse_lastModifiedOn,
+    getServersResponse_nextToken,
+    getServersResponse_serverCatalogStatus,
+    getServersResponse_serverList,
+    getServersResponse_httpStatus,
+
+    -- ** ImportAppCatalog
+    importAppCatalog_roleName,
+    importAppCatalogResponse_httpStatus,
+
+    -- ** ImportServerCatalog
+    importServerCatalogResponse_httpStatus,
+
+    -- ** LaunchApp
+    launchApp_appId,
+    launchAppResponse_httpStatus,
+
+    -- ** ListApps
+    listApps_appIds,
+    listApps_maxResults,
+    listApps_nextToken,
+    listAppsResponse_apps,
+    listAppsResponse_nextToken,
+    listAppsResponse_httpStatus,
+
+    -- ** NotifyAppValidationOutput
+    notifyAppValidationOutput_notificationContext,
+    notifyAppValidationOutput_appId,
+    notifyAppValidationOutputResponse_httpStatus,
+
+    -- ** PutAppLaunchConfiguration
+    putAppLaunchConfiguration_appId,
+    putAppLaunchConfiguration_autoLaunch,
+    putAppLaunchConfiguration_roleName,
+    putAppLaunchConfiguration_serverGroupLaunchConfigurations,
+    putAppLaunchConfigurationResponse_httpStatus,
+
+    -- ** PutAppReplicationConfiguration
+    putAppReplicationConfiguration_appId,
+    putAppReplicationConfiguration_serverGroupReplicationConfigurations,
+    putAppReplicationConfigurationResponse_httpStatus,
+
+    -- ** PutAppValidationConfiguration
+    putAppValidationConfiguration_appValidationConfigurations,
+    putAppValidationConfiguration_serverGroupValidationConfigurations,
+    putAppValidationConfiguration_appId,
+    putAppValidationConfigurationResponse_httpStatus,
+
+    -- ** StartAppReplication
+    startAppReplication_appId,
+    startAppReplicationResponse_httpStatus,
+
+    -- ** StartOnDemandAppReplication
+    startOnDemandAppReplication_description,
+    startOnDemandAppReplication_appId,
+    startOnDemandAppReplicationResponse_httpStatus,
+
+    -- ** StartOnDemandReplicationRun
+    startOnDemandReplicationRun_description,
+    startOnDemandReplicationRun_replicationJobId,
+    startOnDemandReplicationRunResponse_replicationRunId,
+    startOnDemandReplicationRunResponse_httpStatus,
+
+    -- ** StopAppReplication
+    stopAppReplication_appId,
+    stopAppReplicationResponse_httpStatus,
+
+    -- ** TerminateApp
+    terminateApp_appId,
+    terminateAppResponse_httpStatus,
+
+    -- ** UpdateApp
+    updateApp_appId,
+    updateApp_description,
+    updateApp_name,
+    updateApp_roleName,
+    updateApp_serverGroups,
+    updateApp_tags,
+    updateAppResponse_appSummary,
+    updateAppResponse_serverGroups,
+    updateAppResponse_tags,
+    updateAppResponse_httpStatus,
+
+    -- ** UpdateReplicationJob
+    updateReplicationJob_description,
+    updateReplicationJob_encrypted,
+    updateReplicationJob_frequency,
+    updateReplicationJob_kmsKeyId,
+    updateReplicationJob_licenseType,
+    updateReplicationJob_nextReplicationRunStartTime,
+    updateReplicationJob_numberOfRecentAmisToKeep,
+    updateReplicationJob_roleName,
+    updateReplicationJob_replicationJobId,
+    updateReplicationJobResponse_httpStatus,
+
+    -- * Types
+
+    -- ** AppSummary
+    appSummary_appId,
+    appSummary_creationTime,
+    appSummary_description,
+    appSummary_importedAppId,
+    appSummary_lastModified,
+    appSummary_latestReplicationTime,
+    appSummary_launchConfigurationStatus,
+    appSummary_launchDetails,
+    appSummary_launchStatus,
+    appSummary_launchStatusMessage,
+    appSummary_name,
+    appSummary_replicationConfigurationStatus,
+    appSummary_replicationStatus,
+    appSummary_replicationStatusMessage,
+    appSummary_roleName,
+    appSummary_status,
+    appSummary_statusMessage,
+    appSummary_totalServerGroups,
+    appSummary_totalServers,
+
+    -- ** AppValidationConfiguration
+    appValidationConfiguration_appValidationStrategy,
+    appValidationConfiguration_name,
+    appValidationConfiguration_ssmValidationParameters,
+    appValidationConfiguration_validationId,
+
+    -- ** AppValidationOutput
+    appValidationOutput_ssmOutput,
+
+    -- ** Connector
+    connector_associatedOn,
+    connector_capabilityList,
+    connector_connectorId,
+    connector_ipAddress,
+    connector_macAddress,
+    connector_status,
+    connector_version,
+    connector_vmManagerId,
+    connector_vmManagerName,
+    connector_vmManagerType,
+
+    -- ** LaunchDetails
+    launchDetails_latestLaunchTime,
+    launchDetails_stackId,
+    launchDetails_stackName,
+
+    -- ** NotificationContext
+    notificationContext_status,
+    notificationContext_statusMessage,
+    notificationContext_validationId,
+
+    -- ** ReplicationJob
+    replicationJob_description,
+    replicationJob_encrypted,
+    replicationJob_frequency,
+    replicationJob_kmsKeyId,
+    replicationJob_latestAmiId,
+    replicationJob_licenseType,
+    replicationJob_nextReplicationRunStartTime,
+    replicationJob_numberOfRecentAmisToKeep,
+    replicationJob_replicationJobId,
+    replicationJob_replicationRunList,
+    replicationJob_roleName,
+    replicationJob_runOnce,
+    replicationJob_seedReplicationTime,
+    replicationJob_serverId,
+    replicationJob_serverType,
+    replicationJob_state,
+    replicationJob_statusMessage,
+    replicationJob_vmServer,
+
+    -- ** ReplicationRun
+    replicationRun_amiId,
+    replicationRun_completedTime,
+    replicationRun_description,
+    replicationRun_encrypted,
+    replicationRun_kmsKeyId,
+    replicationRun_replicationRunId,
+    replicationRun_scheduledStartTime,
+    replicationRun_stageDetails,
+    replicationRun_state,
+    replicationRun_statusMessage,
+    replicationRun_type,
+
+    -- ** ReplicationRunStageDetails
+    replicationRunStageDetails_stage,
+    replicationRunStageDetails_stageProgress,
+
+    -- ** S3Location
+    s3Location_bucket,
+    s3Location_key,
+
+    -- ** SSMOutput
+    sSMOutput_s3Location,
+
+    -- ** SSMValidationParameters
+    sSMValidationParameters_command,
+    sSMValidationParameters_executionTimeoutSeconds,
+    sSMValidationParameters_instanceId,
+    sSMValidationParameters_outputS3BucketName,
+    sSMValidationParameters_scriptType,
+    sSMValidationParameters_source,
+
+    -- ** Server
+    server_replicationJobId,
+    server_replicationJobTerminated,
+    server_serverId,
+    server_serverType,
+    server_vmServer,
+
+    -- ** ServerGroup
+    serverGroup_name,
+    serverGroup_serverGroupId,
+    serverGroup_serverList,
+
+    -- ** ServerGroupLaunchConfiguration
+    serverGroupLaunchConfiguration_launchOrder,
+    serverGroupLaunchConfiguration_serverGroupId,
+    serverGroupLaunchConfiguration_serverLaunchConfigurations,
+
+    -- ** ServerGroupReplicationConfiguration
+    serverGroupReplicationConfiguration_serverGroupId,
+    serverGroupReplicationConfiguration_serverReplicationConfigurations,
+
+    -- ** ServerGroupValidationConfiguration
+    serverGroupValidationConfiguration_serverGroupId,
+    serverGroupValidationConfiguration_serverValidationConfigurations,
+
+    -- ** ServerLaunchConfiguration
+    serverLaunchConfiguration_associatePublicIpAddress,
+    serverLaunchConfiguration_configureScript,
+    serverLaunchConfiguration_configureScriptType,
+    serverLaunchConfiguration_ec2KeyName,
+    serverLaunchConfiguration_iamInstanceProfileName,
+    serverLaunchConfiguration_instanceType,
+    serverLaunchConfiguration_logicalId,
+    serverLaunchConfiguration_securityGroup,
+    serverLaunchConfiguration_server,
+    serverLaunchConfiguration_subnet,
+    serverLaunchConfiguration_userData,
+    serverLaunchConfiguration_vpc,
+
+    -- ** ServerReplicationConfiguration
+    serverReplicationConfiguration_server,
+    serverReplicationConfiguration_serverReplicationParameters,
+
+    -- ** ServerReplicationParameters
+    serverReplicationParameters_encrypted,
+    serverReplicationParameters_frequency,
+    serverReplicationParameters_kmsKeyId,
+    serverReplicationParameters_licenseType,
+    serverReplicationParameters_numberOfRecentAmisToKeep,
+    serverReplicationParameters_runOnce,
+    serverReplicationParameters_seedTime,
+
+    -- ** ServerValidationConfiguration
+    serverValidationConfiguration_name,
+    serverValidationConfiguration_server,
+    serverValidationConfiguration_serverValidationStrategy,
+    serverValidationConfiguration_userDataValidationParameters,
+    serverValidationConfiguration_validationId,
+
+    -- ** ServerValidationOutput
+    serverValidationOutput_server,
+
+    -- ** Source
+    source_s3Location,
+
+    -- ** Tag
+    tag_key,
+    tag_value,
+
+    -- ** UserData
+    userData_s3Location,
+
+    -- ** UserDataValidationParameters
+    userDataValidationParameters_scriptType,
+    userDataValidationParameters_source,
+
+    -- ** ValidationOutput
+    validationOutput_appValidationOutput,
+    validationOutput_latestValidationTime,
+    validationOutput_name,
+    validationOutput_serverValidationOutput,
+    validationOutput_status,
+    validationOutput_statusMessage,
+    validationOutput_validationId,
+
+    -- ** VmServer
+    vmServer_vmManagerName,
+    vmServer_vmManagerType,
+    vmServer_vmName,
+    vmServer_vmPath,
+    vmServer_vmServerAddress,
+
+    -- ** VmServerAddress
+    vmServerAddress_vmId,
+    vmServerAddress_vmManagerId,
+  )
+where
+
+import Amazonka.SMS.CreateApp
+import Amazonka.SMS.CreateReplicationJob
+import Amazonka.SMS.DeleteApp
+import Amazonka.SMS.DeleteAppLaunchConfiguration
+import Amazonka.SMS.DeleteAppReplicationConfiguration
+import Amazonka.SMS.DeleteAppValidationConfiguration
+import Amazonka.SMS.DeleteReplicationJob
+import Amazonka.SMS.DeleteServerCatalog
+import Amazonka.SMS.DisassociateConnector
+import Amazonka.SMS.GenerateChangeSet
+import Amazonka.SMS.GenerateTemplate
+import Amazonka.SMS.GetApp
+import Amazonka.SMS.GetAppLaunchConfiguration
+import Amazonka.SMS.GetAppReplicationConfiguration
+import Amazonka.SMS.GetAppValidationConfiguration
+import Amazonka.SMS.GetAppValidationOutput
+import Amazonka.SMS.GetConnectors
+import Amazonka.SMS.GetReplicationJobs
+import Amazonka.SMS.GetReplicationRuns
+import Amazonka.SMS.GetServers
+import Amazonka.SMS.ImportAppCatalog
+import Amazonka.SMS.ImportServerCatalog
+import Amazonka.SMS.LaunchApp
+import Amazonka.SMS.ListApps
+import Amazonka.SMS.NotifyAppValidationOutput
+import Amazonka.SMS.PutAppLaunchConfiguration
+import Amazonka.SMS.PutAppReplicationConfiguration
+import Amazonka.SMS.PutAppValidationConfiguration
+import Amazonka.SMS.StartAppReplication
+import Amazonka.SMS.StartOnDemandAppReplication
+import Amazonka.SMS.StartOnDemandReplicationRun
+import Amazonka.SMS.StopAppReplication
+import Amazonka.SMS.TerminateApp
+import Amazonka.SMS.Types.AppSummary
+import Amazonka.SMS.Types.AppValidationConfiguration
+import Amazonka.SMS.Types.AppValidationOutput
+import Amazonka.SMS.Types.Connector
+import Amazonka.SMS.Types.LaunchDetails
+import Amazonka.SMS.Types.NotificationContext
+import Amazonka.SMS.Types.ReplicationJob
+import Amazonka.SMS.Types.ReplicationRun
+import Amazonka.SMS.Types.ReplicationRunStageDetails
+import Amazonka.SMS.Types.S3Location
+import Amazonka.SMS.Types.SSMOutput
+import Amazonka.SMS.Types.SSMValidationParameters
+import Amazonka.SMS.Types.Server
+import Amazonka.SMS.Types.ServerGroup
+import Amazonka.SMS.Types.ServerGroupLaunchConfiguration
+import Amazonka.SMS.Types.ServerGroupReplicationConfiguration
+import Amazonka.SMS.Types.ServerGroupValidationConfiguration
+import Amazonka.SMS.Types.ServerLaunchConfiguration
+import Amazonka.SMS.Types.ServerReplicationConfiguration
+import Amazonka.SMS.Types.ServerReplicationParameters
+import Amazonka.SMS.Types.ServerValidationConfiguration
+import Amazonka.SMS.Types.ServerValidationOutput
+import Amazonka.SMS.Types.Source
+import Amazonka.SMS.Types.Tag
+import Amazonka.SMS.Types.UserData
+import Amazonka.SMS.Types.UserDataValidationParameters
+import Amazonka.SMS.Types.ValidationOutput
+import Amazonka.SMS.Types.VmServer
+import Amazonka.SMS.Types.VmServerAddress
+import Amazonka.SMS.UpdateApp
+import Amazonka.SMS.UpdateReplicationJob
diff --git a/gen/Amazonka/SMS/ListApps.hs b/gen/Amazonka/SMS/ListApps.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/ListApps.hs
@@ -0,0 +1,239 @@
+{-# 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.SMS.ListApps
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves summaries for all applications.
+--
+-- This operation returns paginated results.
+module Amazonka.SMS.ListApps
+  ( -- * Creating a Request
+    ListApps (..),
+    newListApps,
+
+    -- * Request Lenses
+    listApps_appIds,
+    listApps_maxResults,
+    listApps_nextToken,
+
+    -- * Destructuring the Response
+    ListAppsResponse (..),
+    newListAppsResponse,
+
+    -- * Response Lenses
+    listAppsResponse_apps,
+    listAppsResponse_nextToken,
+    listAppsResponse_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.SMS.Types
+
+-- | /See:/ 'newListApps' smart constructor.
+data ListApps = ListApps'
+  { -- | The unique application IDs.
+    appIds :: Prelude.Maybe [Prelude.Text],
+    -- | The maximum number of results to return in a single call. The default
+    -- value is 100. To retrieve the remaining results, make another call with
+    -- the returned @NextToken@ value.
+    maxResults :: Prelude.Maybe Prelude.Int,
+    -- | The token for the next set of results.
+    nextToken :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ListApps' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appIds', 'listApps_appIds' - The unique application IDs.
+--
+-- 'maxResults', 'listApps_maxResults' - The maximum number of results to return in a single call. The default
+-- value is 100. To retrieve the remaining results, make another call with
+-- the returned @NextToken@ value.
+--
+-- 'nextToken', 'listApps_nextToken' - The token for the next set of results.
+newListApps ::
+  ListApps
+newListApps =
+  ListApps'
+    { appIds = Prelude.Nothing,
+      maxResults = Prelude.Nothing,
+      nextToken = Prelude.Nothing
+    }
+
+-- | The unique application IDs.
+listApps_appIds :: Lens.Lens' ListApps (Prelude.Maybe [Prelude.Text])
+listApps_appIds = Lens.lens (\ListApps' {appIds} -> appIds) (\s@ListApps' {} a -> s {appIds = a} :: ListApps) Prelude.. Lens.mapping Lens.coerced
+
+-- | The maximum number of results to return in a single call. The default
+-- value is 100. To retrieve the remaining results, make another call with
+-- the returned @NextToken@ value.
+listApps_maxResults :: Lens.Lens' ListApps (Prelude.Maybe Prelude.Int)
+listApps_maxResults = Lens.lens (\ListApps' {maxResults} -> maxResults) (\s@ListApps' {} a -> s {maxResults = a} :: ListApps)
+
+-- | The token for the next set of results.
+listApps_nextToken :: Lens.Lens' ListApps (Prelude.Maybe Prelude.Text)
+listApps_nextToken = Lens.lens (\ListApps' {nextToken} -> nextToken) (\s@ListApps' {} a -> s {nextToken = a} :: ListApps)
+
+instance Core.AWSPager ListApps where
+  page rq rs
+    | Core.stop
+        ( rs
+            Lens.^? listAppsResponse_nextToken
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Core.stop
+        ( rs
+            Lens.^? listAppsResponse_apps
+            Prelude.. Lens._Just
+        ) =
+        Prelude.Nothing
+    | Prelude.otherwise =
+        Prelude.Just
+          Prelude.$ rq
+          Prelude.& listApps_nextToken
+          Lens..~ rs
+          Lens.^? listAppsResponse_nextToken
+          Prelude.. Lens._Just
+
+instance Core.AWSRequest ListApps where
+  type AWSResponse ListApps = ListAppsResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          ListAppsResponse'
+            Prelude.<$> (x Data..?> "apps" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "nextToken")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable ListApps where
+  hashWithSalt _salt ListApps' {..} =
+    _salt
+      `Prelude.hashWithSalt` appIds
+      `Prelude.hashWithSalt` maxResults
+      `Prelude.hashWithSalt` nextToken
+
+instance Prelude.NFData ListApps where
+  rnf ListApps' {..} =
+    Prelude.rnf appIds
+      `Prelude.seq` Prelude.rnf maxResults
+      `Prelude.seq` Prelude.rnf nextToken
+
+instance Data.ToHeaders ListApps where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.ListApps" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON ListApps where
+  toJSON ListApps' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appIds" Data..=) Prelude.<$> appIds,
+            ("maxResults" Data..=) Prelude.<$> maxResults,
+            ("nextToken" Data..=) Prelude.<$> nextToken
+          ]
+      )
+
+instance Data.ToPath ListApps where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery ListApps where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newListAppsResponse' smart constructor.
+data ListAppsResponse = ListAppsResponse'
+  { -- | The application summaries.
+    apps :: Prelude.Maybe [AppSummary],
+    -- | The token required to retrieve the next set of results. This value is
+    -- null when there are no more results to return.
+    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 'ListAppsResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'apps', 'listAppsResponse_apps' - The application summaries.
+--
+-- 'nextToken', 'listAppsResponse_nextToken' - The token required to retrieve the next set of results. This value is
+-- null when there are no more results to return.
+--
+-- 'httpStatus', 'listAppsResponse_httpStatus' - The response's http status code.
+newListAppsResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  ListAppsResponse
+newListAppsResponse pHttpStatus_ =
+  ListAppsResponse'
+    { apps = Prelude.Nothing,
+      nextToken = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The application summaries.
+listAppsResponse_apps :: Lens.Lens' ListAppsResponse (Prelude.Maybe [AppSummary])
+listAppsResponse_apps = Lens.lens (\ListAppsResponse' {apps} -> apps) (\s@ListAppsResponse' {} a -> s {apps = a} :: ListAppsResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The token required to retrieve the next set of results. This value is
+-- null when there are no more results to return.
+listAppsResponse_nextToken :: Lens.Lens' ListAppsResponse (Prelude.Maybe Prelude.Text)
+listAppsResponse_nextToken = Lens.lens (\ListAppsResponse' {nextToken} -> nextToken) (\s@ListAppsResponse' {} a -> s {nextToken = a} :: ListAppsResponse)
+
+-- | The response's http status code.
+listAppsResponse_httpStatus :: Lens.Lens' ListAppsResponse Prelude.Int
+listAppsResponse_httpStatus = Lens.lens (\ListAppsResponse' {httpStatus} -> httpStatus) (\s@ListAppsResponse' {} a -> s {httpStatus = a} :: ListAppsResponse)
+
+instance Prelude.NFData ListAppsResponse where
+  rnf ListAppsResponse' {..} =
+    Prelude.rnf apps
+      `Prelude.seq` Prelude.rnf nextToken
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/NotifyAppValidationOutput.hs b/gen/Amazonka/SMS/NotifyAppValidationOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/NotifyAppValidationOutput.hs
@@ -0,0 +1,180 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.NotifyAppValidationOutput
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Provides information to Server Migration Service about whether
+-- application validation is successful.
+module Amazonka.SMS.NotifyAppValidationOutput
+  ( -- * Creating a Request
+    NotifyAppValidationOutput (..),
+    newNotifyAppValidationOutput,
+
+    -- * Request Lenses
+    notifyAppValidationOutput_notificationContext,
+    notifyAppValidationOutput_appId,
+
+    -- * Destructuring the Response
+    NotifyAppValidationOutputResponse (..),
+    newNotifyAppValidationOutputResponse,
+
+    -- * Response Lenses
+    notifyAppValidationOutputResponse_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.SMS.Types
+
+-- | /See:/ 'newNotifyAppValidationOutput' smart constructor.
+data NotifyAppValidationOutput = NotifyAppValidationOutput'
+  { -- | The notification information.
+    notificationContext :: Prelude.Maybe NotificationContext,
+    -- | The ID of the application.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotifyAppValidationOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'notificationContext', 'notifyAppValidationOutput_notificationContext' - The notification information.
+--
+-- 'appId', 'notifyAppValidationOutput_appId' - The ID of the application.
+newNotifyAppValidationOutput ::
+  -- | 'appId'
+  Prelude.Text ->
+  NotifyAppValidationOutput
+newNotifyAppValidationOutput pAppId_ =
+  NotifyAppValidationOutput'
+    { notificationContext =
+        Prelude.Nothing,
+      appId = pAppId_
+    }
+
+-- | The notification information.
+notifyAppValidationOutput_notificationContext :: Lens.Lens' NotifyAppValidationOutput (Prelude.Maybe NotificationContext)
+notifyAppValidationOutput_notificationContext = Lens.lens (\NotifyAppValidationOutput' {notificationContext} -> notificationContext) (\s@NotifyAppValidationOutput' {} a -> s {notificationContext = a} :: NotifyAppValidationOutput)
+
+-- | The ID of the application.
+notifyAppValidationOutput_appId :: Lens.Lens' NotifyAppValidationOutput Prelude.Text
+notifyAppValidationOutput_appId = Lens.lens (\NotifyAppValidationOutput' {appId} -> appId) (\s@NotifyAppValidationOutput' {} a -> s {appId = a} :: NotifyAppValidationOutput)
+
+instance Core.AWSRequest NotifyAppValidationOutput where
+  type
+    AWSResponse NotifyAppValidationOutput =
+      NotifyAppValidationOutputResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          NotifyAppValidationOutputResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable NotifyAppValidationOutput where
+  hashWithSalt _salt NotifyAppValidationOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` notificationContext
+      `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData NotifyAppValidationOutput where
+  rnf NotifyAppValidationOutput' {..} =
+    Prelude.rnf notificationContext
+      `Prelude.seq` Prelude.rnf appId
+
+instance Data.ToHeaders NotifyAppValidationOutput where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.NotifyAppValidationOutput" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON NotifyAppValidationOutput where
+  toJSON NotifyAppValidationOutput' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("notificationContext" Data..=)
+              Prelude.<$> notificationContext,
+            Prelude.Just ("appId" Data..= appId)
+          ]
+      )
+
+instance Data.ToPath NotifyAppValidationOutput where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery NotifyAppValidationOutput where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newNotifyAppValidationOutputResponse' smart constructor.
+data NotifyAppValidationOutputResponse = NotifyAppValidationOutputResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotifyAppValidationOutputResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'notifyAppValidationOutputResponse_httpStatus' - The response's http status code.
+newNotifyAppValidationOutputResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  NotifyAppValidationOutputResponse
+newNotifyAppValidationOutputResponse pHttpStatus_ =
+  NotifyAppValidationOutputResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+notifyAppValidationOutputResponse_httpStatus :: Lens.Lens' NotifyAppValidationOutputResponse Prelude.Int
+notifyAppValidationOutputResponse_httpStatus = Lens.lens (\NotifyAppValidationOutputResponse' {httpStatus} -> httpStatus) (\s@NotifyAppValidationOutputResponse' {} a -> s {httpStatus = a} :: NotifyAppValidationOutputResponse)
+
+instance
+  Prelude.NFData
+    NotifyAppValidationOutputResponse
+  where
+  rnf NotifyAppValidationOutputResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/PutAppLaunchConfiguration.hs b/gen/Amazonka/SMS/PutAppLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/PutAppLaunchConfiguration.hs
@@ -0,0 +1,213 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.PutAppLaunchConfiguration
+-- 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 or updates the launch configuration for the specified
+-- application.
+module Amazonka.SMS.PutAppLaunchConfiguration
+  ( -- * Creating a Request
+    PutAppLaunchConfiguration (..),
+    newPutAppLaunchConfiguration,
+
+    -- * Request Lenses
+    putAppLaunchConfiguration_appId,
+    putAppLaunchConfiguration_autoLaunch,
+    putAppLaunchConfiguration_roleName,
+    putAppLaunchConfiguration_serverGroupLaunchConfigurations,
+
+    -- * Destructuring the Response
+    PutAppLaunchConfigurationResponse (..),
+    newPutAppLaunchConfigurationResponse,
+
+    -- * Response Lenses
+    putAppLaunchConfigurationResponse_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.SMS.Types
+
+-- | /See:/ 'newPutAppLaunchConfiguration' smart constructor.
+data PutAppLaunchConfiguration = PutAppLaunchConfiguration'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the application is configured to launch automatically
+    -- after replication is complete.
+    autoLaunch :: Prelude.Maybe Prelude.Bool,
+    -- | The name of service role in the customer\'s account that CloudFormation
+    -- uses to launch the application.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | Information about the launch configurations for server groups in the
+    -- application.
+    serverGroupLaunchConfigurations :: Prelude.Maybe [ServerGroupLaunchConfiguration]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAppLaunchConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'putAppLaunchConfiguration_appId' - The ID of the application.
+--
+-- 'autoLaunch', 'putAppLaunchConfiguration_autoLaunch' - Indicates whether the application is configured to launch automatically
+-- after replication is complete.
+--
+-- 'roleName', 'putAppLaunchConfiguration_roleName' - The name of service role in the customer\'s account that CloudFormation
+-- uses to launch the application.
+--
+-- 'serverGroupLaunchConfigurations', 'putAppLaunchConfiguration_serverGroupLaunchConfigurations' - Information about the launch configurations for server groups in the
+-- application.
+newPutAppLaunchConfiguration ::
+  PutAppLaunchConfiguration
+newPutAppLaunchConfiguration =
+  PutAppLaunchConfiguration'
+    { appId = Prelude.Nothing,
+      autoLaunch = Prelude.Nothing,
+      roleName = Prelude.Nothing,
+      serverGroupLaunchConfigurations =
+        Prelude.Nothing
+    }
+
+-- | The ID of the application.
+putAppLaunchConfiguration_appId :: Lens.Lens' PutAppLaunchConfiguration (Prelude.Maybe Prelude.Text)
+putAppLaunchConfiguration_appId = Lens.lens (\PutAppLaunchConfiguration' {appId} -> appId) (\s@PutAppLaunchConfiguration' {} a -> s {appId = a} :: PutAppLaunchConfiguration)
+
+-- | Indicates whether the application is configured to launch automatically
+-- after replication is complete.
+putAppLaunchConfiguration_autoLaunch :: Lens.Lens' PutAppLaunchConfiguration (Prelude.Maybe Prelude.Bool)
+putAppLaunchConfiguration_autoLaunch = Lens.lens (\PutAppLaunchConfiguration' {autoLaunch} -> autoLaunch) (\s@PutAppLaunchConfiguration' {} a -> s {autoLaunch = a} :: PutAppLaunchConfiguration)
+
+-- | The name of service role in the customer\'s account that CloudFormation
+-- uses to launch the application.
+putAppLaunchConfiguration_roleName :: Lens.Lens' PutAppLaunchConfiguration (Prelude.Maybe Prelude.Text)
+putAppLaunchConfiguration_roleName = Lens.lens (\PutAppLaunchConfiguration' {roleName} -> roleName) (\s@PutAppLaunchConfiguration' {} a -> s {roleName = a} :: PutAppLaunchConfiguration)
+
+-- | Information about the launch configurations for server groups in the
+-- application.
+putAppLaunchConfiguration_serverGroupLaunchConfigurations :: Lens.Lens' PutAppLaunchConfiguration (Prelude.Maybe [ServerGroupLaunchConfiguration])
+putAppLaunchConfiguration_serverGroupLaunchConfigurations = Lens.lens (\PutAppLaunchConfiguration' {serverGroupLaunchConfigurations} -> serverGroupLaunchConfigurations) (\s@PutAppLaunchConfiguration' {} a -> s {serverGroupLaunchConfigurations = a} :: PutAppLaunchConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest PutAppLaunchConfiguration where
+  type
+    AWSResponse PutAppLaunchConfiguration =
+      PutAppLaunchConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutAppLaunchConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable PutAppLaunchConfiguration where
+  hashWithSalt _salt PutAppLaunchConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` autoLaunch
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` serverGroupLaunchConfigurations
+
+instance Prelude.NFData PutAppLaunchConfiguration where
+  rnf PutAppLaunchConfiguration' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf autoLaunch
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf serverGroupLaunchConfigurations
+
+instance Data.ToHeaders PutAppLaunchConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.PutAppLaunchConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutAppLaunchConfiguration where
+  toJSON PutAppLaunchConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appId" Data..=) Prelude.<$> appId,
+            ("autoLaunch" Data..=) Prelude.<$> autoLaunch,
+            ("roleName" Data..=) Prelude.<$> roleName,
+            ("serverGroupLaunchConfigurations" Data..=)
+              Prelude.<$> serverGroupLaunchConfigurations
+          ]
+      )
+
+instance Data.ToPath PutAppLaunchConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutAppLaunchConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutAppLaunchConfigurationResponse' smart constructor.
+data PutAppLaunchConfigurationResponse = PutAppLaunchConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAppLaunchConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putAppLaunchConfigurationResponse_httpStatus' - The response's http status code.
+newPutAppLaunchConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutAppLaunchConfigurationResponse
+newPutAppLaunchConfigurationResponse pHttpStatus_ =
+  PutAppLaunchConfigurationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putAppLaunchConfigurationResponse_httpStatus :: Lens.Lens' PutAppLaunchConfigurationResponse Prelude.Int
+putAppLaunchConfigurationResponse_httpStatus = Lens.lens (\PutAppLaunchConfigurationResponse' {httpStatus} -> httpStatus) (\s@PutAppLaunchConfigurationResponse' {} a -> s {httpStatus = a} :: PutAppLaunchConfigurationResponse)
+
+instance
+  Prelude.NFData
+    PutAppLaunchConfigurationResponse
+  where
+  rnf PutAppLaunchConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/PutAppReplicationConfiguration.hs b/gen/Amazonka/SMS/PutAppReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/PutAppReplicationConfiguration.hs
@@ -0,0 +1,197 @@
+{-# 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.SMS.PutAppReplicationConfiguration
+-- 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 or updates the replication configuration for the specified
+-- application.
+module Amazonka.SMS.PutAppReplicationConfiguration
+  ( -- * Creating a Request
+    PutAppReplicationConfiguration (..),
+    newPutAppReplicationConfiguration,
+
+    -- * Request Lenses
+    putAppReplicationConfiguration_appId,
+    putAppReplicationConfiguration_serverGroupReplicationConfigurations,
+
+    -- * Destructuring the Response
+    PutAppReplicationConfigurationResponse (..),
+    newPutAppReplicationConfigurationResponse,
+
+    -- * Response Lenses
+    putAppReplicationConfigurationResponse_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.SMS.Types
+
+-- | /See:/ 'newPutAppReplicationConfiguration' smart constructor.
+data PutAppReplicationConfiguration = PutAppReplicationConfiguration'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the replication configurations for server groups in
+    -- the application.
+    serverGroupReplicationConfigurations :: Prelude.Maybe [ServerGroupReplicationConfiguration]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAppReplicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'putAppReplicationConfiguration_appId' - The ID of the application.
+--
+-- 'serverGroupReplicationConfigurations', 'putAppReplicationConfiguration_serverGroupReplicationConfigurations' - Information about the replication configurations for server groups in
+-- the application.
+newPutAppReplicationConfiguration ::
+  PutAppReplicationConfiguration
+newPutAppReplicationConfiguration =
+  PutAppReplicationConfiguration'
+    { appId =
+        Prelude.Nothing,
+      serverGroupReplicationConfigurations =
+        Prelude.Nothing
+    }
+
+-- | The ID of the application.
+putAppReplicationConfiguration_appId :: Lens.Lens' PutAppReplicationConfiguration (Prelude.Maybe Prelude.Text)
+putAppReplicationConfiguration_appId = Lens.lens (\PutAppReplicationConfiguration' {appId} -> appId) (\s@PutAppReplicationConfiguration' {} a -> s {appId = a} :: PutAppReplicationConfiguration)
+
+-- | Information about the replication configurations for server groups in
+-- the application.
+putAppReplicationConfiguration_serverGroupReplicationConfigurations :: Lens.Lens' PutAppReplicationConfiguration (Prelude.Maybe [ServerGroupReplicationConfiguration])
+putAppReplicationConfiguration_serverGroupReplicationConfigurations = Lens.lens (\PutAppReplicationConfiguration' {serverGroupReplicationConfigurations} -> serverGroupReplicationConfigurations) (\s@PutAppReplicationConfiguration' {} a -> s {serverGroupReplicationConfigurations = a} :: PutAppReplicationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Core.AWSRequest
+    PutAppReplicationConfiguration
+  where
+  type
+    AWSResponse PutAppReplicationConfiguration =
+      PutAppReplicationConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutAppReplicationConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutAppReplicationConfiguration
+  where
+  hashWithSalt
+    _salt
+    PutAppReplicationConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` appId
+        `Prelude.hashWithSalt` serverGroupReplicationConfigurations
+
+instance
+  Prelude.NFData
+    PutAppReplicationConfiguration
+  where
+  rnf PutAppReplicationConfiguration' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf serverGroupReplicationConfigurations
+
+instance
+  Data.ToHeaders
+    PutAppReplicationConfiguration
+  where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.PutAppReplicationConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutAppReplicationConfiguration where
+  toJSON PutAppReplicationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appId" Data..=) Prelude.<$> appId,
+            ("serverGroupReplicationConfigurations" Data..=)
+              Prelude.<$> serverGroupReplicationConfigurations
+          ]
+      )
+
+instance Data.ToPath PutAppReplicationConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutAppReplicationConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutAppReplicationConfigurationResponse' smart constructor.
+data PutAppReplicationConfigurationResponse = PutAppReplicationConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAppReplicationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putAppReplicationConfigurationResponse_httpStatus' - The response's http status code.
+newPutAppReplicationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutAppReplicationConfigurationResponse
+newPutAppReplicationConfigurationResponse
+  pHttpStatus_ =
+    PutAppReplicationConfigurationResponse'
+      { httpStatus =
+          pHttpStatus_
+      }
+
+-- | The response's http status code.
+putAppReplicationConfigurationResponse_httpStatus :: Lens.Lens' PutAppReplicationConfigurationResponse Prelude.Int
+putAppReplicationConfigurationResponse_httpStatus = Lens.lens (\PutAppReplicationConfigurationResponse' {httpStatus} -> httpStatus) (\s@PutAppReplicationConfigurationResponse' {} a -> s {httpStatus = a} :: PutAppReplicationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    PutAppReplicationConfigurationResponse
+  where
+  rnf PutAppReplicationConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/PutAppValidationConfiguration.hs b/gen/Amazonka/SMS/PutAppValidationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/PutAppValidationConfiguration.hs
@@ -0,0 +1,201 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.PutAppValidationConfiguration
+-- 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 or updates a validation configuration for the specified
+-- application.
+module Amazonka.SMS.PutAppValidationConfiguration
+  ( -- * Creating a Request
+    PutAppValidationConfiguration (..),
+    newPutAppValidationConfiguration,
+
+    -- * Request Lenses
+    putAppValidationConfiguration_appValidationConfigurations,
+    putAppValidationConfiguration_serverGroupValidationConfigurations,
+    putAppValidationConfiguration_appId,
+
+    -- * Destructuring the Response
+    PutAppValidationConfigurationResponse (..),
+    newPutAppValidationConfigurationResponse,
+
+    -- * Response Lenses
+    putAppValidationConfigurationResponse_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.SMS.Types
+
+-- | /See:/ 'newPutAppValidationConfiguration' smart constructor.
+data PutAppValidationConfiguration = PutAppValidationConfiguration'
+  { -- | The configuration for application validation.
+    appValidationConfigurations :: Prelude.Maybe [AppValidationConfiguration],
+    -- | The configuration for instance validation.
+    serverGroupValidationConfigurations :: Prelude.Maybe [ServerGroupValidationConfiguration],
+    -- | The ID of the application.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAppValidationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appValidationConfigurations', 'putAppValidationConfiguration_appValidationConfigurations' - The configuration for application validation.
+--
+-- 'serverGroupValidationConfigurations', 'putAppValidationConfiguration_serverGroupValidationConfigurations' - The configuration for instance validation.
+--
+-- 'appId', 'putAppValidationConfiguration_appId' - The ID of the application.
+newPutAppValidationConfiguration ::
+  -- | 'appId'
+  Prelude.Text ->
+  PutAppValidationConfiguration
+newPutAppValidationConfiguration pAppId_ =
+  PutAppValidationConfiguration'
+    { appValidationConfigurations =
+        Prelude.Nothing,
+      serverGroupValidationConfigurations =
+        Prelude.Nothing,
+      appId = pAppId_
+    }
+
+-- | The configuration for application validation.
+putAppValidationConfiguration_appValidationConfigurations :: Lens.Lens' PutAppValidationConfiguration (Prelude.Maybe [AppValidationConfiguration])
+putAppValidationConfiguration_appValidationConfigurations = Lens.lens (\PutAppValidationConfiguration' {appValidationConfigurations} -> appValidationConfigurations) (\s@PutAppValidationConfiguration' {} a -> s {appValidationConfigurations = a} :: PutAppValidationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The configuration for instance validation.
+putAppValidationConfiguration_serverGroupValidationConfigurations :: Lens.Lens' PutAppValidationConfiguration (Prelude.Maybe [ServerGroupValidationConfiguration])
+putAppValidationConfiguration_serverGroupValidationConfigurations = Lens.lens (\PutAppValidationConfiguration' {serverGroupValidationConfigurations} -> serverGroupValidationConfigurations) (\s@PutAppValidationConfiguration' {} a -> s {serverGroupValidationConfigurations = a} :: PutAppValidationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the application.
+putAppValidationConfiguration_appId :: Lens.Lens' PutAppValidationConfiguration Prelude.Text
+putAppValidationConfiguration_appId = Lens.lens (\PutAppValidationConfiguration' {appId} -> appId) (\s@PutAppValidationConfiguration' {} a -> s {appId = a} :: PutAppValidationConfiguration)
+
+instance
+  Core.AWSRequest
+    PutAppValidationConfiguration
+  where
+  type
+    AWSResponse PutAppValidationConfiguration =
+      PutAppValidationConfigurationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          PutAppValidationConfigurationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance
+  Prelude.Hashable
+    PutAppValidationConfiguration
+  where
+  hashWithSalt _salt PutAppValidationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` appValidationConfigurations
+      `Prelude.hashWithSalt` serverGroupValidationConfigurations
+      `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData PutAppValidationConfiguration where
+  rnf PutAppValidationConfiguration' {..} =
+    Prelude.rnf appValidationConfigurations
+      `Prelude.seq` Prelude.rnf serverGroupValidationConfigurations
+      `Prelude.seq` Prelude.rnf appId
+
+instance Data.ToHeaders PutAppValidationConfiguration where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.PutAppValidationConfiguration" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON PutAppValidationConfiguration where
+  toJSON PutAppValidationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appValidationConfigurations" Data..=)
+              Prelude.<$> appValidationConfigurations,
+            ("serverGroupValidationConfigurations" Data..=)
+              Prelude.<$> serverGroupValidationConfigurations,
+            Prelude.Just ("appId" Data..= appId)
+          ]
+      )
+
+instance Data.ToPath PutAppValidationConfiguration where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery PutAppValidationConfiguration where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newPutAppValidationConfigurationResponse' smart constructor.
+data PutAppValidationConfigurationResponse = PutAppValidationConfigurationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'PutAppValidationConfigurationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'putAppValidationConfigurationResponse_httpStatus' - The response's http status code.
+newPutAppValidationConfigurationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  PutAppValidationConfigurationResponse
+newPutAppValidationConfigurationResponse pHttpStatus_ =
+  PutAppValidationConfigurationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+putAppValidationConfigurationResponse_httpStatus :: Lens.Lens' PutAppValidationConfigurationResponse Prelude.Int
+putAppValidationConfigurationResponse_httpStatus = Lens.lens (\PutAppValidationConfigurationResponse' {httpStatus} -> httpStatus) (\s@PutAppValidationConfigurationResponse' {} a -> s {httpStatus = a} :: PutAppValidationConfigurationResponse)
+
+instance
+  Prelude.NFData
+    PutAppValidationConfigurationResponse
+  where
+  rnf PutAppValidationConfigurationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/StartAppReplication.hs b/gen/Amazonka/SMS/StartAppReplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/StartAppReplication.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.SMS.StartAppReplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts replicating the specified application by creating replication
+-- jobs for each server in the application.
+module Amazonka.SMS.StartAppReplication
+  ( -- * Creating a Request
+    StartAppReplication (..),
+    newStartAppReplication,
+
+    -- * Request Lenses
+    startAppReplication_appId,
+
+    -- * Destructuring the Response
+    StartAppReplicationResponse (..),
+    newStartAppReplicationResponse,
+
+    -- * Response Lenses
+    startAppReplicationResponse_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.SMS.Types
+
+-- | /See:/ 'newStartAppReplication' smart constructor.
+data StartAppReplication = StartAppReplication'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartAppReplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'startAppReplication_appId' - The ID of the application.
+newStartAppReplication ::
+  StartAppReplication
+newStartAppReplication =
+  StartAppReplication' {appId = Prelude.Nothing}
+
+-- | The ID of the application.
+startAppReplication_appId :: Lens.Lens' StartAppReplication (Prelude.Maybe Prelude.Text)
+startAppReplication_appId = Lens.lens (\StartAppReplication' {appId} -> appId) (\s@StartAppReplication' {} a -> s {appId = a} :: StartAppReplication)
+
+instance Core.AWSRequest StartAppReplication where
+  type
+    AWSResponse StartAppReplication =
+      StartAppReplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartAppReplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartAppReplication where
+  hashWithSalt _salt StartAppReplication' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData StartAppReplication where
+  rnf StartAppReplication' {..} = Prelude.rnf appId
+
+instance Data.ToHeaders StartAppReplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.StartAppReplication" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartAppReplication where
+  toJSON StartAppReplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("appId" Data..=) Prelude.<$> appId]
+      )
+
+instance Data.ToPath StartAppReplication where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartAppReplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartAppReplicationResponse' smart constructor.
+data StartAppReplicationResponse = StartAppReplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartAppReplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startAppReplicationResponse_httpStatus' - The response's http status code.
+newStartAppReplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartAppReplicationResponse
+newStartAppReplicationResponse pHttpStatus_ =
+  StartAppReplicationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+startAppReplicationResponse_httpStatus :: Lens.Lens' StartAppReplicationResponse Prelude.Int
+startAppReplicationResponse_httpStatus = Lens.lens (\StartAppReplicationResponse' {httpStatus} -> httpStatus) (\s@StartAppReplicationResponse' {} a -> s {httpStatus = a} :: StartAppReplicationResponse)
+
+instance Prelude.NFData StartAppReplicationResponse where
+  rnf StartAppReplicationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/StartOnDemandAppReplication.hs b/gen/Amazonka/SMS/StartOnDemandAppReplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/StartOnDemandAppReplication.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.StartOnDemandAppReplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an on-demand replication run for the specified application.
+module Amazonka.SMS.StartOnDemandAppReplication
+  ( -- * Creating a Request
+    StartOnDemandAppReplication (..),
+    newStartOnDemandAppReplication,
+
+    -- * Request Lenses
+    startOnDemandAppReplication_description,
+    startOnDemandAppReplication_appId,
+
+    -- * Destructuring the Response
+    StartOnDemandAppReplicationResponse (..),
+    newStartOnDemandAppReplicationResponse,
+
+    -- * Response Lenses
+    startOnDemandAppReplicationResponse_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.SMS.Types
+
+-- | /See:/ 'newStartOnDemandAppReplication' smart constructor.
+data StartOnDemandAppReplication = StartOnDemandAppReplication'
+  { -- | The description of the replication run.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the application.
+    appId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartOnDemandAppReplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startOnDemandAppReplication_description' - The description of the replication run.
+--
+-- 'appId', 'startOnDemandAppReplication_appId' - The ID of the application.
+newStartOnDemandAppReplication ::
+  -- | 'appId'
+  Prelude.Text ->
+  StartOnDemandAppReplication
+newStartOnDemandAppReplication pAppId_ =
+  StartOnDemandAppReplication'
+    { description =
+        Prelude.Nothing,
+      appId = pAppId_
+    }
+
+-- | The description of the replication run.
+startOnDemandAppReplication_description :: Lens.Lens' StartOnDemandAppReplication (Prelude.Maybe Prelude.Text)
+startOnDemandAppReplication_description = Lens.lens (\StartOnDemandAppReplication' {description} -> description) (\s@StartOnDemandAppReplication' {} a -> s {description = a} :: StartOnDemandAppReplication)
+
+-- | The ID of the application.
+startOnDemandAppReplication_appId :: Lens.Lens' StartOnDemandAppReplication Prelude.Text
+startOnDemandAppReplication_appId = Lens.lens (\StartOnDemandAppReplication' {appId} -> appId) (\s@StartOnDemandAppReplication' {} a -> s {appId = a} :: StartOnDemandAppReplication)
+
+instance Core.AWSRequest StartOnDemandAppReplication where
+  type
+    AWSResponse StartOnDemandAppReplication =
+      StartOnDemandAppReplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StartOnDemandAppReplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartOnDemandAppReplication where
+  hashWithSalt _salt StartOnDemandAppReplication' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData StartOnDemandAppReplication where
+  rnf StartOnDemandAppReplication' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf appId
+
+instance Data.ToHeaders StartOnDemandAppReplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.StartOnDemandAppReplication" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartOnDemandAppReplication where
+  toJSON StartOnDemandAppReplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just ("appId" Data..= appId)
+          ]
+      )
+
+instance Data.ToPath StartOnDemandAppReplication where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartOnDemandAppReplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartOnDemandAppReplicationResponse' smart constructor.
+data StartOnDemandAppReplicationResponse = StartOnDemandAppReplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartOnDemandAppReplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startOnDemandAppReplicationResponse_httpStatus' - The response's http status code.
+newStartOnDemandAppReplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartOnDemandAppReplicationResponse
+newStartOnDemandAppReplicationResponse pHttpStatus_ =
+  StartOnDemandAppReplicationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+startOnDemandAppReplicationResponse_httpStatus :: Lens.Lens' StartOnDemandAppReplicationResponse Prelude.Int
+startOnDemandAppReplicationResponse_httpStatus = Lens.lens (\StartOnDemandAppReplicationResponse' {httpStatus} -> httpStatus) (\s@StartOnDemandAppReplicationResponse' {} a -> s {httpStatus = a} :: StartOnDemandAppReplicationResponse)
+
+instance
+  Prelude.NFData
+    StartOnDemandAppReplicationResponse
+  where
+  rnf StartOnDemandAppReplicationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/StartOnDemandReplicationRun.hs b/gen/Amazonka/SMS/StartOnDemandReplicationRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/StartOnDemandReplicationRun.hs
@@ -0,0 +1,196 @@
+{-# 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.SMS.StartOnDemandReplicationRun
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an on-demand replication run for the specified replication job.
+-- This replication run starts immediately. This replication run is in
+-- addition to the ones already scheduled.
+--
+-- There is a limit on the number of on-demand replications runs that you
+-- can request in a 24-hour period.
+module Amazonka.SMS.StartOnDemandReplicationRun
+  ( -- * Creating a Request
+    StartOnDemandReplicationRun (..),
+    newStartOnDemandReplicationRun,
+
+    -- * Request Lenses
+    startOnDemandReplicationRun_description,
+    startOnDemandReplicationRun_replicationJobId,
+
+    -- * Destructuring the Response
+    StartOnDemandReplicationRunResponse (..),
+    newStartOnDemandReplicationRunResponse,
+
+    -- * Response Lenses
+    startOnDemandReplicationRunResponse_replicationRunId,
+    startOnDemandReplicationRunResponse_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.SMS.Types
+
+-- | /See:/ 'newStartOnDemandReplicationRun' smart constructor.
+data StartOnDemandReplicationRun = StartOnDemandReplicationRun'
+  { -- | The description of the replication run.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the replication job.
+    replicationJobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StartOnDemandReplicationRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'startOnDemandReplicationRun_description' - The description of the replication run.
+--
+-- 'replicationJobId', 'startOnDemandReplicationRun_replicationJobId' - The ID of the replication job.
+newStartOnDemandReplicationRun ::
+  -- | 'replicationJobId'
+  Prelude.Text ->
+  StartOnDemandReplicationRun
+newStartOnDemandReplicationRun pReplicationJobId_ =
+  StartOnDemandReplicationRun'
+    { description =
+        Prelude.Nothing,
+      replicationJobId = pReplicationJobId_
+    }
+
+-- | The description of the replication run.
+startOnDemandReplicationRun_description :: Lens.Lens' StartOnDemandReplicationRun (Prelude.Maybe Prelude.Text)
+startOnDemandReplicationRun_description = Lens.lens (\StartOnDemandReplicationRun' {description} -> description) (\s@StartOnDemandReplicationRun' {} a -> s {description = a} :: StartOnDemandReplicationRun)
+
+-- | The ID of the replication job.
+startOnDemandReplicationRun_replicationJobId :: Lens.Lens' StartOnDemandReplicationRun Prelude.Text
+startOnDemandReplicationRun_replicationJobId = Lens.lens (\StartOnDemandReplicationRun' {replicationJobId} -> replicationJobId) (\s@StartOnDemandReplicationRun' {} a -> s {replicationJobId = a} :: StartOnDemandReplicationRun)
+
+instance Core.AWSRequest StartOnDemandReplicationRun where
+  type
+    AWSResponse StartOnDemandReplicationRun =
+      StartOnDemandReplicationRunResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          StartOnDemandReplicationRunResponse'
+            Prelude.<$> (x Data..?> "replicationRunId")
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StartOnDemandReplicationRun where
+  hashWithSalt _salt StartOnDemandReplicationRun' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` replicationJobId
+
+instance Prelude.NFData StartOnDemandReplicationRun where
+  rnf StartOnDemandReplicationRun' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf replicationJobId
+
+instance Data.ToHeaders StartOnDemandReplicationRun where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.StartOnDemandReplicationRun" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StartOnDemandReplicationRun where
+  toJSON StartOnDemandReplicationRun' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            Prelude.Just
+              ("replicationJobId" Data..= replicationJobId)
+          ]
+      )
+
+instance Data.ToPath StartOnDemandReplicationRun where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StartOnDemandReplicationRun where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStartOnDemandReplicationRunResponse' smart constructor.
+data StartOnDemandReplicationRunResponse = StartOnDemandReplicationRunResponse'
+  { -- | The ID of the replication run.
+    replicationRunId :: 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 'StartOnDemandReplicationRunResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replicationRunId', 'startOnDemandReplicationRunResponse_replicationRunId' - The ID of the replication run.
+--
+-- 'httpStatus', 'startOnDemandReplicationRunResponse_httpStatus' - The response's http status code.
+newStartOnDemandReplicationRunResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StartOnDemandReplicationRunResponse
+newStartOnDemandReplicationRunResponse pHttpStatus_ =
+  StartOnDemandReplicationRunResponse'
+    { replicationRunId =
+        Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | The ID of the replication run.
+startOnDemandReplicationRunResponse_replicationRunId :: Lens.Lens' StartOnDemandReplicationRunResponse (Prelude.Maybe Prelude.Text)
+startOnDemandReplicationRunResponse_replicationRunId = Lens.lens (\StartOnDemandReplicationRunResponse' {replicationRunId} -> replicationRunId) (\s@StartOnDemandReplicationRunResponse' {} a -> s {replicationRunId = a} :: StartOnDemandReplicationRunResponse)
+
+-- | The response's http status code.
+startOnDemandReplicationRunResponse_httpStatus :: Lens.Lens' StartOnDemandReplicationRunResponse Prelude.Int
+startOnDemandReplicationRunResponse_httpStatus = Lens.lens (\StartOnDemandReplicationRunResponse' {httpStatus} -> httpStatus) (\s@StartOnDemandReplicationRunResponse' {} a -> s {httpStatus = a} :: StartOnDemandReplicationRunResponse)
+
+instance
+  Prelude.NFData
+    StartOnDemandReplicationRunResponse
+  where
+  rnf StartOnDemandReplicationRunResponse' {..} =
+    Prelude.rnf replicationRunId
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/StopAppReplication.hs b/gen/Amazonka/SMS/StopAppReplication.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/StopAppReplication.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.SMS.StopAppReplication
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops replicating the specified application by deleting the replication
+-- job for each server in the application.
+module Amazonka.SMS.StopAppReplication
+  ( -- * Creating a Request
+    StopAppReplication (..),
+    newStopAppReplication,
+
+    -- * Request Lenses
+    stopAppReplication_appId,
+
+    -- * Destructuring the Response
+    StopAppReplicationResponse (..),
+    newStopAppReplicationResponse,
+
+    -- * Response Lenses
+    stopAppReplicationResponse_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.SMS.Types
+
+-- | /See:/ 'newStopAppReplication' smart constructor.
+data StopAppReplication = StopAppReplication'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopAppReplication' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'stopAppReplication_appId' - The ID of the application.
+newStopAppReplication ::
+  StopAppReplication
+newStopAppReplication =
+  StopAppReplication' {appId = Prelude.Nothing}
+
+-- | The ID of the application.
+stopAppReplication_appId :: Lens.Lens' StopAppReplication (Prelude.Maybe Prelude.Text)
+stopAppReplication_appId = Lens.lens (\StopAppReplication' {appId} -> appId) (\s@StopAppReplication' {} a -> s {appId = a} :: StopAppReplication)
+
+instance Core.AWSRequest StopAppReplication where
+  type
+    AWSResponse StopAppReplication =
+      StopAppReplicationResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          StopAppReplicationResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable StopAppReplication where
+  hashWithSalt _salt StopAppReplication' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData StopAppReplication where
+  rnf StopAppReplication' {..} = Prelude.rnf appId
+
+instance Data.ToHeaders StopAppReplication where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.StopAppReplication" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON StopAppReplication where
+  toJSON StopAppReplication' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("appId" Data..=) Prelude.<$> appId]
+      )
+
+instance Data.ToPath StopAppReplication where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery StopAppReplication where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newStopAppReplicationResponse' smart constructor.
+data StopAppReplicationResponse = StopAppReplicationResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'StopAppReplicationResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'stopAppReplicationResponse_httpStatus' - The response's http status code.
+newStopAppReplicationResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  StopAppReplicationResponse
+newStopAppReplicationResponse pHttpStatus_ =
+  StopAppReplicationResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+stopAppReplicationResponse_httpStatus :: Lens.Lens' StopAppReplicationResponse Prelude.Int
+stopAppReplicationResponse_httpStatus = Lens.lens (\StopAppReplicationResponse' {httpStatus} -> httpStatus) (\s@StopAppReplicationResponse' {} a -> s {httpStatus = a} :: StopAppReplicationResponse)
+
+instance Prelude.NFData StopAppReplicationResponse where
+  rnf StopAppReplicationResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/TerminateApp.hs b/gen/Amazonka/SMS/TerminateApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/TerminateApp.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.TerminateApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Terminates the stack for the specified application.
+module Amazonka.SMS.TerminateApp
+  ( -- * Creating a Request
+    TerminateApp (..),
+    newTerminateApp,
+
+    -- * Request Lenses
+    terminateApp_appId,
+
+    -- * Destructuring the Response
+    TerminateAppResponse (..),
+    newTerminateAppResponse,
+
+    -- * Response Lenses
+    terminateAppResponse_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.SMS.Types
+
+-- | /See:/ 'newTerminateApp' smart constructor.
+data TerminateApp = TerminateApp'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateApp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'terminateApp_appId' - The ID of the application.
+newTerminateApp ::
+  TerminateApp
+newTerminateApp =
+  TerminateApp' {appId = Prelude.Nothing}
+
+-- | The ID of the application.
+terminateApp_appId :: Lens.Lens' TerminateApp (Prelude.Maybe Prelude.Text)
+terminateApp_appId = Lens.lens (\TerminateApp' {appId} -> appId) (\s@TerminateApp' {} a -> s {appId = a} :: TerminateApp)
+
+instance Core.AWSRequest TerminateApp where
+  type AWSResponse TerminateApp = TerminateAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          TerminateAppResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable TerminateApp where
+  hashWithSalt _salt TerminateApp' {..} =
+    _salt `Prelude.hashWithSalt` appId
+
+instance Prelude.NFData TerminateApp where
+  rnf TerminateApp' {..} = Prelude.rnf appId
+
+instance Data.ToHeaders TerminateApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.TerminateApp" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON TerminateApp where
+  toJSON TerminateApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("appId" Data..=) Prelude.<$> appId]
+      )
+
+instance Data.ToPath TerminateApp where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery TerminateApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newTerminateAppResponse' smart constructor.
+data TerminateAppResponse = TerminateAppResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'TerminateAppResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'terminateAppResponse_httpStatus' - The response's http status code.
+newTerminateAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  TerminateAppResponse
+newTerminateAppResponse pHttpStatus_ =
+  TerminateAppResponse' {httpStatus = pHttpStatus_}
+
+-- | The response's http status code.
+terminateAppResponse_httpStatus :: Lens.Lens' TerminateAppResponse Prelude.Int
+terminateAppResponse_httpStatus = Lens.lens (\TerminateAppResponse' {httpStatus} -> httpStatus) (\s@TerminateAppResponse' {} a -> s {httpStatus = a} :: TerminateAppResponse)
+
+instance Prelude.NFData TerminateAppResponse where
+  rnf TerminateAppResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/Types.hs b/gen/Amazonka/SMS/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types.hs
@@ -0,0 +1,559 @@
+{-# 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.SMS.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.SMS.Types
+  ( -- * Service Configuration
+    defaultService,
+
+    -- * Errors
+    _DryRunOperationException,
+    _InternalError,
+    _InvalidParameterException,
+    _MissingRequiredParameterException,
+    _NoConnectorsAvailableException,
+    _OperationNotPermittedException,
+    _ReplicationJobAlreadyExistsException,
+    _ReplicationJobNotFoundException,
+    _ReplicationRunLimitExceededException,
+    _ServerCannotBeReplicatedException,
+    _TemporarilyUnavailableException,
+    _UnauthorizedOperationException,
+
+    -- * AppLaunchConfigurationStatus
+    AppLaunchConfigurationStatus (..),
+
+    -- * AppLaunchStatus
+    AppLaunchStatus (..),
+
+    -- * AppReplicationConfigurationStatus
+    AppReplicationConfigurationStatus (..),
+
+    -- * AppReplicationStatus
+    AppReplicationStatus (..),
+
+    -- * AppStatus
+    AppStatus (..),
+
+    -- * AppValidationStrategy
+    AppValidationStrategy (..),
+
+    -- * ConnectorCapability
+    ConnectorCapability (..),
+
+    -- * ConnectorStatus
+    ConnectorStatus (..),
+
+    -- * LicenseType
+    LicenseType (..),
+
+    -- * OutputFormat
+    OutputFormat (..),
+
+    -- * ReplicationJobState
+    ReplicationJobState (..),
+
+    -- * ReplicationRunState
+    ReplicationRunState (..),
+
+    -- * ReplicationRunType
+    ReplicationRunType (..),
+
+    -- * ScriptType
+    ScriptType (..),
+
+    -- * ServerCatalogStatus
+    ServerCatalogStatus (..),
+
+    -- * ServerType
+    ServerType (..),
+
+    -- * ServerValidationStrategy
+    ServerValidationStrategy (..),
+
+    -- * ValidationStatus
+    ValidationStatus (..),
+
+    -- * VmManagerType
+    VmManagerType (..),
+
+    -- * AppSummary
+    AppSummary (..),
+    newAppSummary,
+    appSummary_appId,
+    appSummary_creationTime,
+    appSummary_description,
+    appSummary_importedAppId,
+    appSummary_lastModified,
+    appSummary_latestReplicationTime,
+    appSummary_launchConfigurationStatus,
+    appSummary_launchDetails,
+    appSummary_launchStatus,
+    appSummary_launchStatusMessage,
+    appSummary_name,
+    appSummary_replicationConfigurationStatus,
+    appSummary_replicationStatus,
+    appSummary_replicationStatusMessage,
+    appSummary_roleName,
+    appSummary_status,
+    appSummary_statusMessage,
+    appSummary_totalServerGroups,
+    appSummary_totalServers,
+
+    -- * AppValidationConfiguration
+    AppValidationConfiguration (..),
+    newAppValidationConfiguration,
+    appValidationConfiguration_appValidationStrategy,
+    appValidationConfiguration_name,
+    appValidationConfiguration_ssmValidationParameters,
+    appValidationConfiguration_validationId,
+
+    -- * AppValidationOutput
+    AppValidationOutput (..),
+    newAppValidationOutput,
+    appValidationOutput_ssmOutput,
+
+    -- * Connector
+    Connector (..),
+    newConnector,
+    connector_associatedOn,
+    connector_capabilityList,
+    connector_connectorId,
+    connector_ipAddress,
+    connector_macAddress,
+    connector_status,
+    connector_version,
+    connector_vmManagerId,
+    connector_vmManagerName,
+    connector_vmManagerType,
+
+    -- * LaunchDetails
+    LaunchDetails (..),
+    newLaunchDetails,
+    launchDetails_latestLaunchTime,
+    launchDetails_stackId,
+    launchDetails_stackName,
+
+    -- * NotificationContext
+    NotificationContext (..),
+    newNotificationContext,
+    notificationContext_status,
+    notificationContext_statusMessage,
+    notificationContext_validationId,
+
+    -- * ReplicationJob
+    ReplicationJob (..),
+    newReplicationJob,
+    replicationJob_description,
+    replicationJob_encrypted,
+    replicationJob_frequency,
+    replicationJob_kmsKeyId,
+    replicationJob_latestAmiId,
+    replicationJob_licenseType,
+    replicationJob_nextReplicationRunStartTime,
+    replicationJob_numberOfRecentAmisToKeep,
+    replicationJob_replicationJobId,
+    replicationJob_replicationRunList,
+    replicationJob_roleName,
+    replicationJob_runOnce,
+    replicationJob_seedReplicationTime,
+    replicationJob_serverId,
+    replicationJob_serverType,
+    replicationJob_state,
+    replicationJob_statusMessage,
+    replicationJob_vmServer,
+
+    -- * ReplicationRun
+    ReplicationRun (..),
+    newReplicationRun,
+    replicationRun_amiId,
+    replicationRun_completedTime,
+    replicationRun_description,
+    replicationRun_encrypted,
+    replicationRun_kmsKeyId,
+    replicationRun_replicationRunId,
+    replicationRun_scheduledStartTime,
+    replicationRun_stageDetails,
+    replicationRun_state,
+    replicationRun_statusMessage,
+    replicationRun_type,
+
+    -- * ReplicationRunStageDetails
+    ReplicationRunStageDetails (..),
+    newReplicationRunStageDetails,
+    replicationRunStageDetails_stage,
+    replicationRunStageDetails_stageProgress,
+
+    -- * S3Location
+    S3Location (..),
+    newS3Location,
+    s3Location_bucket,
+    s3Location_key,
+
+    -- * SSMOutput
+    SSMOutput (..),
+    newSSMOutput,
+    sSMOutput_s3Location,
+
+    -- * SSMValidationParameters
+    SSMValidationParameters (..),
+    newSSMValidationParameters,
+    sSMValidationParameters_command,
+    sSMValidationParameters_executionTimeoutSeconds,
+    sSMValidationParameters_instanceId,
+    sSMValidationParameters_outputS3BucketName,
+    sSMValidationParameters_scriptType,
+    sSMValidationParameters_source,
+
+    -- * Server
+    Server (..),
+    newServer,
+    server_replicationJobId,
+    server_replicationJobTerminated,
+    server_serverId,
+    server_serverType,
+    server_vmServer,
+
+    -- * ServerGroup
+    ServerGroup (..),
+    newServerGroup,
+    serverGroup_name,
+    serverGroup_serverGroupId,
+    serverGroup_serverList,
+
+    -- * ServerGroupLaunchConfiguration
+    ServerGroupLaunchConfiguration (..),
+    newServerGroupLaunchConfiguration,
+    serverGroupLaunchConfiguration_launchOrder,
+    serverGroupLaunchConfiguration_serverGroupId,
+    serverGroupLaunchConfiguration_serverLaunchConfigurations,
+
+    -- * ServerGroupReplicationConfiguration
+    ServerGroupReplicationConfiguration (..),
+    newServerGroupReplicationConfiguration,
+    serverGroupReplicationConfiguration_serverGroupId,
+    serverGroupReplicationConfiguration_serverReplicationConfigurations,
+
+    -- * ServerGroupValidationConfiguration
+    ServerGroupValidationConfiguration (..),
+    newServerGroupValidationConfiguration,
+    serverGroupValidationConfiguration_serverGroupId,
+    serverGroupValidationConfiguration_serverValidationConfigurations,
+
+    -- * ServerLaunchConfiguration
+    ServerLaunchConfiguration (..),
+    newServerLaunchConfiguration,
+    serverLaunchConfiguration_associatePublicIpAddress,
+    serverLaunchConfiguration_configureScript,
+    serverLaunchConfiguration_configureScriptType,
+    serverLaunchConfiguration_ec2KeyName,
+    serverLaunchConfiguration_iamInstanceProfileName,
+    serverLaunchConfiguration_instanceType,
+    serverLaunchConfiguration_logicalId,
+    serverLaunchConfiguration_securityGroup,
+    serverLaunchConfiguration_server,
+    serverLaunchConfiguration_subnet,
+    serverLaunchConfiguration_userData,
+    serverLaunchConfiguration_vpc,
+
+    -- * ServerReplicationConfiguration
+    ServerReplicationConfiguration (..),
+    newServerReplicationConfiguration,
+    serverReplicationConfiguration_server,
+    serverReplicationConfiguration_serverReplicationParameters,
+
+    -- * ServerReplicationParameters
+    ServerReplicationParameters (..),
+    newServerReplicationParameters,
+    serverReplicationParameters_encrypted,
+    serverReplicationParameters_frequency,
+    serverReplicationParameters_kmsKeyId,
+    serverReplicationParameters_licenseType,
+    serverReplicationParameters_numberOfRecentAmisToKeep,
+    serverReplicationParameters_runOnce,
+    serverReplicationParameters_seedTime,
+
+    -- * ServerValidationConfiguration
+    ServerValidationConfiguration (..),
+    newServerValidationConfiguration,
+    serverValidationConfiguration_name,
+    serverValidationConfiguration_server,
+    serverValidationConfiguration_serverValidationStrategy,
+    serverValidationConfiguration_userDataValidationParameters,
+    serverValidationConfiguration_validationId,
+
+    -- * ServerValidationOutput
+    ServerValidationOutput (..),
+    newServerValidationOutput,
+    serverValidationOutput_server,
+
+    -- * Source
+    Source (..),
+    newSource,
+    source_s3Location,
+
+    -- * Tag
+    Tag (..),
+    newTag,
+    tag_key,
+    tag_value,
+
+    -- * UserData
+    UserData (..),
+    newUserData,
+    userData_s3Location,
+
+    -- * UserDataValidationParameters
+    UserDataValidationParameters (..),
+    newUserDataValidationParameters,
+    userDataValidationParameters_scriptType,
+    userDataValidationParameters_source,
+
+    -- * ValidationOutput
+    ValidationOutput (..),
+    newValidationOutput,
+    validationOutput_appValidationOutput,
+    validationOutput_latestValidationTime,
+    validationOutput_name,
+    validationOutput_serverValidationOutput,
+    validationOutput_status,
+    validationOutput_statusMessage,
+    validationOutput_validationId,
+
+    -- * VmServer
+    VmServer (..),
+    newVmServer,
+    vmServer_vmManagerName,
+    vmServer_vmManagerType,
+    vmServer_vmName,
+    vmServer_vmPath,
+    vmServer_vmServerAddress,
+
+    -- * VmServerAddress
+    VmServerAddress (..),
+    newVmServerAddress,
+    vmServerAddress_vmId,
+    vmServerAddress_vmManagerId,
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Prelude as Prelude
+import Amazonka.SMS.Types.AppLaunchConfigurationStatus
+import Amazonka.SMS.Types.AppLaunchStatus
+import Amazonka.SMS.Types.AppReplicationConfigurationStatus
+import Amazonka.SMS.Types.AppReplicationStatus
+import Amazonka.SMS.Types.AppStatus
+import Amazonka.SMS.Types.AppSummary
+import Amazonka.SMS.Types.AppValidationConfiguration
+import Amazonka.SMS.Types.AppValidationOutput
+import Amazonka.SMS.Types.AppValidationStrategy
+import Amazonka.SMS.Types.Connector
+import Amazonka.SMS.Types.ConnectorCapability
+import Amazonka.SMS.Types.ConnectorStatus
+import Amazonka.SMS.Types.LaunchDetails
+import Amazonka.SMS.Types.LicenseType
+import Amazonka.SMS.Types.NotificationContext
+import Amazonka.SMS.Types.OutputFormat
+import Amazonka.SMS.Types.ReplicationJob
+import Amazonka.SMS.Types.ReplicationJobState
+import Amazonka.SMS.Types.ReplicationRun
+import Amazonka.SMS.Types.ReplicationRunStageDetails
+import Amazonka.SMS.Types.ReplicationRunState
+import Amazonka.SMS.Types.ReplicationRunType
+import Amazonka.SMS.Types.S3Location
+import Amazonka.SMS.Types.SSMOutput
+import Amazonka.SMS.Types.SSMValidationParameters
+import Amazonka.SMS.Types.ScriptType
+import Amazonka.SMS.Types.Server
+import Amazonka.SMS.Types.ServerCatalogStatus
+import Amazonka.SMS.Types.ServerGroup
+import Amazonka.SMS.Types.ServerGroupLaunchConfiguration
+import Amazonka.SMS.Types.ServerGroupReplicationConfiguration
+import Amazonka.SMS.Types.ServerGroupValidationConfiguration
+import Amazonka.SMS.Types.ServerLaunchConfiguration
+import Amazonka.SMS.Types.ServerReplicationConfiguration
+import Amazonka.SMS.Types.ServerReplicationParameters
+import Amazonka.SMS.Types.ServerType
+import Amazonka.SMS.Types.ServerValidationConfiguration
+import Amazonka.SMS.Types.ServerValidationOutput
+import Amazonka.SMS.Types.ServerValidationStrategy
+import Amazonka.SMS.Types.Source
+import Amazonka.SMS.Types.Tag
+import Amazonka.SMS.Types.UserData
+import Amazonka.SMS.Types.UserDataValidationParameters
+import Amazonka.SMS.Types.ValidationOutput
+import Amazonka.SMS.Types.ValidationStatus
+import Amazonka.SMS.Types.VmManagerType
+import Amazonka.SMS.Types.VmServer
+import Amazonka.SMS.Types.VmServerAddress
+import qualified Amazonka.Sign.V4 as Sign
+
+-- | API version @2016-10-24@ of the Amazon Server Migration Service SDK configuration.
+defaultService :: Core.Service
+defaultService =
+  Core.Service
+    { Core.abbrev = "SMS",
+      Core.signer = Sign.v4,
+      Core.endpointPrefix = "sms",
+      Core.signingName = "sms",
+      Core.version = "2016-10-24",
+      Core.s3AddressingStyle = Core.S3AddressingStyleAuto,
+      Core.endpoint = Core.defaultEndpoint defaultService,
+      Core.timeout = Prelude.Just 70,
+      Core.check = Core.statusSuccess,
+      Core.error = Core.parseJSONError "SMS",
+      Core.retry = retry
+    }
+  where
+    retry =
+      Core.Exponential
+        { Core.base = 5.0e-2,
+          Core.growth = 2,
+          Core.attempts = 5,
+          Core.check = check
+        }
+    check e
+      | Lens.has (Core.hasStatus 502) e =
+          Prelude.Just "bad_gateway"
+      | Lens.has (Core.hasStatus 504) e =
+          Prelude.Just "gateway_timeout"
+      | Lens.has (Core.hasStatus 500) e =
+          Prelude.Just "general_server_error"
+      | Lens.has (Core.hasStatus 509) e =
+          Prelude.Just "limit_exceeded"
+      | Lens.has
+          ( Core.hasCode "RequestThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "request_throttled_exception"
+      | Lens.has (Core.hasStatus 503) e =
+          Prelude.Just "service_unavailable"
+      | Lens.has
+          ( Core.hasCode "ThrottledException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttled_exception"
+      | Lens.has
+          ( Core.hasCode "Throttling"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling"
+      | Lens.has
+          ( Core.hasCode "ThrottlingException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throttling_exception"
+      | Lens.has
+          ( Core.hasCode
+              "ProvisionedThroughputExceededException"
+              Prelude.. Core.hasStatus 400
+          )
+          e =
+          Prelude.Just "throughput_exceeded"
+      | Lens.has (Core.hasStatus 429) e =
+          Prelude.Just "too_many_requests"
+      | Prelude.otherwise = Prelude.Nothing
+
+-- | The user has the required permissions, so the request would have
+-- succeeded, but a dry run was performed.
+_DryRunOperationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_DryRunOperationException =
+  Core._MatchServiceError
+    defaultService
+    "DryRunOperationException"
+
+-- | An internal error occurred.
+_InternalError :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InternalError =
+  Core._MatchServiceError
+    defaultService
+    "InternalError"
+
+-- | A specified parameter is not valid.
+_InvalidParameterException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_InvalidParameterException =
+  Core._MatchServiceError
+    defaultService
+    "InvalidParameterException"
+
+-- | A required parameter is missing.
+_MissingRequiredParameterException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_MissingRequiredParameterException =
+  Core._MatchServiceError
+    defaultService
+    "MissingRequiredParameterException"
+
+-- | There are no connectors available.
+_NoConnectorsAvailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_NoConnectorsAvailableException =
+  Core._MatchServiceError
+    defaultService
+    "NoConnectorsAvailableException"
+
+-- | This operation is not allowed.
+_OperationNotPermittedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_OperationNotPermittedException =
+  Core._MatchServiceError
+    defaultService
+    "OperationNotPermittedException"
+
+-- | The specified replication job already exists.
+_ReplicationJobAlreadyExistsException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ReplicationJobAlreadyExistsException =
+  Core._MatchServiceError
+    defaultService
+    "ReplicationJobAlreadyExistsException"
+
+-- | The specified replication job does not exist.
+_ReplicationJobNotFoundException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ReplicationJobNotFoundException =
+  Core._MatchServiceError
+    defaultService
+    "ReplicationJobNotFoundException"
+
+-- | You have exceeded the number of on-demand replication runs you can
+-- request in a 24-hour period.
+_ReplicationRunLimitExceededException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ReplicationRunLimitExceededException =
+  Core._MatchServiceError
+    defaultService
+    "ReplicationRunLimitExceededException"
+
+-- | The specified server cannot be replicated.
+_ServerCannotBeReplicatedException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_ServerCannotBeReplicatedException =
+  Core._MatchServiceError
+    defaultService
+    "ServerCannotBeReplicatedException"
+
+-- | The service is temporarily unavailable.
+_TemporarilyUnavailableException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_TemporarilyUnavailableException =
+  Core._MatchServiceError
+    defaultService
+    "TemporarilyUnavailableException"
+
+-- | You lack permissions needed to perform this operation. Check your IAM
+-- policies, and ensure that you are using the correct access keys.
+_UnauthorizedOperationException :: (Core.AsError a) => Lens.Fold a Core.ServiceError
+_UnauthorizedOperationException =
+  Core._MatchServiceError
+    defaultService
+    "UnauthorizedOperationException"
diff --git a/gen/Amazonka/SMS/Types/AppLaunchConfigurationStatus.hs b/gen/Amazonka/SMS/Types/AppLaunchConfigurationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/AppLaunchConfigurationStatus.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.SMS.Types.AppLaunchConfigurationStatus
+-- 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.SMS.Types.AppLaunchConfigurationStatus
+  ( AppLaunchConfigurationStatus
+      ( ..,
+        AppLaunchConfigurationStatus_CONFIGURED,
+        AppLaunchConfigurationStatus_NOT_CONFIGURED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppLaunchConfigurationStatus = AppLaunchConfigurationStatus'
+  { fromAppLaunchConfigurationStatus ::
+      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 AppLaunchConfigurationStatus_CONFIGURED :: AppLaunchConfigurationStatus
+pattern AppLaunchConfigurationStatus_CONFIGURED = AppLaunchConfigurationStatus' "CONFIGURED"
+
+pattern AppLaunchConfigurationStatus_NOT_CONFIGURED :: AppLaunchConfigurationStatus
+pattern AppLaunchConfigurationStatus_NOT_CONFIGURED = AppLaunchConfigurationStatus' "NOT_CONFIGURED"
+
+{-# COMPLETE
+  AppLaunchConfigurationStatus_CONFIGURED,
+  AppLaunchConfigurationStatus_NOT_CONFIGURED,
+  AppLaunchConfigurationStatus'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/AppLaunchStatus.hs b/gen/Amazonka/SMS/Types/AppLaunchStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/AppLaunchStatus.hs
@@ -0,0 +1,136 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.AppLaunchStatus
+-- 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.SMS.Types.AppLaunchStatus
+  ( AppLaunchStatus
+      ( ..,
+        AppLaunchStatus_CONFIGURATION_INVALID,
+        AppLaunchStatus_CONFIGURATION_IN_PROGRESS,
+        AppLaunchStatus_DELTA_LAUNCH_FAILED,
+        AppLaunchStatus_DELTA_LAUNCH_IN_PROGRESS,
+        AppLaunchStatus_LAUNCHED,
+        AppLaunchStatus_LAUNCH_FAILED,
+        AppLaunchStatus_LAUNCH_IN_PROGRESS,
+        AppLaunchStatus_LAUNCH_PENDING,
+        AppLaunchStatus_PARTIALLY_LAUNCHED,
+        AppLaunchStatus_READY_FOR_CONFIGURATION,
+        AppLaunchStatus_READY_FOR_LAUNCH,
+        AppLaunchStatus_TERMINATED,
+        AppLaunchStatus_TERMINATE_FAILED,
+        AppLaunchStatus_TERMINATE_IN_PROGRESS,
+        AppLaunchStatus_VALIDATION_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppLaunchStatus = AppLaunchStatus'
+  { fromAppLaunchStatus ::
+      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 AppLaunchStatus_CONFIGURATION_INVALID :: AppLaunchStatus
+pattern AppLaunchStatus_CONFIGURATION_INVALID = AppLaunchStatus' "CONFIGURATION_INVALID"
+
+pattern AppLaunchStatus_CONFIGURATION_IN_PROGRESS :: AppLaunchStatus
+pattern AppLaunchStatus_CONFIGURATION_IN_PROGRESS = AppLaunchStatus' "CONFIGURATION_IN_PROGRESS"
+
+pattern AppLaunchStatus_DELTA_LAUNCH_FAILED :: AppLaunchStatus
+pattern AppLaunchStatus_DELTA_LAUNCH_FAILED = AppLaunchStatus' "DELTA_LAUNCH_FAILED"
+
+pattern AppLaunchStatus_DELTA_LAUNCH_IN_PROGRESS :: AppLaunchStatus
+pattern AppLaunchStatus_DELTA_LAUNCH_IN_PROGRESS = AppLaunchStatus' "DELTA_LAUNCH_IN_PROGRESS"
+
+pattern AppLaunchStatus_LAUNCHED :: AppLaunchStatus
+pattern AppLaunchStatus_LAUNCHED = AppLaunchStatus' "LAUNCHED"
+
+pattern AppLaunchStatus_LAUNCH_FAILED :: AppLaunchStatus
+pattern AppLaunchStatus_LAUNCH_FAILED = AppLaunchStatus' "LAUNCH_FAILED"
+
+pattern AppLaunchStatus_LAUNCH_IN_PROGRESS :: AppLaunchStatus
+pattern AppLaunchStatus_LAUNCH_IN_PROGRESS = AppLaunchStatus' "LAUNCH_IN_PROGRESS"
+
+pattern AppLaunchStatus_LAUNCH_PENDING :: AppLaunchStatus
+pattern AppLaunchStatus_LAUNCH_PENDING = AppLaunchStatus' "LAUNCH_PENDING"
+
+pattern AppLaunchStatus_PARTIALLY_LAUNCHED :: AppLaunchStatus
+pattern AppLaunchStatus_PARTIALLY_LAUNCHED = AppLaunchStatus' "PARTIALLY_LAUNCHED"
+
+pattern AppLaunchStatus_READY_FOR_CONFIGURATION :: AppLaunchStatus
+pattern AppLaunchStatus_READY_FOR_CONFIGURATION = AppLaunchStatus' "READY_FOR_CONFIGURATION"
+
+pattern AppLaunchStatus_READY_FOR_LAUNCH :: AppLaunchStatus
+pattern AppLaunchStatus_READY_FOR_LAUNCH = AppLaunchStatus' "READY_FOR_LAUNCH"
+
+pattern AppLaunchStatus_TERMINATED :: AppLaunchStatus
+pattern AppLaunchStatus_TERMINATED = AppLaunchStatus' "TERMINATED"
+
+pattern AppLaunchStatus_TERMINATE_FAILED :: AppLaunchStatus
+pattern AppLaunchStatus_TERMINATE_FAILED = AppLaunchStatus' "TERMINATE_FAILED"
+
+pattern AppLaunchStatus_TERMINATE_IN_PROGRESS :: AppLaunchStatus
+pattern AppLaunchStatus_TERMINATE_IN_PROGRESS = AppLaunchStatus' "TERMINATE_IN_PROGRESS"
+
+pattern AppLaunchStatus_VALIDATION_IN_PROGRESS :: AppLaunchStatus
+pattern AppLaunchStatus_VALIDATION_IN_PROGRESS = AppLaunchStatus' "VALIDATION_IN_PROGRESS"
+
+{-# COMPLETE
+  AppLaunchStatus_CONFIGURATION_INVALID,
+  AppLaunchStatus_CONFIGURATION_IN_PROGRESS,
+  AppLaunchStatus_DELTA_LAUNCH_FAILED,
+  AppLaunchStatus_DELTA_LAUNCH_IN_PROGRESS,
+  AppLaunchStatus_LAUNCHED,
+  AppLaunchStatus_LAUNCH_FAILED,
+  AppLaunchStatus_LAUNCH_IN_PROGRESS,
+  AppLaunchStatus_LAUNCH_PENDING,
+  AppLaunchStatus_PARTIALLY_LAUNCHED,
+  AppLaunchStatus_READY_FOR_CONFIGURATION,
+  AppLaunchStatus_READY_FOR_LAUNCH,
+  AppLaunchStatus_TERMINATED,
+  AppLaunchStatus_TERMINATE_FAILED,
+  AppLaunchStatus_TERMINATE_IN_PROGRESS,
+  AppLaunchStatus_VALIDATION_IN_PROGRESS,
+  AppLaunchStatus'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/AppReplicationConfigurationStatus.hs b/gen/Amazonka/SMS/Types/AppReplicationConfigurationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/AppReplicationConfigurationStatus.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.SMS.Types.AppReplicationConfigurationStatus
+-- 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.SMS.Types.AppReplicationConfigurationStatus
+  ( AppReplicationConfigurationStatus
+      ( ..,
+        AppReplicationConfigurationStatus_CONFIGURED,
+        AppReplicationConfigurationStatus_NOT_CONFIGURED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppReplicationConfigurationStatus = AppReplicationConfigurationStatus'
+  { fromAppReplicationConfigurationStatus ::
+      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 AppReplicationConfigurationStatus_CONFIGURED :: AppReplicationConfigurationStatus
+pattern AppReplicationConfigurationStatus_CONFIGURED = AppReplicationConfigurationStatus' "CONFIGURED"
+
+pattern AppReplicationConfigurationStatus_NOT_CONFIGURED :: AppReplicationConfigurationStatus
+pattern AppReplicationConfigurationStatus_NOT_CONFIGURED = AppReplicationConfigurationStatus' "NOT_CONFIGURED"
+
+{-# COMPLETE
+  AppReplicationConfigurationStatus_CONFIGURED,
+  AppReplicationConfigurationStatus_NOT_CONFIGURED,
+  AppReplicationConfigurationStatus'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/AppReplicationStatus.hs b/gen/Amazonka/SMS/Types/AppReplicationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/AppReplicationStatus.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.AppReplicationStatus
+-- 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.SMS.Types.AppReplicationStatus
+  ( AppReplicationStatus
+      ( ..,
+        AppReplicationStatus_CONFIGURATION_INVALID,
+        AppReplicationStatus_CONFIGURATION_IN_PROGRESS,
+        AppReplicationStatus_DELTA_REPLICATED,
+        AppReplicationStatus_DELTA_REPLICATION_FAILED,
+        AppReplicationStatus_DELTA_REPLICATION_IN_PROGRESS,
+        AppReplicationStatus_PARTIALLY_REPLICATED,
+        AppReplicationStatus_READY_FOR_CONFIGURATION,
+        AppReplicationStatus_READY_FOR_REPLICATION,
+        AppReplicationStatus_REPLICATED,
+        AppReplicationStatus_REPLICATION_FAILED,
+        AppReplicationStatus_REPLICATION_IN_PROGRESS,
+        AppReplicationStatus_REPLICATION_PENDING,
+        AppReplicationStatus_REPLICATION_STOPPED,
+        AppReplicationStatus_REPLICATION_STOPPING,
+        AppReplicationStatus_REPLICATION_STOP_FAILED,
+        AppReplicationStatus_VALIDATION_IN_PROGRESS
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppReplicationStatus = AppReplicationStatus'
+  { fromAppReplicationStatus ::
+      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 AppReplicationStatus_CONFIGURATION_INVALID :: AppReplicationStatus
+pattern AppReplicationStatus_CONFIGURATION_INVALID = AppReplicationStatus' "CONFIGURATION_INVALID"
+
+pattern AppReplicationStatus_CONFIGURATION_IN_PROGRESS :: AppReplicationStatus
+pattern AppReplicationStatus_CONFIGURATION_IN_PROGRESS = AppReplicationStatus' "CONFIGURATION_IN_PROGRESS"
+
+pattern AppReplicationStatus_DELTA_REPLICATED :: AppReplicationStatus
+pattern AppReplicationStatus_DELTA_REPLICATED = AppReplicationStatus' "DELTA_REPLICATED"
+
+pattern AppReplicationStatus_DELTA_REPLICATION_FAILED :: AppReplicationStatus
+pattern AppReplicationStatus_DELTA_REPLICATION_FAILED = AppReplicationStatus' "DELTA_REPLICATION_FAILED"
+
+pattern AppReplicationStatus_DELTA_REPLICATION_IN_PROGRESS :: AppReplicationStatus
+pattern AppReplicationStatus_DELTA_REPLICATION_IN_PROGRESS = AppReplicationStatus' "DELTA_REPLICATION_IN_PROGRESS"
+
+pattern AppReplicationStatus_PARTIALLY_REPLICATED :: AppReplicationStatus
+pattern AppReplicationStatus_PARTIALLY_REPLICATED = AppReplicationStatus' "PARTIALLY_REPLICATED"
+
+pattern AppReplicationStatus_READY_FOR_CONFIGURATION :: AppReplicationStatus
+pattern AppReplicationStatus_READY_FOR_CONFIGURATION = AppReplicationStatus' "READY_FOR_CONFIGURATION"
+
+pattern AppReplicationStatus_READY_FOR_REPLICATION :: AppReplicationStatus
+pattern AppReplicationStatus_READY_FOR_REPLICATION = AppReplicationStatus' "READY_FOR_REPLICATION"
+
+pattern AppReplicationStatus_REPLICATED :: AppReplicationStatus
+pattern AppReplicationStatus_REPLICATED = AppReplicationStatus' "REPLICATED"
+
+pattern AppReplicationStatus_REPLICATION_FAILED :: AppReplicationStatus
+pattern AppReplicationStatus_REPLICATION_FAILED = AppReplicationStatus' "REPLICATION_FAILED"
+
+pattern AppReplicationStatus_REPLICATION_IN_PROGRESS :: AppReplicationStatus
+pattern AppReplicationStatus_REPLICATION_IN_PROGRESS = AppReplicationStatus' "REPLICATION_IN_PROGRESS"
+
+pattern AppReplicationStatus_REPLICATION_PENDING :: AppReplicationStatus
+pattern AppReplicationStatus_REPLICATION_PENDING = AppReplicationStatus' "REPLICATION_PENDING"
+
+pattern AppReplicationStatus_REPLICATION_STOPPED :: AppReplicationStatus
+pattern AppReplicationStatus_REPLICATION_STOPPED = AppReplicationStatus' "REPLICATION_STOPPED"
+
+pattern AppReplicationStatus_REPLICATION_STOPPING :: AppReplicationStatus
+pattern AppReplicationStatus_REPLICATION_STOPPING = AppReplicationStatus' "REPLICATION_STOPPING"
+
+pattern AppReplicationStatus_REPLICATION_STOP_FAILED :: AppReplicationStatus
+pattern AppReplicationStatus_REPLICATION_STOP_FAILED = AppReplicationStatus' "REPLICATION_STOP_FAILED"
+
+pattern AppReplicationStatus_VALIDATION_IN_PROGRESS :: AppReplicationStatus
+pattern AppReplicationStatus_VALIDATION_IN_PROGRESS = AppReplicationStatus' "VALIDATION_IN_PROGRESS"
+
+{-# COMPLETE
+  AppReplicationStatus_CONFIGURATION_INVALID,
+  AppReplicationStatus_CONFIGURATION_IN_PROGRESS,
+  AppReplicationStatus_DELTA_REPLICATED,
+  AppReplicationStatus_DELTA_REPLICATION_FAILED,
+  AppReplicationStatus_DELTA_REPLICATION_IN_PROGRESS,
+  AppReplicationStatus_PARTIALLY_REPLICATED,
+  AppReplicationStatus_READY_FOR_CONFIGURATION,
+  AppReplicationStatus_READY_FOR_REPLICATION,
+  AppReplicationStatus_REPLICATED,
+  AppReplicationStatus_REPLICATION_FAILED,
+  AppReplicationStatus_REPLICATION_IN_PROGRESS,
+  AppReplicationStatus_REPLICATION_PENDING,
+  AppReplicationStatus_REPLICATION_STOPPED,
+  AppReplicationStatus_REPLICATION_STOPPING,
+  AppReplicationStatus_REPLICATION_STOP_FAILED,
+  AppReplicationStatus_VALIDATION_IN_PROGRESS,
+  AppReplicationStatus'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/AppStatus.hs b/gen/Amazonka/SMS/Types/AppStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/AppStatus.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.AppStatus
+-- 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.SMS.Types.AppStatus
+  ( AppStatus
+      ( ..,
+        AppStatus_ACTIVE,
+        AppStatus_CREATING,
+        AppStatus_DELETED,
+        AppStatus_DELETE_FAILED,
+        AppStatus_DELETING,
+        AppStatus_UPDATING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppStatus = AppStatus'
+  { fromAppStatus ::
+      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 AppStatus_ACTIVE :: AppStatus
+pattern AppStatus_ACTIVE = AppStatus' "ACTIVE"
+
+pattern AppStatus_CREATING :: AppStatus
+pattern AppStatus_CREATING = AppStatus' "CREATING"
+
+pattern AppStatus_DELETED :: AppStatus
+pattern AppStatus_DELETED = AppStatus' "DELETED"
+
+pattern AppStatus_DELETE_FAILED :: AppStatus
+pattern AppStatus_DELETE_FAILED = AppStatus' "DELETE_FAILED"
+
+pattern AppStatus_DELETING :: AppStatus
+pattern AppStatus_DELETING = AppStatus' "DELETING"
+
+pattern AppStatus_UPDATING :: AppStatus
+pattern AppStatus_UPDATING = AppStatus' "UPDATING"
+
+{-# COMPLETE
+  AppStatus_ACTIVE,
+  AppStatus_CREATING,
+  AppStatus_DELETED,
+  AppStatus_DELETE_FAILED,
+  AppStatus_DELETING,
+  AppStatus_UPDATING,
+  AppStatus'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/AppSummary.hs b/gen/Amazonka/SMS/Types/AppSummary.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/AppSummary.hs
@@ -0,0 +1,297 @@
+{-# 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.SMS.Types.AppSummary
+-- 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.SMS.Types.AppSummary 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.SMS.Types.AppLaunchConfigurationStatus
+import Amazonka.SMS.Types.AppLaunchStatus
+import Amazonka.SMS.Types.AppReplicationConfigurationStatus
+import Amazonka.SMS.Types.AppReplicationStatus
+import Amazonka.SMS.Types.AppStatus
+import Amazonka.SMS.Types.LaunchDetails
+
+-- | Information about the application.
+--
+-- /See:/ 'newAppSummary' smart constructor.
+data AppSummary = AppSummary'
+  { -- | The unique ID of the application.
+    appId :: Prelude.Maybe Prelude.Text,
+    -- | The creation time of the application.
+    creationTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the application.
+    importedAppId :: Prelude.Maybe Prelude.Text,
+    -- | The last modified time of the application.
+    lastModified :: Prelude.Maybe Data.POSIX,
+    -- | The timestamp of the application\'s most recent successful replication.
+    latestReplicationTime :: Prelude.Maybe Data.POSIX,
+    -- | Status of the launch configuration.
+    launchConfigurationStatus :: Prelude.Maybe AppLaunchConfigurationStatus,
+    -- | Details about the latest launch of the application.
+    launchDetails :: Prelude.Maybe LaunchDetails,
+    -- | The launch status of the application.
+    launchStatus :: Prelude.Maybe AppLaunchStatus,
+    -- | A message related to the launch status of the application.
+    launchStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The name of the application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | Status of the replication configuration.
+    replicationConfigurationStatus :: Prelude.Maybe AppReplicationConfigurationStatus,
+    -- | The replication status of the application.
+    replicationStatus :: Prelude.Maybe AppReplicationStatus,
+    -- | A message related to the replication status of the application.
+    replicationStatusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The name of the service role in the customer\'s account used by Server
+    -- Migration Service.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | Status of the application.
+    status :: Prelude.Maybe AppStatus,
+    -- | A message related to the status of the application
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The number of server groups present in the application.
+    totalServerGroups :: Prelude.Maybe Prelude.Int,
+    -- | The number of servers present in the application.
+    totalServers :: Prelude.Maybe Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppSummary' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'appSummary_appId' - The unique ID of the application.
+--
+-- 'creationTime', 'appSummary_creationTime' - The creation time of the application.
+--
+-- 'description', 'appSummary_description' - The description of the application.
+--
+-- 'importedAppId', 'appSummary_importedAppId' - The ID of the application.
+--
+-- 'lastModified', 'appSummary_lastModified' - The last modified time of the application.
+--
+-- 'latestReplicationTime', 'appSummary_latestReplicationTime' - The timestamp of the application\'s most recent successful replication.
+--
+-- 'launchConfigurationStatus', 'appSummary_launchConfigurationStatus' - Status of the launch configuration.
+--
+-- 'launchDetails', 'appSummary_launchDetails' - Details about the latest launch of the application.
+--
+-- 'launchStatus', 'appSummary_launchStatus' - The launch status of the application.
+--
+-- 'launchStatusMessage', 'appSummary_launchStatusMessage' - A message related to the launch status of the application.
+--
+-- 'name', 'appSummary_name' - The name of the application.
+--
+-- 'replicationConfigurationStatus', 'appSummary_replicationConfigurationStatus' - Status of the replication configuration.
+--
+-- 'replicationStatus', 'appSummary_replicationStatus' - The replication status of the application.
+--
+-- 'replicationStatusMessage', 'appSummary_replicationStatusMessage' - A message related to the replication status of the application.
+--
+-- 'roleName', 'appSummary_roleName' - The name of the service role in the customer\'s account used by Server
+-- Migration Service.
+--
+-- 'status', 'appSummary_status' - Status of the application.
+--
+-- 'statusMessage', 'appSummary_statusMessage' - A message related to the status of the application
+--
+-- 'totalServerGroups', 'appSummary_totalServerGroups' - The number of server groups present in the application.
+--
+-- 'totalServers', 'appSummary_totalServers' - The number of servers present in the application.
+newAppSummary ::
+  AppSummary
+newAppSummary =
+  AppSummary'
+    { appId = Prelude.Nothing,
+      creationTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      importedAppId = Prelude.Nothing,
+      lastModified = Prelude.Nothing,
+      latestReplicationTime = Prelude.Nothing,
+      launchConfigurationStatus = Prelude.Nothing,
+      launchDetails = Prelude.Nothing,
+      launchStatus = Prelude.Nothing,
+      launchStatusMessage = Prelude.Nothing,
+      name = Prelude.Nothing,
+      replicationConfigurationStatus = Prelude.Nothing,
+      replicationStatus = Prelude.Nothing,
+      replicationStatusMessage = Prelude.Nothing,
+      roleName = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      totalServerGroups = Prelude.Nothing,
+      totalServers = Prelude.Nothing
+    }
+
+-- | The unique ID of the application.
+appSummary_appId :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Text)
+appSummary_appId = Lens.lens (\AppSummary' {appId} -> appId) (\s@AppSummary' {} a -> s {appId = a} :: AppSummary)
+
+-- | The creation time of the application.
+appSummary_creationTime :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.UTCTime)
+appSummary_creationTime = Lens.lens (\AppSummary' {creationTime} -> creationTime) (\s@AppSummary' {} a -> s {creationTime = a} :: AppSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the application.
+appSummary_description :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Text)
+appSummary_description = Lens.lens (\AppSummary' {description} -> description) (\s@AppSummary' {} a -> s {description = a} :: AppSummary)
+
+-- | The ID of the application.
+appSummary_importedAppId :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Text)
+appSummary_importedAppId = Lens.lens (\AppSummary' {importedAppId} -> importedAppId) (\s@AppSummary' {} a -> s {importedAppId = a} :: AppSummary)
+
+-- | The last modified time of the application.
+appSummary_lastModified :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.UTCTime)
+appSummary_lastModified = Lens.lens (\AppSummary' {lastModified} -> lastModified) (\s@AppSummary' {} a -> s {lastModified = a} :: AppSummary) Prelude.. Lens.mapping Data._Time
+
+-- | The timestamp of the application\'s most recent successful replication.
+appSummary_latestReplicationTime :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.UTCTime)
+appSummary_latestReplicationTime = Lens.lens (\AppSummary' {latestReplicationTime} -> latestReplicationTime) (\s@AppSummary' {} a -> s {latestReplicationTime = a} :: AppSummary) Prelude.. Lens.mapping Data._Time
+
+-- | Status of the launch configuration.
+appSummary_launchConfigurationStatus :: Lens.Lens' AppSummary (Prelude.Maybe AppLaunchConfigurationStatus)
+appSummary_launchConfigurationStatus = Lens.lens (\AppSummary' {launchConfigurationStatus} -> launchConfigurationStatus) (\s@AppSummary' {} a -> s {launchConfigurationStatus = a} :: AppSummary)
+
+-- | Details about the latest launch of the application.
+appSummary_launchDetails :: Lens.Lens' AppSummary (Prelude.Maybe LaunchDetails)
+appSummary_launchDetails = Lens.lens (\AppSummary' {launchDetails} -> launchDetails) (\s@AppSummary' {} a -> s {launchDetails = a} :: AppSummary)
+
+-- | The launch status of the application.
+appSummary_launchStatus :: Lens.Lens' AppSummary (Prelude.Maybe AppLaunchStatus)
+appSummary_launchStatus = Lens.lens (\AppSummary' {launchStatus} -> launchStatus) (\s@AppSummary' {} a -> s {launchStatus = a} :: AppSummary)
+
+-- | A message related to the launch status of the application.
+appSummary_launchStatusMessage :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Text)
+appSummary_launchStatusMessage = Lens.lens (\AppSummary' {launchStatusMessage} -> launchStatusMessage) (\s@AppSummary' {} a -> s {launchStatusMessage = a} :: AppSummary)
+
+-- | The name of the application.
+appSummary_name :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Text)
+appSummary_name = Lens.lens (\AppSummary' {name} -> name) (\s@AppSummary' {} a -> s {name = a} :: AppSummary)
+
+-- | Status of the replication configuration.
+appSummary_replicationConfigurationStatus :: Lens.Lens' AppSummary (Prelude.Maybe AppReplicationConfigurationStatus)
+appSummary_replicationConfigurationStatus = Lens.lens (\AppSummary' {replicationConfigurationStatus} -> replicationConfigurationStatus) (\s@AppSummary' {} a -> s {replicationConfigurationStatus = a} :: AppSummary)
+
+-- | The replication status of the application.
+appSummary_replicationStatus :: Lens.Lens' AppSummary (Prelude.Maybe AppReplicationStatus)
+appSummary_replicationStatus = Lens.lens (\AppSummary' {replicationStatus} -> replicationStatus) (\s@AppSummary' {} a -> s {replicationStatus = a} :: AppSummary)
+
+-- | A message related to the replication status of the application.
+appSummary_replicationStatusMessage :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Text)
+appSummary_replicationStatusMessage = Lens.lens (\AppSummary' {replicationStatusMessage} -> replicationStatusMessage) (\s@AppSummary' {} a -> s {replicationStatusMessage = a} :: AppSummary)
+
+-- | The name of the service role in the customer\'s account used by Server
+-- Migration Service.
+appSummary_roleName :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Text)
+appSummary_roleName = Lens.lens (\AppSummary' {roleName} -> roleName) (\s@AppSummary' {} a -> s {roleName = a} :: AppSummary)
+
+-- | Status of the application.
+appSummary_status :: Lens.Lens' AppSummary (Prelude.Maybe AppStatus)
+appSummary_status = Lens.lens (\AppSummary' {status} -> status) (\s@AppSummary' {} a -> s {status = a} :: AppSummary)
+
+-- | A message related to the status of the application
+appSummary_statusMessage :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Text)
+appSummary_statusMessage = Lens.lens (\AppSummary' {statusMessage} -> statusMessage) (\s@AppSummary' {} a -> s {statusMessage = a} :: AppSummary)
+
+-- | The number of server groups present in the application.
+appSummary_totalServerGroups :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Int)
+appSummary_totalServerGroups = Lens.lens (\AppSummary' {totalServerGroups} -> totalServerGroups) (\s@AppSummary' {} a -> s {totalServerGroups = a} :: AppSummary)
+
+-- | The number of servers present in the application.
+appSummary_totalServers :: Lens.Lens' AppSummary (Prelude.Maybe Prelude.Int)
+appSummary_totalServers = Lens.lens (\AppSummary' {totalServers} -> totalServers) (\s@AppSummary' {} a -> s {totalServers = a} :: AppSummary)
+
+instance Data.FromJSON AppSummary where
+  parseJSON =
+    Data.withObject
+      "AppSummary"
+      ( \x ->
+          AppSummary'
+            Prelude.<$> (x Data..:? "appId")
+            Prelude.<*> (x Data..:? "creationTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "importedAppId")
+            Prelude.<*> (x Data..:? "lastModified")
+            Prelude.<*> (x Data..:? "latestReplicationTime")
+            Prelude.<*> (x Data..:? "launchConfigurationStatus")
+            Prelude.<*> (x Data..:? "launchDetails")
+            Prelude.<*> (x Data..:? "launchStatus")
+            Prelude.<*> (x Data..:? "launchStatusMessage")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "replicationConfigurationStatus")
+            Prelude.<*> (x Data..:? "replicationStatus")
+            Prelude.<*> (x Data..:? "replicationStatusMessage")
+            Prelude.<*> (x Data..:? "roleName")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "totalServerGroups")
+            Prelude.<*> (x Data..:? "totalServers")
+      )
+
+instance Prelude.Hashable AppSummary where
+  hashWithSalt _salt AppSummary' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` creationTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` importedAppId
+      `Prelude.hashWithSalt` lastModified
+      `Prelude.hashWithSalt` latestReplicationTime
+      `Prelude.hashWithSalt` launchConfigurationStatus
+      `Prelude.hashWithSalt` launchDetails
+      `Prelude.hashWithSalt` launchStatus
+      `Prelude.hashWithSalt` launchStatusMessage
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` replicationConfigurationStatus
+      `Prelude.hashWithSalt` replicationStatus
+      `Prelude.hashWithSalt` replicationStatusMessage
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` totalServerGroups
+      `Prelude.hashWithSalt` totalServers
+
+instance Prelude.NFData AppSummary where
+  rnf AppSummary' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf creationTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf importedAppId
+      `Prelude.seq` Prelude.rnf lastModified
+      `Prelude.seq` Prelude.rnf latestReplicationTime
+      `Prelude.seq` Prelude.rnf launchConfigurationStatus
+      `Prelude.seq` Prelude.rnf launchDetails
+      `Prelude.seq` Prelude.rnf launchStatus
+      `Prelude.seq` Prelude.rnf launchStatusMessage
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf replicationConfigurationStatus
+      `Prelude.seq` Prelude.rnf replicationStatus
+      `Prelude.seq` Prelude.rnf replicationStatusMessage
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf totalServerGroups
+      `Prelude.seq` Prelude.rnf totalServers
diff --git a/gen/Amazonka/SMS/Types/AppValidationConfiguration.hs b/gen/Amazonka/SMS/Types/AppValidationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/AppValidationConfiguration.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.AppValidationConfiguration
+-- 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.SMS.Types.AppValidationConfiguration 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.SMS.Types.AppValidationStrategy
+import Amazonka.SMS.Types.SSMValidationParameters
+
+-- | Configuration for validating an application.
+--
+-- /See:/ 'newAppValidationConfiguration' smart constructor.
+data AppValidationConfiguration = AppValidationConfiguration'
+  { -- | The validation strategy.
+    appValidationStrategy :: Prelude.Maybe AppValidationStrategy,
+    -- | The name of the configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The validation parameters.
+    ssmValidationParameters :: Prelude.Maybe SSMValidationParameters,
+    -- | The ID of the validation.
+    validationId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppValidationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appValidationStrategy', 'appValidationConfiguration_appValidationStrategy' - The validation strategy.
+--
+-- 'name', 'appValidationConfiguration_name' - The name of the configuration.
+--
+-- 'ssmValidationParameters', 'appValidationConfiguration_ssmValidationParameters' - The validation parameters.
+--
+-- 'validationId', 'appValidationConfiguration_validationId' - The ID of the validation.
+newAppValidationConfiguration ::
+  AppValidationConfiguration
+newAppValidationConfiguration =
+  AppValidationConfiguration'
+    { appValidationStrategy =
+        Prelude.Nothing,
+      name = Prelude.Nothing,
+      ssmValidationParameters = Prelude.Nothing,
+      validationId = Prelude.Nothing
+    }
+
+-- | The validation strategy.
+appValidationConfiguration_appValidationStrategy :: Lens.Lens' AppValidationConfiguration (Prelude.Maybe AppValidationStrategy)
+appValidationConfiguration_appValidationStrategy = Lens.lens (\AppValidationConfiguration' {appValidationStrategy} -> appValidationStrategy) (\s@AppValidationConfiguration' {} a -> s {appValidationStrategy = a} :: AppValidationConfiguration)
+
+-- | The name of the configuration.
+appValidationConfiguration_name :: Lens.Lens' AppValidationConfiguration (Prelude.Maybe Prelude.Text)
+appValidationConfiguration_name = Lens.lens (\AppValidationConfiguration' {name} -> name) (\s@AppValidationConfiguration' {} a -> s {name = a} :: AppValidationConfiguration)
+
+-- | The validation parameters.
+appValidationConfiguration_ssmValidationParameters :: Lens.Lens' AppValidationConfiguration (Prelude.Maybe SSMValidationParameters)
+appValidationConfiguration_ssmValidationParameters = Lens.lens (\AppValidationConfiguration' {ssmValidationParameters} -> ssmValidationParameters) (\s@AppValidationConfiguration' {} a -> s {ssmValidationParameters = a} :: AppValidationConfiguration)
+
+-- | The ID of the validation.
+appValidationConfiguration_validationId :: Lens.Lens' AppValidationConfiguration (Prelude.Maybe Prelude.Text)
+appValidationConfiguration_validationId = Lens.lens (\AppValidationConfiguration' {validationId} -> validationId) (\s@AppValidationConfiguration' {} a -> s {validationId = a} :: AppValidationConfiguration)
+
+instance Data.FromJSON AppValidationConfiguration where
+  parseJSON =
+    Data.withObject
+      "AppValidationConfiguration"
+      ( \x ->
+          AppValidationConfiguration'
+            Prelude.<$> (x Data..:? "appValidationStrategy")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "ssmValidationParameters")
+            Prelude.<*> (x Data..:? "validationId")
+      )
+
+instance Prelude.Hashable AppValidationConfiguration where
+  hashWithSalt _salt AppValidationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` appValidationStrategy
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` ssmValidationParameters
+      `Prelude.hashWithSalt` validationId
+
+instance Prelude.NFData AppValidationConfiguration where
+  rnf AppValidationConfiguration' {..} =
+    Prelude.rnf appValidationStrategy
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf ssmValidationParameters
+      `Prelude.seq` Prelude.rnf validationId
+
+instance Data.ToJSON AppValidationConfiguration where
+  toJSON AppValidationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appValidationStrategy" Data..=)
+              Prelude.<$> appValidationStrategy,
+            ("name" Data..=) Prelude.<$> name,
+            ("ssmValidationParameters" Data..=)
+              Prelude.<$> ssmValidationParameters,
+            ("validationId" Data..=) Prelude.<$> validationId
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/AppValidationOutput.hs b/gen/Amazonka/SMS/Types/AppValidationOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/AppValidationOutput.hs
@@ -0,0 +1,69 @@
+{-# 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.SMS.Types.AppValidationOutput
+-- 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.SMS.Types.AppValidationOutput 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.SMS.Types.SSMOutput
+
+-- | Output from validating an application.
+--
+-- /See:/ 'newAppValidationOutput' smart constructor.
+data AppValidationOutput = AppValidationOutput'
+  { -- | Output from using SSM to validate the application.
+    ssmOutput :: Prelude.Maybe SSMOutput
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'AppValidationOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'ssmOutput', 'appValidationOutput_ssmOutput' - Output from using SSM to validate the application.
+newAppValidationOutput ::
+  AppValidationOutput
+newAppValidationOutput =
+  AppValidationOutput' {ssmOutput = Prelude.Nothing}
+
+-- | Output from using SSM to validate the application.
+appValidationOutput_ssmOutput :: Lens.Lens' AppValidationOutput (Prelude.Maybe SSMOutput)
+appValidationOutput_ssmOutput = Lens.lens (\AppValidationOutput' {ssmOutput} -> ssmOutput) (\s@AppValidationOutput' {} a -> s {ssmOutput = a} :: AppValidationOutput)
+
+instance Data.FromJSON AppValidationOutput where
+  parseJSON =
+    Data.withObject
+      "AppValidationOutput"
+      ( \x ->
+          AppValidationOutput'
+            Prelude.<$> (x Data..:? "ssmOutput")
+      )
+
+instance Prelude.Hashable AppValidationOutput where
+  hashWithSalt _salt AppValidationOutput' {..} =
+    _salt `Prelude.hashWithSalt` ssmOutput
+
+instance Prelude.NFData AppValidationOutput where
+  rnf AppValidationOutput' {..} = Prelude.rnf ssmOutput
diff --git a/gen/Amazonka/SMS/Types/AppValidationStrategy.hs b/gen/Amazonka/SMS/Types/AppValidationStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/AppValidationStrategy.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.SMS.Types.AppValidationStrategy
+-- 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.SMS.Types.AppValidationStrategy
+  ( AppValidationStrategy
+      ( ..,
+        AppValidationStrategy_SSM
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype AppValidationStrategy = AppValidationStrategy'
+  { fromAppValidationStrategy ::
+      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 AppValidationStrategy_SSM :: AppValidationStrategy
+pattern AppValidationStrategy_SSM = AppValidationStrategy' "SSM"
+
+{-# COMPLETE
+  AppValidationStrategy_SSM,
+  AppValidationStrategy'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/Connector.hs b/gen/Amazonka/SMS/Types/Connector.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/Connector.hs
@@ -0,0 +1,183 @@
+{-# 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.SMS.Types.Connector
+-- 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.SMS.Types.Connector 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.SMS.Types.ConnectorCapability
+import Amazonka.SMS.Types.ConnectorStatus
+import Amazonka.SMS.Types.VmManagerType
+
+-- | Represents a connector.
+--
+-- /See:/ 'newConnector' smart constructor.
+data Connector = Connector'
+  { -- | The time the connector was associated.
+    associatedOn :: Prelude.Maybe Data.POSIX,
+    -- | The capabilities of the connector.
+    capabilityList :: Prelude.Maybe [ConnectorCapability],
+    -- | The ID of the connector.
+    connectorId :: Prelude.Maybe Prelude.Text,
+    -- | The IP address of the connector.
+    ipAddress :: Prelude.Maybe Prelude.Text,
+    -- | The MAC address of the connector.
+    macAddress :: Prelude.Maybe Prelude.Text,
+    -- | The status of the connector.
+    status :: Prelude.Maybe ConnectorStatus,
+    -- | The connector version.
+    version :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VM manager.
+    vmManagerId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the VM manager.
+    vmManagerName :: Prelude.Maybe Prelude.Text,
+    -- | The VM management product.
+    vmManagerType :: Prelude.Maybe VmManagerType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Connector' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatedOn', 'connector_associatedOn' - The time the connector was associated.
+--
+-- 'capabilityList', 'connector_capabilityList' - The capabilities of the connector.
+--
+-- 'connectorId', 'connector_connectorId' - The ID of the connector.
+--
+-- 'ipAddress', 'connector_ipAddress' - The IP address of the connector.
+--
+-- 'macAddress', 'connector_macAddress' - The MAC address of the connector.
+--
+-- 'status', 'connector_status' - The status of the connector.
+--
+-- 'version', 'connector_version' - The connector version.
+--
+-- 'vmManagerId', 'connector_vmManagerId' - The ID of the VM manager.
+--
+-- 'vmManagerName', 'connector_vmManagerName' - The name of the VM manager.
+--
+-- 'vmManagerType', 'connector_vmManagerType' - The VM management product.
+newConnector ::
+  Connector
+newConnector =
+  Connector'
+    { associatedOn = Prelude.Nothing,
+      capabilityList = Prelude.Nothing,
+      connectorId = Prelude.Nothing,
+      ipAddress = Prelude.Nothing,
+      macAddress = Prelude.Nothing,
+      status = Prelude.Nothing,
+      version = Prelude.Nothing,
+      vmManagerId = Prelude.Nothing,
+      vmManagerName = Prelude.Nothing,
+      vmManagerType = Prelude.Nothing
+    }
+
+-- | The time the connector was associated.
+connector_associatedOn :: Lens.Lens' Connector (Prelude.Maybe Prelude.UTCTime)
+connector_associatedOn = Lens.lens (\Connector' {associatedOn} -> associatedOn) (\s@Connector' {} a -> s {associatedOn = a} :: Connector) Prelude.. Lens.mapping Data._Time
+
+-- | The capabilities of the connector.
+connector_capabilityList :: Lens.Lens' Connector (Prelude.Maybe [ConnectorCapability])
+connector_capabilityList = Lens.lens (\Connector' {capabilityList} -> capabilityList) (\s@Connector' {} a -> s {capabilityList = a} :: Connector) Prelude.. Lens.mapping Lens.coerced
+
+-- | The ID of the connector.
+connector_connectorId :: Lens.Lens' Connector (Prelude.Maybe Prelude.Text)
+connector_connectorId = Lens.lens (\Connector' {connectorId} -> connectorId) (\s@Connector' {} a -> s {connectorId = a} :: Connector)
+
+-- | The IP address of the connector.
+connector_ipAddress :: Lens.Lens' Connector (Prelude.Maybe Prelude.Text)
+connector_ipAddress = Lens.lens (\Connector' {ipAddress} -> ipAddress) (\s@Connector' {} a -> s {ipAddress = a} :: Connector)
+
+-- | The MAC address of the connector.
+connector_macAddress :: Lens.Lens' Connector (Prelude.Maybe Prelude.Text)
+connector_macAddress = Lens.lens (\Connector' {macAddress} -> macAddress) (\s@Connector' {} a -> s {macAddress = a} :: Connector)
+
+-- | The status of the connector.
+connector_status :: Lens.Lens' Connector (Prelude.Maybe ConnectorStatus)
+connector_status = Lens.lens (\Connector' {status} -> status) (\s@Connector' {} a -> s {status = a} :: Connector)
+
+-- | The connector version.
+connector_version :: Lens.Lens' Connector (Prelude.Maybe Prelude.Text)
+connector_version = Lens.lens (\Connector' {version} -> version) (\s@Connector' {} a -> s {version = a} :: Connector)
+
+-- | The ID of the VM manager.
+connector_vmManagerId :: Lens.Lens' Connector (Prelude.Maybe Prelude.Text)
+connector_vmManagerId = Lens.lens (\Connector' {vmManagerId} -> vmManagerId) (\s@Connector' {} a -> s {vmManagerId = a} :: Connector)
+
+-- | The name of the VM manager.
+connector_vmManagerName :: Lens.Lens' Connector (Prelude.Maybe Prelude.Text)
+connector_vmManagerName = Lens.lens (\Connector' {vmManagerName} -> vmManagerName) (\s@Connector' {} a -> s {vmManagerName = a} :: Connector)
+
+-- | The VM management product.
+connector_vmManagerType :: Lens.Lens' Connector (Prelude.Maybe VmManagerType)
+connector_vmManagerType = Lens.lens (\Connector' {vmManagerType} -> vmManagerType) (\s@Connector' {} a -> s {vmManagerType = a} :: Connector)
+
+instance Data.FromJSON Connector where
+  parseJSON =
+    Data.withObject
+      "Connector"
+      ( \x ->
+          Connector'
+            Prelude.<$> (x Data..:? "associatedOn")
+            Prelude.<*> (x Data..:? "capabilityList" Data..!= Prelude.mempty)
+            Prelude.<*> (x Data..:? "connectorId")
+            Prelude.<*> (x Data..:? "ipAddress")
+            Prelude.<*> (x Data..:? "macAddress")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "version")
+            Prelude.<*> (x Data..:? "vmManagerId")
+            Prelude.<*> (x Data..:? "vmManagerName")
+            Prelude.<*> (x Data..:? "vmManagerType")
+      )
+
+instance Prelude.Hashable Connector where
+  hashWithSalt _salt Connector' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatedOn
+      `Prelude.hashWithSalt` capabilityList
+      `Prelude.hashWithSalt` connectorId
+      `Prelude.hashWithSalt` ipAddress
+      `Prelude.hashWithSalt` macAddress
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` version
+      `Prelude.hashWithSalt` vmManagerId
+      `Prelude.hashWithSalt` vmManagerName
+      `Prelude.hashWithSalt` vmManagerType
+
+instance Prelude.NFData Connector where
+  rnf Connector' {..} =
+    Prelude.rnf associatedOn
+      `Prelude.seq` Prelude.rnf capabilityList
+      `Prelude.seq` Prelude.rnf connectorId
+      `Prelude.seq` Prelude.rnf ipAddress
+      `Prelude.seq` Prelude.rnf macAddress
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf version
+      `Prelude.seq` Prelude.rnf vmManagerId
+      `Prelude.seq` Prelude.rnf vmManagerName
+      `Prelude.seq` Prelude.rnf vmManagerType
diff --git a/gen/Amazonka/SMS/Types/ConnectorCapability.hs b/gen/Amazonka/SMS/Types/ConnectorCapability.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ConnectorCapability.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.SMS.Types.ConnectorCapability
+-- 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.SMS.Types.ConnectorCapability
+  ( ConnectorCapability
+      ( ..,
+        ConnectorCapability_HYPERV_MANAGER,
+        ConnectorCapability_SCVMM,
+        ConnectorCapability_SMS_OPTIMIZED,
+        ConnectorCapability_SNAPSHOT_BATCHING,
+        ConnectorCapability_VSPHERE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectorCapability = ConnectorCapability'
+  { fromConnectorCapability ::
+      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 ConnectorCapability_HYPERV_MANAGER :: ConnectorCapability
+pattern ConnectorCapability_HYPERV_MANAGER = ConnectorCapability' "HYPERV-MANAGER"
+
+pattern ConnectorCapability_SCVMM :: ConnectorCapability
+pattern ConnectorCapability_SCVMM = ConnectorCapability' "SCVMM"
+
+pattern ConnectorCapability_SMS_OPTIMIZED :: ConnectorCapability
+pattern ConnectorCapability_SMS_OPTIMIZED = ConnectorCapability' "SMS_OPTIMIZED"
+
+pattern ConnectorCapability_SNAPSHOT_BATCHING :: ConnectorCapability
+pattern ConnectorCapability_SNAPSHOT_BATCHING = ConnectorCapability' "SNAPSHOT_BATCHING"
+
+pattern ConnectorCapability_VSPHERE :: ConnectorCapability
+pattern ConnectorCapability_VSPHERE = ConnectorCapability' "VSPHERE"
+
+{-# COMPLETE
+  ConnectorCapability_HYPERV_MANAGER,
+  ConnectorCapability_SCVMM,
+  ConnectorCapability_SMS_OPTIMIZED,
+  ConnectorCapability_SNAPSHOT_BATCHING,
+  ConnectorCapability_VSPHERE,
+  ConnectorCapability'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/ConnectorStatus.hs b/gen/Amazonka/SMS/Types/ConnectorStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ConnectorStatus.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.SMS.Types.ConnectorStatus
+-- 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.SMS.Types.ConnectorStatus
+  ( ConnectorStatus
+      ( ..,
+        ConnectorStatus_HEALTHY,
+        ConnectorStatus_UNHEALTHY
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ConnectorStatus = ConnectorStatus'
+  { fromConnectorStatus ::
+      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 ConnectorStatus_HEALTHY :: ConnectorStatus
+pattern ConnectorStatus_HEALTHY = ConnectorStatus' "HEALTHY"
+
+pattern ConnectorStatus_UNHEALTHY :: ConnectorStatus
+pattern ConnectorStatus_UNHEALTHY = ConnectorStatus' "UNHEALTHY"
+
+{-# COMPLETE
+  ConnectorStatus_HEALTHY,
+  ConnectorStatus_UNHEALTHY,
+  ConnectorStatus'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/LaunchDetails.hs b/gen/Amazonka/SMS/Types/LaunchDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/LaunchDetails.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.LaunchDetails
+-- 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.SMS.Types.LaunchDetails 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
+
+-- | Details about the latest launch of an application.
+--
+-- /See:/ 'newLaunchDetails' smart constructor.
+data LaunchDetails = LaunchDetails'
+  { -- | The latest time that this application was launched successfully.
+    latestLaunchTime :: Prelude.Maybe Data.POSIX,
+    -- | The ID of the latest stack launched for this application.
+    stackId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the latest stack launched for this application.
+    stackName :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'LaunchDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'latestLaunchTime', 'launchDetails_latestLaunchTime' - The latest time that this application was launched successfully.
+--
+-- 'stackId', 'launchDetails_stackId' - The ID of the latest stack launched for this application.
+--
+-- 'stackName', 'launchDetails_stackName' - The name of the latest stack launched for this application.
+newLaunchDetails ::
+  LaunchDetails
+newLaunchDetails =
+  LaunchDetails'
+    { latestLaunchTime = Prelude.Nothing,
+      stackId = Prelude.Nothing,
+      stackName = Prelude.Nothing
+    }
+
+-- | The latest time that this application was launched successfully.
+launchDetails_latestLaunchTime :: Lens.Lens' LaunchDetails (Prelude.Maybe Prelude.UTCTime)
+launchDetails_latestLaunchTime = Lens.lens (\LaunchDetails' {latestLaunchTime} -> latestLaunchTime) (\s@LaunchDetails' {} a -> s {latestLaunchTime = a} :: LaunchDetails) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the latest stack launched for this application.
+launchDetails_stackId :: Lens.Lens' LaunchDetails (Prelude.Maybe Prelude.Text)
+launchDetails_stackId = Lens.lens (\LaunchDetails' {stackId} -> stackId) (\s@LaunchDetails' {} a -> s {stackId = a} :: LaunchDetails)
+
+-- | The name of the latest stack launched for this application.
+launchDetails_stackName :: Lens.Lens' LaunchDetails (Prelude.Maybe Prelude.Text)
+launchDetails_stackName = Lens.lens (\LaunchDetails' {stackName} -> stackName) (\s@LaunchDetails' {} a -> s {stackName = a} :: LaunchDetails)
+
+instance Data.FromJSON LaunchDetails where
+  parseJSON =
+    Data.withObject
+      "LaunchDetails"
+      ( \x ->
+          LaunchDetails'
+            Prelude.<$> (x Data..:? "latestLaunchTime")
+            Prelude.<*> (x Data..:? "stackId")
+            Prelude.<*> (x Data..:? "stackName")
+      )
+
+instance Prelude.Hashable LaunchDetails where
+  hashWithSalt _salt LaunchDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` latestLaunchTime
+      `Prelude.hashWithSalt` stackId
+      `Prelude.hashWithSalt` stackName
+
+instance Prelude.NFData LaunchDetails where
+  rnf LaunchDetails' {..} =
+    Prelude.rnf latestLaunchTime
+      `Prelude.seq` Prelude.rnf stackId
+      `Prelude.seq` Prelude.rnf stackName
diff --git a/gen/Amazonka/SMS/Types/LicenseType.hs b/gen/Amazonka/SMS/Types/LicenseType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/LicenseType.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.SMS.Types.LicenseType
+-- 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.SMS.Types.LicenseType
+  ( LicenseType
+      ( ..,
+        LicenseType_AWS,
+        LicenseType_BYOL
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype LicenseType = LicenseType'
+  { fromLicenseType ::
+      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 LicenseType_AWS :: LicenseType
+pattern LicenseType_AWS = LicenseType' "AWS"
+
+pattern LicenseType_BYOL :: LicenseType
+pattern LicenseType_BYOL = LicenseType' "BYOL"
+
+{-# COMPLETE
+  LicenseType_AWS,
+  LicenseType_BYOL,
+  LicenseType'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/NotificationContext.hs b/gen/Amazonka/SMS/Types/NotificationContext.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/NotificationContext.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.NotificationContext
+-- 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.SMS.Types.NotificationContext 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.SMS.Types.ValidationStatus
+
+-- | Contains the status of validating an application.
+--
+-- /See:/ 'newNotificationContext' smart constructor.
+data NotificationContext = NotificationContext'
+  { -- | The status of the validation.
+    status :: Prelude.Maybe ValidationStatus,
+    -- | The status message.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the validation.
+    validationId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'NotificationContext' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'notificationContext_status' - The status of the validation.
+--
+-- 'statusMessage', 'notificationContext_statusMessage' - The status message.
+--
+-- 'validationId', 'notificationContext_validationId' - The ID of the validation.
+newNotificationContext ::
+  NotificationContext
+newNotificationContext =
+  NotificationContext'
+    { status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      validationId = Prelude.Nothing
+    }
+
+-- | The status of the validation.
+notificationContext_status :: Lens.Lens' NotificationContext (Prelude.Maybe ValidationStatus)
+notificationContext_status = Lens.lens (\NotificationContext' {status} -> status) (\s@NotificationContext' {} a -> s {status = a} :: NotificationContext)
+
+-- | The status message.
+notificationContext_statusMessage :: Lens.Lens' NotificationContext (Prelude.Maybe Prelude.Text)
+notificationContext_statusMessage = Lens.lens (\NotificationContext' {statusMessage} -> statusMessage) (\s@NotificationContext' {} a -> s {statusMessage = a} :: NotificationContext)
+
+-- | The ID of the validation.
+notificationContext_validationId :: Lens.Lens' NotificationContext (Prelude.Maybe Prelude.Text)
+notificationContext_validationId = Lens.lens (\NotificationContext' {validationId} -> validationId) (\s@NotificationContext' {} a -> s {validationId = a} :: NotificationContext)
+
+instance Prelude.Hashable NotificationContext where
+  hashWithSalt _salt NotificationContext' {..} =
+    _salt
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` validationId
+
+instance Prelude.NFData NotificationContext where
+  rnf NotificationContext' {..} =
+    Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf validationId
+
+instance Data.ToJSON NotificationContext where
+  toJSON NotificationContext' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("status" Data..=) Prelude.<$> status,
+            ("statusMessage" Data..=) Prelude.<$> statusMessage,
+            ("validationId" Data..=) Prelude.<$> validationId
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/OutputFormat.hs b/gen/Amazonka/SMS/Types/OutputFormat.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/OutputFormat.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.SMS.Types.OutputFormat
+-- 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.SMS.Types.OutputFormat
+  ( OutputFormat
+      ( ..,
+        OutputFormat_JSON,
+        OutputFormat_YAML
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype OutputFormat = OutputFormat'
+  { fromOutputFormat ::
+      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 OutputFormat_JSON :: OutputFormat
+pattern OutputFormat_JSON = OutputFormat' "JSON"
+
+pattern OutputFormat_YAML :: OutputFormat
+pattern OutputFormat_YAML = OutputFormat' "YAML"
+
+{-# COMPLETE
+  OutputFormat_JSON,
+  OutputFormat_YAML,
+  OutputFormat'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/ReplicationJob.hs b/gen/Amazonka/SMS/Types/ReplicationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ReplicationJob.hs
@@ -0,0 +1,329 @@
+{-# 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.SMS.Types.ReplicationJob
+-- 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.SMS.Types.ReplicationJob 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.SMS.Types.LicenseType
+import Amazonka.SMS.Types.ReplicationJobState
+import Amazonka.SMS.Types.ReplicationRun
+import Amazonka.SMS.Types.ServerType
+import Amazonka.SMS.Types.VmServer
+
+-- | Represents a replication job.
+--
+-- /See:/ 'newReplicationJob' smart constructor.
+data ReplicationJob = ReplicationJob'
+  { -- | The description of the replication job.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the replication job should produce encrypted AMIs.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The time between consecutive replication runs, in hours.
+    frequency :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
+    -- This value can be any of the following:
+    --
+    -- -   KMS key ID
+    --
+    -- -   KMS key alias
+    --
+    -- -   ARN referring to the KMS key ID
+    --
+    -- -   ARN referring to the KMS key alias
+    --
+    -- If encrypted is enabled but a KMS key ID is not specified, the
+    -- customer\'s default KMS key for Amazon EBS is used.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the latest Amazon Machine Image (AMI).
+    latestAmiId :: Prelude.Maybe Prelude.Text,
+    -- | The license type to be used for the AMI created by a successful
+    -- replication run.
+    licenseType :: Prelude.Maybe LicenseType,
+    -- | The start time of the next replication run.
+    nextReplicationRunStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The number of recent AMIs to keep in the customer\'s account for a
+    -- replication job. By default, the value is set to zero, meaning that all
+    -- AMIs are kept.
+    numberOfRecentAmisToKeep :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the replication job.
+    replicationJobId :: Prelude.Maybe Prelude.Text,
+    -- | Information about the replication runs.
+    replicationRunList :: Prelude.Maybe [ReplicationRun],
+    -- | The name of the IAM role to be used by Server Migration Service.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether to run the replication job one time.
+    runOnce :: Prelude.Maybe Prelude.Bool,
+    -- | The seed replication time.
+    seedReplicationTime :: Prelude.Maybe Data.POSIX,
+    -- | The ID of the server.
+    serverId :: Prelude.Maybe Prelude.Text,
+    -- | The type of server.
+    serverType :: Prelude.Maybe ServerType,
+    -- | The state of the replication job.
+    state :: Prelude.Maybe ReplicationJobState,
+    -- | The description of the current status of the replication job.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | Information about the VM server.
+    vmServer :: Prelude.Maybe VmServer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplicationJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'replicationJob_description' - The description of the replication job.
+--
+-- 'encrypted', 'replicationJob_encrypted' - Indicates whether the replication job should produce encrypted AMIs.
+--
+-- 'frequency', 'replicationJob_frequency' - The time between consecutive replication runs, in hours.
+--
+-- 'kmsKeyId', 'replicationJob_kmsKeyId' - The ID of the KMS key for replication jobs that produce encrypted AMIs.
+-- This value can be any of the following:
+--
+-- -   KMS key ID
+--
+-- -   KMS key alias
+--
+-- -   ARN referring to the KMS key ID
+--
+-- -   ARN referring to the KMS key alias
+--
+-- If encrypted is enabled but a KMS key ID is not specified, the
+-- customer\'s default KMS key for Amazon EBS is used.
+--
+-- 'latestAmiId', 'replicationJob_latestAmiId' - The ID of the latest Amazon Machine Image (AMI).
+--
+-- 'licenseType', 'replicationJob_licenseType' - The license type to be used for the AMI created by a successful
+-- replication run.
+--
+-- 'nextReplicationRunStartTime', 'replicationJob_nextReplicationRunStartTime' - The start time of the next replication run.
+--
+-- 'numberOfRecentAmisToKeep', 'replicationJob_numberOfRecentAmisToKeep' - The number of recent AMIs to keep in the customer\'s account for a
+-- replication job. By default, the value is set to zero, meaning that all
+-- AMIs are kept.
+--
+-- 'replicationJobId', 'replicationJob_replicationJobId' - The ID of the replication job.
+--
+-- 'replicationRunList', 'replicationJob_replicationRunList' - Information about the replication runs.
+--
+-- 'roleName', 'replicationJob_roleName' - The name of the IAM role to be used by Server Migration Service.
+--
+-- 'runOnce', 'replicationJob_runOnce' - Indicates whether to run the replication job one time.
+--
+-- 'seedReplicationTime', 'replicationJob_seedReplicationTime' - The seed replication time.
+--
+-- 'serverId', 'replicationJob_serverId' - The ID of the server.
+--
+-- 'serverType', 'replicationJob_serverType' - The type of server.
+--
+-- 'state', 'replicationJob_state' - The state of the replication job.
+--
+-- 'statusMessage', 'replicationJob_statusMessage' - The description of the current status of the replication job.
+--
+-- 'vmServer', 'replicationJob_vmServer' - Information about the VM server.
+newReplicationJob ::
+  ReplicationJob
+newReplicationJob =
+  ReplicationJob'
+    { description = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      frequency = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      latestAmiId = Prelude.Nothing,
+      licenseType = Prelude.Nothing,
+      nextReplicationRunStartTime = Prelude.Nothing,
+      numberOfRecentAmisToKeep = Prelude.Nothing,
+      replicationJobId = Prelude.Nothing,
+      replicationRunList = Prelude.Nothing,
+      roleName = Prelude.Nothing,
+      runOnce = Prelude.Nothing,
+      seedReplicationTime = Prelude.Nothing,
+      serverId = Prelude.Nothing,
+      serverType = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      vmServer = Prelude.Nothing
+    }
+
+-- | The description of the replication job.
+replicationJob_description :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
+replicationJob_description = Lens.lens (\ReplicationJob' {description} -> description) (\s@ReplicationJob' {} a -> s {description = a} :: ReplicationJob)
+
+-- | Indicates whether the replication job should produce encrypted AMIs.
+replicationJob_encrypted :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Bool)
+replicationJob_encrypted = Lens.lens (\ReplicationJob' {encrypted} -> encrypted) (\s@ReplicationJob' {} a -> s {encrypted = a} :: ReplicationJob)
+
+-- | The time between consecutive replication runs, in hours.
+replicationJob_frequency :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Int)
+replicationJob_frequency = Lens.lens (\ReplicationJob' {frequency} -> frequency) (\s@ReplicationJob' {} a -> s {frequency = a} :: ReplicationJob)
+
+-- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
+-- This value can be any of the following:
+--
+-- -   KMS key ID
+--
+-- -   KMS key alias
+--
+-- -   ARN referring to the KMS key ID
+--
+-- -   ARN referring to the KMS key alias
+--
+-- If encrypted is enabled but a KMS key ID is not specified, the
+-- customer\'s default KMS key for Amazon EBS is used.
+replicationJob_kmsKeyId :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
+replicationJob_kmsKeyId = Lens.lens (\ReplicationJob' {kmsKeyId} -> kmsKeyId) (\s@ReplicationJob' {} a -> s {kmsKeyId = a} :: ReplicationJob)
+
+-- | The ID of the latest Amazon Machine Image (AMI).
+replicationJob_latestAmiId :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
+replicationJob_latestAmiId = Lens.lens (\ReplicationJob' {latestAmiId} -> latestAmiId) (\s@ReplicationJob' {} a -> s {latestAmiId = a} :: ReplicationJob)
+
+-- | The license type to be used for the AMI created by a successful
+-- replication run.
+replicationJob_licenseType :: Lens.Lens' ReplicationJob (Prelude.Maybe LicenseType)
+replicationJob_licenseType = Lens.lens (\ReplicationJob' {licenseType} -> licenseType) (\s@ReplicationJob' {} a -> s {licenseType = a} :: ReplicationJob)
+
+-- | The start time of the next replication run.
+replicationJob_nextReplicationRunStartTime :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.UTCTime)
+replicationJob_nextReplicationRunStartTime = Lens.lens (\ReplicationJob' {nextReplicationRunStartTime} -> nextReplicationRunStartTime) (\s@ReplicationJob' {} a -> s {nextReplicationRunStartTime = a} :: ReplicationJob) Prelude.. Lens.mapping Data._Time
+
+-- | The number of recent AMIs to keep in the customer\'s account for a
+-- replication job. By default, the value is set to zero, meaning that all
+-- AMIs are kept.
+replicationJob_numberOfRecentAmisToKeep :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Int)
+replicationJob_numberOfRecentAmisToKeep = Lens.lens (\ReplicationJob' {numberOfRecentAmisToKeep} -> numberOfRecentAmisToKeep) (\s@ReplicationJob' {} a -> s {numberOfRecentAmisToKeep = a} :: ReplicationJob)
+
+-- | The ID of the replication job.
+replicationJob_replicationJobId :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
+replicationJob_replicationJobId = Lens.lens (\ReplicationJob' {replicationJobId} -> replicationJobId) (\s@ReplicationJob' {} a -> s {replicationJobId = a} :: ReplicationJob)
+
+-- | Information about the replication runs.
+replicationJob_replicationRunList :: Lens.Lens' ReplicationJob (Prelude.Maybe [ReplicationRun])
+replicationJob_replicationRunList = Lens.lens (\ReplicationJob' {replicationRunList} -> replicationRunList) (\s@ReplicationJob' {} a -> s {replicationRunList = a} :: ReplicationJob) Prelude.. Lens.mapping Lens.coerced
+
+-- | The name of the IAM role to be used by Server Migration Service.
+replicationJob_roleName :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
+replicationJob_roleName = Lens.lens (\ReplicationJob' {roleName} -> roleName) (\s@ReplicationJob' {} a -> s {roleName = a} :: ReplicationJob)
+
+-- | Indicates whether to run the replication job one time.
+replicationJob_runOnce :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Bool)
+replicationJob_runOnce = Lens.lens (\ReplicationJob' {runOnce} -> runOnce) (\s@ReplicationJob' {} a -> s {runOnce = a} :: ReplicationJob)
+
+-- | The seed replication time.
+replicationJob_seedReplicationTime :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.UTCTime)
+replicationJob_seedReplicationTime = Lens.lens (\ReplicationJob' {seedReplicationTime} -> seedReplicationTime) (\s@ReplicationJob' {} a -> s {seedReplicationTime = a} :: ReplicationJob) Prelude.. Lens.mapping Data._Time
+
+-- | The ID of the server.
+replicationJob_serverId :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
+replicationJob_serverId = Lens.lens (\ReplicationJob' {serverId} -> serverId) (\s@ReplicationJob' {} a -> s {serverId = a} :: ReplicationJob)
+
+-- | The type of server.
+replicationJob_serverType :: Lens.Lens' ReplicationJob (Prelude.Maybe ServerType)
+replicationJob_serverType = Lens.lens (\ReplicationJob' {serverType} -> serverType) (\s@ReplicationJob' {} a -> s {serverType = a} :: ReplicationJob)
+
+-- | The state of the replication job.
+replicationJob_state :: Lens.Lens' ReplicationJob (Prelude.Maybe ReplicationJobState)
+replicationJob_state = Lens.lens (\ReplicationJob' {state} -> state) (\s@ReplicationJob' {} a -> s {state = a} :: ReplicationJob)
+
+-- | The description of the current status of the replication job.
+replicationJob_statusMessage :: Lens.Lens' ReplicationJob (Prelude.Maybe Prelude.Text)
+replicationJob_statusMessage = Lens.lens (\ReplicationJob' {statusMessage} -> statusMessage) (\s@ReplicationJob' {} a -> s {statusMessage = a} :: ReplicationJob)
+
+-- | Information about the VM server.
+replicationJob_vmServer :: Lens.Lens' ReplicationJob (Prelude.Maybe VmServer)
+replicationJob_vmServer = Lens.lens (\ReplicationJob' {vmServer} -> vmServer) (\s@ReplicationJob' {} a -> s {vmServer = a} :: ReplicationJob)
+
+instance Data.FromJSON ReplicationJob where
+  parseJSON =
+    Data.withObject
+      "ReplicationJob"
+      ( \x ->
+          ReplicationJob'
+            Prelude.<$> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "encrypted")
+            Prelude.<*> (x Data..:? "frequency")
+            Prelude.<*> (x Data..:? "kmsKeyId")
+            Prelude.<*> (x Data..:? "latestAmiId")
+            Prelude.<*> (x Data..:? "licenseType")
+            Prelude.<*> (x Data..:? "nextReplicationRunStartTime")
+            Prelude.<*> (x Data..:? "numberOfRecentAmisToKeep")
+            Prelude.<*> (x Data..:? "replicationJobId")
+            Prelude.<*> ( x
+                            Data..:? "replicationRunList"
+                            Data..!= Prelude.mempty
+                        )
+            Prelude.<*> (x Data..:? "roleName")
+            Prelude.<*> (x Data..:? "runOnce")
+            Prelude.<*> (x Data..:? "seedReplicationTime")
+            Prelude.<*> (x Data..:? "serverId")
+            Prelude.<*> (x Data..:? "serverType")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "vmServer")
+      )
+
+instance Prelude.Hashable ReplicationJob where
+  hashWithSalt _salt ReplicationJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` frequency
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` latestAmiId
+      `Prelude.hashWithSalt` licenseType
+      `Prelude.hashWithSalt` nextReplicationRunStartTime
+      `Prelude.hashWithSalt` numberOfRecentAmisToKeep
+      `Prelude.hashWithSalt` replicationJobId
+      `Prelude.hashWithSalt` replicationRunList
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` runOnce
+      `Prelude.hashWithSalt` seedReplicationTime
+      `Prelude.hashWithSalt` serverId
+      `Prelude.hashWithSalt` serverType
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` vmServer
+
+instance Prelude.NFData ReplicationJob where
+  rnf ReplicationJob' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf frequency
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf latestAmiId
+      `Prelude.seq` Prelude.rnf licenseType
+      `Prelude.seq` Prelude.rnf nextReplicationRunStartTime
+      `Prelude.seq` Prelude.rnf numberOfRecentAmisToKeep
+      `Prelude.seq` Prelude.rnf replicationJobId
+      `Prelude.seq` Prelude.rnf replicationRunList
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf runOnce
+      `Prelude.seq` Prelude.rnf seedReplicationTime
+      `Prelude.seq` Prelude.rnf serverId
+      `Prelude.seq` Prelude.rnf serverType
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf vmServer
diff --git a/gen/Amazonka/SMS/Types/ReplicationJobState.hs b/gen/Amazonka/SMS/Types/ReplicationJobState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ReplicationJobState.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.SMS.Types.ReplicationJobState
+-- 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.SMS.Types.ReplicationJobState
+  ( ReplicationJobState
+      ( ..,
+        ReplicationJobState_ACTIVE,
+        ReplicationJobState_COMPLETED,
+        ReplicationJobState_DELETED,
+        ReplicationJobState_DELETING,
+        ReplicationJobState_FAILED,
+        ReplicationJobState_FAILING,
+        ReplicationJobState_PAUSED_ON_FAILURE,
+        ReplicationJobState_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplicationJobState = ReplicationJobState'
+  { fromReplicationJobState ::
+      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 ReplicationJobState_ACTIVE :: ReplicationJobState
+pattern ReplicationJobState_ACTIVE = ReplicationJobState' "ACTIVE"
+
+pattern ReplicationJobState_COMPLETED :: ReplicationJobState
+pattern ReplicationJobState_COMPLETED = ReplicationJobState' "COMPLETED"
+
+pattern ReplicationJobState_DELETED :: ReplicationJobState
+pattern ReplicationJobState_DELETED = ReplicationJobState' "DELETED"
+
+pattern ReplicationJobState_DELETING :: ReplicationJobState
+pattern ReplicationJobState_DELETING = ReplicationJobState' "DELETING"
+
+pattern ReplicationJobState_FAILED :: ReplicationJobState
+pattern ReplicationJobState_FAILED = ReplicationJobState' "FAILED"
+
+pattern ReplicationJobState_FAILING :: ReplicationJobState
+pattern ReplicationJobState_FAILING = ReplicationJobState' "FAILING"
+
+pattern ReplicationJobState_PAUSED_ON_FAILURE :: ReplicationJobState
+pattern ReplicationJobState_PAUSED_ON_FAILURE = ReplicationJobState' "PAUSED_ON_FAILURE"
+
+pattern ReplicationJobState_PENDING :: ReplicationJobState
+pattern ReplicationJobState_PENDING = ReplicationJobState' "PENDING"
+
+{-# COMPLETE
+  ReplicationJobState_ACTIVE,
+  ReplicationJobState_COMPLETED,
+  ReplicationJobState_DELETED,
+  ReplicationJobState_DELETING,
+  ReplicationJobState_FAILED,
+  ReplicationJobState_FAILING,
+  ReplicationJobState_PAUSED_ON_FAILURE,
+  ReplicationJobState_PENDING,
+  ReplicationJobState'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/ReplicationRun.hs b/gen/Amazonka/SMS/Types/ReplicationRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ReplicationRun.hs
@@ -0,0 +1,231 @@
+{-# 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.SMS.Types.ReplicationRun
+-- 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.SMS.Types.ReplicationRun 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.SMS.Types.ReplicationRunStageDetails
+import Amazonka.SMS.Types.ReplicationRunState
+import Amazonka.SMS.Types.ReplicationRunType
+
+-- | Represents a replication run.
+--
+-- /See:/ 'newReplicationRun' smart constructor.
+data ReplicationRun = ReplicationRun'
+  { -- | The ID of the Amazon Machine Image (AMI) from the replication run.
+    amiId :: Prelude.Maybe Prelude.Text,
+    -- | The completion time of the last replication run.
+    completedTime :: Prelude.Maybe Data.POSIX,
+    -- | The description of the replication run.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the replication run should produce an encrypted AMI.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
+    -- This value can be any of the following:
+    --
+    -- -   KMS key ID
+    --
+    -- -   KMS key alias
+    --
+    -- -   ARN referring to the KMS key ID
+    --
+    -- -   ARN referring to the KMS key alias
+    --
+    -- If encrypted is /true/ but a KMS key ID is not specified, the
+    -- customer\'s default KMS key for Amazon EBS is used.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the replication run.
+    replicationRunId :: Prelude.Maybe Prelude.Text,
+    -- | The start time of the next replication run.
+    scheduledStartTime :: Prelude.Maybe Data.POSIX,
+    -- | Details about the current stage of the replication run.
+    stageDetails :: Prelude.Maybe ReplicationRunStageDetails,
+    -- | The state of the replication run.
+    state :: Prelude.Maybe ReplicationRunState,
+    -- | The description of the current status of the replication job.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The type of replication run.
+    type' :: Prelude.Maybe ReplicationRunType
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplicationRun' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'replicationRun_amiId' - The ID of the Amazon Machine Image (AMI) from the replication run.
+--
+-- 'completedTime', 'replicationRun_completedTime' - The completion time of the last replication run.
+--
+-- 'description', 'replicationRun_description' - The description of the replication run.
+--
+-- 'encrypted', 'replicationRun_encrypted' - Indicates whether the replication run should produce an encrypted AMI.
+--
+-- 'kmsKeyId', 'replicationRun_kmsKeyId' - The ID of the KMS key for replication jobs that produce encrypted AMIs.
+-- This value can be any of the following:
+--
+-- -   KMS key ID
+--
+-- -   KMS key alias
+--
+-- -   ARN referring to the KMS key ID
+--
+-- -   ARN referring to the KMS key alias
+--
+-- If encrypted is /true/ but a KMS key ID is not specified, the
+-- customer\'s default KMS key for Amazon EBS is used.
+--
+-- 'replicationRunId', 'replicationRun_replicationRunId' - The ID of the replication run.
+--
+-- 'scheduledStartTime', 'replicationRun_scheduledStartTime' - The start time of the next replication run.
+--
+-- 'stageDetails', 'replicationRun_stageDetails' - Details about the current stage of the replication run.
+--
+-- 'state', 'replicationRun_state' - The state of the replication run.
+--
+-- 'statusMessage', 'replicationRun_statusMessage' - The description of the current status of the replication job.
+--
+-- 'type'', 'replicationRun_type' - The type of replication run.
+newReplicationRun ::
+  ReplicationRun
+newReplicationRun =
+  ReplicationRun'
+    { amiId = Prelude.Nothing,
+      completedTime = Prelude.Nothing,
+      description = Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      replicationRunId = Prelude.Nothing,
+      scheduledStartTime = Prelude.Nothing,
+      stageDetails = Prelude.Nothing,
+      state = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      type' = Prelude.Nothing
+    }
+
+-- | The ID of the Amazon Machine Image (AMI) from the replication run.
+replicationRun_amiId :: Lens.Lens' ReplicationRun (Prelude.Maybe Prelude.Text)
+replicationRun_amiId = Lens.lens (\ReplicationRun' {amiId} -> amiId) (\s@ReplicationRun' {} a -> s {amiId = a} :: ReplicationRun)
+
+-- | The completion time of the last replication run.
+replicationRun_completedTime :: Lens.Lens' ReplicationRun (Prelude.Maybe Prelude.UTCTime)
+replicationRun_completedTime = Lens.lens (\ReplicationRun' {completedTime} -> completedTime) (\s@ReplicationRun' {} a -> s {completedTime = a} :: ReplicationRun) Prelude.. Lens.mapping Data._Time
+
+-- | The description of the replication run.
+replicationRun_description :: Lens.Lens' ReplicationRun (Prelude.Maybe Prelude.Text)
+replicationRun_description = Lens.lens (\ReplicationRun' {description} -> description) (\s@ReplicationRun' {} a -> s {description = a} :: ReplicationRun)
+
+-- | Indicates whether the replication run should produce an encrypted AMI.
+replicationRun_encrypted :: Lens.Lens' ReplicationRun (Prelude.Maybe Prelude.Bool)
+replicationRun_encrypted = Lens.lens (\ReplicationRun' {encrypted} -> encrypted) (\s@ReplicationRun' {} a -> s {encrypted = a} :: ReplicationRun)
+
+-- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
+-- This value can be any of the following:
+--
+-- -   KMS key ID
+--
+-- -   KMS key alias
+--
+-- -   ARN referring to the KMS key ID
+--
+-- -   ARN referring to the KMS key alias
+--
+-- If encrypted is /true/ but a KMS key ID is not specified, the
+-- customer\'s default KMS key for Amazon EBS is used.
+replicationRun_kmsKeyId :: Lens.Lens' ReplicationRun (Prelude.Maybe Prelude.Text)
+replicationRun_kmsKeyId = Lens.lens (\ReplicationRun' {kmsKeyId} -> kmsKeyId) (\s@ReplicationRun' {} a -> s {kmsKeyId = a} :: ReplicationRun)
+
+-- | The ID of the replication run.
+replicationRun_replicationRunId :: Lens.Lens' ReplicationRun (Prelude.Maybe Prelude.Text)
+replicationRun_replicationRunId = Lens.lens (\ReplicationRun' {replicationRunId} -> replicationRunId) (\s@ReplicationRun' {} a -> s {replicationRunId = a} :: ReplicationRun)
+
+-- | The start time of the next replication run.
+replicationRun_scheduledStartTime :: Lens.Lens' ReplicationRun (Prelude.Maybe Prelude.UTCTime)
+replicationRun_scheduledStartTime = Lens.lens (\ReplicationRun' {scheduledStartTime} -> scheduledStartTime) (\s@ReplicationRun' {} a -> s {scheduledStartTime = a} :: ReplicationRun) Prelude.. Lens.mapping Data._Time
+
+-- | Details about the current stage of the replication run.
+replicationRun_stageDetails :: Lens.Lens' ReplicationRun (Prelude.Maybe ReplicationRunStageDetails)
+replicationRun_stageDetails = Lens.lens (\ReplicationRun' {stageDetails} -> stageDetails) (\s@ReplicationRun' {} a -> s {stageDetails = a} :: ReplicationRun)
+
+-- | The state of the replication run.
+replicationRun_state :: Lens.Lens' ReplicationRun (Prelude.Maybe ReplicationRunState)
+replicationRun_state = Lens.lens (\ReplicationRun' {state} -> state) (\s@ReplicationRun' {} a -> s {state = a} :: ReplicationRun)
+
+-- | The description of the current status of the replication job.
+replicationRun_statusMessage :: Lens.Lens' ReplicationRun (Prelude.Maybe Prelude.Text)
+replicationRun_statusMessage = Lens.lens (\ReplicationRun' {statusMessage} -> statusMessage) (\s@ReplicationRun' {} a -> s {statusMessage = a} :: ReplicationRun)
+
+-- | The type of replication run.
+replicationRun_type :: Lens.Lens' ReplicationRun (Prelude.Maybe ReplicationRunType)
+replicationRun_type = Lens.lens (\ReplicationRun' {type'} -> type') (\s@ReplicationRun' {} a -> s {type' = a} :: ReplicationRun)
+
+instance Data.FromJSON ReplicationRun where
+  parseJSON =
+    Data.withObject
+      "ReplicationRun"
+      ( \x ->
+          ReplicationRun'
+            Prelude.<$> (x Data..:? "amiId")
+            Prelude.<*> (x Data..:? "completedTime")
+            Prelude.<*> (x Data..:? "description")
+            Prelude.<*> (x Data..:? "encrypted")
+            Prelude.<*> (x Data..:? "kmsKeyId")
+            Prelude.<*> (x Data..:? "replicationRunId")
+            Prelude.<*> (x Data..:? "scheduledStartTime")
+            Prelude.<*> (x Data..:? "stageDetails")
+            Prelude.<*> (x Data..:? "state")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "type")
+      )
+
+instance Prelude.Hashable ReplicationRun where
+  hashWithSalt _salt ReplicationRun' {..} =
+    _salt
+      `Prelude.hashWithSalt` amiId
+      `Prelude.hashWithSalt` completedTime
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` replicationRunId
+      `Prelude.hashWithSalt` scheduledStartTime
+      `Prelude.hashWithSalt` stageDetails
+      `Prelude.hashWithSalt` state
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` type'
+
+instance Prelude.NFData ReplicationRun where
+  rnf ReplicationRun' {..} =
+    Prelude.rnf amiId
+      `Prelude.seq` Prelude.rnf completedTime
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf replicationRunId
+      `Prelude.seq` Prelude.rnf scheduledStartTime
+      `Prelude.seq` Prelude.rnf stageDetails
+      `Prelude.seq` Prelude.rnf state
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf type'
diff --git a/gen/Amazonka/SMS/Types/ReplicationRunStageDetails.hs b/gen/Amazonka/SMS/Types/ReplicationRunStageDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ReplicationRunStageDetails.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.ReplicationRunStageDetails
+-- 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.SMS.Types.ReplicationRunStageDetails 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
+
+-- | Details of the current stage of a replication run.
+--
+-- /See:/ 'newReplicationRunStageDetails' smart constructor.
+data ReplicationRunStageDetails = ReplicationRunStageDetails'
+  { -- | The current stage of a replication run.
+    stage :: Prelude.Maybe Prelude.Text,
+    -- | The progress of the current stage of a replication run.
+    stageProgress :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ReplicationRunStageDetails' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'stage', 'replicationRunStageDetails_stage' - The current stage of a replication run.
+--
+-- 'stageProgress', 'replicationRunStageDetails_stageProgress' - The progress of the current stage of a replication run.
+newReplicationRunStageDetails ::
+  ReplicationRunStageDetails
+newReplicationRunStageDetails =
+  ReplicationRunStageDetails'
+    { stage =
+        Prelude.Nothing,
+      stageProgress = Prelude.Nothing
+    }
+
+-- | The current stage of a replication run.
+replicationRunStageDetails_stage :: Lens.Lens' ReplicationRunStageDetails (Prelude.Maybe Prelude.Text)
+replicationRunStageDetails_stage = Lens.lens (\ReplicationRunStageDetails' {stage} -> stage) (\s@ReplicationRunStageDetails' {} a -> s {stage = a} :: ReplicationRunStageDetails)
+
+-- | The progress of the current stage of a replication run.
+replicationRunStageDetails_stageProgress :: Lens.Lens' ReplicationRunStageDetails (Prelude.Maybe Prelude.Text)
+replicationRunStageDetails_stageProgress = Lens.lens (\ReplicationRunStageDetails' {stageProgress} -> stageProgress) (\s@ReplicationRunStageDetails' {} a -> s {stageProgress = a} :: ReplicationRunStageDetails)
+
+instance Data.FromJSON ReplicationRunStageDetails where
+  parseJSON =
+    Data.withObject
+      "ReplicationRunStageDetails"
+      ( \x ->
+          ReplicationRunStageDetails'
+            Prelude.<$> (x Data..:? "stage")
+            Prelude.<*> (x Data..:? "stageProgress")
+      )
+
+instance Prelude.Hashable ReplicationRunStageDetails where
+  hashWithSalt _salt ReplicationRunStageDetails' {..} =
+    _salt
+      `Prelude.hashWithSalt` stage
+      `Prelude.hashWithSalt` stageProgress
+
+instance Prelude.NFData ReplicationRunStageDetails where
+  rnf ReplicationRunStageDetails' {..} =
+    Prelude.rnf stage
+      `Prelude.seq` Prelude.rnf stageProgress
diff --git a/gen/Amazonka/SMS/Types/ReplicationRunState.hs b/gen/Amazonka/SMS/Types/ReplicationRunState.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ReplicationRunState.hs
@@ -0,0 +1,96 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE LambdaCase #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE PatternSynonyms #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.ReplicationRunState
+-- 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.SMS.Types.ReplicationRunState
+  ( ReplicationRunState
+      ( ..,
+        ReplicationRunState_ACTIVE,
+        ReplicationRunState_COMPLETED,
+        ReplicationRunState_DELETED,
+        ReplicationRunState_DELETING,
+        ReplicationRunState_FAILED,
+        ReplicationRunState_MISSED,
+        ReplicationRunState_PENDING
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplicationRunState = ReplicationRunState'
+  { fromReplicationRunState ::
+      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 ReplicationRunState_ACTIVE :: ReplicationRunState
+pattern ReplicationRunState_ACTIVE = ReplicationRunState' "ACTIVE"
+
+pattern ReplicationRunState_COMPLETED :: ReplicationRunState
+pattern ReplicationRunState_COMPLETED = ReplicationRunState' "COMPLETED"
+
+pattern ReplicationRunState_DELETED :: ReplicationRunState
+pattern ReplicationRunState_DELETED = ReplicationRunState' "DELETED"
+
+pattern ReplicationRunState_DELETING :: ReplicationRunState
+pattern ReplicationRunState_DELETING = ReplicationRunState' "DELETING"
+
+pattern ReplicationRunState_FAILED :: ReplicationRunState
+pattern ReplicationRunState_FAILED = ReplicationRunState' "FAILED"
+
+pattern ReplicationRunState_MISSED :: ReplicationRunState
+pattern ReplicationRunState_MISSED = ReplicationRunState' "MISSED"
+
+pattern ReplicationRunState_PENDING :: ReplicationRunState
+pattern ReplicationRunState_PENDING = ReplicationRunState' "PENDING"
+
+{-# COMPLETE
+  ReplicationRunState_ACTIVE,
+  ReplicationRunState_COMPLETED,
+  ReplicationRunState_DELETED,
+  ReplicationRunState_DELETING,
+  ReplicationRunState_FAILED,
+  ReplicationRunState_MISSED,
+  ReplicationRunState_PENDING,
+  ReplicationRunState'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/ReplicationRunType.hs b/gen/Amazonka/SMS/Types/ReplicationRunType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ReplicationRunType.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.SMS.Types.ReplicationRunType
+-- 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.SMS.Types.ReplicationRunType
+  ( ReplicationRunType
+      ( ..,
+        ReplicationRunType_AUTOMATIC,
+        ReplicationRunType_ON_DEMAND
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ReplicationRunType = ReplicationRunType'
+  { fromReplicationRunType ::
+      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 ReplicationRunType_AUTOMATIC :: ReplicationRunType
+pattern ReplicationRunType_AUTOMATIC = ReplicationRunType' "AUTOMATIC"
+
+pattern ReplicationRunType_ON_DEMAND :: ReplicationRunType
+pattern ReplicationRunType_ON_DEMAND = ReplicationRunType' "ON_DEMAND"
+
+{-# COMPLETE
+  ReplicationRunType_AUTOMATIC,
+  ReplicationRunType_ON_DEMAND,
+  ReplicationRunType'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/S3Location.hs b/gen/Amazonka/SMS/Types/S3Location.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/S3Location.hs
@@ -0,0 +1,92 @@
+{-# 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.SMS.Types.S3Location
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SMS.Types.S3Location where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Location of an Amazon S3 object.
+--
+-- /See:/ 'newS3Location' smart constructor.
+data S3Location = S3Location'
+  { -- | The Amazon S3 bucket name.
+    bucket :: Prelude.Maybe Prelude.Text,
+    -- | The Amazon S3 bucket key.
+    key :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'S3Location' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'bucket', 's3Location_bucket' - The Amazon S3 bucket name.
+--
+-- 'key', 's3Location_key' - The Amazon S3 bucket key.
+newS3Location ::
+  S3Location
+newS3Location =
+  S3Location'
+    { bucket = Prelude.Nothing,
+      key = Prelude.Nothing
+    }
+
+-- | The Amazon S3 bucket name.
+s3Location_bucket :: Lens.Lens' S3Location (Prelude.Maybe Prelude.Text)
+s3Location_bucket = Lens.lens (\S3Location' {bucket} -> bucket) (\s@S3Location' {} a -> s {bucket = a} :: S3Location)
+
+-- | The Amazon S3 bucket key.
+s3Location_key :: Lens.Lens' S3Location (Prelude.Maybe Prelude.Text)
+s3Location_key = Lens.lens (\S3Location' {key} -> key) (\s@S3Location' {} a -> s {key = a} :: S3Location)
+
+instance Data.FromJSON S3Location where
+  parseJSON =
+    Data.withObject
+      "S3Location"
+      ( \x ->
+          S3Location'
+            Prelude.<$> (x Data..:? "bucket")
+            Prelude.<*> (x Data..:? "key")
+      )
+
+instance Prelude.Hashable S3Location where
+  hashWithSalt _salt S3Location' {..} =
+    _salt
+      `Prelude.hashWithSalt` bucket
+      `Prelude.hashWithSalt` key
+
+instance Prelude.NFData S3Location where
+  rnf S3Location' {..} =
+    Prelude.rnf bucket `Prelude.seq` Prelude.rnf key
+
+instance Data.ToJSON S3Location where
+  toJSON S3Location' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("bucket" Data..=) Prelude.<$> bucket,
+            ("key" Data..=) Prelude.<$> key
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/SSMOutput.hs b/gen/Amazonka/SMS/Types/SSMOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/SSMOutput.hs
@@ -0,0 +1,67 @@
+{-# 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.SMS.Types.SSMOutput
+-- 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.SMS.Types.SSMOutput 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.SMS.Types.S3Location
+
+-- | Contains the location of validation output.
+--
+-- /See:/ 'newSSMOutput' smart constructor.
+data SSMOutput = SSMOutput'
+  { s3Location :: Prelude.Maybe S3Location
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SSMOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Location', 'sSMOutput_s3Location' - Undocumented member.
+newSSMOutput ::
+  SSMOutput
+newSSMOutput =
+  SSMOutput' {s3Location = Prelude.Nothing}
+
+-- | Undocumented member.
+sSMOutput_s3Location :: Lens.Lens' SSMOutput (Prelude.Maybe S3Location)
+sSMOutput_s3Location = Lens.lens (\SSMOutput' {s3Location} -> s3Location) (\s@SSMOutput' {} a -> s {s3Location = a} :: SSMOutput)
+
+instance Data.FromJSON SSMOutput where
+  parseJSON =
+    Data.withObject
+      "SSMOutput"
+      ( \x ->
+          SSMOutput' Prelude.<$> (x Data..:? "s3Location")
+      )
+
+instance Prelude.Hashable SSMOutput where
+  hashWithSalt _salt SSMOutput' {..} =
+    _salt `Prelude.hashWithSalt` s3Location
+
+instance Prelude.NFData SSMOutput where
+  rnf SSMOutput' {..} = Prelude.rnf s3Location
diff --git a/gen/Amazonka/SMS/Types/SSMValidationParameters.hs b/gen/Amazonka/SMS/Types/SSMValidationParameters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/SSMValidationParameters.hs
@@ -0,0 +1,152 @@
+{-# 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.SMS.Types.SSMValidationParameters
+-- 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.SMS.Types.SSMValidationParameters 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.SMS.Types.ScriptType
+import Amazonka.SMS.Types.Source
+
+-- | Contains validation parameters.
+--
+-- /See:/ 'newSSMValidationParameters' smart constructor.
+data SSMValidationParameters = SSMValidationParameters'
+  { -- | The command to run the validation script.
+    command :: Prelude.Maybe Prelude.Text,
+    -- | The timeout interval, in seconds.
+    executionTimeoutSeconds :: Prelude.Maybe Prelude.Natural,
+    -- | The ID of the instance. The instance must have the following tag:
+    -- UserForSMSApplicationValidation=true.
+    instanceId :: Prelude.Maybe Prelude.Text,
+    -- | The name of the S3 bucket for output.
+    outputS3BucketName :: Prelude.Maybe Prelude.Text,
+    -- | The type of validation script.
+    scriptType :: Prelude.Maybe ScriptType,
+    -- | The location of the validation script.
+    source :: Prelude.Maybe Source
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'SSMValidationParameters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'command', 'sSMValidationParameters_command' - The command to run the validation script.
+--
+-- 'executionTimeoutSeconds', 'sSMValidationParameters_executionTimeoutSeconds' - The timeout interval, in seconds.
+--
+-- 'instanceId', 'sSMValidationParameters_instanceId' - The ID of the instance. The instance must have the following tag:
+-- UserForSMSApplicationValidation=true.
+--
+-- 'outputS3BucketName', 'sSMValidationParameters_outputS3BucketName' - The name of the S3 bucket for output.
+--
+-- 'scriptType', 'sSMValidationParameters_scriptType' - The type of validation script.
+--
+-- 'source', 'sSMValidationParameters_source' - The location of the validation script.
+newSSMValidationParameters ::
+  SSMValidationParameters
+newSSMValidationParameters =
+  SSMValidationParameters'
+    { command = Prelude.Nothing,
+      executionTimeoutSeconds = Prelude.Nothing,
+      instanceId = Prelude.Nothing,
+      outputS3BucketName = Prelude.Nothing,
+      scriptType = Prelude.Nothing,
+      source = Prelude.Nothing
+    }
+
+-- | The command to run the validation script.
+sSMValidationParameters_command :: Lens.Lens' SSMValidationParameters (Prelude.Maybe Prelude.Text)
+sSMValidationParameters_command = Lens.lens (\SSMValidationParameters' {command} -> command) (\s@SSMValidationParameters' {} a -> s {command = a} :: SSMValidationParameters)
+
+-- | The timeout interval, in seconds.
+sSMValidationParameters_executionTimeoutSeconds :: Lens.Lens' SSMValidationParameters (Prelude.Maybe Prelude.Natural)
+sSMValidationParameters_executionTimeoutSeconds = Lens.lens (\SSMValidationParameters' {executionTimeoutSeconds} -> executionTimeoutSeconds) (\s@SSMValidationParameters' {} a -> s {executionTimeoutSeconds = a} :: SSMValidationParameters)
+
+-- | The ID of the instance. The instance must have the following tag:
+-- UserForSMSApplicationValidation=true.
+sSMValidationParameters_instanceId :: Lens.Lens' SSMValidationParameters (Prelude.Maybe Prelude.Text)
+sSMValidationParameters_instanceId = Lens.lens (\SSMValidationParameters' {instanceId} -> instanceId) (\s@SSMValidationParameters' {} a -> s {instanceId = a} :: SSMValidationParameters)
+
+-- | The name of the S3 bucket for output.
+sSMValidationParameters_outputS3BucketName :: Lens.Lens' SSMValidationParameters (Prelude.Maybe Prelude.Text)
+sSMValidationParameters_outputS3BucketName = Lens.lens (\SSMValidationParameters' {outputS3BucketName} -> outputS3BucketName) (\s@SSMValidationParameters' {} a -> s {outputS3BucketName = a} :: SSMValidationParameters)
+
+-- | The type of validation script.
+sSMValidationParameters_scriptType :: Lens.Lens' SSMValidationParameters (Prelude.Maybe ScriptType)
+sSMValidationParameters_scriptType = Lens.lens (\SSMValidationParameters' {scriptType} -> scriptType) (\s@SSMValidationParameters' {} a -> s {scriptType = a} :: SSMValidationParameters)
+
+-- | The location of the validation script.
+sSMValidationParameters_source :: Lens.Lens' SSMValidationParameters (Prelude.Maybe Source)
+sSMValidationParameters_source = Lens.lens (\SSMValidationParameters' {source} -> source) (\s@SSMValidationParameters' {} a -> s {source = a} :: SSMValidationParameters)
+
+instance Data.FromJSON SSMValidationParameters where
+  parseJSON =
+    Data.withObject
+      "SSMValidationParameters"
+      ( \x ->
+          SSMValidationParameters'
+            Prelude.<$> (x Data..:? "command")
+            Prelude.<*> (x Data..:? "executionTimeoutSeconds")
+            Prelude.<*> (x Data..:? "instanceId")
+            Prelude.<*> (x Data..:? "outputS3BucketName")
+            Prelude.<*> (x Data..:? "scriptType")
+            Prelude.<*> (x Data..:? "source")
+      )
+
+instance Prelude.Hashable SSMValidationParameters where
+  hashWithSalt _salt SSMValidationParameters' {..} =
+    _salt
+      `Prelude.hashWithSalt` command
+      `Prelude.hashWithSalt` executionTimeoutSeconds
+      `Prelude.hashWithSalt` instanceId
+      `Prelude.hashWithSalt` outputS3BucketName
+      `Prelude.hashWithSalt` scriptType
+      `Prelude.hashWithSalt` source
+
+instance Prelude.NFData SSMValidationParameters where
+  rnf SSMValidationParameters' {..} =
+    Prelude.rnf command
+      `Prelude.seq` Prelude.rnf executionTimeoutSeconds
+      `Prelude.seq` Prelude.rnf instanceId
+      `Prelude.seq` Prelude.rnf outputS3BucketName
+      `Prelude.seq` Prelude.rnf scriptType
+      `Prelude.seq` Prelude.rnf source
+
+instance Data.ToJSON SSMValidationParameters where
+  toJSON SSMValidationParameters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("command" Data..=) Prelude.<$> command,
+            ("executionTimeoutSeconds" Data..=)
+              Prelude.<$> executionTimeoutSeconds,
+            ("instanceId" Data..=) Prelude.<$> instanceId,
+            ("outputS3BucketName" Data..=)
+              Prelude.<$> outputS3BucketName,
+            ("scriptType" Data..=) Prelude.<$> scriptType,
+            ("source" Data..=) Prelude.<$> source
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ScriptType.hs b/gen/Amazonka/SMS/Types/ScriptType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ScriptType.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.SMS.Types.ScriptType
+-- 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.SMS.Types.ScriptType
+  ( ScriptType
+      ( ..,
+        ScriptType_POWERSHELL_SCRIPT,
+        ScriptType_SHELL_SCRIPT
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ScriptType = ScriptType'
+  { fromScriptType ::
+      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 ScriptType_POWERSHELL_SCRIPT :: ScriptType
+pattern ScriptType_POWERSHELL_SCRIPT = ScriptType' "POWERSHELL_SCRIPT"
+
+pattern ScriptType_SHELL_SCRIPT :: ScriptType
+pattern ScriptType_SHELL_SCRIPT = ScriptType' "SHELL_SCRIPT"
+
+{-# COMPLETE
+  ScriptType_POWERSHELL_SCRIPT,
+  ScriptType_SHELL_SCRIPT,
+  ScriptType'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/Server.hs b/gen/Amazonka/SMS/Types/Server.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/Server.hs
@@ -0,0 +1,136 @@
+{-# 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.SMS.Types.Server
+-- 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.SMS.Types.Server 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.SMS.Types.ServerType
+import Amazonka.SMS.Types.VmServer
+
+-- | Represents a server.
+--
+-- /See:/ 'newServer' smart constructor.
+data Server = Server'
+  { -- | The ID of the replication job.
+    replicationJobId :: Prelude.Maybe Prelude.Text,
+    -- | Indicates whether the replication job is deleted or failed.
+    replicationJobTerminated :: Prelude.Maybe Prelude.Bool,
+    -- | The ID of the server.
+    serverId :: Prelude.Maybe Prelude.Text,
+    -- | The type of server.
+    serverType :: Prelude.Maybe ServerType,
+    -- | Information about the VM server.
+    vmServer :: Prelude.Maybe VmServer
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Server' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'replicationJobId', 'server_replicationJobId' - The ID of the replication job.
+--
+-- 'replicationJobTerminated', 'server_replicationJobTerminated' - Indicates whether the replication job is deleted or failed.
+--
+-- 'serverId', 'server_serverId' - The ID of the server.
+--
+-- 'serverType', 'server_serverType' - The type of server.
+--
+-- 'vmServer', 'server_vmServer' - Information about the VM server.
+newServer ::
+  Server
+newServer =
+  Server'
+    { replicationJobId = Prelude.Nothing,
+      replicationJobTerminated = Prelude.Nothing,
+      serverId = Prelude.Nothing,
+      serverType = Prelude.Nothing,
+      vmServer = Prelude.Nothing
+    }
+
+-- | The ID of the replication job.
+server_replicationJobId :: Lens.Lens' Server (Prelude.Maybe Prelude.Text)
+server_replicationJobId = Lens.lens (\Server' {replicationJobId} -> replicationJobId) (\s@Server' {} a -> s {replicationJobId = a} :: Server)
+
+-- | Indicates whether the replication job is deleted or failed.
+server_replicationJobTerminated :: Lens.Lens' Server (Prelude.Maybe Prelude.Bool)
+server_replicationJobTerminated = Lens.lens (\Server' {replicationJobTerminated} -> replicationJobTerminated) (\s@Server' {} a -> s {replicationJobTerminated = a} :: Server)
+
+-- | The ID of the server.
+server_serverId :: Lens.Lens' Server (Prelude.Maybe Prelude.Text)
+server_serverId = Lens.lens (\Server' {serverId} -> serverId) (\s@Server' {} a -> s {serverId = a} :: Server)
+
+-- | The type of server.
+server_serverType :: Lens.Lens' Server (Prelude.Maybe ServerType)
+server_serverType = Lens.lens (\Server' {serverType} -> serverType) (\s@Server' {} a -> s {serverType = a} :: Server)
+
+-- | Information about the VM server.
+server_vmServer :: Lens.Lens' Server (Prelude.Maybe VmServer)
+server_vmServer = Lens.lens (\Server' {vmServer} -> vmServer) (\s@Server' {} a -> s {vmServer = a} :: Server)
+
+instance Data.FromJSON Server where
+  parseJSON =
+    Data.withObject
+      "Server"
+      ( \x ->
+          Server'
+            Prelude.<$> (x Data..:? "replicationJobId")
+            Prelude.<*> (x Data..:? "replicationJobTerminated")
+            Prelude.<*> (x Data..:? "serverId")
+            Prelude.<*> (x Data..:? "serverType")
+            Prelude.<*> (x Data..:? "vmServer")
+      )
+
+instance Prelude.Hashable Server where
+  hashWithSalt _salt Server' {..} =
+    _salt
+      `Prelude.hashWithSalt` replicationJobId
+      `Prelude.hashWithSalt` replicationJobTerminated
+      `Prelude.hashWithSalt` serverId
+      `Prelude.hashWithSalt` serverType
+      `Prelude.hashWithSalt` vmServer
+
+instance Prelude.NFData Server where
+  rnf Server' {..} =
+    Prelude.rnf replicationJobId
+      `Prelude.seq` Prelude.rnf replicationJobTerminated
+      `Prelude.seq` Prelude.rnf serverId
+      `Prelude.seq` Prelude.rnf serverType
+      `Prelude.seq` Prelude.rnf vmServer
+
+instance Data.ToJSON Server where
+  toJSON Server' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("replicationJobId" Data..=)
+              Prelude.<$> replicationJobId,
+            ("replicationJobTerminated" Data..=)
+              Prelude.<$> replicationJobTerminated,
+            ("serverId" Data..=) Prelude.<$> serverId,
+            ("serverType" Data..=) Prelude.<$> serverType,
+            ("vmServer" Data..=) Prelude.<$> vmServer
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ServerCatalogStatus.hs b/gen/Amazonka/SMS/Types/ServerCatalogStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerCatalogStatus.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.SMS.Types.ServerCatalogStatus
+-- 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.SMS.Types.ServerCatalogStatus
+  ( ServerCatalogStatus
+      ( ..,
+        ServerCatalogStatus_AVAILABLE,
+        ServerCatalogStatus_DELETED,
+        ServerCatalogStatus_EXPIRED,
+        ServerCatalogStatus_IMPORTING,
+        ServerCatalogStatus_NOT_IMPORTED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServerCatalogStatus = ServerCatalogStatus'
+  { fromServerCatalogStatus ::
+      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 ServerCatalogStatus_AVAILABLE :: ServerCatalogStatus
+pattern ServerCatalogStatus_AVAILABLE = ServerCatalogStatus' "AVAILABLE"
+
+pattern ServerCatalogStatus_DELETED :: ServerCatalogStatus
+pattern ServerCatalogStatus_DELETED = ServerCatalogStatus' "DELETED"
+
+pattern ServerCatalogStatus_EXPIRED :: ServerCatalogStatus
+pattern ServerCatalogStatus_EXPIRED = ServerCatalogStatus' "EXPIRED"
+
+pattern ServerCatalogStatus_IMPORTING :: ServerCatalogStatus
+pattern ServerCatalogStatus_IMPORTING = ServerCatalogStatus' "IMPORTING"
+
+pattern ServerCatalogStatus_NOT_IMPORTED :: ServerCatalogStatus
+pattern ServerCatalogStatus_NOT_IMPORTED = ServerCatalogStatus' "NOT_IMPORTED"
+
+{-# COMPLETE
+  ServerCatalogStatus_AVAILABLE,
+  ServerCatalogStatus_DELETED,
+  ServerCatalogStatus_EXPIRED,
+  ServerCatalogStatus_IMPORTING,
+  ServerCatalogStatus_NOT_IMPORTED,
+  ServerCatalogStatus'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/ServerGroup.hs b/gen/Amazonka/SMS/Types/ServerGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerGroup.hs
@@ -0,0 +1,107 @@
+{-# 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.SMS.Types.ServerGroup
+-- 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.SMS.Types.ServerGroup 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.SMS.Types.Server
+
+-- | Logical grouping of servers.
+--
+-- /See:/ 'newServerGroup' smart constructor.
+data ServerGroup = ServerGroup'
+  { -- | The name of a server group.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The ID of a server group.
+    serverGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The servers that belong to a server group.
+    serverList :: Prelude.Maybe [Server]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerGroup' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'serverGroup_name' - The name of a server group.
+--
+-- 'serverGroupId', 'serverGroup_serverGroupId' - The ID of a server group.
+--
+-- 'serverList', 'serverGroup_serverList' - The servers that belong to a server group.
+newServerGroup ::
+  ServerGroup
+newServerGroup =
+  ServerGroup'
+    { name = Prelude.Nothing,
+      serverGroupId = Prelude.Nothing,
+      serverList = Prelude.Nothing
+    }
+
+-- | The name of a server group.
+serverGroup_name :: Lens.Lens' ServerGroup (Prelude.Maybe Prelude.Text)
+serverGroup_name = Lens.lens (\ServerGroup' {name} -> name) (\s@ServerGroup' {} a -> s {name = a} :: ServerGroup)
+
+-- | The ID of a server group.
+serverGroup_serverGroupId :: Lens.Lens' ServerGroup (Prelude.Maybe Prelude.Text)
+serverGroup_serverGroupId = Lens.lens (\ServerGroup' {serverGroupId} -> serverGroupId) (\s@ServerGroup' {} a -> s {serverGroupId = a} :: ServerGroup)
+
+-- | The servers that belong to a server group.
+serverGroup_serverList :: Lens.Lens' ServerGroup (Prelude.Maybe [Server])
+serverGroup_serverList = Lens.lens (\ServerGroup' {serverList} -> serverList) (\s@ServerGroup' {} a -> s {serverList = a} :: ServerGroup) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ServerGroup where
+  parseJSON =
+    Data.withObject
+      "ServerGroup"
+      ( \x ->
+          ServerGroup'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "serverGroupId")
+            Prelude.<*> (x Data..:? "serverList" Data..!= Prelude.mempty)
+      )
+
+instance Prelude.Hashable ServerGroup where
+  hashWithSalt _salt ServerGroup' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` serverGroupId
+      `Prelude.hashWithSalt` serverList
+
+instance Prelude.NFData ServerGroup where
+  rnf ServerGroup' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf serverGroupId
+      `Prelude.seq` Prelude.rnf serverList
+
+instance Data.ToJSON ServerGroup where
+  toJSON ServerGroup' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("serverGroupId" Data..=) Prelude.<$> serverGroupId,
+            ("serverList" Data..=) Prelude.<$> serverList
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ServerGroupLaunchConfiguration.hs b/gen/Amazonka/SMS/Types/ServerGroupLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerGroupLaunchConfiguration.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.ServerGroupLaunchConfiguration
+-- 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.SMS.Types.ServerGroupLaunchConfiguration 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.SMS.Types.ServerLaunchConfiguration
+
+-- | Launch configuration for a server group.
+--
+-- /See:/ 'newServerGroupLaunchConfiguration' smart constructor.
+data ServerGroupLaunchConfiguration = ServerGroupLaunchConfiguration'
+  { -- | The launch order of servers in the server group.
+    launchOrder :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the server group with which the launch configuration is
+    -- associated.
+    serverGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The launch configuration for servers in the server group.
+    serverLaunchConfigurations :: Prelude.Maybe [ServerLaunchConfiguration]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerGroupLaunchConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'launchOrder', 'serverGroupLaunchConfiguration_launchOrder' - The launch order of servers in the server group.
+--
+-- 'serverGroupId', 'serverGroupLaunchConfiguration_serverGroupId' - The ID of the server group with which the launch configuration is
+-- associated.
+--
+-- 'serverLaunchConfigurations', 'serverGroupLaunchConfiguration_serverLaunchConfigurations' - The launch configuration for servers in the server group.
+newServerGroupLaunchConfiguration ::
+  ServerGroupLaunchConfiguration
+newServerGroupLaunchConfiguration =
+  ServerGroupLaunchConfiguration'
+    { launchOrder =
+        Prelude.Nothing,
+      serverGroupId = Prelude.Nothing,
+      serverLaunchConfigurations =
+        Prelude.Nothing
+    }
+
+-- | The launch order of servers in the server group.
+serverGroupLaunchConfiguration_launchOrder :: Lens.Lens' ServerGroupLaunchConfiguration (Prelude.Maybe Prelude.Int)
+serverGroupLaunchConfiguration_launchOrder = Lens.lens (\ServerGroupLaunchConfiguration' {launchOrder} -> launchOrder) (\s@ServerGroupLaunchConfiguration' {} a -> s {launchOrder = a} :: ServerGroupLaunchConfiguration)
+
+-- | The ID of the server group with which the launch configuration is
+-- associated.
+serverGroupLaunchConfiguration_serverGroupId :: Lens.Lens' ServerGroupLaunchConfiguration (Prelude.Maybe Prelude.Text)
+serverGroupLaunchConfiguration_serverGroupId = Lens.lens (\ServerGroupLaunchConfiguration' {serverGroupId} -> serverGroupId) (\s@ServerGroupLaunchConfiguration' {} a -> s {serverGroupId = a} :: ServerGroupLaunchConfiguration)
+
+-- | The launch configuration for servers in the server group.
+serverGroupLaunchConfiguration_serverLaunchConfigurations :: Lens.Lens' ServerGroupLaunchConfiguration (Prelude.Maybe [ServerLaunchConfiguration])
+serverGroupLaunchConfiguration_serverLaunchConfigurations = Lens.lens (\ServerGroupLaunchConfiguration' {serverLaunchConfigurations} -> serverLaunchConfigurations) (\s@ServerGroupLaunchConfiguration' {} a -> s {serverLaunchConfigurations = a} :: ServerGroupLaunchConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance Data.FromJSON ServerGroupLaunchConfiguration where
+  parseJSON =
+    Data.withObject
+      "ServerGroupLaunchConfiguration"
+      ( \x ->
+          ServerGroupLaunchConfiguration'
+            Prelude.<$> (x Data..:? "launchOrder")
+            Prelude.<*> (x Data..:? "serverGroupId")
+            Prelude.<*> ( x
+                            Data..:? "serverLaunchConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ServerGroupLaunchConfiguration
+  where
+  hashWithSalt
+    _salt
+    ServerGroupLaunchConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` launchOrder
+        `Prelude.hashWithSalt` serverGroupId
+        `Prelude.hashWithSalt` serverLaunchConfigurations
+
+instance
+  Prelude.NFData
+    ServerGroupLaunchConfiguration
+  where
+  rnf ServerGroupLaunchConfiguration' {..} =
+    Prelude.rnf launchOrder
+      `Prelude.seq` Prelude.rnf serverGroupId
+      `Prelude.seq` Prelude.rnf serverLaunchConfigurations
+
+instance Data.ToJSON ServerGroupLaunchConfiguration where
+  toJSON ServerGroupLaunchConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("launchOrder" Data..=) Prelude.<$> launchOrder,
+            ("serverGroupId" Data..=) Prelude.<$> serverGroupId,
+            ("serverLaunchConfigurations" Data..=)
+              Prelude.<$> serverLaunchConfigurations
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ServerGroupReplicationConfiguration.hs b/gen/Amazonka/SMS/Types/ServerGroupReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerGroupReplicationConfiguration.hs
@@ -0,0 +1,117 @@
+{-# 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.SMS.Types.ServerGroupReplicationConfiguration
+-- 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.SMS.Types.ServerGroupReplicationConfiguration 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.SMS.Types.ServerReplicationConfiguration
+
+-- | Replication configuration for a server group.
+--
+-- /See:/ 'newServerGroupReplicationConfiguration' smart constructor.
+data ServerGroupReplicationConfiguration = ServerGroupReplicationConfiguration'
+  { -- | The ID of the server group with which this replication configuration is
+    -- associated.
+    serverGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The replication configuration for servers in the server group.
+    serverReplicationConfigurations :: Prelude.Maybe [ServerReplicationConfiguration]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerGroupReplicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serverGroupId', 'serverGroupReplicationConfiguration_serverGroupId' - The ID of the server group with which this replication configuration is
+-- associated.
+--
+-- 'serverReplicationConfigurations', 'serverGroupReplicationConfiguration_serverReplicationConfigurations' - The replication configuration for servers in the server group.
+newServerGroupReplicationConfiguration ::
+  ServerGroupReplicationConfiguration
+newServerGroupReplicationConfiguration =
+  ServerGroupReplicationConfiguration'
+    { serverGroupId =
+        Prelude.Nothing,
+      serverReplicationConfigurations =
+        Prelude.Nothing
+    }
+
+-- | The ID of the server group with which this replication configuration is
+-- associated.
+serverGroupReplicationConfiguration_serverGroupId :: Lens.Lens' ServerGroupReplicationConfiguration (Prelude.Maybe Prelude.Text)
+serverGroupReplicationConfiguration_serverGroupId = Lens.lens (\ServerGroupReplicationConfiguration' {serverGroupId} -> serverGroupId) (\s@ServerGroupReplicationConfiguration' {} a -> s {serverGroupId = a} :: ServerGroupReplicationConfiguration)
+
+-- | The replication configuration for servers in the server group.
+serverGroupReplicationConfiguration_serverReplicationConfigurations :: Lens.Lens' ServerGroupReplicationConfiguration (Prelude.Maybe [ServerReplicationConfiguration])
+serverGroupReplicationConfiguration_serverReplicationConfigurations = Lens.lens (\ServerGroupReplicationConfiguration' {serverReplicationConfigurations} -> serverReplicationConfigurations) (\s@ServerGroupReplicationConfiguration' {} a -> s {serverReplicationConfigurations = a} :: ServerGroupReplicationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    ServerGroupReplicationConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ServerGroupReplicationConfiguration"
+      ( \x ->
+          ServerGroupReplicationConfiguration'
+            Prelude.<$> (x Data..:? "serverGroupId")
+            Prelude.<*> ( x
+                            Data..:? "serverReplicationConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ServerGroupReplicationConfiguration
+  where
+  hashWithSalt
+    _salt
+    ServerGroupReplicationConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` serverGroupId
+        `Prelude.hashWithSalt` serverReplicationConfigurations
+
+instance
+  Prelude.NFData
+    ServerGroupReplicationConfiguration
+  where
+  rnf ServerGroupReplicationConfiguration' {..} =
+    Prelude.rnf serverGroupId
+      `Prelude.seq` Prelude.rnf serverReplicationConfigurations
+
+instance
+  Data.ToJSON
+    ServerGroupReplicationConfiguration
+  where
+  toJSON ServerGroupReplicationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("serverGroupId" Data..=) Prelude.<$> serverGroupId,
+            ("serverReplicationConfigurations" Data..=)
+              Prelude.<$> serverReplicationConfigurations
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ServerGroupValidationConfiguration.hs b/gen/Amazonka/SMS/Types/ServerGroupValidationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerGroupValidationConfiguration.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.SMS.Types.ServerGroupValidationConfiguration
+-- 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.SMS.Types.ServerGroupValidationConfiguration 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.SMS.Types.ServerValidationConfiguration
+
+-- | Configuration for validating an instance.
+--
+-- /See:/ 'newServerGroupValidationConfiguration' smart constructor.
+data ServerGroupValidationConfiguration = ServerGroupValidationConfiguration'
+  { -- | The ID of the server group.
+    serverGroupId :: Prelude.Maybe Prelude.Text,
+    -- | The validation configuration.
+    serverValidationConfigurations :: Prelude.Maybe [ServerValidationConfiguration]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerGroupValidationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'serverGroupId', 'serverGroupValidationConfiguration_serverGroupId' - The ID of the server group.
+--
+-- 'serverValidationConfigurations', 'serverGroupValidationConfiguration_serverValidationConfigurations' - The validation configuration.
+newServerGroupValidationConfiguration ::
+  ServerGroupValidationConfiguration
+newServerGroupValidationConfiguration =
+  ServerGroupValidationConfiguration'
+    { serverGroupId =
+        Prelude.Nothing,
+      serverValidationConfigurations =
+        Prelude.Nothing
+    }
+
+-- | The ID of the server group.
+serverGroupValidationConfiguration_serverGroupId :: Lens.Lens' ServerGroupValidationConfiguration (Prelude.Maybe Prelude.Text)
+serverGroupValidationConfiguration_serverGroupId = Lens.lens (\ServerGroupValidationConfiguration' {serverGroupId} -> serverGroupId) (\s@ServerGroupValidationConfiguration' {} a -> s {serverGroupId = a} :: ServerGroupValidationConfiguration)
+
+-- | The validation configuration.
+serverGroupValidationConfiguration_serverValidationConfigurations :: Lens.Lens' ServerGroupValidationConfiguration (Prelude.Maybe [ServerValidationConfiguration])
+serverGroupValidationConfiguration_serverValidationConfigurations = Lens.lens (\ServerGroupValidationConfiguration' {serverValidationConfigurations} -> serverValidationConfigurations) (\s@ServerGroupValidationConfiguration' {} a -> s {serverValidationConfigurations = a} :: ServerGroupValidationConfiguration) Prelude.. Lens.mapping Lens.coerced
+
+instance
+  Data.FromJSON
+    ServerGroupValidationConfiguration
+  where
+  parseJSON =
+    Data.withObject
+      "ServerGroupValidationConfiguration"
+      ( \x ->
+          ServerGroupValidationConfiguration'
+            Prelude.<$> (x Data..:? "serverGroupId")
+            Prelude.<*> ( x
+                            Data..:? "serverValidationConfigurations"
+                            Data..!= Prelude.mempty
+                        )
+      )
+
+instance
+  Prelude.Hashable
+    ServerGroupValidationConfiguration
+  where
+  hashWithSalt
+    _salt
+    ServerGroupValidationConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` serverGroupId
+        `Prelude.hashWithSalt` serverValidationConfigurations
+
+instance
+  Prelude.NFData
+    ServerGroupValidationConfiguration
+  where
+  rnf ServerGroupValidationConfiguration' {..} =
+    Prelude.rnf serverGroupId
+      `Prelude.seq` Prelude.rnf serverValidationConfigurations
+
+instance
+  Data.ToJSON
+    ServerGroupValidationConfiguration
+  where
+  toJSON ServerGroupValidationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("serverGroupId" Data..=) Prelude.<$> serverGroupId,
+            ("serverValidationConfigurations" Data..=)
+              Prelude.<$> serverValidationConfigurations
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ServerLaunchConfiguration.hs b/gen/Amazonka/SMS/Types/ServerLaunchConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerLaunchConfiguration.hs
@@ -0,0 +1,240 @@
+{-# 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.SMS.Types.ServerLaunchConfiguration
+-- 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.SMS.Types.ServerLaunchConfiguration 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.SMS.Types.S3Location
+import Amazonka.SMS.Types.ScriptType
+import Amazonka.SMS.Types.Server
+import Amazonka.SMS.Types.UserData
+
+-- | Launch configuration for a server.
+--
+-- /See:/ 'newServerLaunchConfiguration' smart constructor.
+data ServerLaunchConfiguration = ServerLaunchConfiguration'
+  { -- | Indicates whether a publicly accessible IP address is created when
+    -- launching the server.
+    associatePublicIpAddress :: Prelude.Maybe Prelude.Bool,
+    configureScript :: Prelude.Maybe S3Location,
+    -- | The type of configuration script.
+    configureScriptType :: Prelude.Maybe ScriptType,
+    -- | The name of the Amazon EC2 SSH key to be used for connecting to the
+    -- launched server.
+    ec2KeyName :: Prelude.Maybe Prelude.Text,
+    -- | The name of the IAM instance profile.
+    iamInstanceProfileName :: Prelude.Maybe Prelude.Text,
+    -- | The instance type to use when launching the server.
+    instanceType :: Prelude.Maybe Prelude.Text,
+    -- | The logical ID of the server in the CloudFormation template.
+    logicalId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the security group that applies to the launched server.
+    securityGroup :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the server with which the launch configuration is associated.
+    server :: Prelude.Maybe Server,
+    -- | The ID of the subnet the server should be launched into.
+    subnet :: Prelude.Maybe Prelude.Text,
+    -- | Location of the user-data script to be executed when launching the
+    -- server.
+    userData :: Prelude.Maybe UserData,
+    -- | The ID of the VPC into which the server should be launched.
+    vpc :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerLaunchConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'associatePublicIpAddress', 'serverLaunchConfiguration_associatePublicIpAddress' - Indicates whether a publicly accessible IP address is created when
+-- launching the server.
+--
+-- 'configureScript', 'serverLaunchConfiguration_configureScript' - Undocumented member.
+--
+-- 'configureScriptType', 'serverLaunchConfiguration_configureScriptType' - The type of configuration script.
+--
+-- 'ec2KeyName', 'serverLaunchConfiguration_ec2KeyName' - The name of the Amazon EC2 SSH key to be used for connecting to the
+-- launched server.
+--
+-- 'iamInstanceProfileName', 'serverLaunchConfiguration_iamInstanceProfileName' - The name of the IAM instance profile.
+--
+-- 'instanceType', 'serverLaunchConfiguration_instanceType' - The instance type to use when launching the server.
+--
+-- 'logicalId', 'serverLaunchConfiguration_logicalId' - The logical ID of the server in the CloudFormation template.
+--
+-- 'securityGroup', 'serverLaunchConfiguration_securityGroup' - The ID of the security group that applies to the launched server.
+--
+-- 'server', 'serverLaunchConfiguration_server' - The ID of the server with which the launch configuration is associated.
+--
+-- 'subnet', 'serverLaunchConfiguration_subnet' - The ID of the subnet the server should be launched into.
+--
+-- 'userData', 'serverLaunchConfiguration_userData' - Location of the user-data script to be executed when launching the
+-- server.
+--
+-- 'vpc', 'serverLaunchConfiguration_vpc' - The ID of the VPC into which the server should be launched.
+newServerLaunchConfiguration ::
+  ServerLaunchConfiguration
+newServerLaunchConfiguration =
+  ServerLaunchConfiguration'
+    { associatePublicIpAddress =
+        Prelude.Nothing,
+      configureScript = Prelude.Nothing,
+      configureScriptType = Prelude.Nothing,
+      ec2KeyName = Prelude.Nothing,
+      iamInstanceProfileName = Prelude.Nothing,
+      instanceType = Prelude.Nothing,
+      logicalId = Prelude.Nothing,
+      securityGroup = Prelude.Nothing,
+      server = Prelude.Nothing,
+      subnet = Prelude.Nothing,
+      userData = Prelude.Nothing,
+      vpc = Prelude.Nothing
+    }
+
+-- | Indicates whether a publicly accessible IP address is created when
+-- launching the server.
+serverLaunchConfiguration_associatePublicIpAddress :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe Prelude.Bool)
+serverLaunchConfiguration_associatePublicIpAddress = Lens.lens (\ServerLaunchConfiguration' {associatePublicIpAddress} -> associatePublicIpAddress) (\s@ServerLaunchConfiguration' {} a -> s {associatePublicIpAddress = a} :: ServerLaunchConfiguration)
+
+-- | Undocumented member.
+serverLaunchConfiguration_configureScript :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe S3Location)
+serverLaunchConfiguration_configureScript = Lens.lens (\ServerLaunchConfiguration' {configureScript} -> configureScript) (\s@ServerLaunchConfiguration' {} a -> s {configureScript = a} :: ServerLaunchConfiguration)
+
+-- | The type of configuration script.
+serverLaunchConfiguration_configureScriptType :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe ScriptType)
+serverLaunchConfiguration_configureScriptType = Lens.lens (\ServerLaunchConfiguration' {configureScriptType} -> configureScriptType) (\s@ServerLaunchConfiguration' {} a -> s {configureScriptType = a} :: ServerLaunchConfiguration)
+
+-- | The name of the Amazon EC2 SSH key to be used for connecting to the
+-- launched server.
+serverLaunchConfiguration_ec2KeyName :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe Prelude.Text)
+serverLaunchConfiguration_ec2KeyName = Lens.lens (\ServerLaunchConfiguration' {ec2KeyName} -> ec2KeyName) (\s@ServerLaunchConfiguration' {} a -> s {ec2KeyName = a} :: ServerLaunchConfiguration)
+
+-- | The name of the IAM instance profile.
+serverLaunchConfiguration_iamInstanceProfileName :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe Prelude.Text)
+serverLaunchConfiguration_iamInstanceProfileName = Lens.lens (\ServerLaunchConfiguration' {iamInstanceProfileName} -> iamInstanceProfileName) (\s@ServerLaunchConfiguration' {} a -> s {iamInstanceProfileName = a} :: ServerLaunchConfiguration)
+
+-- | The instance type to use when launching the server.
+serverLaunchConfiguration_instanceType :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe Prelude.Text)
+serverLaunchConfiguration_instanceType = Lens.lens (\ServerLaunchConfiguration' {instanceType} -> instanceType) (\s@ServerLaunchConfiguration' {} a -> s {instanceType = a} :: ServerLaunchConfiguration)
+
+-- | The logical ID of the server in the CloudFormation template.
+serverLaunchConfiguration_logicalId :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe Prelude.Text)
+serverLaunchConfiguration_logicalId = Lens.lens (\ServerLaunchConfiguration' {logicalId} -> logicalId) (\s@ServerLaunchConfiguration' {} a -> s {logicalId = a} :: ServerLaunchConfiguration)
+
+-- | The ID of the security group that applies to the launched server.
+serverLaunchConfiguration_securityGroup :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe Prelude.Text)
+serverLaunchConfiguration_securityGroup = Lens.lens (\ServerLaunchConfiguration' {securityGroup} -> securityGroup) (\s@ServerLaunchConfiguration' {} a -> s {securityGroup = a} :: ServerLaunchConfiguration)
+
+-- | The ID of the server with which the launch configuration is associated.
+serverLaunchConfiguration_server :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe Server)
+serverLaunchConfiguration_server = Lens.lens (\ServerLaunchConfiguration' {server} -> server) (\s@ServerLaunchConfiguration' {} a -> s {server = a} :: ServerLaunchConfiguration)
+
+-- | The ID of the subnet the server should be launched into.
+serverLaunchConfiguration_subnet :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe Prelude.Text)
+serverLaunchConfiguration_subnet = Lens.lens (\ServerLaunchConfiguration' {subnet} -> subnet) (\s@ServerLaunchConfiguration' {} a -> s {subnet = a} :: ServerLaunchConfiguration)
+
+-- | Location of the user-data script to be executed when launching the
+-- server.
+serverLaunchConfiguration_userData :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe UserData)
+serverLaunchConfiguration_userData = Lens.lens (\ServerLaunchConfiguration' {userData} -> userData) (\s@ServerLaunchConfiguration' {} a -> s {userData = a} :: ServerLaunchConfiguration)
+
+-- | The ID of the VPC into which the server should be launched.
+serverLaunchConfiguration_vpc :: Lens.Lens' ServerLaunchConfiguration (Prelude.Maybe Prelude.Text)
+serverLaunchConfiguration_vpc = Lens.lens (\ServerLaunchConfiguration' {vpc} -> vpc) (\s@ServerLaunchConfiguration' {} a -> s {vpc = a} :: ServerLaunchConfiguration)
+
+instance Data.FromJSON ServerLaunchConfiguration where
+  parseJSON =
+    Data.withObject
+      "ServerLaunchConfiguration"
+      ( \x ->
+          ServerLaunchConfiguration'
+            Prelude.<$> (x Data..:? "associatePublicIpAddress")
+            Prelude.<*> (x Data..:? "configureScript")
+            Prelude.<*> (x Data..:? "configureScriptType")
+            Prelude.<*> (x Data..:? "ec2KeyName")
+            Prelude.<*> (x Data..:? "iamInstanceProfileName")
+            Prelude.<*> (x Data..:? "instanceType")
+            Prelude.<*> (x Data..:? "logicalId")
+            Prelude.<*> (x Data..:? "securityGroup")
+            Prelude.<*> (x Data..:? "server")
+            Prelude.<*> (x Data..:? "subnet")
+            Prelude.<*> (x Data..:? "userData")
+            Prelude.<*> (x Data..:? "vpc")
+      )
+
+instance Prelude.Hashable ServerLaunchConfiguration where
+  hashWithSalt _salt ServerLaunchConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` associatePublicIpAddress
+      `Prelude.hashWithSalt` configureScript
+      `Prelude.hashWithSalt` configureScriptType
+      `Prelude.hashWithSalt` ec2KeyName
+      `Prelude.hashWithSalt` iamInstanceProfileName
+      `Prelude.hashWithSalt` instanceType
+      `Prelude.hashWithSalt` logicalId
+      `Prelude.hashWithSalt` securityGroup
+      `Prelude.hashWithSalt` server
+      `Prelude.hashWithSalt` subnet
+      `Prelude.hashWithSalt` userData
+      `Prelude.hashWithSalt` vpc
+
+instance Prelude.NFData ServerLaunchConfiguration where
+  rnf ServerLaunchConfiguration' {..} =
+    Prelude.rnf associatePublicIpAddress
+      `Prelude.seq` Prelude.rnf configureScript
+      `Prelude.seq` Prelude.rnf configureScriptType
+      `Prelude.seq` Prelude.rnf ec2KeyName
+      `Prelude.seq` Prelude.rnf iamInstanceProfileName
+      `Prelude.seq` Prelude.rnf instanceType
+      `Prelude.seq` Prelude.rnf logicalId
+      `Prelude.seq` Prelude.rnf securityGroup
+      `Prelude.seq` Prelude.rnf server
+      `Prelude.seq` Prelude.rnf subnet
+      `Prelude.seq` Prelude.rnf userData
+      `Prelude.seq` Prelude.rnf vpc
+
+instance Data.ToJSON ServerLaunchConfiguration where
+  toJSON ServerLaunchConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("associatePublicIpAddress" Data..=)
+              Prelude.<$> associatePublicIpAddress,
+            ("configureScript" Data..=)
+              Prelude.<$> configureScript,
+            ("configureScriptType" Data..=)
+              Prelude.<$> configureScriptType,
+            ("ec2KeyName" Data..=) Prelude.<$> ec2KeyName,
+            ("iamInstanceProfileName" Data..=)
+              Prelude.<$> iamInstanceProfileName,
+            ("instanceType" Data..=) Prelude.<$> instanceType,
+            ("logicalId" Data..=) Prelude.<$> logicalId,
+            ("securityGroup" Data..=) Prelude.<$> securityGroup,
+            ("server" Data..=) Prelude.<$> server,
+            ("subnet" Data..=) Prelude.<$> subnet,
+            ("userData" Data..=) Prelude.<$> userData,
+            ("vpc" Data..=) Prelude.<$> vpc
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ServerReplicationConfiguration.hs b/gen/Amazonka/SMS/Types/ServerReplicationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerReplicationConfiguration.hs
@@ -0,0 +1,109 @@
+{-# 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.SMS.Types.ServerReplicationConfiguration
+-- 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.SMS.Types.ServerReplicationConfiguration 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.SMS.Types.Server
+import Amazonka.SMS.Types.ServerReplicationParameters
+
+-- | Replication configuration of a server.
+--
+-- /See:/ 'newServerReplicationConfiguration' smart constructor.
+data ServerReplicationConfiguration = ServerReplicationConfiguration'
+  { -- | The ID of the server with which this replication configuration is
+    -- associated.
+    server :: Prelude.Maybe Server,
+    -- | The parameters for replicating the server.
+    serverReplicationParameters :: Prelude.Maybe ServerReplicationParameters
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerReplicationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'server', 'serverReplicationConfiguration_server' - The ID of the server with which this replication configuration is
+-- associated.
+--
+-- 'serverReplicationParameters', 'serverReplicationConfiguration_serverReplicationParameters' - The parameters for replicating the server.
+newServerReplicationConfiguration ::
+  ServerReplicationConfiguration
+newServerReplicationConfiguration =
+  ServerReplicationConfiguration'
+    { server =
+        Prelude.Nothing,
+      serverReplicationParameters =
+        Prelude.Nothing
+    }
+
+-- | The ID of the server with which this replication configuration is
+-- associated.
+serverReplicationConfiguration_server :: Lens.Lens' ServerReplicationConfiguration (Prelude.Maybe Server)
+serverReplicationConfiguration_server = Lens.lens (\ServerReplicationConfiguration' {server} -> server) (\s@ServerReplicationConfiguration' {} a -> s {server = a} :: ServerReplicationConfiguration)
+
+-- | The parameters for replicating the server.
+serverReplicationConfiguration_serverReplicationParameters :: Lens.Lens' ServerReplicationConfiguration (Prelude.Maybe ServerReplicationParameters)
+serverReplicationConfiguration_serverReplicationParameters = Lens.lens (\ServerReplicationConfiguration' {serverReplicationParameters} -> serverReplicationParameters) (\s@ServerReplicationConfiguration' {} a -> s {serverReplicationParameters = a} :: ServerReplicationConfiguration)
+
+instance Data.FromJSON ServerReplicationConfiguration where
+  parseJSON =
+    Data.withObject
+      "ServerReplicationConfiguration"
+      ( \x ->
+          ServerReplicationConfiguration'
+            Prelude.<$> (x Data..:? "server")
+            Prelude.<*> (x Data..:? "serverReplicationParameters")
+      )
+
+instance
+  Prelude.Hashable
+    ServerReplicationConfiguration
+  where
+  hashWithSalt
+    _salt
+    ServerReplicationConfiguration' {..} =
+      _salt
+        `Prelude.hashWithSalt` server
+        `Prelude.hashWithSalt` serverReplicationParameters
+
+instance
+  Prelude.NFData
+    ServerReplicationConfiguration
+  where
+  rnf ServerReplicationConfiguration' {..} =
+    Prelude.rnf server
+      `Prelude.seq` Prelude.rnf serverReplicationParameters
+
+instance Data.ToJSON ServerReplicationConfiguration where
+  toJSON ServerReplicationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("server" Data..=) Prelude.<$> server,
+            ("serverReplicationParameters" Data..=)
+              Prelude.<$> serverReplicationParameters
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ServerReplicationParameters.hs b/gen/Amazonka/SMS/Types/ServerReplicationParameters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerReplicationParameters.hs
@@ -0,0 +1,200 @@
+{-# 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.SMS.Types.ServerReplicationParameters
+-- 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.SMS.Types.ServerReplicationParameters 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.SMS.Types.LicenseType
+
+-- | The replication parameters for replicating a server.
+--
+-- /See:/ 'newServerReplicationParameters' smart constructor.
+data ServerReplicationParameters = ServerReplicationParameters'
+  { -- | Indicates whether the replication job produces encrypted AMIs.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The frequency of creating replication jobs for the server.
+    frequency :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
+    -- This value can be any of the following:
+    --
+    -- -   KMS key ID
+    --
+    -- -   KMS key alias
+    --
+    -- -   ARN referring to the KMS key ID
+    --
+    -- -   ARN referring to the KMS key alias
+    --
+    -- If encrypted is enabled but a KMS key ID is not specified, the
+    -- customer\'s default KMS key for Amazon EBS is used.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The license type for creating a replication job for the server.
+    licenseType :: Prelude.Maybe LicenseType,
+    -- | The number of recent AMIs to keep when creating a replication job for
+    -- this server.
+    numberOfRecentAmisToKeep :: Prelude.Maybe Prelude.Int,
+    -- | Indicates whether to run the replication job one time.
+    runOnce :: Prelude.Maybe Prelude.Bool,
+    -- | The seed time for creating a replication job for the server.
+    seedTime :: Prelude.Maybe Data.POSIX
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerReplicationParameters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'encrypted', 'serverReplicationParameters_encrypted' - Indicates whether the replication job produces encrypted AMIs.
+--
+-- 'frequency', 'serverReplicationParameters_frequency' - The frequency of creating replication jobs for the server.
+--
+-- 'kmsKeyId', 'serverReplicationParameters_kmsKeyId' - The ID of the KMS key for replication jobs that produce encrypted AMIs.
+-- This value can be any of the following:
+--
+-- -   KMS key ID
+--
+-- -   KMS key alias
+--
+-- -   ARN referring to the KMS key ID
+--
+-- -   ARN referring to the KMS key alias
+--
+-- If encrypted is enabled but a KMS key ID is not specified, the
+-- customer\'s default KMS key for Amazon EBS is used.
+--
+-- 'licenseType', 'serverReplicationParameters_licenseType' - The license type for creating a replication job for the server.
+--
+-- 'numberOfRecentAmisToKeep', 'serverReplicationParameters_numberOfRecentAmisToKeep' - The number of recent AMIs to keep when creating a replication job for
+-- this server.
+--
+-- 'runOnce', 'serverReplicationParameters_runOnce' - Indicates whether to run the replication job one time.
+--
+-- 'seedTime', 'serverReplicationParameters_seedTime' - The seed time for creating a replication job for the server.
+newServerReplicationParameters ::
+  ServerReplicationParameters
+newServerReplicationParameters =
+  ServerReplicationParameters'
+    { encrypted =
+        Prelude.Nothing,
+      frequency = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      licenseType = Prelude.Nothing,
+      numberOfRecentAmisToKeep = Prelude.Nothing,
+      runOnce = Prelude.Nothing,
+      seedTime = Prelude.Nothing
+    }
+
+-- | Indicates whether the replication job produces encrypted AMIs.
+serverReplicationParameters_encrypted :: Lens.Lens' ServerReplicationParameters (Prelude.Maybe Prelude.Bool)
+serverReplicationParameters_encrypted = Lens.lens (\ServerReplicationParameters' {encrypted} -> encrypted) (\s@ServerReplicationParameters' {} a -> s {encrypted = a} :: ServerReplicationParameters)
+
+-- | The frequency of creating replication jobs for the server.
+serverReplicationParameters_frequency :: Lens.Lens' ServerReplicationParameters (Prelude.Maybe Prelude.Int)
+serverReplicationParameters_frequency = Lens.lens (\ServerReplicationParameters' {frequency} -> frequency) (\s@ServerReplicationParameters' {} a -> s {frequency = a} :: ServerReplicationParameters)
+
+-- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
+-- This value can be any of the following:
+--
+-- -   KMS key ID
+--
+-- -   KMS key alias
+--
+-- -   ARN referring to the KMS key ID
+--
+-- -   ARN referring to the KMS key alias
+--
+-- If encrypted is enabled but a KMS key ID is not specified, the
+-- customer\'s default KMS key for Amazon EBS is used.
+serverReplicationParameters_kmsKeyId :: Lens.Lens' ServerReplicationParameters (Prelude.Maybe Prelude.Text)
+serverReplicationParameters_kmsKeyId = Lens.lens (\ServerReplicationParameters' {kmsKeyId} -> kmsKeyId) (\s@ServerReplicationParameters' {} a -> s {kmsKeyId = a} :: ServerReplicationParameters)
+
+-- | The license type for creating a replication job for the server.
+serverReplicationParameters_licenseType :: Lens.Lens' ServerReplicationParameters (Prelude.Maybe LicenseType)
+serverReplicationParameters_licenseType = Lens.lens (\ServerReplicationParameters' {licenseType} -> licenseType) (\s@ServerReplicationParameters' {} a -> s {licenseType = a} :: ServerReplicationParameters)
+
+-- | The number of recent AMIs to keep when creating a replication job for
+-- this server.
+serverReplicationParameters_numberOfRecentAmisToKeep :: Lens.Lens' ServerReplicationParameters (Prelude.Maybe Prelude.Int)
+serverReplicationParameters_numberOfRecentAmisToKeep = Lens.lens (\ServerReplicationParameters' {numberOfRecentAmisToKeep} -> numberOfRecentAmisToKeep) (\s@ServerReplicationParameters' {} a -> s {numberOfRecentAmisToKeep = a} :: ServerReplicationParameters)
+
+-- | Indicates whether to run the replication job one time.
+serverReplicationParameters_runOnce :: Lens.Lens' ServerReplicationParameters (Prelude.Maybe Prelude.Bool)
+serverReplicationParameters_runOnce = Lens.lens (\ServerReplicationParameters' {runOnce} -> runOnce) (\s@ServerReplicationParameters' {} a -> s {runOnce = a} :: ServerReplicationParameters)
+
+-- | The seed time for creating a replication job for the server.
+serverReplicationParameters_seedTime :: Lens.Lens' ServerReplicationParameters (Prelude.Maybe Prelude.UTCTime)
+serverReplicationParameters_seedTime = Lens.lens (\ServerReplicationParameters' {seedTime} -> seedTime) (\s@ServerReplicationParameters' {} a -> s {seedTime = a} :: ServerReplicationParameters) Prelude.. Lens.mapping Data._Time
+
+instance Data.FromJSON ServerReplicationParameters where
+  parseJSON =
+    Data.withObject
+      "ServerReplicationParameters"
+      ( \x ->
+          ServerReplicationParameters'
+            Prelude.<$> (x Data..:? "encrypted")
+            Prelude.<*> (x Data..:? "frequency")
+            Prelude.<*> (x Data..:? "kmsKeyId")
+            Prelude.<*> (x Data..:? "licenseType")
+            Prelude.<*> (x Data..:? "numberOfRecentAmisToKeep")
+            Prelude.<*> (x Data..:? "runOnce")
+            Prelude.<*> (x Data..:? "seedTime")
+      )
+
+instance Prelude.Hashable ServerReplicationParameters where
+  hashWithSalt _salt ServerReplicationParameters' {..} =
+    _salt
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` frequency
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` licenseType
+      `Prelude.hashWithSalt` numberOfRecentAmisToKeep
+      `Prelude.hashWithSalt` runOnce
+      `Prelude.hashWithSalt` seedTime
+
+instance Prelude.NFData ServerReplicationParameters where
+  rnf ServerReplicationParameters' {..} =
+    Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf frequency
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf licenseType
+      `Prelude.seq` Prelude.rnf numberOfRecentAmisToKeep
+      `Prelude.seq` Prelude.rnf runOnce
+      `Prelude.seq` Prelude.rnf seedTime
+
+instance Data.ToJSON ServerReplicationParameters where
+  toJSON ServerReplicationParameters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("encrypted" Data..=) Prelude.<$> encrypted,
+            ("frequency" Data..=) Prelude.<$> frequency,
+            ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("licenseType" Data..=) Prelude.<$> licenseType,
+            ("numberOfRecentAmisToKeep" Data..=)
+              Prelude.<$> numberOfRecentAmisToKeep,
+            ("runOnce" Data..=) Prelude.<$> runOnce,
+            ("seedTime" Data..=) Prelude.<$> seedTime
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ServerType.hs b/gen/Amazonka/SMS/Types/ServerType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerType.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.SMS.Types.ServerType
+-- 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.SMS.Types.ServerType
+  ( ServerType
+      ( ..,
+        ServerType_VIRTUAL_MACHINE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServerType = ServerType'
+  { fromServerType ::
+      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 ServerType_VIRTUAL_MACHINE :: ServerType
+pattern ServerType_VIRTUAL_MACHINE = ServerType' "VIRTUAL_MACHINE"
+
+{-# COMPLETE
+  ServerType_VIRTUAL_MACHINE,
+  ServerType'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/ServerValidationConfiguration.hs b/gen/Amazonka/SMS/Types/ServerValidationConfiguration.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerValidationConfiguration.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.ServerValidationConfiguration
+-- 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.SMS.Types.ServerValidationConfiguration 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.SMS.Types.Server
+import Amazonka.SMS.Types.ServerValidationStrategy
+import Amazonka.SMS.Types.UserDataValidationParameters
+
+-- | Configuration for validating an instance.
+--
+-- /See:/ 'newServerValidationConfiguration' smart constructor.
+data ServerValidationConfiguration = ServerValidationConfiguration'
+  { -- | The name of the configuration.
+    name :: Prelude.Maybe Prelude.Text,
+    server :: Prelude.Maybe Server,
+    -- | The validation strategy.
+    serverValidationStrategy :: Prelude.Maybe ServerValidationStrategy,
+    -- | The validation parameters.
+    userDataValidationParameters :: Prelude.Maybe UserDataValidationParameters,
+    -- | The ID of the validation.
+    validationId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerValidationConfiguration' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'name', 'serverValidationConfiguration_name' - The name of the configuration.
+--
+-- 'server', 'serverValidationConfiguration_server' - Undocumented member.
+--
+-- 'serverValidationStrategy', 'serverValidationConfiguration_serverValidationStrategy' - The validation strategy.
+--
+-- 'userDataValidationParameters', 'serverValidationConfiguration_userDataValidationParameters' - The validation parameters.
+--
+-- 'validationId', 'serverValidationConfiguration_validationId' - The ID of the validation.
+newServerValidationConfiguration ::
+  ServerValidationConfiguration
+newServerValidationConfiguration =
+  ServerValidationConfiguration'
+    { name =
+        Prelude.Nothing,
+      server = Prelude.Nothing,
+      serverValidationStrategy = Prelude.Nothing,
+      userDataValidationParameters =
+        Prelude.Nothing,
+      validationId = Prelude.Nothing
+    }
+
+-- | The name of the configuration.
+serverValidationConfiguration_name :: Lens.Lens' ServerValidationConfiguration (Prelude.Maybe Prelude.Text)
+serverValidationConfiguration_name = Lens.lens (\ServerValidationConfiguration' {name} -> name) (\s@ServerValidationConfiguration' {} a -> s {name = a} :: ServerValidationConfiguration)
+
+-- | Undocumented member.
+serverValidationConfiguration_server :: Lens.Lens' ServerValidationConfiguration (Prelude.Maybe Server)
+serverValidationConfiguration_server = Lens.lens (\ServerValidationConfiguration' {server} -> server) (\s@ServerValidationConfiguration' {} a -> s {server = a} :: ServerValidationConfiguration)
+
+-- | The validation strategy.
+serverValidationConfiguration_serverValidationStrategy :: Lens.Lens' ServerValidationConfiguration (Prelude.Maybe ServerValidationStrategy)
+serverValidationConfiguration_serverValidationStrategy = Lens.lens (\ServerValidationConfiguration' {serverValidationStrategy} -> serverValidationStrategy) (\s@ServerValidationConfiguration' {} a -> s {serverValidationStrategy = a} :: ServerValidationConfiguration)
+
+-- | The validation parameters.
+serverValidationConfiguration_userDataValidationParameters :: Lens.Lens' ServerValidationConfiguration (Prelude.Maybe UserDataValidationParameters)
+serverValidationConfiguration_userDataValidationParameters = Lens.lens (\ServerValidationConfiguration' {userDataValidationParameters} -> userDataValidationParameters) (\s@ServerValidationConfiguration' {} a -> s {userDataValidationParameters = a} :: ServerValidationConfiguration)
+
+-- | The ID of the validation.
+serverValidationConfiguration_validationId :: Lens.Lens' ServerValidationConfiguration (Prelude.Maybe Prelude.Text)
+serverValidationConfiguration_validationId = Lens.lens (\ServerValidationConfiguration' {validationId} -> validationId) (\s@ServerValidationConfiguration' {} a -> s {validationId = a} :: ServerValidationConfiguration)
+
+instance Data.FromJSON ServerValidationConfiguration where
+  parseJSON =
+    Data.withObject
+      "ServerValidationConfiguration"
+      ( \x ->
+          ServerValidationConfiguration'
+            Prelude.<$> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "server")
+            Prelude.<*> (x Data..:? "serverValidationStrategy")
+            Prelude.<*> (x Data..:? "userDataValidationParameters")
+            Prelude.<*> (x Data..:? "validationId")
+      )
+
+instance
+  Prelude.Hashable
+    ServerValidationConfiguration
+  where
+  hashWithSalt _salt ServerValidationConfiguration' {..} =
+    _salt
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` server
+      `Prelude.hashWithSalt` serverValidationStrategy
+      `Prelude.hashWithSalt` userDataValidationParameters
+      `Prelude.hashWithSalt` validationId
+
+instance Prelude.NFData ServerValidationConfiguration where
+  rnf ServerValidationConfiguration' {..} =
+    Prelude.rnf name
+      `Prelude.seq` Prelude.rnf server
+      `Prelude.seq` Prelude.rnf serverValidationStrategy
+      `Prelude.seq` Prelude.rnf userDataValidationParameters
+      `Prelude.seq` Prelude.rnf validationId
+
+instance Data.ToJSON ServerValidationConfiguration where
+  toJSON ServerValidationConfiguration' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("name" Data..=) Prelude.<$> name,
+            ("server" Data..=) Prelude.<$> server,
+            ("serverValidationStrategy" Data..=)
+              Prelude.<$> serverValidationStrategy,
+            ("userDataValidationParameters" Data..=)
+              Prelude.<$> userDataValidationParameters,
+            ("validationId" Data..=) Prelude.<$> validationId
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ServerValidationOutput.hs b/gen/Amazonka/SMS/Types/ServerValidationOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerValidationOutput.hs
@@ -0,0 +1,68 @@
+{-# 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.SMS.Types.ServerValidationOutput
+-- 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.SMS.Types.ServerValidationOutput 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.SMS.Types.Server
+
+-- | Contains output from validating an instance.
+--
+-- /See:/ 'newServerValidationOutput' smart constructor.
+data ServerValidationOutput = ServerValidationOutput'
+  { server :: Prelude.Maybe Server
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ServerValidationOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'server', 'serverValidationOutput_server' - Undocumented member.
+newServerValidationOutput ::
+  ServerValidationOutput
+newServerValidationOutput =
+  ServerValidationOutput' {server = Prelude.Nothing}
+
+-- | Undocumented member.
+serverValidationOutput_server :: Lens.Lens' ServerValidationOutput (Prelude.Maybe Server)
+serverValidationOutput_server = Lens.lens (\ServerValidationOutput' {server} -> server) (\s@ServerValidationOutput' {} a -> s {server = a} :: ServerValidationOutput)
+
+instance Data.FromJSON ServerValidationOutput where
+  parseJSON =
+    Data.withObject
+      "ServerValidationOutput"
+      ( \x ->
+          ServerValidationOutput'
+            Prelude.<$> (x Data..:? "server")
+      )
+
+instance Prelude.Hashable ServerValidationOutput where
+  hashWithSalt _salt ServerValidationOutput' {..} =
+    _salt `Prelude.hashWithSalt` server
+
+instance Prelude.NFData ServerValidationOutput where
+  rnf ServerValidationOutput' {..} = Prelude.rnf server
diff --git a/gen/Amazonka/SMS/Types/ServerValidationStrategy.hs b/gen/Amazonka/SMS/Types/ServerValidationStrategy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ServerValidationStrategy.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.SMS.Types.ServerValidationStrategy
+-- 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.SMS.Types.ServerValidationStrategy
+  ( ServerValidationStrategy
+      ( ..,
+        ServerValidationStrategy_USERDATA
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ServerValidationStrategy = ServerValidationStrategy'
+  { fromServerValidationStrategy ::
+      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 ServerValidationStrategy_USERDATA :: ServerValidationStrategy
+pattern ServerValidationStrategy_USERDATA = ServerValidationStrategy' "USERDATA"
+
+{-# COMPLETE
+  ServerValidationStrategy_USERDATA,
+  ServerValidationStrategy'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/Source.hs b/gen/Amazonka/SMS/Types/Source.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/Source.hs
@@ -0,0 +1,73 @@
+{-# 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.SMS.Types.Source
+-- 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.SMS.Types.Source 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.SMS.Types.S3Location
+
+-- | Contains the location of a validation script.
+--
+-- /See:/ 'newSource' smart constructor.
+data Source = Source'
+  { s3Location :: Prelude.Maybe S3Location
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Source' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Location', 'source_s3Location' - Undocumented member.
+newSource ::
+  Source
+newSource = Source' {s3Location = Prelude.Nothing}
+
+-- | Undocumented member.
+source_s3Location :: Lens.Lens' Source (Prelude.Maybe S3Location)
+source_s3Location = Lens.lens (\Source' {s3Location} -> s3Location) (\s@Source' {} a -> s {s3Location = a} :: Source)
+
+instance Data.FromJSON Source where
+  parseJSON =
+    Data.withObject
+      "Source"
+      ( \x ->
+          Source' Prelude.<$> (x Data..:? "s3Location")
+      )
+
+instance Prelude.Hashable Source where
+  hashWithSalt _salt Source' {..} =
+    _salt `Prelude.hashWithSalt` s3Location
+
+instance Prelude.NFData Source where
+  rnf Source' {..} = Prelude.rnf s3Location
+
+instance Data.ToJSON Source where
+  toJSON Source' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("s3Location" Data..=) Prelude.<$> s3Location]
+      )
diff --git a/gen/Amazonka/SMS/Types/Tag.hs b/gen/Amazonka/SMS/Types/Tag.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/Tag.hs
@@ -0,0 +1,92 @@
+{-# 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.SMS.Types.Tag
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+module Amazonka.SMS.Types.Tag where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Key\/value pair that can be assigned to an application.
+--
+-- /See:/ 'newTag' smart constructor.
+data Tag = Tag'
+  { -- | The tag key.
+    key :: Prelude.Maybe Prelude.Text,
+    -- | The tag value.
+    value :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'Tag' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'key', 'tag_key' - The tag key.
+--
+-- 'value', 'tag_value' - The tag value.
+newTag ::
+  Tag
+newTag =
+  Tag'
+    { key = Prelude.Nothing,
+      value = Prelude.Nothing
+    }
+
+-- | The tag key.
+tag_key :: Lens.Lens' Tag (Prelude.Maybe Prelude.Text)
+tag_key = Lens.lens (\Tag' {key} -> key) (\s@Tag' {} a -> s {key = a} :: Tag)
+
+-- | The tag value.
+tag_value :: Lens.Lens' Tag (Prelude.Maybe Prelude.Text)
+tag_value = Lens.lens (\Tag' {value} -> value) (\s@Tag' {} a -> s {value = a} :: Tag)
+
+instance Data.FromJSON Tag where
+  parseJSON =
+    Data.withObject
+      "Tag"
+      ( \x ->
+          Tag'
+            Prelude.<$> (x Data..:? "key")
+            Prelude.<*> (x Data..:? "value")
+      )
+
+instance Prelude.Hashable Tag where
+  hashWithSalt _salt Tag' {..} =
+    _salt
+      `Prelude.hashWithSalt` key
+      `Prelude.hashWithSalt` value
+
+instance Prelude.NFData Tag where
+  rnf Tag' {..} =
+    Prelude.rnf key `Prelude.seq` Prelude.rnf value
+
+instance Data.ToJSON Tag where
+  toJSON Tag' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("key" Data..=) Prelude.<$> key,
+            ("value" Data..=) Prelude.<$> value
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/UserData.hs b/gen/Amazonka/SMS/Types/UserData.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/UserData.hs
@@ -0,0 +1,75 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.UserData
+-- 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.SMS.Types.UserData 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.SMS.Types.S3Location
+
+-- | A script that runs on first launch of an Amazon EC2 instance. Used for
+-- configuring the server during launch.
+--
+-- /See:/ 'newUserData' smart constructor.
+data UserData = UserData'
+  { -- | Amazon S3 location of the user-data script.
+    s3Location :: Prelude.Maybe S3Location
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserData' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 's3Location', 'userData_s3Location' - Amazon S3 location of the user-data script.
+newUserData ::
+  UserData
+newUserData = UserData' {s3Location = Prelude.Nothing}
+
+-- | Amazon S3 location of the user-data script.
+userData_s3Location :: Lens.Lens' UserData (Prelude.Maybe S3Location)
+userData_s3Location = Lens.lens (\UserData' {s3Location} -> s3Location) (\s@UserData' {} a -> s {s3Location = a} :: UserData)
+
+instance Data.FromJSON UserData where
+  parseJSON =
+    Data.withObject
+      "UserData"
+      ( \x ->
+          UserData' Prelude.<$> (x Data..:? "s3Location")
+      )
+
+instance Prelude.Hashable UserData where
+  hashWithSalt _salt UserData' {..} =
+    _salt `Prelude.hashWithSalt` s3Location
+
+instance Prelude.NFData UserData where
+  rnf UserData' {..} = Prelude.rnf s3Location
+
+instance Data.ToJSON UserData where
+  toJSON UserData' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [("s3Location" Data..=) Prelude.<$> s3Location]
+      )
diff --git a/gen/Amazonka/SMS/Types/UserDataValidationParameters.hs b/gen/Amazonka/SMS/Types/UserDataValidationParameters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/UserDataValidationParameters.hs
@@ -0,0 +1,99 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.UserDataValidationParameters
+-- 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.SMS.Types.UserDataValidationParameters 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.SMS.Types.ScriptType
+import Amazonka.SMS.Types.Source
+
+-- | Contains validation parameters.
+--
+-- /See:/ 'newUserDataValidationParameters' smart constructor.
+data UserDataValidationParameters = UserDataValidationParameters'
+  { -- | The type of validation script.
+    scriptType :: Prelude.Maybe ScriptType,
+    -- | The location of the validation script.
+    source :: Prelude.Maybe Source
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UserDataValidationParameters' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'scriptType', 'userDataValidationParameters_scriptType' - The type of validation script.
+--
+-- 'source', 'userDataValidationParameters_source' - The location of the validation script.
+newUserDataValidationParameters ::
+  UserDataValidationParameters
+newUserDataValidationParameters =
+  UserDataValidationParameters'
+    { scriptType =
+        Prelude.Nothing,
+      source = Prelude.Nothing
+    }
+
+-- | The type of validation script.
+userDataValidationParameters_scriptType :: Lens.Lens' UserDataValidationParameters (Prelude.Maybe ScriptType)
+userDataValidationParameters_scriptType = Lens.lens (\UserDataValidationParameters' {scriptType} -> scriptType) (\s@UserDataValidationParameters' {} a -> s {scriptType = a} :: UserDataValidationParameters)
+
+-- | The location of the validation script.
+userDataValidationParameters_source :: Lens.Lens' UserDataValidationParameters (Prelude.Maybe Source)
+userDataValidationParameters_source = Lens.lens (\UserDataValidationParameters' {source} -> source) (\s@UserDataValidationParameters' {} a -> s {source = a} :: UserDataValidationParameters)
+
+instance Data.FromJSON UserDataValidationParameters where
+  parseJSON =
+    Data.withObject
+      "UserDataValidationParameters"
+      ( \x ->
+          UserDataValidationParameters'
+            Prelude.<$> (x Data..:? "scriptType")
+            Prelude.<*> (x Data..:? "source")
+      )
+
+instance
+  Prelude.Hashable
+    UserDataValidationParameters
+  where
+  hashWithSalt _salt UserDataValidationParameters' {..} =
+    _salt
+      `Prelude.hashWithSalt` scriptType
+      `Prelude.hashWithSalt` source
+
+instance Prelude.NFData UserDataValidationParameters where
+  rnf UserDataValidationParameters' {..} =
+    Prelude.rnf scriptType
+      `Prelude.seq` Prelude.rnf source
+
+instance Data.ToJSON UserDataValidationParameters where
+  toJSON UserDataValidationParameters' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("scriptType" Data..=) Prelude.<$> scriptType,
+            ("source" Data..=) Prelude.<$> source
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/ValidationOutput.hs b/gen/Amazonka/SMS/Types/ValidationOutput.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ValidationOutput.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.ValidationOutput
+-- 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.SMS.Types.ValidationOutput 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.SMS.Types.AppValidationOutput
+import Amazonka.SMS.Types.ServerValidationOutput
+import Amazonka.SMS.Types.ValidationStatus
+
+-- | Contains validation output.
+--
+-- /See:/ 'newValidationOutput' smart constructor.
+data ValidationOutput = ValidationOutput'
+  { -- | The output from validating an application.
+    appValidationOutput :: Prelude.Maybe AppValidationOutput,
+    -- | The latest time that the validation was performed.
+    latestValidationTime :: Prelude.Maybe Data.POSIX,
+    -- | The name of the validation.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The output from validation an instance.
+    serverValidationOutput :: Prelude.Maybe ServerValidationOutput,
+    -- | The status of the validation.
+    status :: Prelude.Maybe ValidationStatus,
+    -- | The status message.
+    statusMessage :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the validation.
+    validationId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'ValidationOutput' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appValidationOutput', 'validationOutput_appValidationOutput' - The output from validating an application.
+--
+-- 'latestValidationTime', 'validationOutput_latestValidationTime' - The latest time that the validation was performed.
+--
+-- 'name', 'validationOutput_name' - The name of the validation.
+--
+-- 'serverValidationOutput', 'validationOutput_serverValidationOutput' - The output from validation an instance.
+--
+-- 'status', 'validationOutput_status' - The status of the validation.
+--
+-- 'statusMessage', 'validationOutput_statusMessage' - The status message.
+--
+-- 'validationId', 'validationOutput_validationId' - The ID of the validation.
+newValidationOutput ::
+  ValidationOutput
+newValidationOutput =
+  ValidationOutput'
+    { appValidationOutput =
+        Prelude.Nothing,
+      latestValidationTime = Prelude.Nothing,
+      name = Prelude.Nothing,
+      serverValidationOutput = Prelude.Nothing,
+      status = Prelude.Nothing,
+      statusMessage = Prelude.Nothing,
+      validationId = Prelude.Nothing
+    }
+
+-- | The output from validating an application.
+validationOutput_appValidationOutput :: Lens.Lens' ValidationOutput (Prelude.Maybe AppValidationOutput)
+validationOutput_appValidationOutput = Lens.lens (\ValidationOutput' {appValidationOutput} -> appValidationOutput) (\s@ValidationOutput' {} a -> s {appValidationOutput = a} :: ValidationOutput)
+
+-- | The latest time that the validation was performed.
+validationOutput_latestValidationTime :: Lens.Lens' ValidationOutput (Prelude.Maybe Prelude.UTCTime)
+validationOutput_latestValidationTime = Lens.lens (\ValidationOutput' {latestValidationTime} -> latestValidationTime) (\s@ValidationOutput' {} a -> s {latestValidationTime = a} :: ValidationOutput) Prelude.. Lens.mapping Data._Time
+
+-- | The name of the validation.
+validationOutput_name :: Lens.Lens' ValidationOutput (Prelude.Maybe Prelude.Text)
+validationOutput_name = Lens.lens (\ValidationOutput' {name} -> name) (\s@ValidationOutput' {} a -> s {name = a} :: ValidationOutput)
+
+-- | The output from validation an instance.
+validationOutput_serverValidationOutput :: Lens.Lens' ValidationOutput (Prelude.Maybe ServerValidationOutput)
+validationOutput_serverValidationOutput = Lens.lens (\ValidationOutput' {serverValidationOutput} -> serverValidationOutput) (\s@ValidationOutput' {} a -> s {serverValidationOutput = a} :: ValidationOutput)
+
+-- | The status of the validation.
+validationOutput_status :: Lens.Lens' ValidationOutput (Prelude.Maybe ValidationStatus)
+validationOutput_status = Lens.lens (\ValidationOutput' {status} -> status) (\s@ValidationOutput' {} a -> s {status = a} :: ValidationOutput)
+
+-- | The status message.
+validationOutput_statusMessage :: Lens.Lens' ValidationOutput (Prelude.Maybe Prelude.Text)
+validationOutput_statusMessage = Lens.lens (\ValidationOutput' {statusMessage} -> statusMessage) (\s@ValidationOutput' {} a -> s {statusMessage = a} :: ValidationOutput)
+
+-- | The ID of the validation.
+validationOutput_validationId :: Lens.Lens' ValidationOutput (Prelude.Maybe Prelude.Text)
+validationOutput_validationId = Lens.lens (\ValidationOutput' {validationId} -> validationId) (\s@ValidationOutput' {} a -> s {validationId = a} :: ValidationOutput)
+
+instance Data.FromJSON ValidationOutput where
+  parseJSON =
+    Data.withObject
+      "ValidationOutput"
+      ( \x ->
+          ValidationOutput'
+            Prelude.<$> (x Data..:? "appValidationOutput")
+            Prelude.<*> (x Data..:? "latestValidationTime")
+            Prelude.<*> (x Data..:? "name")
+            Prelude.<*> (x Data..:? "serverValidationOutput")
+            Prelude.<*> (x Data..:? "status")
+            Prelude.<*> (x Data..:? "statusMessage")
+            Prelude.<*> (x Data..:? "validationId")
+      )
+
+instance Prelude.Hashable ValidationOutput where
+  hashWithSalt _salt ValidationOutput' {..} =
+    _salt
+      `Prelude.hashWithSalt` appValidationOutput
+      `Prelude.hashWithSalt` latestValidationTime
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` serverValidationOutput
+      `Prelude.hashWithSalt` status
+      `Prelude.hashWithSalt` statusMessage
+      `Prelude.hashWithSalt` validationId
+
+instance Prelude.NFData ValidationOutput where
+  rnf ValidationOutput' {..} =
+    Prelude.rnf appValidationOutput
+      `Prelude.seq` Prelude.rnf latestValidationTime
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf serverValidationOutput
+      `Prelude.seq` Prelude.rnf status
+      `Prelude.seq` Prelude.rnf statusMessage
+      `Prelude.seq` Prelude.rnf validationId
diff --git a/gen/Amazonka/SMS/Types/ValidationStatus.hs b/gen/Amazonka/SMS/Types/ValidationStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/ValidationStatus.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.SMS.Types.ValidationStatus
+-- 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.SMS.Types.ValidationStatus
+  ( ValidationStatus
+      ( ..,
+        ValidationStatus_FAILED,
+        ValidationStatus_IN_PROGRESS,
+        ValidationStatus_PENDING,
+        ValidationStatus_READY_FOR_VALIDATION,
+        ValidationStatus_SUCCEEDED
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype ValidationStatus = ValidationStatus'
+  { fromValidationStatus ::
+      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 ValidationStatus_FAILED :: ValidationStatus
+pattern ValidationStatus_FAILED = ValidationStatus' "FAILED"
+
+pattern ValidationStatus_IN_PROGRESS :: ValidationStatus
+pattern ValidationStatus_IN_PROGRESS = ValidationStatus' "IN_PROGRESS"
+
+pattern ValidationStatus_PENDING :: ValidationStatus
+pattern ValidationStatus_PENDING = ValidationStatus' "PENDING"
+
+pattern ValidationStatus_READY_FOR_VALIDATION :: ValidationStatus
+pattern ValidationStatus_READY_FOR_VALIDATION = ValidationStatus' "READY_FOR_VALIDATION"
+
+pattern ValidationStatus_SUCCEEDED :: ValidationStatus
+pattern ValidationStatus_SUCCEEDED = ValidationStatus' "SUCCEEDED"
+
+{-# COMPLETE
+  ValidationStatus_FAILED,
+  ValidationStatus_IN_PROGRESS,
+  ValidationStatus_PENDING,
+  ValidationStatus_READY_FOR_VALIDATION,
+  ValidationStatus_SUCCEEDED,
+  ValidationStatus'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/VmManagerType.hs b/gen/Amazonka/SMS/Types/VmManagerType.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/VmManagerType.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.SMS.Types.VmManagerType
+-- 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.SMS.Types.VmManagerType
+  ( VmManagerType
+      ( ..,
+        VmManagerType_HYPERV_MANAGER,
+        VmManagerType_SCVMM,
+        VmManagerType_VSPHERE
+      ),
+  )
+where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+newtype VmManagerType = VmManagerType'
+  { fromVmManagerType ::
+      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 VmManagerType_HYPERV_MANAGER :: VmManagerType
+pattern VmManagerType_HYPERV_MANAGER = VmManagerType' "HYPERV-MANAGER"
+
+pattern VmManagerType_SCVMM :: VmManagerType
+pattern VmManagerType_SCVMM = VmManagerType' "SCVMM"
+
+pattern VmManagerType_VSPHERE :: VmManagerType
+pattern VmManagerType_VSPHERE = VmManagerType' "VSPHERE"
+
+{-# COMPLETE
+  VmManagerType_HYPERV_MANAGER,
+  VmManagerType_SCVMM,
+  VmManagerType_VSPHERE,
+  VmManagerType'
+  #-}
diff --git a/gen/Amazonka/SMS/Types/VmServer.hs b/gen/Amazonka/SMS/Types/VmServer.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/VmServer.hs
@@ -0,0 +1,135 @@
+{-# 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.SMS.Types.VmServer
+-- 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.SMS.Types.VmServer 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.SMS.Types.VmManagerType
+import Amazonka.SMS.Types.VmServerAddress
+
+-- | Represents a VM server.
+--
+-- /See:/ 'newVmServer' smart constructor.
+data VmServer = VmServer'
+  { -- | The name of the VM manager.
+    vmManagerName :: Prelude.Maybe Prelude.Text,
+    -- | The type of VM management product.
+    vmManagerType :: Prelude.Maybe VmManagerType,
+    -- | The name of the VM.
+    vmName :: Prelude.Maybe Prelude.Text,
+    -- | The VM folder path in the vCenter Server virtual machine inventory tree.
+    vmPath :: Prelude.Maybe Prelude.Text,
+    -- | The VM server location.
+    vmServerAddress :: Prelude.Maybe VmServerAddress
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VmServer' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vmManagerName', 'vmServer_vmManagerName' - The name of the VM manager.
+--
+-- 'vmManagerType', 'vmServer_vmManagerType' - The type of VM management product.
+--
+-- 'vmName', 'vmServer_vmName' - The name of the VM.
+--
+-- 'vmPath', 'vmServer_vmPath' - The VM folder path in the vCenter Server virtual machine inventory tree.
+--
+-- 'vmServerAddress', 'vmServer_vmServerAddress' - The VM server location.
+newVmServer ::
+  VmServer
+newVmServer =
+  VmServer'
+    { vmManagerName = Prelude.Nothing,
+      vmManagerType = Prelude.Nothing,
+      vmName = Prelude.Nothing,
+      vmPath = Prelude.Nothing,
+      vmServerAddress = Prelude.Nothing
+    }
+
+-- | The name of the VM manager.
+vmServer_vmManagerName :: Lens.Lens' VmServer (Prelude.Maybe Prelude.Text)
+vmServer_vmManagerName = Lens.lens (\VmServer' {vmManagerName} -> vmManagerName) (\s@VmServer' {} a -> s {vmManagerName = a} :: VmServer)
+
+-- | The type of VM management product.
+vmServer_vmManagerType :: Lens.Lens' VmServer (Prelude.Maybe VmManagerType)
+vmServer_vmManagerType = Lens.lens (\VmServer' {vmManagerType} -> vmManagerType) (\s@VmServer' {} a -> s {vmManagerType = a} :: VmServer)
+
+-- | The name of the VM.
+vmServer_vmName :: Lens.Lens' VmServer (Prelude.Maybe Prelude.Text)
+vmServer_vmName = Lens.lens (\VmServer' {vmName} -> vmName) (\s@VmServer' {} a -> s {vmName = a} :: VmServer)
+
+-- | The VM folder path in the vCenter Server virtual machine inventory tree.
+vmServer_vmPath :: Lens.Lens' VmServer (Prelude.Maybe Prelude.Text)
+vmServer_vmPath = Lens.lens (\VmServer' {vmPath} -> vmPath) (\s@VmServer' {} a -> s {vmPath = a} :: VmServer)
+
+-- | The VM server location.
+vmServer_vmServerAddress :: Lens.Lens' VmServer (Prelude.Maybe VmServerAddress)
+vmServer_vmServerAddress = Lens.lens (\VmServer' {vmServerAddress} -> vmServerAddress) (\s@VmServer' {} a -> s {vmServerAddress = a} :: VmServer)
+
+instance Data.FromJSON VmServer where
+  parseJSON =
+    Data.withObject
+      "VmServer"
+      ( \x ->
+          VmServer'
+            Prelude.<$> (x Data..:? "vmManagerName")
+            Prelude.<*> (x Data..:? "vmManagerType")
+            Prelude.<*> (x Data..:? "vmName")
+            Prelude.<*> (x Data..:? "vmPath")
+            Prelude.<*> (x Data..:? "vmServerAddress")
+      )
+
+instance Prelude.Hashable VmServer where
+  hashWithSalt _salt VmServer' {..} =
+    _salt
+      `Prelude.hashWithSalt` vmManagerName
+      `Prelude.hashWithSalt` vmManagerType
+      `Prelude.hashWithSalt` vmName
+      `Prelude.hashWithSalt` vmPath
+      `Prelude.hashWithSalt` vmServerAddress
+
+instance Prelude.NFData VmServer where
+  rnf VmServer' {..} =
+    Prelude.rnf vmManagerName
+      `Prelude.seq` Prelude.rnf vmManagerType
+      `Prelude.seq` Prelude.rnf vmName
+      `Prelude.seq` Prelude.rnf vmPath
+      `Prelude.seq` Prelude.rnf vmServerAddress
+
+instance Data.ToJSON VmServer where
+  toJSON VmServer' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("vmManagerName" Data..=) Prelude.<$> vmManagerName,
+            ("vmManagerType" Data..=) Prelude.<$> vmManagerType,
+            ("vmName" Data..=) Prelude.<$> vmName,
+            ("vmPath" Data..=) Prelude.<$> vmPath,
+            ("vmServerAddress" Data..=)
+              Prelude.<$> vmServerAddress
+          ]
+      )
diff --git a/gen/Amazonka/SMS/Types/VmServerAddress.hs b/gen/Amazonka/SMS/Types/VmServerAddress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/Types/VmServerAddress.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.Types.VmServerAddress
+-- 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.SMS.Types.VmServerAddress where
+
+import qualified Amazonka.Core as Core
+import qualified Amazonka.Core.Lens.Internal as Lens
+import qualified Amazonka.Data as Data
+import qualified Amazonka.Prelude as Prelude
+
+-- | Represents a VM server location.
+--
+-- /See:/ 'newVmServerAddress' smart constructor.
+data VmServerAddress = VmServerAddress'
+  { -- | The ID of the VM.
+    vmId :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the VM manager.
+    vmManagerId :: Prelude.Maybe Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'VmServerAddress' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'vmId', 'vmServerAddress_vmId' - The ID of the VM.
+--
+-- 'vmManagerId', 'vmServerAddress_vmManagerId' - The ID of the VM manager.
+newVmServerAddress ::
+  VmServerAddress
+newVmServerAddress =
+  VmServerAddress'
+    { vmId = Prelude.Nothing,
+      vmManagerId = Prelude.Nothing
+    }
+
+-- | The ID of the VM.
+vmServerAddress_vmId :: Lens.Lens' VmServerAddress (Prelude.Maybe Prelude.Text)
+vmServerAddress_vmId = Lens.lens (\VmServerAddress' {vmId} -> vmId) (\s@VmServerAddress' {} a -> s {vmId = a} :: VmServerAddress)
+
+-- | The ID of the VM manager.
+vmServerAddress_vmManagerId :: Lens.Lens' VmServerAddress (Prelude.Maybe Prelude.Text)
+vmServerAddress_vmManagerId = Lens.lens (\VmServerAddress' {vmManagerId} -> vmManagerId) (\s@VmServerAddress' {} a -> s {vmManagerId = a} :: VmServerAddress)
+
+instance Data.FromJSON VmServerAddress where
+  parseJSON =
+    Data.withObject
+      "VmServerAddress"
+      ( \x ->
+          VmServerAddress'
+            Prelude.<$> (x Data..:? "vmId")
+            Prelude.<*> (x Data..:? "vmManagerId")
+      )
+
+instance Prelude.Hashable VmServerAddress where
+  hashWithSalt _salt VmServerAddress' {..} =
+    _salt
+      `Prelude.hashWithSalt` vmId
+      `Prelude.hashWithSalt` vmManagerId
+
+instance Prelude.NFData VmServerAddress where
+  rnf VmServerAddress' {..} =
+    Prelude.rnf vmId
+      `Prelude.seq` Prelude.rnf vmManagerId
+
+instance Data.ToJSON VmServerAddress where
+  toJSON VmServerAddress' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("vmId" Data..=) Prelude.<$> vmId,
+            ("vmManagerId" Data..=) Prelude.<$> vmManagerId
+          ]
+      )
diff --git a/gen/Amazonka/SMS/UpdateApp.hs b/gen/Amazonka/SMS/UpdateApp.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/UpdateApp.hs
@@ -0,0 +1,260 @@
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE NamedFieldPuns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE RecordWildCards #-}
+{-# LANGUAGE StrictData #-}
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE NoImplicitPrelude #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Amazonka.SMS.UpdateApp
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified application.
+module Amazonka.SMS.UpdateApp
+  ( -- * Creating a Request
+    UpdateApp (..),
+    newUpdateApp,
+
+    -- * Request Lenses
+    updateApp_appId,
+    updateApp_description,
+    updateApp_name,
+    updateApp_roleName,
+    updateApp_serverGroups,
+    updateApp_tags,
+
+    -- * Destructuring the Response
+    UpdateAppResponse (..),
+    newUpdateAppResponse,
+
+    -- * Response Lenses
+    updateAppResponse_appSummary,
+    updateAppResponse_serverGroups,
+    updateAppResponse_tags,
+    updateAppResponse_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.SMS.Types
+
+-- | /See:/ 'newUpdateApp' smart constructor.
+data UpdateApp = UpdateApp'
+  { -- | The ID of the application.
+    appId :: Prelude.Maybe Prelude.Text,
+    -- | The new description of the application.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | The new name of the application.
+    name :: Prelude.Maybe Prelude.Text,
+    -- | The name of the service role in the customer\'s account used by Server
+    -- Migration Service.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | The server groups in the application to update.
+    serverGroups :: Prelude.Maybe [ServerGroup],
+    -- | The tags to associate with the application.
+    tags :: Prelude.Maybe [Tag]
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateApp' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appId', 'updateApp_appId' - The ID of the application.
+--
+-- 'description', 'updateApp_description' - The new description of the application.
+--
+-- 'name', 'updateApp_name' - The new name of the application.
+--
+-- 'roleName', 'updateApp_roleName' - The name of the service role in the customer\'s account used by Server
+-- Migration Service.
+--
+-- 'serverGroups', 'updateApp_serverGroups' - The server groups in the application to update.
+--
+-- 'tags', 'updateApp_tags' - The tags to associate with the application.
+newUpdateApp ::
+  UpdateApp
+newUpdateApp =
+  UpdateApp'
+    { appId = Prelude.Nothing,
+      description = Prelude.Nothing,
+      name = Prelude.Nothing,
+      roleName = Prelude.Nothing,
+      serverGroups = Prelude.Nothing,
+      tags = Prelude.Nothing
+    }
+
+-- | The ID of the application.
+updateApp_appId :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_appId = Lens.lens (\UpdateApp' {appId} -> appId) (\s@UpdateApp' {} a -> s {appId = a} :: UpdateApp)
+
+-- | The new description of the application.
+updateApp_description :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_description = Lens.lens (\UpdateApp' {description} -> description) (\s@UpdateApp' {} a -> s {description = a} :: UpdateApp)
+
+-- | The new name of the application.
+updateApp_name :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_name = Lens.lens (\UpdateApp' {name} -> name) (\s@UpdateApp' {} a -> s {name = a} :: UpdateApp)
+
+-- | The name of the service role in the customer\'s account used by Server
+-- Migration Service.
+updateApp_roleName :: Lens.Lens' UpdateApp (Prelude.Maybe Prelude.Text)
+updateApp_roleName = Lens.lens (\UpdateApp' {roleName} -> roleName) (\s@UpdateApp' {} a -> s {roleName = a} :: UpdateApp)
+
+-- | The server groups in the application to update.
+updateApp_serverGroups :: Lens.Lens' UpdateApp (Prelude.Maybe [ServerGroup])
+updateApp_serverGroups = Lens.lens (\UpdateApp' {serverGroups} -> serverGroups) (\s@UpdateApp' {} a -> s {serverGroups = a} :: UpdateApp) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags to associate with the application.
+updateApp_tags :: Lens.Lens' UpdateApp (Prelude.Maybe [Tag])
+updateApp_tags = Lens.lens (\UpdateApp' {tags} -> tags) (\s@UpdateApp' {} a -> s {tags = a} :: UpdateApp) Prelude.. Lens.mapping Lens.coerced
+
+instance Core.AWSRequest UpdateApp where
+  type AWSResponse UpdateApp = UpdateAppResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveJSON
+      ( \s h x ->
+          UpdateAppResponse'
+            Prelude.<$> (x Data..?> "appSummary")
+            Prelude.<*> (x Data..?> "serverGroups" Core..!@ Prelude.mempty)
+            Prelude.<*> (x Data..?> "tags" Core..!@ Prelude.mempty)
+            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateApp where
+  hashWithSalt _salt UpdateApp' {..} =
+    _salt
+      `Prelude.hashWithSalt` appId
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` name
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` serverGroups
+      `Prelude.hashWithSalt` tags
+
+instance Prelude.NFData UpdateApp where
+  rnf UpdateApp' {..} =
+    Prelude.rnf appId
+      `Prelude.seq` Prelude.rnf description
+      `Prelude.seq` Prelude.rnf name
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf serverGroups
+      `Prelude.seq` Prelude.rnf tags
+
+instance Data.ToHeaders UpdateApp where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.UpdateApp" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateApp where
+  toJSON UpdateApp' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("appId" Data..=) Prelude.<$> appId,
+            ("description" Data..=) Prelude.<$> description,
+            ("name" Data..=) Prelude.<$> name,
+            ("roleName" Data..=) Prelude.<$> roleName,
+            ("serverGroups" Data..=) Prelude.<$> serverGroups,
+            ("tags" Data..=) Prelude.<$> tags
+          ]
+      )
+
+instance Data.ToPath UpdateApp where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateApp where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateAppResponse' smart constructor.
+data UpdateAppResponse = UpdateAppResponse'
+  { -- | A summary description of the application.
+    appSummary :: Prelude.Maybe AppSummary,
+    -- | The updated server groups in the application.
+    serverGroups :: Prelude.Maybe [ServerGroup],
+    -- | The tags associated with the application.
+    tags :: Prelude.Maybe [Tag],
+    -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateAppResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
+--
+-- The following record fields are available, with the corresponding lenses provided
+-- for backwards compatibility:
+--
+-- 'appSummary', 'updateAppResponse_appSummary' - A summary description of the application.
+--
+-- 'serverGroups', 'updateAppResponse_serverGroups' - The updated server groups in the application.
+--
+-- 'tags', 'updateAppResponse_tags' - The tags associated with the application.
+--
+-- 'httpStatus', 'updateAppResponse_httpStatus' - The response's http status code.
+newUpdateAppResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateAppResponse
+newUpdateAppResponse pHttpStatus_ =
+  UpdateAppResponse'
+    { appSummary = Prelude.Nothing,
+      serverGroups = Prelude.Nothing,
+      tags = Prelude.Nothing,
+      httpStatus = pHttpStatus_
+    }
+
+-- | A summary description of the application.
+updateAppResponse_appSummary :: Lens.Lens' UpdateAppResponse (Prelude.Maybe AppSummary)
+updateAppResponse_appSummary = Lens.lens (\UpdateAppResponse' {appSummary} -> appSummary) (\s@UpdateAppResponse' {} a -> s {appSummary = a} :: UpdateAppResponse)
+
+-- | The updated server groups in the application.
+updateAppResponse_serverGroups :: Lens.Lens' UpdateAppResponse (Prelude.Maybe [ServerGroup])
+updateAppResponse_serverGroups = Lens.lens (\UpdateAppResponse' {serverGroups} -> serverGroups) (\s@UpdateAppResponse' {} a -> s {serverGroups = a} :: UpdateAppResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The tags associated with the application.
+updateAppResponse_tags :: Lens.Lens' UpdateAppResponse (Prelude.Maybe [Tag])
+updateAppResponse_tags = Lens.lens (\UpdateAppResponse' {tags} -> tags) (\s@UpdateAppResponse' {} a -> s {tags = a} :: UpdateAppResponse) Prelude.. Lens.mapping Lens.coerced
+
+-- | The response's http status code.
+updateAppResponse_httpStatus :: Lens.Lens' UpdateAppResponse Prelude.Int
+updateAppResponse_httpStatus = Lens.lens (\UpdateAppResponse' {httpStatus} -> httpStatus) (\s@UpdateAppResponse' {} a -> s {httpStatus = a} :: UpdateAppResponse)
+
+instance Prelude.NFData UpdateAppResponse where
+  rnf UpdateAppResponse' {..} =
+    Prelude.rnf appSummary
+      `Prelude.seq` Prelude.rnf serverGroups
+      `Prelude.seq` Prelude.rnf tags
+      `Prelude.seq` Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/UpdateReplicationJob.hs b/gen/Amazonka/SMS/UpdateReplicationJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/UpdateReplicationJob.hs
@@ -0,0 +1,314 @@
+{-# 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.SMS.UpdateReplicationJob
+-- Copyright   : (c) 2013-2023 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the specified settings for the specified replication job.
+module Amazonka.SMS.UpdateReplicationJob
+  ( -- * Creating a Request
+    UpdateReplicationJob (..),
+    newUpdateReplicationJob,
+
+    -- * Request Lenses
+    updateReplicationJob_description,
+    updateReplicationJob_encrypted,
+    updateReplicationJob_frequency,
+    updateReplicationJob_kmsKeyId,
+    updateReplicationJob_licenseType,
+    updateReplicationJob_nextReplicationRunStartTime,
+    updateReplicationJob_numberOfRecentAmisToKeep,
+    updateReplicationJob_roleName,
+    updateReplicationJob_replicationJobId,
+
+    -- * Destructuring the Response
+    UpdateReplicationJobResponse (..),
+    newUpdateReplicationJobResponse,
+
+    -- * Response Lenses
+    updateReplicationJobResponse_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.SMS.Types
+
+-- | /See:/ 'newUpdateReplicationJob' smart constructor.
+data UpdateReplicationJob = UpdateReplicationJob'
+  { -- | The description of the replication job.
+    description :: Prelude.Maybe Prelude.Text,
+    -- | When true, the replication job produces encrypted AMIs. For more
+    -- information, @KmsKeyId@.
+    encrypted :: Prelude.Maybe Prelude.Bool,
+    -- | The time between consecutive replication runs, in hours.
+    frequency :: Prelude.Maybe Prelude.Int,
+    -- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
+    -- This value can be any of the following:
+    --
+    -- -   KMS key ID
+    --
+    -- -   KMS key alias
+    --
+    -- -   ARN referring to the KMS key ID
+    --
+    -- -   ARN referring to the KMS key alias
+    --
+    -- If encrypted is enabled but a KMS key ID is not specified, the
+    -- customer\'s default KMS key for Amazon EBS is used.
+    kmsKeyId :: Prelude.Maybe Prelude.Text,
+    -- | The license type to be used for the AMI created by a successful
+    -- replication run.
+    licenseType :: Prelude.Maybe LicenseType,
+    -- | The start time of the next replication run.
+    nextReplicationRunStartTime :: Prelude.Maybe Data.POSIX,
+    -- | The maximum number of SMS-created AMIs to retain. The oldest is deleted
+    -- after the maximum number is reached and a new AMI is created.
+    numberOfRecentAmisToKeep :: Prelude.Maybe Prelude.Int,
+    -- | The name of the IAM role to be used by Server Migration Service.
+    roleName :: Prelude.Maybe Prelude.Text,
+    -- | The ID of the replication job.
+    replicationJobId :: Prelude.Text
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateReplicationJob' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateReplicationJob_description' - The description of the replication job.
+--
+-- 'encrypted', 'updateReplicationJob_encrypted' - When true, the replication job produces encrypted AMIs. For more
+-- information, @KmsKeyId@.
+--
+-- 'frequency', 'updateReplicationJob_frequency' - The time between consecutive replication runs, in hours.
+--
+-- 'kmsKeyId', 'updateReplicationJob_kmsKeyId' - The ID of the KMS key for replication jobs that produce encrypted AMIs.
+-- This value can be any of the following:
+--
+-- -   KMS key ID
+--
+-- -   KMS key alias
+--
+-- -   ARN referring to the KMS key ID
+--
+-- -   ARN referring to the KMS key alias
+--
+-- If encrypted is enabled but a KMS key ID is not specified, the
+-- customer\'s default KMS key for Amazon EBS is used.
+--
+-- 'licenseType', 'updateReplicationJob_licenseType' - The license type to be used for the AMI created by a successful
+-- replication run.
+--
+-- 'nextReplicationRunStartTime', 'updateReplicationJob_nextReplicationRunStartTime' - The start time of the next replication run.
+--
+-- 'numberOfRecentAmisToKeep', 'updateReplicationJob_numberOfRecentAmisToKeep' - The maximum number of SMS-created AMIs to retain. The oldest is deleted
+-- after the maximum number is reached and a new AMI is created.
+--
+-- 'roleName', 'updateReplicationJob_roleName' - The name of the IAM role to be used by Server Migration Service.
+--
+-- 'replicationJobId', 'updateReplicationJob_replicationJobId' - The ID of the replication job.
+newUpdateReplicationJob ::
+  -- | 'replicationJobId'
+  Prelude.Text ->
+  UpdateReplicationJob
+newUpdateReplicationJob pReplicationJobId_ =
+  UpdateReplicationJob'
+    { description =
+        Prelude.Nothing,
+      encrypted = Prelude.Nothing,
+      frequency = Prelude.Nothing,
+      kmsKeyId = Prelude.Nothing,
+      licenseType = Prelude.Nothing,
+      nextReplicationRunStartTime = Prelude.Nothing,
+      numberOfRecentAmisToKeep = Prelude.Nothing,
+      roleName = Prelude.Nothing,
+      replicationJobId = pReplicationJobId_
+    }
+
+-- | The description of the replication job.
+updateReplicationJob_description :: Lens.Lens' UpdateReplicationJob (Prelude.Maybe Prelude.Text)
+updateReplicationJob_description = Lens.lens (\UpdateReplicationJob' {description} -> description) (\s@UpdateReplicationJob' {} a -> s {description = a} :: UpdateReplicationJob)
+
+-- | When true, the replication job produces encrypted AMIs. For more
+-- information, @KmsKeyId@.
+updateReplicationJob_encrypted :: Lens.Lens' UpdateReplicationJob (Prelude.Maybe Prelude.Bool)
+updateReplicationJob_encrypted = Lens.lens (\UpdateReplicationJob' {encrypted} -> encrypted) (\s@UpdateReplicationJob' {} a -> s {encrypted = a} :: UpdateReplicationJob)
+
+-- | The time between consecutive replication runs, in hours.
+updateReplicationJob_frequency :: Lens.Lens' UpdateReplicationJob (Prelude.Maybe Prelude.Int)
+updateReplicationJob_frequency = Lens.lens (\UpdateReplicationJob' {frequency} -> frequency) (\s@UpdateReplicationJob' {} a -> s {frequency = a} :: UpdateReplicationJob)
+
+-- | The ID of the KMS key for replication jobs that produce encrypted AMIs.
+-- This value can be any of the following:
+--
+-- -   KMS key ID
+--
+-- -   KMS key alias
+--
+-- -   ARN referring to the KMS key ID
+--
+-- -   ARN referring to the KMS key alias
+--
+-- If encrypted is enabled but a KMS key ID is not specified, the
+-- customer\'s default KMS key for Amazon EBS is used.
+updateReplicationJob_kmsKeyId :: Lens.Lens' UpdateReplicationJob (Prelude.Maybe Prelude.Text)
+updateReplicationJob_kmsKeyId = Lens.lens (\UpdateReplicationJob' {kmsKeyId} -> kmsKeyId) (\s@UpdateReplicationJob' {} a -> s {kmsKeyId = a} :: UpdateReplicationJob)
+
+-- | The license type to be used for the AMI created by a successful
+-- replication run.
+updateReplicationJob_licenseType :: Lens.Lens' UpdateReplicationJob (Prelude.Maybe LicenseType)
+updateReplicationJob_licenseType = Lens.lens (\UpdateReplicationJob' {licenseType} -> licenseType) (\s@UpdateReplicationJob' {} a -> s {licenseType = a} :: UpdateReplicationJob)
+
+-- | The start time of the next replication run.
+updateReplicationJob_nextReplicationRunStartTime :: Lens.Lens' UpdateReplicationJob (Prelude.Maybe Prelude.UTCTime)
+updateReplicationJob_nextReplicationRunStartTime = Lens.lens (\UpdateReplicationJob' {nextReplicationRunStartTime} -> nextReplicationRunStartTime) (\s@UpdateReplicationJob' {} a -> s {nextReplicationRunStartTime = a} :: UpdateReplicationJob) Prelude.. Lens.mapping Data._Time
+
+-- | The maximum number of SMS-created AMIs to retain. The oldest is deleted
+-- after the maximum number is reached and a new AMI is created.
+updateReplicationJob_numberOfRecentAmisToKeep :: Lens.Lens' UpdateReplicationJob (Prelude.Maybe Prelude.Int)
+updateReplicationJob_numberOfRecentAmisToKeep = Lens.lens (\UpdateReplicationJob' {numberOfRecentAmisToKeep} -> numberOfRecentAmisToKeep) (\s@UpdateReplicationJob' {} a -> s {numberOfRecentAmisToKeep = a} :: UpdateReplicationJob)
+
+-- | The name of the IAM role to be used by Server Migration Service.
+updateReplicationJob_roleName :: Lens.Lens' UpdateReplicationJob (Prelude.Maybe Prelude.Text)
+updateReplicationJob_roleName = Lens.lens (\UpdateReplicationJob' {roleName} -> roleName) (\s@UpdateReplicationJob' {} a -> s {roleName = a} :: UpdateReplicationJob)
+
+-- | The ID of the replication job.
+updateReplicationJob_replicationJobId :: Lens.Lens' UpdateReplicationJob Prelude.Text
+updateReplicationJob_replicationJobId = Lens.lens (\UpdateReplicationJob' {replicationJobId} -> replicationJobId) (\s@UpdateReplicationJob' {} a -> s {replicationJobId = a} :: UpdateReplicationJob)
+
+instance Core.AWSRequest UpdateReplicationJob where
+  type
+    AWSResponse UpdateReplicationJob =
+      UpdateReplicationJobResponse
+  request overrides =
+    Request.postJSON (overrides defaultService)
+  response =
+    Response.receiveEmpty
+      ( \s h x ->
+          UpdateReplicationJobResponse'
+            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
+      )
+
+instance Prelude.Hashable UpdateReplicationJob where
+  hashWithSalt _salt UpdateReplicationJob' {..} =
+    _salt
+      `Prelude.hashWithSalt` description
+      `Prelude.hashWithSalt` encrypted
+      `Prelude.hashWithSalt` frequency
+      `Prelude.hashWithSalt` kmsKeyId
+      `Prelude.hashWithSalt` licenseType
+      `Prelude.hashWithSalt` nextReplicationRunStartTime
+      `Prelude.hashWithSalt` numberOfRecentAmisToKeep
+      `Prelude.hashWithSalt` roleName
+      `Prelude.hashWithSalt` replicationJobId
+
+instance Prelude.NFData UpdateReplicationJob where
+  rnf UpdateReplicationJob' {..} =
+    Prelude.rnf description
+      `Prelude.seq` Prelude.rnf encrypted
+      `Prelude.seq` Prelude.rnf frequency
+      `Prelude.seq` Prelude.rnf kmsKeyId
+      `Prelude.seq` Prelude.rnf licenseType
+      `Prelude.seq` Prelude.rnf nextReplicationRunStartTime
+      `Prelude.seq` Prelude.rnf numberOfRecentAmisToKeep
+      `Prelude.seq` Prelude.rnf roleName
+      `Prelude.seq` Prelude.rnf replicationJobId
+
+instance Data.ToHeaders UpdateReplicationJob where
+  toHeaders =
+    Prelude.const
+      ( Prelude.mconcat
+          [ "X-Amz-Target"
+              Data.=# ( "AWSServerMigrationService_V2016_10_24.UpdateReplicationJob" ::
+                          Prelude.ByteString
+                      ),
+            "Content-Type"
+              Data.=# ( "application/x-amz-json-1.1" ::
+                          Prelude.ByteString
+                      )
+          ]
+      )
+
+instance Data.ToJSON UpdateReplicationJob where
+  toJSON UpdateReplicationJob' {..} =
+    Data.object
+      ( Prelude.catMaybes
+          [ ("description" Data..=) Prelude.<$> description,
+            ("encrypted" Data..=) Prelude.<$> encrypted,
+            ("frequency" Data..=) Prelude.<$> frequency,
+            ("kmsKeyId" Data..=) Prelude.<$> kmsKeyId,
+            ("licenseType" Data..=) Prelude.<$> licenseType,
+            ("nextReplicationRunStartTime" Data..=)
+              Prelude.<$> nextReplicationRunStartTime,
+            ("numberOfRecentAmisToKeep" Data..=)
+              Prelude.<$> numberOfRecentAmisToKeep,
+            ("roleName" Data..=) Prelude.<$> roleName,
+            Prelude.Just
+              ("replicationJobId" Data..= replicationJobId)
+          ]
+      )
+
+instance Data.ToPath UpdateReplicationJob where
+  toPath = Prelude.const "/"
+
+instance Data.ToQuery UpdateReplicationJob where
+  toQuery = Prelude.const Prelude.mempty
+
+-- | /See:/ 'newUpdateReplicationJobResponse' smart constructor.
+data UpdateReplicationJobResponse = UpdateReplicationJobResponse'
+  { -- | The response's http status code.
+    httpStatus :: Prelude.Int
+  }
+  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)
+
+-- |
+-- Create a value of 'UpdateReplicationJobResponse' with all optional fields omitted.
+--
+-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.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', 'updateReplicationJobResponse_httpStatus' - The response's http status code.
+newUpdateReplicationJobResponse ::
+  -- | 'httpStatus'
+  Prelude.Int ->
+  UpdateReplicationJobResponse
+newUpdateReplicationJobResponse pHttpStatus_ =
+  UpdateReplicationJobResponse'
+    { httpStatus =
+        pHttpStatus_
+    }
+
+-- | The response's http status code.
+updateReplicationJobResponse_httpStatus :: Lens.Lens' UpdateReplicationJobResponse Prelude.Int
+updateReplicationJobResponse_httpStatus = Lens.lens (\UpdateReplicationJobResponse' {httpStatus} -> httpStatus) (\s@UpdateReplicationJobResponse' {} a -> s {httpStatus = a} :: UpdateReplicationJobResponse)
+
+instance Prelude.NFData UpdateReplicationJobResponse where
+  rnf UpdateReplicationJobResponse' {..} =
+    Prelude.rnf httpStatus
diff --git a/gen/Amazonka/SMS/Waiters.hs b/gen/Amazonka/SMS/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Amazonka/SMS/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.SMS.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.SMS.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.SMS.Lens
+import Amazonka.SMS.Types
diff --git a/gen/Network/AWS/SMS.hs b/gen/Network/AWS/SMS.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS.hs
+++ /dev/null
@@ -1,232 +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.SMS
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- Amazon Server Migration Service automates the process of migrating servers to EC2.
-module Network.AWS.SMS
-    (
-    -- * Service Configuration
-      sms
-
-    -- * Errors
-    -- $errors
-
-    -- ** ReplicationRunLimitExceededException
-    , _ReplicationRunLimitExceededException
-
-    -- ** InvalidParameterException
-    , _InvalidParameterException
-
-    -- ** NoConnectorsAvailableException
-    , _NoConnectorsAvailableException
-
-    -- ** ReplicationJobNotFoundException
-    , _ReplicationJobNotFoundException
-
-    -- ** ServerCannotBeReplicatedException
-    , _ServerCannotBeReplicatedException
-
-    -- ** InternalError
-    , _InternalError
-
-    -- ** ReplicationJobAlreadyExistsException
-    , _ReplicationJobAlreadyExistsException
-
-    -- ** OperationNotPermittedException
-    , _OperationNotPermittedException
-
-    -- ** MissingRequiredParameterException
-    , _MissingRequiredParameterException
-
-    -- ** UnauthorizedOperationException
-    , _UnauthorizedOperationException
-
-    -- * Waiters
-    -- $waiters
-
-    -- * Operations
-    -- $operations
-
-    -- ** DeleteServerCatalog
-    , module Network.AWS.SMS.DeleteServerCatalog
-
-    -- ** GetReplicationRuns (Paginated)
-    , module Network.AWS.SMS.GetReplicationRuns
-
-    -- ** GetServers (Paginated)
-    , module Network.AWS.SMS.GetServers
-
-    -- ** ImportServerCatalog
-    , module Network.AWS.SMS.ImportServerCatalog
-
-    -- ** GetConnectors (Paginated)
-    , module Network.AWS.SMS.GetConnectors
-
-    -- ** GetReplicationJobs (Paginated)
-    , module Network.AWS.SMS.GetReplicationJobs
-
-    -- ** DisassociateConnector
-    , module Network.AWS.SMS.DisassociateConnector
-
-    -- ** CreateReplicationJob
-    , module Network.AWS.SMS.CreateReplicationJob
-
-    -- ** UpdateReplicationJob
-    , module Network.AWS.SMS.UpdateReplicationJob
-
-    -- ** DeleteReplicationJob
-    , module Network.AWS.SMS.DeleteReplicationJob
-
-    -- ** StartOnDemandReplicationRun
-    , module Network.AWS.SMS.StartOnDemandReplicationRun
-
-    -- * Types
-
-    -- ** ConnectorCapability
-    , ConnectorCapability (..)
-
-    -- ** ConnectorStatus
-    , ConnectorStatus (..)
-
-    -- ** LicenseType
-    , LicenseType (..)
-
-    -- ** ReplicationJobState
-    , ReplicationJobState (..)
-
-    -- ** ReplicationRunState
-    , ReplicationRunState (..)
-
-    -- ** ReplicationRunType
-    , ReplicationRunType (..)
-
-    -- ** ServerCatalogStatus
-    , ServerCatalogStatus (..)
-
-    -- ** ServerType
-    , ServerType (..)
-
-    -- ** VMManagerType
-    , VMManagerType (..)
-
-    -- ** Connector
-    , Connector
-    , connector
-    , cStatus
-    , cVmManagerName
-    , cIpAddress
-    , cVmManagerId
-    , cVmManagerType
-    , cConnectorId
-    , cAssociatedOn
-    , cMacAddress
-    , cVersion
-    , cCapabilityList
-
-    -- ** ReplicationJob
-    , ReplicationJob
-    , replicationJob
-    , rjFrequency
-    , rjState
-    , rjServerType
-    , rjServerId
-    , rjLicenseType
-    , rjRoleName
-    , rjVmServer
-    , rjReplicationJobId
-    , rjReplicationRunList
-    , rjNextReplicationRunStartTime
-    , rjStatusMessage
-    , rjLatestAMIId
-    , rjSeedReplicationTime
-    , rjDescription
-
-    -- ** ReplicationRun
-    , ReplicationRun
-    , replicationRun
-    , rrState
-    , rrReplicationRunId
-    , rrScheduledStartTime
-    , rrStatusMessage
-    , rrCompletedTime
-    , rrAmiId
-    , rrType
-    , rrDescription
-
-    -- ** Server
-    , Server
-    , server
-    , sServerType
-    , sServerId
-    , sReplicationJobTerminated
-    , sVmServer
-    , sReplicationJobId
-
-    -- ** VMServer
-    , VMServer
-    , vMServer
-    , vmsVmManagerName
-    , vmsVmManagerType
-    , vmsVmServerAddress
-    , vmsVmName
-    , vmsVmPath
-
-    -- ** VMServerAddress
-    , VMServerAddress
-    , vMServerAddress
-    , vmsaVmManagerId
-    , vmsaVmId
-    ) where
-
-import Network.AWS.SMS.CreateReplicationJob
-import Network.AWS.SMS.DeleteReplicationJob
-import Network.AWS.SMS.DeleteServerCatalog
-import Network.AWS.SMS.DisassociateConnector
-import Network.AWS.SMS.GetConnectors
-import Network.AWS.SMS.GetReplicationJobs
-import Network.AWS.SMS.GetReplicationRuns
-import Network.AWS.SMS.GetServers
-import Network.AWS.SMS.ImportServerCatalog
-import Network.AWS.SMS.StartOnDemandReplicationRun
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.UpdateReplicationJob
-import Network.AWS.SMS.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 'SMS'.
--}
-
-{- $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/SMS/CreateReplicationJob.hs b/gen/Network/AWS/SMS/CreateReplicationJob.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/CreateReplicationJob.hs
+++ /dev/null
@@ -1,188 +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.SMS.CreateReplicationJob
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The CreateReplicationJob API is used to create a ReplicationJob to replicate a server on AWS. Call this API to first create a ReplicationJob, which will then schedule periodic ReplicationRuns to replicate your server to AWS. Each ReplicationRun will result in the creation of an AWS AMI.
-module Network.AWS.SMS.CreateReplicationJob
-    (
-    -- * Creating a Request
-      createReplicationJob
-    , CreateReplicationJob
-    -- * Request Lenses
-    , crjLicenseType
-    , crjRoleName
-    , crjDescription
-    , crjServerId
-    , crjSeedReplicationTime
-    , crjFrequency
-
-    -- * Destructuring the Response
-    , createReplicationJobResponse
-    , CreateReplicationJobResponse
-    -- * Response Lenses
-    , crjrsReplicationJobId
-    , crjrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'createReplicationJob' smart constructor.
-data CreateReplicationJob = CreateReplicationJob'
-  { _crjLicenseType         :: !(Maybe LicenseType)
-  , _crjRoleName            :: !(Maybe Text)
-  , _crjDescription         :: !(Maybe Text)
-  , _crjServerId            :: !Text
-  , _crjSeedReplicationTime :: !POSIX
-  , _crjFrequency           :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateReplicationJob' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crjLicenseType' - Undocumented member.
---
--- * 'crjRoleName' - Undocumented member.
---
--- * 'crjDescription' - Undocumented member.
---
--- * 'crjServerId' - Undocumented member.
---
--- * 'crjSeedReplicationTime' - Undocumented member.
---
--- * 'crjFrequency' - Undocumented member.
-createReplicationJob
-    :: Text -- ^ 'crjServerId'
-    -> UTCTime -- ^ 'crjSeedReplicationTime'
-    -> Int -- ^ 'crjFrequency'
-    -> CreateReplicationJob
-createReplicationJob pServerId_ pSeedReplicationTime_ pFrequency_ =
-  CreateReplicationJob'
-    { _crjLicenseType = Nothing
-    , _crjRoleName = Nothing
-    , _crjDescription = Nothing
-    , _crjServerId = pServerId_
-    , _crjSeedReplicationTime = _Time # pSeedReplicationTime_
-    , _crjFrequency = pFrequency_
-    }
-
-
--- | Undocumented member.
-crjLicenseType :: Lens' CreateReplicationJob (Maybe LicenseType)
-crjLicenseType = lens _crjLicenseType (\ s a -> s{_crjLicenseType = a})
-
--- | Undocumented member.
-crjRoleName :: Lens' CreateReplicationJob (Maybe Text)
-crjRoleName = lens _crjRoleName (\ s a -> s{_crjRoleName = a})
-
--- | Undocumented member.
-crjDescription :: Lens' CreateReplicationJob (Maybe Text)
-crjDescription = lens _crjDescription (\ s a -> s{_crjDescription = a})
-
--- | Undocumented member.
-crjServerId :: Lens' CreateReplicationJob Text
-crjServerId = lens _crjServerId (\ s a -> s{_crjServerId = a})
-
--- | Undocumented member.
-crjSeedReplicationTime :: Lens' CreateReplicationJob UTCTime
-crjSeedReplicationTime = lens _crjSeedReplicationTime (\ s a -> s{_crjSeedReplicationTime = a}) . _Time
-
--- | Undocumented member.
-crjFrequency :: Lens' CreateReplicationJob Int
-crjFrequency = lens _crjFrequency (\ s a -> s{_crjFrequency = a})
-
-instance AWSRequest CreateReplicationJob where
-        type Rs CreateReplicationJob =
-             CreateReplicationJobResponse
-        request = postJSON sms
-        response
-          = receiveJSON
-              (\ s h x ->
-                 CreateReplicationJobResponse' <$>
-                   (x .?> "replicationJobId") <*> (pure (fromEnum s)))
-
-instance Hashable CreateReplicationJob where
-
-instance NFData CreateReplicationJob where
-
-instance ToHeaders CreateReplicationJob where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.CreateReplicationJob"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON CreateReplicationJob where
-        toJSON CreateReplicationJob'{..}
-          = object
-              (catMaybes
-                 [("licenseType" .=) <$> _crjLicenseType,
-                  ("roleName" .=) <$> _crjRoleName,
-                  ("description" .=) <$> _crjDescription,
-                  Just ("serverId" .= _crjServerId),
-                  Just
-                    ("seedReplicationTime" .= _crjSeedReplicationTime),
-                  Just ("frequency" .= _crjFrequency)])
-
-instance ToPath CreateReplicationJob where
-        toPath = const "/"
-
-instance ToQuery CreateReplicationJob where
-        toQuery = const mempty
-
--- | /See:/ 'createReplicationJobResponse' smart constructor.
-data CreateReplicationJobResponse = CreateReplicationJobResponse'
-  { _crjrsReplicationJobId :: !(Maybe Text)
-  , _crjrsResponseStatus   :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'CreateReplicationJobResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'crjrsReplicationJobId' - Undocumented member.
---
--- * 'crjrsResponseStatus' - -- | The response status code.
-createReplicationJobResponse
-    :: Int -- ^ 'crjrsResponseStatus'
-    -> CreateReplicationJobResponse
-createReplicationJobResponse pResponseStatus_ =
-  CreateReplicationJobResponse'
-    {_crjrsReplicationJobId = Nothing, _crjrsResponseStatus = pResponseStatus_}
-
-
--- | Undocumented member.
-crjrsReplicationJobId :: Lens' CreateReplicationJobResponse (Maybe Text)
-crjrsReplicationJobId = lens _crjrsReplicationJobId (\ s a -> s{_crjrsReplicationJobId = a})
-
--- | -- | The response status code.
-crjrsResponseStatus :: Lens' CreateReplicationJobResponse Int
-crjrsResponseStatus = lens _crjrsResponseStatus (\ s a -> s{_crjrsResponseStatus = a})
-
-instance NFData CreateReplicationJobResponse where
diff --git a/gen/Network/AWS/SMS/DeleteReplicationJob.hs b/gen/Network/AWS/SMS/DeleteReplicationJob.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/DeleteReplicationJob.hs
+++ /dev/null
@@ -1,124 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.SMS.DeleteReplicationJob
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The DeleteReplicationJob API is used to delete a ReplicationJob, resulting in no further ReplicationRuns. This will delete the contents of the S3 bucket used to store SMS artifacts, but will not delete any AMIs created by the SMS service.
-module Network.AWS.SMS.DeleteReplicationJob
-    (
-    -- * Creating a Request
-      deleteReplicationJob
-    , DeleteReplicationJob
-    -- * Request Lenses
-    , drjReplicationJobId
-
-    -- * Destructuring the Response
-    , deleteReplicationJobResponse
-    , DeleteReplicationJobResponse
-    -- * Response Lenses
-    , drjrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'deleteReplicationJob' smart constructor.
-newtype DeleteReplicationJob = DeleteReplicationJob'
-  { _drjReplicationJobId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteReplicationJob' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drjReplicationJobId' - Undocumented member.
-deleteReplicationJob
-    :: Text -- ^ 'drjReplicationJobId'
-    -> DeleteReplicationJob
-deleteReplicationJob pReplicationJobId_ =
-  DeleteReplicationJob' {_drjReplicationJobId = pReplicationJobId_}
-
-
--- | Undocumented member.
-drjReplicationJobId :: Lens' DeleteReplicationJob Text
-drjReplicationJobId = lens _drjReplicationJobId (\ s a -> s{_drjReplicationJobId = a})
-
-instance AWSRequest DeleteReplicationJob where
-        type Rs DeleteReplicationJob =
-             DeleteReplicationJobResponse
-        request = postJSON sms
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteReplicationJobResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable DeleteReplicationJob where
-
-instance NFData DeleteReplicationJob where
-
-instance ToHeaders DeleteReplicationJob where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.DeleteReplicationJob"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteReplicationJob where
-        toJSON DeleteReplicationJob'{..}
-          = object
-              (catMaybes
-                 [Just ("replicationJobId" .= _drjReplicationJobId)])
-
-instance ToPath DeleteReplicationJob where
-        toPath = const "/"
-
-instance ToQuery DeleteReplicationJob where
-        toQuery = const mempty
-
--- | /See:/ 'deleteReplicationJobResponse' smart constructor.
-newtype DeleteReplicationJobResponse = DeleteReplicationJobResponse'
-  { _drjrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteReplicationJobResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'drjrsResponseStatus' - -- | The response status code.
-deleteReplicationJobResponse
-    :: Int -- ^ 'drjrsResponseStatus'
-    -> DeleteReplicationJobResponse
-deleteReplicationJobResponse pResponseStatus_ =
-  DeleteReplicationJobResponse' {_drjrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-drjrsResponseStatus :: Lens' DeleteReplicationJobResponse Int
-drjrsResponseStatus = lens _drjrsResponseStatus (\ s a -> s{_drjrsResponseStatus = a})
-
-instance NFData DeleteReplicationJobResponse where
diff --git a/gen/Network/AWS/SMS/DeleteServerCatalog.hs b/gen/Network/AWS/SMS/DeleteServerCatalog.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/DeleteServerCatalog.hs
+++ /dev/null
@@ -1,109 +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.SMS.DeleteServerCatalog
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The DeleteServerCatalog API clears all servers from your server catalog. This means that these servers will no longer be accessible to the Server Migration Service.
-module Network.AWS.SMS.DeleteServerCatalog
-    (
-    -- * Creating a Request
-      deleteServerCatalog
-    , DeleteServerCatalog
-
-    -- * Destructuring the Response
-    , deleteServerCatalogResponse
-    , DeleteServerCatalogResponse
-    -- * Response Lenses
-    , dscrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'deleteServerCatalog' smart constructor.
-data DeleteServerCatalog =
-  DeleteServerCatalog'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteServerCatalog' with the minimum fields required to make a request.
---
-deleteServerCatalog
-    :: DeleteServerCatalog
-deleteServerCatalog = DeleteServerCatalog'
-
-
-instance AWSRequest DeleteServerCatalog where
-        type Rs DeleteServerCatalog =
-             DeleteServerCatalogResponse
-        request = postJSON sms
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DeleteServerCatalogResponse' <$> (pure (fromEnum s)))
-
-instance Hashable DeleteServerCatalog where
-
-instance NFData DeleteServerCatalog where
-
-instance ToHeaders DeleteServerCatalog where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.DeleteServerCatalog"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DeleteServerCatalog where
-        toJSON = const (Object mempty)
-
-instance ToPath DeleteServerCatalog where
-        toPath = const "/"
-
-instance ToQuery DeleteServerCatalog where
-        toQuery = const mempty
-
--- | /See:/ 'deleteServerCatalogResponse' smart constructor.
-newtype DeleteServerCatalogResponse = DeleteServerCatalogResponse'
-  { _dscrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DeleteServerCatalogResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dscrsResponseStatus' - -- | The response status code.
-deleteServerCatalogResponse
-    :: Int -- ^ 'dscrsResponseStatus'
-    -> DeleteServerCatalogResponse
-deleteServerCatalogResponse pResponseStatus_ =
-  DeleteServerCatalogResponse' {_dscrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dscrsResponseStatus :: Lens' DeleteServerCatalogResponse Int
-dscrsResponseStatus = lens _dscrsResponseStatus (\ s a -> s{_dscrsResponseStatus = a})
-
-instance NFData DeleteServerCatalogResponse where
diff --git a/gen/Network/AWS/SMS/DisassociateConnector.hs b/gen/Network/AWS/SMS/DisassociateConnector.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/DisassociateConnector.hs
+++ /dev/null
@@ -1,123 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.SMS.DisassociateConnector
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The DisassociateConnector API will disassociate a connector from the Server Migration Service, rendering it unavailable to support replication jobs.
-module Network.AWS.SMS.DisassociateConnector
-    (
-    -- * Creating a Request
-      disassociateConnector
-    , DisassociateConnector
-    -- * Request Lenses
-    , dcConnectorId
-
-    -- * Destructuring the Response
-    , disassociateConnectorResponse
-    , DisassociateConnectorResponse
-    -- * Response Lenses
-    , dcrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'disassociateConnector' smart constructor.
-newtype DisassociateConnector = DisassociateConnector'
-  { _dcConnectorId :: Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateConnector' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcConnectorId' - Undocumented member.
-disassociateConnector
-    :: Text -- ^ 'dcConnectorId'
-    -> DisassociateConnector
-disassociateConnector pConnectorId_ =
-  DisassociateConnector' {_dcConnectorId = pConnectorId_}
-
-
--- | Undocumented member.
-dcConnectorId :: Lens' DisassociateConnector Text
-dcConnectorId = lens _dcConnectorId (\ s a -> s{_dcConnectorId = a})
-
-instance AWSRequest DisassociateConnector where
-        type Rs DisassociateConnector =
-             DisassociateConnectorResponse
-        request = postJSON sms
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 DisassociateConnectorResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable DisassociateConnector where
-
-instance NFData DisassociateConnector where
-
-instance ToHeaders DisassociateConnector where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.DisassociateConnector"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON DisassociateConnector where
-        toJSON DisassociateConnector'{..}
-          = object
-              (catMaybes [Just ("connectorId" .= _dcConnectorId)])
-
-instance ToPath DisassociateConnector where
-        toPath = const "/"
-
-instance ToQuery DisassociateConnector where
-        toQuery = const mempty
-
--- | /See:/ 'disassociateConnectorResponse' smart constructor.
-newtype DisassociateConnectorResponse = DisassociateConnectorResponse'
-  { _dcrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'DisassociateConnectorResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'dcrsResponseStatus' - -- | The response status code.
-disassociateConnectorResponse
-    :: Int -- ^ 'dcrsResponseStatus'
-    -> DisassociateConnectorResponse
-disassociateConnectorResponse pResponseStatus_ =
-  DisassociateConnectorResponse' {_dcrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-dcrsResponseStatus :: Lens' DisassociateConnectorResponse Int
-dcrsResponseStatus = lens _dcrsResponseStatus (\ s a -> s{_dcrsResponseStatus = a})
-
-instance NFData DisassociateConnectorResponse where
diff --git a/gen/Network/AWS/SMS/GetConnectors.hs b/gen/Network/AWS/SMS/GetConnectors.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/GetConnectors.hs
+++ /dev/null
@@ -1,162 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.SMS.GetConnectors
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The GetConnectors API returns a list of connectors that are registered with the Server Migration Service.
---
--- This operation returns paginated results.
-module Network.AWS.SMS.GetConnectors
-    (
-    -- * Creating a Request
-      getConnectors
-    , GetConnectors
-    -- * Request Lenses
-    , gcNextToken
-    , gcMaxResults
-
-    -- * Destructuring the Response
-    , getConnectorsResponse
-    , GetConnectorsResponse
-    -- * Response Lenses
-    , gcrsConnectorList
-    , gcrsNextToken
-    , gcrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'getConnectors' smart constructor.
-data GetConnectors = GetConnectors'
-  { _gcNextToken  :: !(Maybe Text)
-  , _gcMaxResults :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetConnectors' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gcNextToken' - Undocumented member.
---
--- * 'gcMaxResults' - Undocumented member.
-getConnectors
-    :: GetConnectors
-getConnectors = GetConnectors' {_gcNextToken = Nothing, _gcMaxResults = Nothing}
-
-
--- | Undocumented member.
-gcNextToken :: Lens' GetConnectors (Maybe Text)
-gcNextToken = lens _gcNextToken (\ s a -> s{_gcNextToken = a})
-
--- | Undocumented member.
-gcMaxResults :: Lens' GetConnectors (Maybe Int)
-gcMaxResults = lens _gcMaxResults (\ s a -> s{_gcMaxResults = a})
-
-instance AWSPager GetConnectors where
-        page rq rs
-          | stop (rs ^. gcrsNextToken) = Nothing
-          | stop (rs ^. gcrsConnectorList) = Nothing
-          | otherwise =
-            Just $ rq & gcNextToken .~ rs ^. gcrsNextToken
-
-instance AWSRequest GetConnectors where
-        type Rs GetConnectors = GetConnectorsResponse
-        request = postJSON sms
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetConnectorsResponse' <$>
-                   (x .?> "connectorList" .!@ mempty) <*>
-                     (x .?> "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetConnectors where
-
-instance NFData GetConnectors where
-
-instance ToHeaders GetConnectors where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.GetConnectors"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetConnectors where
-        toJSON GetConnectors'{..}
-          = object
-              (catMaybes
-                 [("nextToken" .=) <$> _gcNextToken,
-                  ("maxResults" .=) <$> _gcMaxResults])
-
-instance ToPath GetConnectors where
-        toPath = const "/"
-
-instance ToQuery GetConnectors where
-        toQuery = const mempty
-
--- | /See:/ 'getConnectorsResponse' smart constructor.
-data GetConnectorsResponse = GetConnectorsResponse'
-  { _gcrsConnectorList  :: !(Maybe [Connector])
-  , _gcrsNextToken      :: !(Maybe Text)
-  , _gcrsResponseStatus :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetConnectorsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gcrsConnectorList' - Undocumented member.
---
--- * 'gcrsNextToken' - Undocumented member.
---
--- * 'gcrsResponseStatus' - -- | The response status code.
-getConnectorsResponse
-    :: Int -- ^ 'gcrsResponseStatus'
-    -> GetConnectorsResponse
-getConnectorsResponse pResponseStatus_ =
-  GetConnectorsResponse'
-    { _gcrsConnectorList = Nothing
-    , _gcrsNextToken = Nothing
-    , _gcrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Undocumented member.
-gcrsConnectorList :: Lens' GetConnectorsResponse [Connector]
-gcrsConnectorList = lens _gcrsConnectorList (\ s a -> s{_gcrsConnectorList = a}) . _Default . _Coerce
-
--- | Undocumented member.
-gcrsNextToken :: Lens' GetConnectorsResponse (Maybe Text)
-gcrsNextToken = lens _gcrsNextToken (\ s a -> s{_gcrsNextToken = a})
-
--- | -- | The response status code.
-gcrsResponseStatus :: Lens' GetConnectorsResponse Int
-gcrsResponseStatus = lens _gcrsResponseStatus (\ s a -> s{_gcrsResponseStatus = a})
-
-instance NFData GetConnectorsResponse where
diff --git a/gen/Network/AWS/SMS/GetReplicationJobs.hs b/gen/Network/AWS/SMS/GetReplicationJobs.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/GetReplicationJobs.hs
+++ /dev/null
@@ -1,177 +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.SMS.GetReplicationJobs
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The GetReplicationJobs API will return all of your ReplicationJobs and their details. This API returns a paginated list, that may be consecutively called with nextToken to retrieve all ReplicationJobs.
---
--- This operation returns paginated results.
-module Network.AWS.SMS.GetReplicationJobs
-    (
-    -- * Creating a Request
-      getReplicationJobs
-    , GetReplicationJobs
-    -- * Request Lenses
-    , grjReplicationJobId
-    , grjNextToken
-    , grjMaxResults
-
-    -- * Destructuring the Response
-    , getReplicationJobsResponse
-    , GetReplicationJobsResponse
-    -- * Response Lenses
-    , grjrsReplicationJobList
-    , grjrsNextToken
-    , grjrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'getReplicationJobs' smart constructor.
-data GetReplicationJobs = GetReplicationJobs'
-  { _grjReplicationJobId :: !(Maybe Text)
-  , _grjNextToken        :: !(Maybe Text)
-  , _grjMaxResults       :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetReplicationJobs' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grjReplicationJobId' - Undocumented member.
---
--- * 'grjNextToken' - Undocumented member.
---
--- * 'grjMaxResults' - Undocumented member.
-getReplicationJobs
-    :: GetReplicationJobs
-getReplicationJobs =
-  GetReplicationJobs'
-    { _grjReplicationJobId = Nothing
-    , _grjNextToken = Nothing
-    , _grjMaxResults = Nothing
-    }
-
-
--- | Undocumented member.
-grjReplicationJobId :: Lens' GetReplicationJobs (Maybe Text)
-grjReplicationJobId = lens _grjReplicationJobId (\ s a -> s{_grjReplicationJobId = a})
-
--- | Undocumented member.
-grjNextToken :: Lens' GetReplicationJobs (Maybe Text)
-grjNextToken = lens _grjNextToken (\ s a -> s{_grjNextToken = a})
-
--- | Undocumented member.
-grjMaxResults :: Lens' GetReplicationJobs (Maybe Int)
-grjMaxResults = lens _grjMaxResults (\ s a -> s{_grjMaxResults = a})
-
-instance AWSPager GetReplicationJobs where
-        page rq rs
-          | stop (rs ^. grjrsNextToken) = Nothing
-          | stop (rs ^. grjrsReplicationJobList) = Nothing
-          | otherwise =
-            Just $ rq & grjNextToken .~ rs ^. grjrsNextToken
-
-instance AWSRequest GetReplicationJobs where
-        type Rs GetReplicationJobs =
-             GetReplicationJobsResponse
-        request = postJSON sms
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetReplicationJobsResponse' <$>
-                   (x .?> "replicationJobList" .!@ mempty) <*>
-                     (x .?> "nextToken")
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetReplicationJobs where
-
-instance NFData GetReplicationJobs where
-
-instance ToHeaders GetReplicationJobs where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.GetReplicationJobs"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetReplicationJobs where
-        toJSON GetReplicationJobs'{..}
-          = object
-              (catMaybes
-                 [("replicationJobId" .=) <$> _grjReplicationJobId,
-                  ("nextToken" .=) <$> _grjNextToken,
-                  ("maxResults" .=) <$> _grjMaxResults])
-
-instance ToPath GetReplicationJobs where
-        toPath = const "/"
-
-instance ToQuery GetReplicationJobs where
-        toQuery = const mempty
-
--- | /See:/ 'getReplicationJobsResponse' smart constructor.
-data GetReplicationJobsResponse = GetReplicationJobsResponse'
-  { _grjrsReplicationJobList :: !(Maybe [ReplicationJob])
-  , _grjrsNextToken          :: !(Maybe Text)
-  , _grjrsResponseStatus     :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetReplicationJobsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grjrsReplicationJobList' - Undocumented member.
---
--- * 'grjrsNextToken' - Undocumented member.
---
--- * 'grjrsResponseStatus' - -- | The response status code.
-getReplicationJobsResponse
-    :: Int -- ^ 'grjrsResponseStatus'
-    -> GetReplicationJobsResponse
-getReplicationJobsResponse pResponseStatus_ =
-  GetReplicationJobsResponse'
-    { _grjrsReplicationJobList = Nothing
-    , _grjrsNextToken = Nothing
-    , _grjrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Undocumented member.
-grjrsReplicationJobList :: Lens' GetReplicationJobsResponse [ReplicationJob]
-grjrsReplicationJobList = lens _grjrsReplicationJobList (\ s a -> s{_grjrsReplicationJobList = a}) . _Default . _Coerce
-
--- | Undocumented member.
-grjrsNextToken :: Lens' GetReplicationJobsResponse (Maybe Text)
-grjrsNextToken = lens _grjrsNextToken (\ s a -> s{_grjrsNextToken = a})
-
--- | -- | The response status code.
-grjrsResponseStatus :: Lens' GetReplicationJobsResponse Int
-grjrsResponseStatus = lens _grjrsResponseStatus (\ s a -> s{_grjrsResponseStatus = a})
-
-instance NFData GetReplicationJobsResponse where
diff --git a/gen/Network/AWS/SMS/GetReplicationRuns.hs b/gen/Network/AWS/SMS/GetReplicationRuns.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/GetReplicationRuns.hs
+++ /dev/null
@@ -1,187 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.SMS.GetReplicationRuns
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The GetReplicationRuns API will return all ReplicationRuns for a given ReplicationJob. This API returns a paginated list, that may be consecutively called with nextToken to retrieve all ReplicationRuns for a ReplicationJob.
---
--- This operation returns paginated results.
-module Network.AWS.SMS.GetReplicationRuns
-    (
-    -- * Creating a Request
-      getReplicationRuns
-    , GetReplicationRuns
-    -- * Request Lenses
-    , grrNextToken
-    , grrMaxResults
-    , grrReplicationJobId
-
-    -- * Destructuring the Response
-    , getReplicationRunsResponse
-    , GetReplicationRunsResponse
-    -- * Response Lenses
-    , grrrsReplicationJob
-    , grrrsNextToken
-    , grrrsReplicationRunList
-    , grrrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'getReplicationRuns' smart constructor.
-data GetReplicationRuns = GetReplicationRuns'
-  { _grrNextToken        :: !(Maybe Text)
-  , _grrMaxResults       :: !(Maybe Int)
-  , _grrReplicationJobId :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetReplicationRuns' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grrNextToken' - Undocumented member.
---
--- * 'grrMaxResults' - Undocumented member.
---
--- * 'grrReplicationJobId' - Undocumented member.
-getReplicationRuns
-    :: Text -- ^ 'grrReplicationJobId'
-    -> GetReplicationRuns
-getReplicationRuns pReplicationJobId_ =
-  GetReplicationRuns'
-    { _grrNextToken = Nothing
-    , _grrMaxResults = Nothing
-    , _grrReplicationJobId = pReplicationJobId_
-    }
-
-
--- | Undocumented member.
-grrNextToken :: Lens' GetReplicationRuns (Maybe Text)
-grrNextToken = lens _grrNextToken (\ s a -> s{_grrNextToken = a})
-
--- | Undocumented member.
-grrMaxResults :: Lens' GetReplicationRuns (Maybe Int)
-grrMaxResults = lens _grrMaxResults (\ s a -> s{_grrMaxResults = a})
-
--- | Undocumented member.
-grrReplicationJobId :: Lens' GetReplicationRuns Text
-grrReplicationJobId = lens _grrReplicationJobId (\ s a -> s{_grrReplicationJobId = a})
-
-instance AWSPager GetReplicationRuns where
-        page rq rs
-          | stop (rs ^. grrrsNextToken) = Nothing
-          | stop (rs ^. grrrsReplicationRunList) = Nothing
-          | otherwise =
-            Just $ rq & grrNextToken .~ rs ^. grrrsNextToken
-
-instance AWSRequest GetReplicationRuns where
-        type Rs GetReplicationRuns =
-             GetReplicationRunsResponse
-        request = postJSON sms
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetReplicationRunsResponse' <$>
-                   (x .?> "replicationJob") <*> (x .?> "nextToken") <*>
-                     (x .?> "replicationRunList" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetReplicationRuns where
-
-instance NFData GetReplicationRuns where
-
-instance ToHeaders GetReplicationRuns where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.GetReplicationRuns"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetReplicationRuns where
-        toJSON GetReplicationRuns'{..}
-          = object
-              (catMaybes
-                 [("nextToken" .=) <$> _grrNextToken,
-                  ("maxResults" .=) <$> _grrMaxResults,
-                  Just ("replicationJobId" .= _grrReplicationJobId)])
-
-instance ToPath GetReplicationRuns where
-        toPath = const "/"
-
-instance ToQuery GetReplicationRuns where
-        toQuery = const mempty
-
--- | /See:/ 'getReplicationRunsResponse' smart constructor.
-data GetReplicationRunsResponse = GetReplicationRunsResponse'
-  { _grrrsReplicationJob     :: !(Maybe ReplicationJob)
-  , _grrrsNextToken          :: !(Maybe Text)
-  , _grrrsReplicationRunList :: !(Maybe [ReplicationRun])
-  , _grrrsResponseStatus     :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetReplicationRunsResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'grrrsReplicationJob' - Undocumented member.
---
--- * 'grrrsNextToken' - Undocumented member.
---
--- * 'grrrsReplicationRunList' - Undocumented member.
---
--- * 'grrrsResponseStatus' - -- | The response status code.
-getReplicationRunsResponse
-    :: Int -- ^ 'grrrsResponseStatus'
-    -> GetReplicationRunsResponse
-getReplicationRunsResponse pResponseStatus_ =
-  GetReplicationRunsResponse'
-    { _grrrsReplicationJob = Nothing
-    , _grrrsNextToken = Nothing
-    , _grrrsReplicationRunList = Nothing
-    , _grrrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Undocumented member.
-grrrsReplicationJob :: Lens' GetReplicationRunsResponse (Maybe ReplicationJob)
-grrrsReplicationJob = lens _grrrsReplicationJob (\ s a -> s{_grrrsReplicationJob = a})
-
--- | Undocumented member.
-grrrsNextToken :: Lens' GetReplicationRunsResponse (Maybe Text)
-grrrsNextToken = lens _grrrsNextToken (\ s a -> s{_grrrsNextToken = a})
-
--- | Undocumented member.
-grrrsReplicationRunList :: Lens' GetReplicationRunsResponse [ReplicationRun]
-grrrsReplicationRunList = lens _grrrsReplicationRunList (\ s a -> s{_grrrsReplicationRunList = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-grrrsResponseStatus :: Lens' GetReplicationRunsResponse Int
-grrrsResponseStatus = lens _grrrsResponseStatus (\ s a -> s{_grrrsResponseStatus = a})
-
-instance NFData GetReplicationRunsResponse where
diff --git a/gen/Network/AWS/SMS/GetServers.hs b/gen/Network/AWS/SMS/GetServers.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/GetServers.hs
+++ /dev/null
@@ -1,182 +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.SMS.GetServers
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The GetServers API returns a list of all servers in your server catalog. For this call to succeed, you must previously have called ImportServerCatalog.
---
--- This operation returns paginated results.
-module Network.AWS.SMS.GetServers
-    (
-    -- * Creating a Request
-      getServers
-    , GetServers
-    -- * Request Lenses
-    , gsNextToken
-    , gsMaxResults
-
-    -- * Destructuring the Response
-    , getServersResponse
-    , GetServersResponse
-    -- * Response Lenses
-    , gsrsServerCatalogStatus
-    , gsrsLastModifiedOn
-    , gsrsNextToken
-    , gsrsServerList
-    , gsrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Pager
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'getServers' smart constructor.
-data GetServers = GetServers'
-  { _gsNextToken  :: !(Maybe Text)
-  , _gsMaxResults :: !(Maybe Int)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetServers' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gsNextToken' - Undocumented member.
---
--- * 'gsMaxResults' - Undocumented member.
-getServers
-    :: GetServers
-getServers = GetServers' {_gsNextToken = Nothing, _gsMaxResults = Nothing}
-
-
--- | Undocumented member.
-gsNextToken :: Lens' GetServers (Maybe Text)
-gsNextToken = lens _gsNextToken (\ s a -> s{_gsNextToken = a})
-
--- | Undocumented member.
-gsMaxResults :: Lens' GetServers (Maybe Int)
-gsMaxResults = lens _gsMaxResults (\ s a -> s{_gsMaxResults = a})
-
-instance AWSPager GetServers where
-        page rq rs
-          | stop (rs ^. gsrsNextToken) = Nothing
-          | stop (rs ^. gsrsServerList) = Nothing
-          | otherwise =
-            Just $ rq & gsNextToken .~ rs ^. gsrsNextToken
-
-instance AWSRequest GetServers where
-        type Rs GetServers = GetServersResponse
-        request = postJSON sms
-        response
-          = receiveJSON
-              (\ s h x ->
-                 GetServersResponse' <$>
-                   (x .?> "serverCatalogStatus") <*>
-                     (x .?> "lastModifiedOn")
-                     <*> (x .?> "nextToken")
-                     <*> (x .?> "serverList" .!@ mempty)
-                     <*> (pure (fromEnum s)))
-
-instance Hashable GetServers where
-
-instance NFData GetServers where
-
-instance ToHeaders GetServers where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.GetServers"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON GetServers where
-        toJSON GetServers'{..}
-          = object
-              (catMaybes
-                 [("nextToken" .=) <$> _gsNextToken,
-                  ("maxResults" .=) <$> _gsMaxResults])
-
-instance ToPath GetServers where
-        toPath = const "/"
-
-instance ToQuery GetServers where
-        toQuery = const mempty
-
--- | /See:/ 'getServersResponse' smart constructor.
-data GetServersResponse = GetServersResponse'
-  { _gsrsServerCatalogStatus :: !(Maybe ServerCatalogStatus)
-  , _gsrsLastModifiedOn      :: !(Maybe POSIX)
-  , _gsrsNextToken           :: !(Maybe Text)
-  , _gsrsServerList          :: !(Maybe [Server])
-  , _gsrsResponseStatus      :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'GetServersResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'gsrsServerCatalogStatus' - Undocumented member.
---
--- * 'gsrsLastModifiedOn' - Undocumented member.
---
--- * 'gsrsNextToken' - Undocumented member.
---
--- * 'gsrsServerList' - Undocumented member.
---
--- * 'gsrsResponseStatus' - -- | The response status code.
-getServersResponse
-    :: Int -- ^ 'gsrsResponseStatus'
-    -> GetServersResponse
-getServersResponse pResponseStatus_ =
-  GetServersResponse'
-    { _gsrsServerCatalogStatus = Nothing
-    , _gsrsLastModifiedOn = Nothing
-    , _gsrsNextToken = Nothing
-    , _gsrsServerList = Nothing
-    , _gsrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Undocumented member.
-gsrsServerCatalogStatus :: Lens' GetServersResponse (Maybe ServerCatalogStatus)
-gsrsServerCatalogStatus = lens _gsrsServerCatalogStatus (\ s a -> s{_gsrsServerCatalogStatus = a})
-
--- | Undocumented member.
-gsrsLastModifiedOn :: Lens' GetServersResponse (Maybe UTCTime)
-gsrsLastModifiedOn = lens _gsrsLastModifiedOn (\ s a -> s{_gsrsLastModifiedOn = a}) . mapping _Time
-
--- | Undocumented member.
-gsrsNextToken :: Lens' GetServersResponse (Maybe Text)
-gsrsNextToken = lens _gsrsNextToken (\ s a -> s{_gsrsNextToken = a})
-
--- | Undocumented member.
-gsrsServerList :: Lens' GetServersResponse [Server]
-gsrsServerList = lens _gsrsServerList (\ s a -> s{_gsrsServerList = a}) . _Default . _Coerce
-
--- | -- | The response status code.
-gsrsResponseStatus :: Lens' GetServersResponse Int
-gsrsResponseStatus = lens _gsrsResponseStatus (\ s a -> s{_gsrsResponseStatus = a})
-
-instance NFData GetServersResponse where
diff --git a/gen/Network/AWS/SMS/ImportServerCatalog.hs b/gen/Network/AWS/SMS/ImportServerCatalog.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/ImportServerCatalog.hs
+++ /dev/null
@@ -1,109 +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.SMS.ImportServerCatalog
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The ImportServerCatalog API is used to gather the complete list of on-premises servers on your premises. This API call requires connectors to be installed and monitoring all servers you would like imported. This API call returns immediately, but may take some time to retrieve all of the servers.
-module Network.AWS.SMS.ImportServerCatalog
-    (
-    -- * Creating a Request
-      importServerCatalog
-    , ImportServerCatalog
-
-    -- * Destructuring the Response
-    , importServerCatalogResponse
-    , ImportServerCatalogResponse
-    -- * Response Lenses
-    , iscrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'importServerCatalog' smart constructor.
-data ImportServerCatalog =
-  ImportServerCatalog'
-  deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ImportServerCatalog' with the minimum fields required to make a request.
---
-importServerCatalog
-    :: ImportServerCatalog
-importServerCatalog = ImportServerCatalog'
-
-
-instance AWSRequest ImportServerCatalog where
-        type Rs ImportServerCatalog =
-             ImportServerCatalogResponse
-        request = postJSON sms
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 ImportServerCatalogResponse' <$> (pure (fromEnum s)))
-
-instance Hashable ImportServerCatalog where
-
-instance NFData ImportServerCatalog where
-
-instance ToHeaders ImportServerCatalog where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.ImportServerCatalog"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON ImportServerCatalog where
-        toJSON = const (Object mempty)
-
-instance ToPath ImportServerCatalog where
-        toPath = const "/"
-
-instance ToQuery ImportServerCatalog where
-        toQuery = const mempty
-
--- | /See:/ 'importServerCatalogResponse' smart constructor.
-newtype ImportServerCatalogResponse = ImportServerCatalogResponse'
-  { _iscrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ImportServerCatalogResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'iscrsResponseStatus' - -- | The response status code.
-importServerCatalogResponse
-    :: Int -- ^ 'iscrsResponseStatus'
-    -> ImportServerCatalogResponse
-importServerCatalogResponse pResponseStatus_ =
-  ImportServerCatalogResponse' {_iscrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-iscrsResponseStatus :: Lens' ImportServerCatalogResponse Int
-iscrsResponseStatus = lens _iscrsResponseStatus (\ s a -> s{_iscrsResponseStatus = a})
-
-instance NFData ImportServerCatalogResponse where
diff --git a/gen/Network/AWS/SMS/StartOnDemandReplicationRun.hs b/gen/Network/AWS/SMS/StartOnDemandReplicationRun.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/StartOnDemandReplicationRun.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# LANGUAGE DeriveDataTypeable #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE TypeFamilies       #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
-{-# OPTIONS_GHC -fno-warn-unused-matches #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.SMS.StartOnDemandReplicationRun
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The StartOnDemandReplicationRun API is used to start a ReplicationRun on demand (in addition to those that are scheduled based on your frequency). This ReplicationRun will start immediately. StartOnDemandReplicationRun is subject to limits on how many on demand ReplicationRuns you may call per 24-hour period.
-module Network.AWS.SMS.StartOnDemandReplicationRun
-    (
-    -- * Creating a Request
-      startOnDemandReplicationRun
-    , StartOnDemandReplicationRun
-    -- * Request Lenses
-    , sodrrDescription
-    , sodrrReplicationJobId
-
-    -- * Destructuring the Response
-    , startOnDemandReplicationRunResponse
-    , StartOnDemandReplicationRunResponse
-    -- * Response Lenses
-    , sodrrrsReplicationRunId
-    , sodrrrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'startOnDemandReplicationRun' smart constructor.
-data StartOnDemandReplicationRun = StartOnDemandReplicationRun'
-  { _sodrrDescription      :: !(Maybe Text)
-  , _sodrrReplicationJobId :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartOnDemandReplicationRun' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sodrrDescription' - Undocumented member.
---
--- * 'sodrrReplicationJobId' - Undocumented member.
-startOnDemandReplicationRun
-    :: Text -- ^ 'sodrrReplicationJobId'
-    -> StartOnDemandReplicationRun
-startOnDemandReplicationRun pReplicationJobId_ =
-  StartOnDemandReplicationRun'
-    {_sodrrDescription = Nothing, _sodrrReplicationJobId = pReplicationJobId_}
-
-
--- | Undocumented member.
-sodrrDescription :: Lens' StartOnDemandReplicationRun (Maybe Text)
-sodrrDescription = lens _sodrrDescription (\ s a -> s{_sodrrDescription = a})
-
--- | Undocumented member.
-sodrrReplicationJobId :: Lens' StartOnDemandReplicationRun Text
-sodrrReplicationJobId = lens _sodrrReplicationJobId (\ s a -> s{_sodrrReplicationJobId = a})
-
-instance AWSRequest StartOnDemandReplicationRun where
-        type Rs StartOnDemandReplicationRun =
-             StartOnDemandReplicationRunResponse
-        request = postJSON sms
-        response
-          = receiveJSON
-              (\ s h x ->
-                 StartOnDemandReplicationRunResponse' <$>
-                   (x .?> "replicationRunId") <*> (pure (fromEnum s)))
-
-instance Hashable StartOnDemandReplicationRun where
-
-instance NFData StartOnDemandReplicationRun where
-
-instance ToHeaders StartOnDemandReplicationRun where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.StartOnDemandReplicationRun"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON StartOnDemandReplicationRun where
-        toJSON StartOnDemandReplicationRun'{..}
-          = object
-              (catMaybes
-                 [("description" .=) <$> _sodrrDescription,
-                  Just ("replicationJobId" .= _sodrrReplicationJobId)])
-
-instance ToPath StartOnDemandReplicationRun where
-        toPath = const "/"
-
-instance ToQuery StartOnDemandReplicationRun where
-        toQuery = const mempty
-
--- | /See:/ 'startOnDemandReplicationRunResponse' smart constructor.
-data StartOnDemandReplicationRunResponse = StartOnDemandReplicationRunResponse'
-  { _sodrrrsReplicationRunId :: !(Maybe Text)
-  , _sodrrrsResponseStatus   :: !Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'StartOnDemandReplicationRunResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sodrrrsReplicationRunId' - Undocumented member.
---
--- * 'sodrrrsResponseStatus' - -- | The response status code.
-startOnDemandReplicationRunResponse
-    :: Int -- ^ 'sodrrrsResponseStatus'
-    -> StartOnDemandReplicationRunResponse
-startOnDemandReplicationRunResponse pResponseStatus_ =
-  StartOnDemandReplicationRunResponse'
-    { _sodrrrsReplicationRunId = Nothing
-    , _sodrrrsResponseStatus = pResponseStatus_
-    }
-
-
--- | Undocumented member.
-sodrrrsReplicationRunId :: Lens' StartOnDemandReplicationRunResponse (Maybe Text)
-sodrrrsReplicationRunId = lens _sodrrrsReplicationRunId (\ s a -> s{_sodrrrsReplicationRunId = a})
-
--- | -- | The response status code.
-sodrrrsResponseStatus :: Lens' StartOnDemandReplicationRunResponse Int
-sodrrrsResponseStatus = lens _sodrrrsResponseStatus (\ s a -> s{_sodrrrsResponseStatus = a})
-
-instance NFData StartOnDemandReplicationRunResponse
-         where
diff --git a/gen/Network/AWS/SMS/Types.hs b/gen/Network/AWS/SMS/Types.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/Types.hs
+++ /dev/null
@@ -1,227 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- |
--- Module      : Network.AWS.SMS.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.SMS.Types
-    (
-    -- * Service Configuration
-      sms
-
-    -- * Errors
-    , _ReplicationRunLimitExceededException
-    , _InvalidParameterException
-    , _NoConnectorsAvailableException
-    , _ReplicationJobNotFoundException
-    , _ServerCannotBeReplicatedException
-    , _InternalError
-    , _ReplicationJobAlreadyExistsException
-    , _OperationNotPermittedException
-    , _MissingRequiredParameterException
-    , _UnauthorizedOperationException
-
-    -- * ConnectorCapability
-    , ConnectorCapability (..)
-
-    -- * ConnectorStatus
-    , ConnectorStatus (..)
-
-    -- * LicenseType
-    , LicenseType (..)
-
-    -- * ReplicationJobState
-    , ReplicationJobState (..)
-
-    -- * ReplicationRunState
-    , ReplicationRunState (..)
-
-    -- * ReplicationRunType
-    , ReplicationRunType (..)
-
-    -- * ServerCatalogStatus
-    , ServerCatalogStatus (..)
-
-    -- * ServerType
-    , ServerType (..)
-
-    -- * VMManagerType
-    , VMManagerType (..)
-
-    -- * Connector
-    , Connector
-    , connector
-    , cStatus
-    , cVmManagerName
-    , cIpAddress
-    , cVmManagerId
-    , cVmManagerType
-    , cConnectorId
-    , cAssociatedOn
-    , cMacAddress
-    , cVersion
-    , cCapabilityList
-
-    -- * ReplicationJob
-    , ReplicationJob
-    , replicationJob
-    , rjFrequency
-    , rjState
-    , rjServerType
-    , rjServerId
-    , rjLicenseType
-    , rjRoleName
-    , rjVmServer
-    , rjReplicationJobId
-    , rjReplicationRunList
-    , rjNextReplicationRunStartTime
-    , rjStatusMessage
-    , rjLatestAMIId
-    , rjSeedReplicationTime
-    , rjDescription
-
-    -- * ReplicationRun
-    , ReplicationRun
-    , replicationRun
-    , rrState
-    , rrReplicationRunId
-    , rrScheduledStartTime
-    , rrStatusMessage
-    , rrCompletedTime
-    , rrAmiId
-    , rrType
-    , rrDescription
-
-    -- * Server
-    , Server
-    , server
-    , sServerType
-    , sServerId
-    , sReplicationJobTerminated
-    , sVmServer
-    , sReplicationJobId
-
-    -- * VMServer
-    , VMServer
-    , vMServer
-    , vmsVmManagerName
-    , vmsVmManagerType
-    , vmsVmServerAddress
-    , vmsVmName
-    , vmsVmPath
-
-    -- * VMServerAddress
-    , VMServerAddress
-    , vMServerAddress
-    , vmsaVmManagerId
-    , vmsaVmId
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Sign.V4
-import Network.AWS.SMS.Types.Product
-import Network.AWS.SMS.Types.Sum
-
--- | API version @2016-10-24@ of the Amazon Server Migration Service SDK configuration.
-sms :: Service
-sms =
-  Service
-    { _svcAbbrev = "SMS"
-    , _svcSigner = v4
-    , _svcPrefix = "sms"
-    , _svcVersion = "2016-10-24"
-    , _svcEndpoint = defaultEndpoint sms
-    , _svcTimeout = Just 70
-    , _svcCheck = statusSuccess
-    , _svcError = parseJSONError "SMS"
-    , _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
-
-
--- | This user has exceeded the maximum allowed Replication Run limit.
-_ReplicationRunLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
-_ReplicationRunLimitExceededException =
-  _MatchServiceError sms "ReplicationRunLimitExceededException"
-
-
--- | A parameter specified in the request is not valid, is unsupported, or cannot be used.
-_InvalidParameterException :: AsError a => Getting (First ServiceError) a ServiceError
-_InvalidParameterException = _MatchServiceError sms "InvalidParameterException"
-
-
--- | No connectors are available to handle this request. Please associate connector(s) and verify any existing connectors are healthy and can respond to requests.
-_NoConnectorsAvailableException :: AsError a => Getting (First ServiceError) a ServiceError
-_NoConnectorsAvailableException =
-  _MatchServiceError sms "NoConnectorsAvailableException"
-
-
--- | The specified Replication Job cannot be found.
-_ReplicationJobNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
-_ReplicationJobNotFoundException =
-  _MatchServiceError sms "ReplicationJobNotFoundException"
-
-
--- | The provided server cannot be replicated.
-_ServerCannotBeReplicatedException :: AsError a => Getting (First ServiceError) a ServiceError
-_ServerCannotBeReplicatedException =
-  _MatchServiceError sms "ServerCannotBeReplicatedException"
-
-
--- | An internal error has occured.
-_InternalError :: AsError a => Getting (First ServiceError) a ServiceError
-_InternalError = _MatchServiceError sms "InternalError"
-
-
--- | An active Replication Job already exists for the specified server.
-_ReplicationJobAlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
-_ReplicationJobAlreadyExistsException =
-  _MatchServiceError sms "ReplicationJobAlreadyExistsException"
-
-
--- | The specified operation is not allowed. This error can occur for a number of reasons; for example, you might be trying to start a Replication Run before seed Replication Run.
-_OperationNotPermittedException :: AsError a => Getting (First ServiceError) a ServiceError
-_OperationNotPermittedException =
-  _MatchServiceError sms "OperationNotPermittedException"
-
-
--- | The request is missing a required parameter. Ensure that you have supplied all the required parameters for the request.
-_MissingRequiredParameterException :: AsError a => Getting (First ServiceError) a ServiceError
-_MissingRequiredParameterException =
-  _MatchServiceError sms "MissingRequiredParameterException"
-
-
--- | This user does not have permissions to perform this operation.
-_UnauthorizedOperationException :: AsError a => Getting (First ServiceError) a ServiceError
-_UnauthorizedOperationException =
-  _MatchServiceError sms "UnauthorizedOperationException"
-
diff --git a/gen/Network/AWS/SMS/Types/Product.hs b/gen/Network/AWS/SMS/Types/Product.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/Types/Product.hs
+++ /dev/null
@@ -1,571 +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.SMS.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.SMS.Types.Product where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.SMS.Types.Sum
-
--- | Object representing a Connector
---
--- /See:/ 'connector' smart constructor.
-data Connector = Connector'
-  { _cStatus         :: !(Maybe ConnectorStatus)
-  , _cVmManagerName  :: !(Maybe Text)
-  , _cIpAddress      :: !(Maybe Text)
-  , _cVmManagerId    :: !(Maybe Text)
-  , _cVmManagerType  :: !(Maybe VMManagerType)
-  , _cConnectorId    :: !(Maybe Text)
-  , _cAssociatedOn   :: !(Maybe POSIX)
-  , _cMacAddress     :: !(Maybe Text)
-  , _cVersion        :: !(Maybe Text)
-  , _cCapabilityList :: !(Maybe [ConnectorCapability])
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Connector' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'cStatus' - Undocumented member.
---
--- * 'cVmManagerName' - Undocumented member.
---
--- * 'cIpAddress' - Undocumented member.
---
--- * 'cVmManagerId' - Undocumented member.
---
--- * 'cVmManagerType' - Undocumented member.
---
--- * 'cConnectorId' - Undocumented member.
---
--- * 'cAssociatedOn' - Undocumented member.
---
--- * 'cMacAddress' - Undocumented member.
---
--- * 'cVersion' - Undocumented member.
---
--- * 'cCapabilityList' - Undocumented member.
-connector
-    :: Connector
-connector =
-  Connector'
-    { _cStatus = Nothing
-    , _cVmManagerName = Nothing
-    , _cIpAddress = Nothing
-    , _cVmManagerId = Nothing
-    , _cVmManagerType = Nothing
-    , _cConnectorId = Nothing
-    , _cAssociatedOn = Nothing
-    , _cMacAddress = Nothing
-    , _cVersion = Nothing
-    , _cCapabilityList = Nothing
-    }
-
-
--- | Undocumented member.
-cStatus :: Lens' Connector (Maybe ConnectorStatus)
-cStatus = lens _cStatus (\ s a -> s{_cStatus = a})
-
--- | Undocumented member.
-cVmManagerName :: Lens' Connector (Maybe Text)
-cVmManagerName = lens _cVmManagerName (\ s a -> s{_cVmManagerName = a})
-
--- | Undocumented member.
-cIpAddress :: Lens' Connector (Maybe Text)
-cIpAddress = lens _cIpAddress (\ s a -> s{_cIpAddress = a})
-
--- | Undocumented member.
-cVmManagerId :: Lens' Connector (Maybe Text)
-cVmManagerId = lens _cVmManagerId (\ s a -> s{_cVmManagerId = a})
-
--- | Undocumented member.
-cVmManagerType :: Lens' Connector (Maybe VMManagerType)
-cVmManagerType = lens _cVmManagerType (\ s a -> s{_cVmManagerType = a})
-
--- | Undocumented member.
-cConnectorId :: Lens' Connector (Maybe Text)
-cConnectorId = lens _cConnectorId (\ s a -> s{_cConnectorId = a})
-
--- | Undocumented member.
-cAssociatedOn :: Lens' Connector (Maybe UTCTime)
-cAssociatedOn = lens _cAssociatedOn (\ s a -> s{_cAssociatedOn = a}) . mapping _Time
-
--- | Undocumented member.
-cMacAddress :: Lens' Connector (Maybe Text)
-cMacAddress = lens _cMacAddress (\ s a -> s{_cMacAddress = a})
-
--- | Undocumented member.
-cVersion :: Lens' Connector (Maybe Text)
-cVersion = lens _cVersion (\ s a -> s{_cVersion = a})
-
--- | Undocumented member.
-cCapabilityList :: Lens' Connector [ConnectorCapability]
-cCapabilityList = lens _cCapabilityList (\ s a -> s{_cCapabilityList = a}) . _Default . _Coerce
-
-instance FromJSON Connector where
-        parseJSON
-          = withObject "Connector"
-              (\ x ->
-                 Connector' <$>
-                   (x .:? "status") <*> (x .:? "vmManagerName") <*>
-                     (x .:? "ipAddress")
-                     <*> (x .:? "vmManagerId")
-                     <*> (x .:? "vmManagerType")
-                     <*> (x .:? "connectorId")
-                     <*> (x .:? "associatedOn")
-                     <*> (x .:? "macAddress")
-                     <*> (x .:? "version")
-                     <*> (x .:? "capabilityList" .!= mempty))
-
-instance Hashable Connector where
-
-instance NFData Connector where
-
--- | Object representing a Replication Job
---
--- /See:/ 'replicationJob' smart constructor.
-data ReplicationJob = ReplicationJob'
-  { _rjFrequency                   :: !(Maybe Int)
-  , _rjState                       :: !(Maybe ReplicationJobState)
-  , _rjServerType                  :: !(Maybe ServerType)
-  , _rjServerId                    :: !(Maybe Text)
-  , _rjLicenseType                 :: !(Maybe LicenseType)
-  , _rjRoleName                    :: !(Maybe Text)
-  , _rjVmServer                    :: !(Maybe VMServer)
-  , _rjReplicationJobId            :: !(Maybe Text)
-  , _rjReplicationRunList          :: !(Maybe [ReplicationRun])
-  , _rjNextReplicationRunStartTime :: !(Maybe POSIX)
-  , _rjStatusMessage               :: !(Maybe Text)
-  , _rjLatestAMIId                 :: !(Maybe Text)
-  , _rjSeedReplicationTime         :: !(Maybe POSIX)
-  , _rjDescription                 :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ReplicationJob' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rjFrequency' - Undocumented member.
---
--- * 'rjState' - Undocumented member.
---
--- * 'rjServerType' - Undocumented member.
---
--- * 'rjServerId' - Undocumented member.
---
--- * 'rjLicenseType' - Undocumented member.
---
--- * 'rjRoleName' - Undocumented member.
---
--- * 'rjVmServer' - Undocumented member.
---
--- * 'rjReplicationJobId' - Undocumented member.
---
--- * 'rjReplicationRunList' - Undocumented member.
---
--- * 'rjNextReplicationRunStartTime' - Undocumented member.
---
--- * 'rjStatusMessage' - Undocumented member.
---
--- * 'rjLatestAMIId' - Undocumented member.
---
--- * 'rjSeedReplicationTime' - Undocumented member.
---
--- * 'rjDescription' - Undocumented member.
-replicationJob
-    :: ReplicationJob
-replicationJob =
-  ReplicationJob'
-    { _rjFrequency = Nothing
-    , _rjState = Nothing
-    , _rjServerType = Nothing
-    , _rjServerId = Nothing
-    , _rjLicenseType = Nothing
-    , _rjRoleName = Nothing
-    , _rjVmServer = Nothing
-    , _rjReplicationJobId = Nothing
-    , _rjReplicationRunList = Nothing
-    , _rjNextReplicationRunStartTime = Nothing
-    , _rjStatusMessage = Nothing
-    , _rjLatestAMIId = Nothing
-    , _rjSeedReplicationTime = Nothing
-    , _rjDescription = Nothing
-    }
-
-
--- | Undocumented member.
-rjFrequency :: Lens' ReplicationJob (Maybe Int)
-rjFrequency = lens _rjFrequency (\ s a -> s{_rjFrequency = a})
-
--- | Undocumented member.
-rjState :: Lens' ReplicationJob (Maybe ReplicationJobState)
-rjState = lens _rjState (\ s a -> s{_rjState = a})
-
--- | Undocumented member.
-rjServerType :: Lens' ReplicationJob (Maybe ServerType)
-rjServerType = lens _rjServerType (\ s a -> s{_rjServerType = a})
-
--- | Undocumented member.
-rjServerId :: Lens' ReplicationJob (Maybe Text)
-rjServerId = lens _rjServerId (\ s a -> s{_rjServerId = a})
-
--- | Undocumented member.
-rjLicenseType :: Lens' ReplicationJob (Maybe LicenseType)
-rjLicenseType = lens _rjLicenseType (\ s a -> s{_rjLicenseType = a})
-
--- | Undocumented member.
-rjRoleName :: Lens' ReplicationJob (Maybe Text)
-rjRoleName = lens _rjRoleName (\ s a -> s{_rjRoleName = a})
-
--- | Undocumented member.
-rjVmServer :: Lens' ReplicationJob (Maybe VMServer)
-rjVmServer = lens _rjVmServer (\ s a -> s{_rjVmServer = a})
-
--- | Undocumented member.
-rjReplicationJobId :: Lens' ReplicationJob (Maybe Text)
-rjReplicationJobId = lens _rjReplicationJobId (\ s a -> s{_rjReplicationJobId = a})
-
--- | Undocumented member.
-rjReplicationRunList :: Lens' ReplicationJob [ReplicationRun]
-rjReplicationRunList = lens _rjReplicationRunList (\ s a -> s{_rjReplicationRunList = a}) . _Default . _Coerce
-
--- | Undocumented member.
-rjNextReplicationRunStartTime :: Lens' ReplicationJob (Maybe UTCTime)
-rjNextReplicationRunStartTime = lens _rjNextReplicationRunStartTime (\ s a -> s{_rjNextReplicationRunStartTime = a}) . mapping _Time
-
--- | Undocumented member.
-rjStatusMessage :: Lens' ReplicationJob (Maybe Text)
-rjStatusMessage = lens _rjStatusMessage (\ s a -> s{_rjStatusMessage = a})
-
--- | Undocumented member.
-rjLatestAMIId :: Lens' ReplicationJob (Maybe Text)
-rjLatestAMIId = lens _rjLatestAMIId (\ s a -> s{_rjLatestAMIId = a})
-
--- | Undocumented member.
-rjSeedReplicationTime :: Lens' ReplicationJob (Maybe UTCTime)
-rjSeedReplicationTime = lens _rjSeedReplicationTime (\ s a -> s{_rjSeedReplicationTime = a}) . mapping _Time
-
--- | Undocumented member.
-rjDescription :: Lens' ReplicationJob (Maybe Text)
-rjDescription = lens _rjDescription (\ s a -> s{_rjDescription = a})
-
-instance FromJSON ReplicationJob where
-        parseJSON
-          = withObject "ReplicationJob"
-              (\ x ->
-                 ReplicationJob' <$>
-                   (x .:? "frequency") <*> (x .:? "state") <*>
-                     (x .:? "serverType")
-                     <*> (x .:? "serverId")
-                     <*> (x .:? "licenseType")
-                     <*> (x .:? "roleName")
-                     <*> (x .:? "vmServer")
-                     <*> (x .:? "replicationJobId")
-                     <*> (x .:? "replicationRunList" .!= mempty)
-                     <*> (x .:? "nextReplicationRunStartTime")
-                     <*> (x .:? "statusMessage")
-                     <*> (x .:? "latestAmiId")
-                     <*> (x .:? "seedReplicationTime")
-                     <*> (x .:? "description"))
-
-instance Hashable ReplicationJob where
-
-instance NFData ReplicationJob where
-
--- | Object representing a Replication Run
---
--- /See:/ 'replicationRun' smart constructor.
-data ReplicationRun = ReplicationRun'
-  { _rrState              :: !(Maybe ReplicationRunState)
-  , _rrReplicationRunId   :: !(Maybe Text)
-  , _rrScheduledStartTime :: !(Maybe POSIX)
-  , _rrStatusMessage      :: !(Maybe Text)
-  , _rrCompletedTime      :: !(Maybe POSIX)
-  , _rrAmiId              :: !(Maybe Text)
-  , _rrType               :: !(Maybe ReplicationRunType)
-  , _rrDescription        :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'ReplicationRun' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'rrState' - Undocumented member.
---
--- * 'rrReplicationRunId' - Undocumented member.
---
--- * 'rrScheduledStartTime' - Undocumented member.
---
--- * 'rrStatusMessage' - Undocumented member.
---
--- * 'rrCompletedTime' - Undocumented member.
---
--- * 'rrAmiId' - Undocumented member.
---
--- * 'rrType' - Undocumented member.
---
--- * 'rrDescription' - Undocumented member.
-replicationRun
-    :: ReplicationRun
-replicationRun =
-  ReplicationRun'
-    { _rrState = Nothing
-    , _rrReplicationRunId = Nothing
-    , _rrScheduledStartTime = Nothing
-    , _rrStatusMessage = Nothing
-    , _rrCompletedTime = Nothing
-    , _rrAmiId = Nothing
-    , _rrType = Nothing
-    , _rrDescription = Nothing
-    }
-
-
--- | Undocumented member.
-rrState :: Lens' ReplicationRun (Maybe ReplicationRunState)
-rrState = lens _rrState (\ s a -> s{_rrState = a})
-
--- | Undocumented member.
-rrReplicationRunId :: Lens' ReplicationRun (Maybe Text)
-rrReplicationRunId = lens _rrReplicationRunId (\ s a -> s{_rrReplicationRunId = a})
-
--- | Undocumented member.
-rrScheduledStartTime :: Lens' ReplicationRun (Maybe UTCTime)
-rrScheduledStartTime = lens _rrScheduledStartTime (\ s a -> s{_rrScheduledStartTime = a}) . mapping _Time
-
--- | Undocumented member.
-rrStatusMessage :: Lens' ReplicationRun (Maybe Text)
-rrStatusMessage = lens _rrStatusMessage (\ s a -> s{_rrStatusMessage = a})
-
--- | Undocumented member.
-rrCompletedTime :: Lens' ReplicationRun (Maybe UTCTime)
-rrCompletedTime = lens _rrCompletedTime (\ s a -> s{_rrCompletedTime = a}) . mapping _Time
-
--- | Undocumented member.
-rrAmiId :: Lens' ReplicationRun (Maybe Text)
-rrAmiId = lens _rrAmiId (\ s a -> s{_rrAmiId = a})
-
--- | Undocumented member.
-rrType :: Lens' ReplicationRun (Maybe ReplicationRunType)
-rrType = lens _rrType (\ s a -> s{_rrType = a})
-
--- | Undocumented member.
-rrDescription :: Lens' ReplicationRun (Maybe Text)
-rrDescription = lens _rrDescription (\ s a -> s{_rrDescription = a})
-
-instance FromJSON ReplicationRun where
-        parseJSON
-          = withObject "ReplicationRun"
-              (\ x ->
-                 ReplicationRun' <$>
-                   (x .:? "state") <*> (x .:? "replicationRunId") <*>
-                     (x .:? "scheduledStartTime")
-                     <*> (x .:? "statusMessage")
-                     <*> (x .:? "completedTime")
-                     <*> (x .:? "amiId")
-                     <*> (x .:? "type")
-                     <*> (x .:? "description"))
-
-instance Hashable ReplicationRun where
-
-instance NFData ReplicationRun where
-
--- | Object representing a server
---
--- /See:/ 'server' smart constructor.
-data Server = Server'
-  { _sServerType               :: !(Maybe ServerType)
-  , _sServerId                 :: !(Maybe Text)
-  , _sReplicationJobTerminated :: !(Maybe Bool)
-  , _sVmServer                 :: !(Maybe VMServer)
-  , _sReplicationJobId         :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'Server' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'sServerType' - Undocumented member.
---
--- * 'sServerId' - Undocumented member.
---
--- * 'sReplicationJobTerminated' - Undocumented member.
---
--- * 'sVmServer' - Undocumented member.
---
--- * 'sReplicationJobId' - Undocumented member.
-server
-    :: Server
-server =
-  Server'
-    { _sServerType = Nothing
-    , _sServerId = Nothing
-    , _sReplicationJobTerminated = Nothing
-    , _sVmServer = Nothing
-    , _sReplicationJobId = Nothing
-    }
-
-
--- | Undocumented member.
-sServerType :: Lens' Server (Maybe ServerType)
-sServerType = lens _sServerType (\ s a -> s{_sServerType = a})
-
--- | Undocumented member.
-sServerId :: Lens' Server (Maybe Text)
-sServerId = lens _sServerId (\ s a -> s{_sServerId = a})
-
--- | Undocumented member.
-sReplicationJobTerminated :: Lens' Server (Maybe Bool)
-sReplicationJobTerminated = lens _sReplicationJobTerminated (\ s a -> s{_sReplicationJobTerminated = a})
-
--- | Undocumented member.
-sVmServer :: Lens' Server (Maybe VMServer)
-sVmServer = lens _sVmServer (\ s a -> s{_sVmServer = a})
-
--- | Undocumented member.
-sReplicationJobId :: Lens' Server (Maybe Text)
-sReplicationJobId = lens _sReplicationJobId (\ s a -> s{_sReplicationJobId = a})
-
-instance FromJSON Server where
-        parseJSON
-          = withObject "Server"
-              (\ x ->
-                 Server' <$>
-                   (x .:? "serverType") <*> (x .:? "serverId") <*>
-                     (x .:? "replicationJobTerminated")
-                     <*> (x .:? "vmServer")
-                     <*> (x .:? "replicationJobId"))
-
-instance Hashable Server where
-
-instance NFData Server where
-
--- | Object representing a VM server
---
--- /See:/ 'vMServer' smart constructor.
-data VMServer = VMServer'
-  { _vmsVmManagerName   :: !(Maybe Text)
-  , _vmsVmManagerType   :: !(Maybe VMManagerType)
-  , _vmsVmServerAddress :: !(Maybe VMServerAddress)
-  , _vmsVmName          :: !(Maybe Text)
-  , _vmsVmPath          :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'VMServer' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vmsVmManagerName' - Undocumented member.
---
--- * 'vmsVmManagerType' - Undocumented member.
---
--- * 'vmsVmServerAddress' - Undocumented member.
---
--- * 'vmsVmName' - Undocumented member.
---
--- * 'vmsVmPath' - Undocumented member.
-vMServer
-    :: VMServer
-vMServer =
-  VMServer'
-    { _vmsVmManagerName = Nothing
-    , _vmsVmManagerType = Nothing
-    , _vmsVmServerAddress = Nothing
-    , _vmsVmName = Nothing
-    , _vmsVmPath = Nothing
-    }
-
-
--- | Undocumented member.
-vmsVmManagerName :: Lens' VMServer (Maybe Text)
-vmsVmManagerName = lens _vmsVmManagerName (\ s a -> s{_vmsVmManagerName = a})
-
--- | Undocumented member.
-vmsVmManagerType :: Lens' VMServer (Maybe VMManagerType)
-vmsVmManagerType = lens _vmsVmManagerType (\ s a -> s{_vmsVmManagerType = a})
-
--- | Undocumented member.
-vmsVmServerAddress :: Lens' VMServer (Maybe VMServerAddress)
-vmsVmServerAddress = lens _vmsVmServerAddress (\ s a -> s{_vmsVmServerAddress = a})
-
--- | Undocumented member.
-vmsVmName :: Lens' VMServer (Maybe Text)
-vmsVmName = lens _vmsVmName (\ s a -> s{_vmsVmName = a})
-
--- | Undocumented member.
-vmsVmPath :: Lens' VMServer (Maybe Text)
-vmsVmPath = lens _vmsVmPath (\ s a -> s{_vmsVmPath = a})
-
-instance FromJSON VMServer where
-        parseJSON
-          = withObject "VMServer"
-              (\ x ->
-                 VMServer' <$>
-                   (x .:? "vmManagerName") <*> (x .:? "vmManagerType")
-                     <*> (x .:? "vmServerAddress")
-                     <*> (x .:? "vmName")
-                     <*> (x .:? "vmPath"))
-
-instance Hashable VMServer where
-
-instance NFData VMServer where
-
--- | Object representing a server's location
---
--- /See:/ 'vMServerAddress' smart constructor.
-data VMServerAddress = VMServerAddress'
-  { _vmsaVmManagerId :: !(Maybe Text)
-  , _vmsaVmId        :: !(Maybe Text)
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'VMServerAddress' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'vmsaVmManagerId' - Undocumented member.
---
--- * 'vmsaVmId' - Undocumented member.
-vMServerAddress
-    :: VMServerAddress
-vMServerAddress =
-  VMServerAddress' {_vmsaVmManagerId = Nothing, _vmsaVmId = Nothing}
-
-
--- | Undocumented member.
-vmsaVmManagerId :: Lens' VMServerAddress (Maybe Text)
-vmsaVmManagerId = lens _vmsaVmManagerId (\ s a -> s{_vmsaVmManagerId = a})
-
--- | Undocumented member.
-vmsaVmId :: Lens' VMServerAddress (Maybe Text)
-vmsaVmId = lens _vmsaVmId (\ s a -> s{_vmsaVmId = a})
-
-instance FromJSON VMServerAddress where
-        parseJSON
-          = withObject "VMServerAddress"
-              (\ x ->
-                 VMServerAddress' <$>
-                   (x .:? "vmManagerId") <*> (x .:? "vmId"))
-
-instance Hashable VMServerAddress where
-
-instance NFData VMServerAddress where
diff --git a/gen/Network/AWS/SMS/Types/Sum.hs b/gen/Network/AWS/SMS/Types/Sum.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/Types/Sum.hs
+++ /dev/null
@@ -1,299 +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.SMS.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.SMS.Types.Sum where
-
-import Network.AWS.Prelude
-
--- | Capabilities for a Connector
-data ConnectorCapability =
-  CCVsphere
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ConnectorCapability where
-    parser = takeLowerText >>= \case
-        "vsphere" -> pure CCVsphere
-        e -> fromTextError $ "Failure parsing ConnectorCapability from value: '" <> e
-           <> "'. Accepted values: vsphere"
-
-instance ToText ConnectorCapability where
-    toText = \case
-        CCVsphere -> "VSPHERE"
-
-instance Hashable     ConnectorCapability
-instance NFData       ConnectorCapability
-instance ToByteString ConnectorCapability
-instance ToQuery      ConnectorCapability
-instance ToHeader     ConnectorCapability
-
-instance FromJSON ConnectorCapability where
-    parseJSON = parseJSONText "ConnectorCapability"
-
--- | Status of on-premise Connector
-data ConnectorStatus
-  = Healthy
-  | Unhealthy
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ConnectorStatus where
-    parser = takeLowerText >>= \case
-        "healthy" -> pure Healthy
-        "unhealthy" -> pure Unhealthy
-        e -> fromTextError $ "Failure parsing ConnectorStatus from value: '" <> e
-           <> "'. Accepted values: healthy, unhealthy"
-
-instance ToText ConnectorStatus where
-    toText = \case
-        Healthy -> "HEALTHY"
-        Unhealthy -> "UNHEALTHY"
-
-instance Hashable     ConnectorStatus
-instance NFData       ConnectorStatus
-instance ToByteString ConnectorStatus
-instance ToQuery      ConnectorStatus
-instance ToHeader     ConnectorStatus
-
-instance FromJSON ConnectorStatus where
-    parseJSON = parseJSONText "ConnectorStatus"
-
--- | The license type to be used for the Amazon Machine Image (AMI) created after a successful ReplicationRun.
-data LicenseType
-  = AWS
-  | Byol
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText LicenseType where
-    parser = takeLowerText >>= \case
-        "aws" -> pure AWS
-        "byol" -> pure Byol
-        e -> fromTextError $ "Failure parsing LicenseType from value: '" <> e
-           <> "'. Accepted values: aws, byol"
-
-instance ToText LicenseType where
-    toText = \case
-        AWS -> "AWS"
-        Byol -> "BYOL"
-
-instance Hashable     LicenseType
-instance NFData       LicenseType
-instance ToByteString LicenseType
-instance ToQuery      LicenseType
-instance ToHeader     LicenseType
-
-instance ToJSON LicenseType where
-    toJSON = toJSONText
-
-instance FromJSON LicenseType where
-    parseJSON = parseJSONText "LicenseType"
-
--- | Current state of Replication Job
-data ReplicationJobState
-  = RJSActive
-  | RJSDeleted
-  | RJSDeleting
-  | RJSFailed
-  | RJSPending
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ReplicationJobState where
-    parser = takeLowerText >>= \case
-        "active" -> pure RJSActive
-        "deleted" -> pure RJSDeleted
-        "deleting" -> pure RJSDeleting
-        "failed" -> pure RJSFailed
-        "pending" -> pure RJSPending
-        e -> fromTextError $ "Failure parsing ReplicationJobState from value: '" <> e
-           <> "'. Accepted values: active, deleted, deleting, failed, pending"
-
-instance ToText ReplicationJobState where
-    toText = \case
-        RJSActive -> "ACTIVE"
-        RJSDeleted -> "DELETED"
-        RJSDeleting -> "DELETING"
-        RJSFailed -> "FAILED"
-        RJSPending -> "PENDING"
-
-instance Hashable     ReplicationJobState
-instance NFData       ReplicationJobState
-instance ToByteString ReplicationJobState
-instance ToQuery      ReplicationJobState
-instance ToHeader     ReplicationJobState
-
-instance FromJSON ReplicationJobState where
-    parseJSON = parseJSONText "ReplicationJobState"
-
--- | Current state of Replication Run
-data ReplicationRunState
-  = RRSActive
-  | RRSCompleted
-  | RRSDeleted
-  | RRSDeleting
-  | RRSFailed
-  | RRSMissed
-  | RRSPending
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ReplicationRunState where
-    parser = takeLowerText >>= \case
-        "active" -> pure RRSActive
-        "completed" -> pure RRSCompleted
-        "deleted" -> pure RRSDeleted
-        "deleting" -> pure RRSDeleting
-        "failed" -> pure RRSFailed
-        "missed" -> pure RRSMissed
-        "pending" -> pure RRSPending
-        e -> fromTextError $ "Failure parsing ReplicationRunState from value: '" <> e
-           <> "'. Accepted values: active, completed, deleted, deleting, failed, missed, pending"
-
-instance ToText ReplicationRunState where
-    toText = \case
-        RRSActive -> "ACTIVE"
-        RRSCompleted -> "COMPLETED"
-        RRSDeleted -> "DELETED"
-        RRSDeleting -> "DELETING"
-        RRSFailed -> "FAILED"
-        RRSMissed -> "MISSED"
-        RRSPending -> "PENDING"
-
-instance Hashable     ReplicationRunState
-instance NFData       ReplicationRunState
-instance ToByteString ReplicationRunState
-instance ToQuery      ReplicationRunState
-instance ToHeader     ReplicationRunState
-
-instance FromJSON ReplicationRunState where
-    parseJSON = parseJSONText "ReplicationRunState"
-
--- | Type of Replication Run
-data ReplicationRunType
-  = Automatic
-  | OnDemand
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ReplicationRunType where
-    parser = takeLowerText >>= \case
-        "automatic" -> pure Automatic
-        "on_demand" -> pure OnDemand
-        e -> fromTextError $ "Failure parsing ReplicationRunType from value: '" <> e
-           <> "'. Accepted values: automatic, on_demand"
-
-instance ToText ReplicationRunType where
-    toText = \case
-        Automatic -> "AUTOMATIC"
-        OnDemand -> "ON_DEMAND"
-
-instance Hashable     ReplicationRunType
-instance NFData       ReplicationRunType
-instance ToByteString ReplicationRunType
-instance ToQuery      ReplicationRunType
-instance ToHeader     ReplicationRunType
-
-instance FromJSON ReplicationRunType where
-    parseJSON = parseJSONText "ReplicationRunType"
-
--- | Status of Server catalog
-data ServerCatalogStatus
-  = Available
-  | Deleted
-  | Expired
-  | Importing
-  | NotImported
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ServerCatalogStatus where
-    parser = takeLowerText >>= \case
-        "available" -> pure Available
-        "deleted" -> pure Deleted
-        "expired" -> pure Expired
-        "importing" -> pure Importing
-        "not_imported" -> pure NotImported
-        e -> fromTextError $ "Failure parsing ServerCatalogStatus from value: '" <> e
-           <> "'. Accepted values: available, deleted, expired, importing, not_imported"
-
-instance ToText ServerCatalogStatus where
-    toText = \case
-        Available -> "AVAILABLE"
-        Deleted -> "DELETED"
-        Expired -> "EXPIRED"
-        Importing -> "IMPORTING"
-        NotImported -> "NOT_IMPORTED"
-
-instance Hashable     ServerCatalogStatus
-instance NFData       ServerCatalogStatus
-instance ToByteString ServerCatalogStatus
-instance ToQuery      ServerCatalogStatus
-instance ToHeader     ServerCatalogStatus
-
-instance FromJSON ServerCatalogStatus where
-    parseJSON = parseJSONText "ServerCatalogStatus"
-
--- | Type of server.
-data ServerType =
-  VirtualMachine
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText ServerType where
-    parser = takeLowerText >>= \case
-        "virtual_machine" -> pure VirtualMachine
-        e -> fromTextError $ "Failure parsing ServerType from value: '" <> e
-           <> "'. Accepted values: virtual_machine"
-
-instance ToText ServerType where
-    toText = \case
-        VirtualMachine -> "VIRTUAL_MACHINE"
-
-instance Hashable     ServerType
-instance NFData       ServerType
-instance ToByteString ServerType
-instance ToQuery      ServerType
-instance ToHeader     ServerType
-
-instance FromJSON ServerType where
-    parseJSON = parseJSONText "ServerType"
-
--- | VM Management Product
-data VMManagerType =
-  Vsphere
-  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
-
-
-instance FromText VMManagerType where
-    parser = takeLowerText >>= \case
-        "vsphere" -> pure Vsphere
-        e -> fromTextError $ "Failure parsing VMManagerType from value: '" <> e
-           <> "'. Accepted values: vsphere"
-
-instance ToText VMManagerType where
-    toText = \case
-        Vsphere -> "VSPHERE"
-
-instance Hashable     VMManagerType
-instance NFData       VMManagerType
-instance ToByteString VMManagerType
-instance ToQuery      VMManagerType
-instance ToHeader     VMManagerType
-
-instance FromJSON VMManagerType where
-    parseJSON = parseJSONText "VMManagerType"
diff --git a/gen/Network/AWS/SMS/UpdateReplicationJob.hs b/gen/Network/AWS/SMS/UpdateReplicationJob.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/UpdateReplicationJob.hs
+++ /dev/null
@@ -1,177 +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.SMS.UpdateReplicationJob
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
--- The UpdateReplicationJob API is used to change the settings of your existing ReplicationJob created using CreateReplicationJob. Calling this API will affect the next scheduled ReplicationRun.
-module Network.AWS.SMS.UpdateReplicationJob
-    (
-    -- * Creating a Request
-      updateReplicationJob
-    , UpdateReplicationJob
-    -- * Request Lenses
-    , urjFrequency
-    , urjLicenseType
-    , urjRoleName
-    , urjNextReplicationRunStartTime
-    , urjDescription
-    , urjReplicationJobId
-
-    -- * Destructuring the Response
-    , updateReplicationJobResponse
-    , UpdateReplicationJobResponse
-    -- * Response Lenses
-    , urjrsResponseStatus
-    ) where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.Request
-import Network.AWS.Response
-import Network.AWS.SMS.Types
-import Network.AWS.SMS.Types.Product
-
--- | /See:/ 'updateReplicationJob' smart constructor.
-data UpdateReplicationJob = UpdateReplicationJob'
-  { _urjFrequency                   :: !(Maybe Int)
-  , _urjLicenseType                 :: !(Maybe LicenseType)
-  , _urjRoleName                    :: !(Maybe Text)
-  , _urjNextReplicationRunStartTime :: !(Maybe POSIX)
-  , _urjDescription                 :: !(Maybe Text)
-  , _urjReplicationJobId            :: !Text
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateReplicationJob' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urjFrequency' - Undocumented member.
---
--- * 'urjLicenseType' - Undocumented member.
---
--- * 'urjRoleName' - Undocumented member.
---
--- * 'urjNextReplicationRunStartTime' - Undocumented member.
---
--- * 'urjDescription' - Undocumented member.
---
--- * 'urjReplicationJobId' - Undocumented member.
-updateReplicationJob
-    :: Text -- ^ 'urjReplicationJobId'
-    -> UpdateReplicationJob
-updateReplicationJob pReplicationJobId_ =
-  UpdateReplicationJob'
-    { _urjFrequency = Nothing
-    , _urjLicenseType = Nothing
-    , _urjRoleName = Nothing
-    , _urjNextReplicationRunStartTime = Nothing
-    , _urjDescription = Nothing
-    , _urjReplicationJobId = pReplicationJobId_
-    }
-
-
--- | Undocumented member.
-urjFrequency :: Lens' UpdateReplicationJob (Maybe Int)
-urjFrequency = lens _urjFrequency (\ s a -> s{_urjFrequency = a})
-
--- | Undocumented member.
-urjLicenseType :: Lens' UpdateReplicationJob (Maybe LicenseType)
-urjLicenseType = lens _urjLicenseType (\ s a -> s{_urjLicenseType = a})
-
--- | Undocumented member.
-urjRoleName :: Lens' UpdateReplicationJob (Maybe Text)
-urjRoleName = lens _urjRoleName (\ s a -> s{_urjRoleName = a})
-
--- | Undocumented member.
-urjNextReplicationRunStartTime :: Lens' UpdateReplicationJob (Maybe UTCTime)
-urjNextReplicationRunStartTime = lens _urjNextReplicationRunStartTime (\ s a -> s{_urjNextReplicationRunStartTime = a}) . mapping _Time
-
--- | Undocumented member.
-urjDescription :: Lens' UpdateReplicationJob (Maybe Text)
-urjDescription = lens _urjDescription (\ s a -> s{_urjDescription = a})
-
--- | Undocumented member.
-urjReplicationJobId :: Lens' UpdateReplicationJob Text
-urjReplicationJobId = lens _urjReplicationJobId (\ s a -> s{_urjReplicationJobId = a})
-
-instance AWSRequest UpdateReplicationJob where
-        type Rs UpdateReplicationJob =
-             UpdateReplicationJobResponse
-        request = postJSON sms
-        response
-          = receiveEmpty
-              (\ s h x ->
-                 UpdateReplicationJobResponse' <$>
-                   (pure (fromEnum s)))
-
-instance Hashable UpdateReplicationJob where
-
-instance NFData UpdateReplicationJob where
-
-instance ToHeaders UpdateReplicationJob where
-        toHeaders
-          = const
-              (mconcat
-                 ["X-Amz-Target" =#
-                    ("AWSServerMigrationService_V2016_10_24.UpdateReplicationJob"
-                       :: ByteString),
-                  "Content-Type" =#
-                    ("application/x-amz-json-1.1" :: ByteString)])
-
-instance ToJSON UpdateReplicationJob where
-        toJSON UpdateReplicationJob'{..}
-          = object
-              (catMaybes
-                 [("frequency" .=) <$> _urjFrequency,
-                  ("licenseType" .=) <$> _urjLicenseType,
-                  ("roleName" .=) <$> _urjRoleName,
-                  ("nextReplicationRunStartTime" .=) <$>
-                    _urjNextReplicationRunStartTime,
-                  ("description" .=) <$> _urjDescription,
-                  Just ("replicationJobId" .= _urjReplicationJobId)])
-
-instance ToPath UpdateReplicationJob where
-        toPath = const "/"
-
-instance ToQuery UpdateReplicationJob where
-        toQuery = const mempty
-
--- | /See:/ 'updateReplicationJobResponse' smart constructor.
-newtype UpdateReplicationJobResponse = UpdateReplicationJobResponse'
-  { _urjrsResponseStatus :: Int
-  } deriving (Eq, Read, Show, Data, Typeable, Generic)
-
-
--- | Creates a value of 'UpdateReplicationJobResponse' with the minimum fields required to make a request.
---
--- Use one of the following lenses to modify other fields as desired:
---
--- * 'urjrsResponseStatus' - -- | The response status code.
-updateReplicationJobResponse
-    :: Int -- ^ 'urjrsResponseStatus'
-    -> UpdateReplicationJobResponse
-updateReplicationJobResponse pResponseStatus_ =
-  UpdateReplicationJobResponse' {_urjrsResponseStatus = pResponseStatus_}
-
-
--- | -- | The response status code.
-urjrsResponseStatus :: Lens' UpdateReplicationJobResponse Int
-urjrsResponseStatus = lens _urjrsResponseStatus (\ s a -> s{_urjrsResponseStatus = a})
-
-instance NFData UpdateReplicationJobResponse where
diff --git a/gen/Network/AWS/SMS/Waiters.hs b/gen/Network/AWS/SMS/Waiters.hs
deleted file mode 100644
--- a/gen/Network/AWS/SMS/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.SMS.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.SMS.Waiters where
-
-import Network.AWS.Lens
-import Network.AWS.Prelude
-import Network.AWS.SMS.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.SMS
+import Test.Amazonka.SMS.Internal
 import Test.Tasty
-import Test.AWS.SMS
-import Test.AWS.SMS.Internal
 
 main :: IO ()
-main = defaultMain $ testGroup "SMS"
-    [ testGroup "tests"    tests
-    , testGroup "fixtures" fixtures
-    ]
+main =
+  defaultMain $
+    testGroup
+      "SMS"
+      [ testGroup "tests" tests,
+        testGroup "fixtures" fixtures
+      ]
diff --git a/test/Test/AWS/Gen/SMS.hs b/test/Test/AWS/Gen/SMS.hs
deleted file mode 100644
--- a/test/Test/AWS/Gen/SMS.hs
+++ /dev/null
@@ -1,237 +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.SMS
--- 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.SMS where
-
-import Data.Proxy
-import Network.AWS.SMS
-import Test.AWS.Fixture
-import Test.AWS.Prelude
-import Test.AWS.SMS.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"
---         [ requestDeleteServerCatalog $
---             deleteServerCatalog
---
---         , requestGetReplicationRuns $
---             getReplicationRuns
---
---         , requestGetServers $
---             getServers
---
---         , requestImportServerCatalog $
---             importServerCatalog
---
---         , requestGetConnectors $
---             getConnectors
---
---         , requestGetReplicationJobs $
---             getReplicationJobs
---
---         , requestDisassociateConnector $
---             disassociateConnector
---
---         , requestCreateReplicationJob $
---             createReplicationJob
---
---         , requestUpdateReplicationJob $
---             updateReplicationJob
---
---         , requestDeleteReplicationJob $
---             deleteReplicationJob
---
---         , requestStartOnDemandReplicationRun $
---             startOnDemandReplicationRun
---
---           ]
-
---     , testGroup "response"
---         [ responseDeleteServerCatalog $
---             deleteServerCatalogResponse
---
---         , responseGetReplicationRuns $
---             getReplicationRunsResponse
---
---         , responseGetServers $
---             getServersResponse
---
---         , responseImportServerCatalog $
---             importServerCatalogResponse
---
---         , responseGetConnectors $
---             getConnectorsResponse
---
---         , responseGetReplicationJobs $
---             getReplicationJobsResponse
---
---         , responseDisassociateConnector $
---             disassociateConnectorResponse
---
---         , responseCreateReplicationJob $
---             createReplicationJobResponse
---
---         , responseUpdateReplicationJob $
---             updateReplicationJobResponse
---
---         , responseDeleteReplicationJob $
---             deleteReplicationJobResponse
---
---         , responseStartOnDemandReplicationRun $
---             startOnDemandReplicationRunResponse
---
---           ]
---     ]
-
--- Requests
-
-requestDeleteServerCatalog :: DeleteServerCatalog -> TestTree
-requestDeleteServerCatalog = req
-    "DeleteServerCatalog"
-    "fixture/DeleteServerCatalog.yaml"
-
-requestGetReplicationRuns :: GetReplicationRuns -> TestTree
-requestGetReplicationRuns = req
-    "GetReplicationRuns"
-    "fixture/GetReplicationRuns.yaml"
-
-requestGetServers :: GetServers -> TestTree
-requestGetServers = req
-    "GetServers"
-    "fixture/GetServers.yaml"
-
-requestImportServerCatalog :: ImportServerCatalog -> TestTree
-requestImportServerCatalog = req
-    "ImportServerCatalog"
-    "fixture/ImportServerCatalog.yaml"
-
-requestGetConnectors :: GetConnectors -> TestTree
-requestGetConnectors = req
-    "GetConnectors"
-    "fixture/GetConnectors.yaml"
-
-requestGetReplicationJobs :: GetReplicationJobs -> TestTree
-requestGetReplicationJobs = req
-    "GetReplicationJobs"
-    "fixture/GetReplicationJobs.yaml"
-
-requestDisassociateConnector :: DisassociateConnector -> TestTree
-requestDisassociateConnector = req
-    "DisassociateConnector"
-    "fixture/DisassociateConnector.yaml"
-
-requestCreateReplicationJob :: CreateReplicationJob -> TestTree
-requestCreateReplicationJob = req
-    "CreateReplicationJob"
-    "fixture/CreateReplicationJob.yaml"
-
-requestUpdateReplicationJob :: UpdateReplicationJob -> TestTree
-requestUpdateReplicationJob = req
-    "UpdateReplicationJob"
-    "fixture/UpdateReplicationJob.yaml"
-
-requestDeleteReplicationJob :: DeleteReplicationJob -> TestTree
-requestDeleteReplicationJob = req
-    "DeleteReplicationJob"
-    "fixture/DeleteReplicationJob.yaml"
-
-requestStartOnDemandReplicationRun :: StartOnDemandReplicationRun -> TestTree
-requestStartOnDemandReplicationRun = req
-    "StartOnDemandReplicationRun"
-    "fixture/StartOnDemandReplicationRun.yaml"
-
--- Responses
-
-responseDeleteServerCatalog :: DeleteServerCatalogResponse -> TestTree
-responseDeleteServerCatalog = res
-    "DeleteServerCatalogResponse"
-    "fixture/DeleteServerCatalogResponse.proto"
-    sms
-    (Proxy :: Proxy DeleteServerCatalog)
-
-responseGetReplicationRuns :: GetReplicationRunsResponse -> TestTree
-responseGetReplicationRuns = res
-    "GetReplicationRunsResponse"
-    "fixture/GetReplicationRunsResponse.proto"
-    sms
-    (Proxy :: Proxy GetReplicationRuns)
-
-responseGetServers :: GetServersResponse -> TestTree
-responseGetServers = res
-    "GetServersResponse"
-    "fixture/GetServersResponse.proto"
-    sms
-    (Proxy :: Proxy GetServers)
-
-responseImportServerCatalog :: ImportServerCatalogResponse -> TestTree
-responseImportServerCatalog = res
-    "ImportServerCatalogResponse"
-    "fixture/ImportServerCatalogResponse.proto"
-    sms
-    (Proxy :: Proxy ImportServerCatalog)
-
-responseGetConnectors :: GetConnectorsResponse -> TestTree
-responseGetConnectors = res
-    "GetConnectorsResponse"
-    "fixture/GetConnectorsResponse.proto"
-    sms
-    (Proxy :: Proxy GetConnectors)
-
-responseGetReplicationJobs :: GetReplicationJobsResponse -> TestTree
-responseGetReplicationJobs = res
-    "GetReplicationJobsResponse"
-    "fixture/GetReplicationJobsResponse.proto"
-    sms
-    (Proxy :: Proxy GetReplicationJobs)
-
-responseDisassociateConnector :: DisassociateConnectorResponse -> TestTree
-responseDisassociateConnector = res
-    "DisassociateConnectorResponse"
-    "fixture/DisassociateConnectorResponse.proto"
-    sms
-    (Proxy :: Proxy DisassociateConnector)
-
-responseCreateReplicationJob :: CreateReplicationJobResponse -> TestTree
-responseCreateReplicationJob = res
-    "CreateReplicationJobResponse"
-    "fixture/CreateReplicationJobResponse.proto"
-    sms
-    (Proxy :: Proxy CreateReplicationJob)
-
-responseUpdateReplicationJob :: UpdateReplicationJobResponse -> TestTree
-responseUpdateReplicationJob = res
-    "UpdateReplicationJobResponse"
-    "fixture/UpdateReplicationJobResponse.proto"
-    sms
-    (Proxy :: Proxy UpdateReplicationJob)
-
-responseDeleteReplicationJob :: DeleteReplicationJobResponse -> TestTree
-responseDeleteReplicationJob = res
-    "DeleteReplicationJobResponse"
-    "fixture/DeleteReplicationJobResponse.proto"
-    sms
-    (Proxy :: Proxy DeleteReplicationJob)
-
-responseStartOnDemandReplicationRun :: StartOnDemandReplicationRunResponse -> TestTree
-responseStartOnDemandReplicationRun = res
-    "StartOnDemandReplicationRunResponse"
-    "fixture/StartOnDemandReplicationRunResponse.proto"
-    sms
-    (Proxy :: Proxy StartOnDemandReplicationRun)
diff --git a/test/Test/AWS/SMS.hs b/test/Test/AWS/SMS.hs
deleted file mode 100644
--- a/test/Test/AWS/SMS.hs
+++ /dev/null
@@ -1,20 +0,0 @@
--- |
--- Module      : Test.AWS.SMS
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.SMS
-    ( tests
-    , fixtures
-    ) where
-
-import Test.Tasty (TestTree)
-
-tests :: [TestTree]
-tests = []
-
-fixtures :: [TestTree]
-fixtures = []
diff --git a/test/Test/AWS/SMS/Internal.hs b/test/Test/AWS/SMS/Internal.hs
deleted file mode 100644
--- a/test/Test/AWS/SMS/Internal.hs
+++ /dev/null
@@ -1,9 +0,0 @@
--- |
--- Module      : Test.AWS.SMS.Internal
--- Copyright   : (c) 2013-2018 Brendan Hay
--- License     : Mozilla Public License, v. 2.0.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : auto-generated
--- Portability : non-portable (GHC extensions)
---
-module Test.AWS.SMS.Internal where
diff --git a/test/Test/Amazonka/Gen/SMS.hs b/test/Test/Amazonka/Gen/SMS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/Gen/SMS.hs
@@ -0,0 +1,738 @@
+{-# 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.SMS
+-- 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.SMS where
+
+import Amazonka.SMS
+import qualified Data.Proxy as Proxy
+import Test.Amazonka.Fixture
+import Test.Amazonka.Prelude
+import Test.Amazonka.SMS.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"
+--         [ requestCreateApp $
+--             newCreateApp
+--
+--         , requestCreateReplicationJob $
+--             newCreateReplicationJob
+--
+--         , requestDeleteApp $
+--             newDeleteApp
+--
+--         , requestDeleteAppLaunchConfiguration $
+--             newDeleteAppLaunchConfiguration
+--
+--         , requestDeleteAppReplicationConfiguration $
+--             newDeleteAppReplicationConfiguration
+--
+--         , requestDeleteAppValidationConfiguration $
+--             newDeleteAppValidationConfiguration
+--
+--         , requestDeleteReplicationJob $
+--             newDeleteReplicationJob
+--
+--         , requestDeleteServerCatalog $
+--             newDeleteServerCatalog
+--
+--         , requestDisassociateConnector $
+--             newDisassociateConnector
+--
+--         , requestGenerateChangeSet $
+--             newGenerateChangeSet
+--
+--         , requestGenerateTemplate $
+--             newGenerateTemplate
+--
+--         , requestGetApp $
+--             newGetApp
+--
+--         , requestGetAppLaunchConfiguration $
+--             newGetAppLaunchConfiguration
+--
+--         , requestGetAppReplicationConfiguration $
+--             newGetAppReplicationConfiguration
+--
+--         , requestGetAppValidationConfiguration $
+--             newGetAppValidationConfiguration
+--
+--         , requestGetAppValidationOutput $
+--             newGetAppValidationOutput
+--
+--         , requestGetConnectors $
+--             newGetConnectors
+--
+--         , requestGetReplicationJobs $
+--             newGetReplicationJobs
+--
+--         , requestGetReplicationRuns $
+--             newGetReplicationRuns
+--
+--         , requestGetServers $
+--             newGetServers
+--
+--         , requestImportAppCatalog $
+--             newImportAppCatalog
+--
+--         , requestImportServerCatalog $
+--             newImportServerCatalog
+--
+--         , requestLaunchApp $
+--             newLaunchApp
+--
+--         , requestListApps $
+--             newListApps
+--
+--         , requestNotifyAppValidationOutput $
+--             newNotifyAppValidationOutput
+--
+--         , requestPutAppLaunchConfiguration $
+--             newPutAppLaunchConfiguration
+--
+--         , requestPutAppReplicationConfiguration $
+--             newPutAppReplicationConfiguration
+--
+--         , requestPutAppValidationConfiguration $
+--             newPutAppValidationConfiguration
+--
+--         , requestStartAppReplication $
+--             newStartAppReplication
+--
+--         , requestStartOnDemandAppReplication $
+--             newStartOnDemandAppReplication
+--
+--         , requestStartOnDemandReplicationRun $
+--             newStartOnDemandReplicationRun
+--
+--         , requestStopAppReplication $
+--             newStopAppReplication
+--
+--         , requestTerminateApp $
+--             newTerminateApp
+--
+--         , requestUpdateApp $
+--             newUpdateApp
+--
+--         , requestUpdateReplicationJob $
+--             newUpdateReplicationJob
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseCreateApp $
+--             newCreateAppResponse
+--
+--         , responseCreateReplicationJob $
+--             newCreateReplicationJobResponse
+--
+--         , responseDeleteApp $
+--             newDeleteAppResponse
+--
+--         , responseDeleteAppLaunchConfiguration $
+--             newDeleteAppLaunchConfigurationResponse
+--
+--         , responseDeleteAppReplicationConfiguration $
+--             newDeleteAppReplicationConfigurationResponse
+--
+--         , responseDeleteAppValidationConfiguration $
+--             newDeleteAppValidationConfigurationResponse
+--
+--         , responseDeleteReplicationJob $
+--             newDeleteReplicationJobResponse
+--
+--         , responseDeleteServerCatalog $
+--             newDeleteServerCatalogResponse
+--
+--         , responseDisassociateConnector $
+--             newDisassociateConnectorResponse
+--
+--         , responseGenerateChangeSet $
+--             newGenerateChangeSetResponse
+--
+--         , responseGenerateTemplate $
+--             newGenerateTemplateResponse
+--
+--         , responseGetApp $
+--             newGetAppResponse
+--
+--         , responseGetAppLaunchConfiguration $
+--             newGetAppLaunchConfigurationResponse
+--
+--         , responseGetAppReplicationConfiguration $
+--             newGetAppReplicationConfigurationResponse
+--
+--         , responseGetAppValidationConfiguration $
+--             newGetAppValidationConfigurationResponse
+--
+--         , responseGetAppValidationOutput $
+--             newGetAppValidationOutputResponse
+--
+--         , responseGetConnectors $
+--             newGetConnectorsResponse
+--
+--         , responseGetReplicationJobs $
+--             newGetReplicationJobsResponse
+--
+--         , responseGetReplicationRuns $
+--             newGetReplicationRunsResponse
+--
+--         , responseGetServers $
+--             newGetServersResponse
+--
+--         , responseImportAppCatalog $
+--             newImportAppCatalogResponse
+--
+--         , responseImportServerCatalog $
+--             newImportServerCatalogResponse
+--
+--         , responseLaunchApp $
+--             newLaunchAppResponse
+--
+--         , responseListApps $
+--             newListAppsResponse
+--
+--         , responseNotifyAppValidationOutput $
+--             newNotifyAppValidationOutputResponse
+--
+--         , responsePutAppLaunchConfiguration $
+--             newPutAppLaunchConfigurationResponse
+--
+--         , responsePutAppReplicationConfiguration $
+--             newPutAppReplicationConfigurationResponse
+--
+--         , responsePutAppValidationConfiguration $
+--             newPutAppValidationConfigurationResponse
+--
+--         , responseStartAppReplication $
+--             newStartAppReplicationResponse
+--
+--         , responseStartOnDemandAppReplication $
+--             newStartOnDemandAppReplicationResponse
+--
+--         , responseStartOnDemandReplicationRun $
+--             newStartOnDemandReplicationRunResponse
+--
+--         , responseStopAppReplication $
+--             newStopAppReplicationResponse
+--
+--         , responseTerminateApp $
+--             newTerminateAppResponse
+--
+--         , responseUpdateApp $
+--             newUpdateAppResponse
+--
+--         , responseUpdateReplicationJob $
+--             newUpdateReplicationJobResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestCreateApp :: CreateApp -> TestTree
+requestCreateApp =
+  req
+    "CreateApp"
+    "fixture/CreateApp.yaml"
+
+requestCreateReplicationJob :: CreateReplicationJob -> TestTree
+requestCreateReplicationJob =
+  req
+    "CreateReplicationJob"
+    "fixture/CreateReplicationJob.yaml"
+
+requestDeleteApp :: DeleteApp -> TestTree
+requestDeleteApp =
+  req
+    "DeleteApp"
+    "fixture/DeleteApp.yaml"
+
+requestDeleteAppLaunchConfiguration :: DeleteAppLaunchConfiguration -> TestTree
+requestDeleteAppLaunchConfiguration =
+  req
+    "DeleteAppLaunchConfiguration"
+    "fixture/DeleteAppLaunchConfiguration.yaml"
+
+requestDeleteAppReplicationConfiguration :: DeleteAppReplicationConfiguration -> TestTree
+requestDeleteAppReplicationConfiguration =
+  req
+    "DeleteAppReplicationConfiguration"
+    "fixture/DeleteAppReplicationConfiguration.yaml"
+
+requestDeleteAppValidationConfiguration :: DeleteAppValidationConfiguration -> TestTree
+requestDeleteAppValidationConfiguration =
+  req
+    "DeleteAppValidationConfiguration"
+    "fixture/DeleteAppValidationConfiguration.yaml"
+
+requestDeleteReplicationJob :: DeleteReplicationJob -> TestTree
+requestDeleteReplicationJob =
+  req
+    "DeleteReplicationJob"
+    "fixture/DeleteReplicationJob.yaml"
+
+requestDeleteServerCatalog :: DeleteServerCatalog -> TestTree
+requestDeleteServerCatalog =
+  req
+    "DeleteServerCatalog"
+    "fixture/DeleteServerCatalog.yaml"
+
+requestDisassociateConnector :: DisassociateConnector -> TestTree
+requestDisassociateConnector =
+  req
+    "DisassociateConnector"
+    "fixture/DisassociateConnector.yaml"
+
+requestGenerateChangeSet :: GenerateChangeSet -> TestTree
+requestGenerateChangeSet =
+  req
+    "GenerateChangeSet"
+    "fixture/GenerateChangeSet.yaml"
+
+requestGenerateTemplate :: GenerateTemplate -> TestTree
+requestGenerateTemplate =
+  req
+    "GenerateTemplate"
+    "fixture/GenerateTemplate.yaml"
+
+requestGetApp :: GetApp -> TestTree
+requestGetApp =
+  req
+    "GetApp"
+    "fixture/GetApp.yaml"
+
+requestGetAppLaunchConfiguration :: GetAppLaunchConfiguration -> TestTree
+requestGetAppLaunchConfiguration =
+  req
+    "GetAppLaunchConfiguration"
+    "fixture/GetAppLaunchConfiguration.yaml"
+
+requestGetAppReplicationConfiguration :: GetAppReplicationConfiguration -> TestTree
+requestGetAppReplicationConfiguration =
+  req
+    "GetAppReplicationConfiguration"
+    "fixture/GetAppReplicationConfiguration.yaml"
+
+requestGetAppValidationConfiguration :: GetAppValidationConfiguration -> TestTree
+requestGetAppValidationConfiguration =
+  req
+    "GetAppValidationConfiguration"
+    "fixture/GetAppValidationConfiguration.yaml"
+
+requestGetAppValidationOutput :: GetAppValidationOutput -> TestTree
+requestGetAppValidationOutput =
+  req
+    "GetAppValidationOutput"
+    "fixture/GetAppValidationOutput.yaml"
+
+requestGetConnectors :: GetConnectors -> TestTree
+requestGetConnectors =
+  req
+    "GetConnectors"
+    "fixture/GetConnectors.yaml"
+
+requestGetReplicationJobs :: GetReplicationJobs -> TestTree
+requestGetReplicationJobs =
+  req
+    "GetReplicationJobs"
+    "fixture/GetReplicationJobs.yaml"
+
+requestGetReplicationRuns :: GetReplicationRuns -> TestTree
+requestGetReplicationRuns =
+  req
+    "GetReplicationRuns"
+    "fixture/GetReplicationRuns.yaml"
+
+requestGetServers :: GetServers -> TestTree
+requestGetServers =
+  req
+    "GetServers"
+    "fixture/GetServers.yaml"
+
+requestImportAppCatalog :: ImportAppCatalog -> TestTree
+requestImportAppCatalog =
+  req
+    "ImportAppCatalog"
+    "fixture/ImportAppCatalog.yaml"
+
+requestImportServerCatalog :: ImportServerCatalog -> TestTree
+requestImportServerCatalog =
+  req
+    "ImportServerCatalog"
+    "fixture/ImportServerCatalog.yaml"
+
+requestLaunchApp :: LaunchApp -> TestTree
+requestLaunchApp =
+  req
+    "LaunchApp"
+    "fixture/LaunchApp.yaml"
+
+requestListApps :: ListApps -> TestTree
+requestListApps =
+  req
+    "ListApps"
+    "fixture/ListApps.yaml"
+
+requestNotifyAppValidationOutput :: NotifyAppValidationOutput -> TestTree
+requestNotifyAppValidationOutput =
+  req
+    "NotifyAppValidationOutput"
+    "fixture/NotifyAppValidationOutput.yaml"
+
+requestPutAppLaunchConfiguration :: PutAppLaunchConfiguration -> TestTree
+requestPutAppLaunchConfiguration =
+  req
+    "PutAppLaunchConfiguration"
+    "fixture/PutAppLaunchConfiguration.yaml"
+
+requestPutAppReplicationConfiguration :: PutAppReplicationConfiguration -> TestTree
+requestPutAppReplicationConfiguration =
+  req
+    "PutAppReplicationConfiguration"
+    "fixture/PutAppReplicationConfiguration.yaml"
+
+requestPutAppValidationConfiguration :: PutAppValidationConfiguration -> TestTree
+requestPutAppValidationConfiguration =
+  req
+    "PutAppValidationConfiguration"
+    "fixture/PutAppValidationConfiguration.yaml"
+
+requestStartAppReplication :: StartAppReplication -> TestTree
+requestStartAppReplication =
+  req
+    "StartAppReplication"
+    "fixture/StartAppReplication.yaml"
+
+requestStartOnDemandAppReplication :: StartOnDemandAppReplication -> TestTree
+requestStartOnDemandAppReplication =
+  req
+    "StartOnDemandAppReplication"
+    "fixture/StartOnDemandAppReplication.yaml"
+
+requestStartOnDemandReplicationRun :: StartOnDemandReplicationRun -> TestTree
+requestStartOnDemandReplicationRun =
+  req
+    "StartOnDemandReplicationRun"
+    "fixture/StartOnDemandReplicationRun.yaml"
+
+requestStopAppReplication :: StopAppReplication -> TestTree
+requestStopAppReplication =
+  req
+    "StopAppReplication"
+    "fixture/StopAppReplication.yaml"
+
+requestTerminateApp :: TerminateApp -> TestTree
+requestTerminateApp =
+  req
+    "TerminateApp"
+    "fixture/TerminateApp.yaml"
+
+requestUpdateApp :: UpdateApp -> TestTree
+requestUpdateApp =
+  req
+    "UpdateApp"
+    "fixture/UpdateApp.yaml"
+
+requestUpdateReplicationJob :: UpdateReplicationJob -> TestTree
+requestUpdateReplicationJob =
+  req
+    "UpdateReplicationJob"
+    "fixture/UpdateReplicationJob.yaml"
+
+-- Responses
+
+responseCreateApp :: CreateAppResponse -> TestTree
+responseCreateApp =
+  res
+    "CreateAppResponse"
+    "fixture/CreateAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateApp)
+
+responseCreateReplicationJob :: CreateReplicationJobResponse -> TestTree
+responseCreateReplicationJob =
+  res
+    "CreateReplicationJobResponse"
+    "fixture/CreateReplicationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy CreateReplicationJob)
+
+responseDeleteApp :: DeleteAppResponse -> TestTree
+responseDeleteApp =
+  res
+    "DeleteAppResponse"
+    "fixture/DeleteAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteApp)
+
+responseDeleteAppLaunchConfiguration :: DeleteAppLaunchConfigurationResponse -> TestTree
+responseDeleteAppLaunchConfiguration =
+  res
+    "DeleteAppLaunchConfigurationResponse"
+    "fixture/DeleteAppLaunchConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAppLaunchConfiguration)
+
+responseDeleteAppReplicationConfiguration :: DeleteAppReplicationConfigurationResponse -> TestTree
+responseDeleteAppReplicationConfiguration =
+  res
+    "DeleteAppReplicationConfigurationResponse"
+    "fixture/DeleteAppReplicationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAppReplicationConfiguration)
+
+responseDeleteAppValidationConfiguration :: DeleteAppValidationConfigurationResponse -> TestTree
+responseDeleteAppValidationConfiguration =
+  res
+    "DeleteAppValidationConfigurationResponse"
+    "fixture/DeleteAppValidationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteAppValidationConfiguration)
+
+responseDeleteReplicationJob :: DeleteReplicationJobResponse -> TestTree
+responseDeleteReplicationJob =
+  res
+    "DeleteReplicationJobResponse"
+    "fixture/DeleteReplicationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteReplicationJob)
+
+responseDeleteServerCatalog :: DeleteServerCatalogResponse -> TestTree
+responseDeleteServerCatalog =
+  res
+    "DeleteServerCatalogResponse"
+    "fixture/DeleteServerCatalogResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DeleteServerCatalog)
+
+responseDisassociateConnector :: DisassociateConnectorResponse -> TestTree
+responseDisassociateConnector =
+  res
+    "DisassociateConnectorResponse"
+    "fixture/DisassociateConnectorResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy DisassociateConnector)
+
+responseGenerateChangeSet :: GenerateChangeSetResponse -> TestTree
+responseGenerateChangeSet =
+  res
+    "GenerateChangeSetResponse"
+    "fixture/GenerateChangeSetResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GenerateChangeSet)
+
+responseGenerateTemplate :: GenerateTemplateResponse -> TestTree
+responseGenerateTemplate =
+  res
+    "GenerateTemplateResponse"
+    "fixture/GenerateTemplateResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GenerateTemplate)
+
+responseGetApp :: GetAppResponse -> TestTree
+responseGetApp =
+  res
+    "GetAppResponse"
+    "fixture/GetAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetApp)
+
+responseGetAppLaunchConfiguration :: GetAppLaunchConfigurationResponse -> TestTree
+responseGetAppLaunchConfiguration =
+  res
+    "GetAppLaunchConfigurationResponse"
+    "fixture/GetAppLaunchConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAppLaunchConfiguration)
+
+responseGetAppReplicationConfiguration :: GetAppReplicationConfigurationResponse -> TestTree
+responseGetAppReplicationConfiguration =
+  res
+    "GetAppReplicationConfigurationResponse"
+    "fixture/GetAppReplicationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAppReplicationConfiguration)
+
+responseGetAppValidationConfiguration :: GetAppValidationConfigurationResponse -> TestTree
+responseGetAppValidationConfiguration =
+  res
+    "GetAppValidationConfigurationResponse"
+    "fixture/GetAppValidationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAppValidationConfiguration)
+
+responseGetAppValidationOutput :: GetAppValidationOutputResponse -> TestTree
+responseGetAppValidationOutput =
+  res
+    "GetAppValidationOutputResponse"
+    "fixture/GetAppValidationOutputResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetAppValidationOutput)
+
+responseGetConnectors :: GetConnectorsResponse -> TestTree
+responseGetConnectors =
+  res
+    "GetConnectorsResponse"
+    "fixture/GetConnectorsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetConnectors)
+
+responseGetReplicationJobs :: GetReplicationJobsResponse -> TestTree
+responseGetReplicationJobs =
+  res
+    "GetReplicationJobsResponse"
+    "fixture/GetReplicationJobsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetReplicationJobs)
+
+responseGetReplicationRuns :: GetReplicationRunsResponse -> TestTree
+responseGetReplicationRuns =
+  res
+    "GetReplicationRunsResponse"
+    "fixture/GetReplicationRunsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetReplicationRuns)
+
+responseGetServers :: GetServersResponse -> TestTree
+responseGetServers =
+  res
+    "GetServersResponse"
+    "fixture/GetServersResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy GetServers)
+
+responseImportAppCatalog :: ImportAppCatalogResponse -> TestTree
+responseImportAppCatalog =
+  res
+    "ImportAppCatalogResponse"
+    "fixture/ImportAppCatalogResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportAppCatalog)
+
+responseImportServerCatalog :: ImportServerCatalogResponse -> TestTree
+responseImportServerCatalog =
+  res
+    "ImportServerCatalogResponse"
+    "fixture/ImportServerCatalogResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ImportServerCatalog)
+
+responseLaunchApp :: LaunchAppResponse -> TestTree
+responseLaunchApp =
+  res
+    "LaunchAppResponse"
+    "fixture/LaunchAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy LaunchApp)
+
+responseListApps :: ListAppsResponse -> TestTree
+responseListApps =
+  res
+    "ListAppsResponse"
+    "fixture/ListAppsResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy ListApps)
+
+responseNotifyAppValidationOutput :: NotifyAppValidationOutputResponse -> TestTree
+responseNotifyAppValidationOutput =
+  res
+    "NotifyAppValidationOutputResponse"
+    "fixture/NotifyAppValidationOutputResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy NotifyAppValidationOutput)
+
+responsePutAppLaunchConfiguration :: PutAppLaunchConfigurationResponse -> TestTree
+responsePutAppLaunchConfiguration =
+  res
+    "PutAppLaunchConfigurationResponse"
+    "fixture/PutAppLaunchConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAppLaunchConfiguration)
+
+responsePutAppReplicationConfiguration :: PutAppReplicationConfigurationResponse -> TestTree
+responsePutAppReplicationConfiguration =
+  res
+    "PutAppReplicationConfigurationResponse"
+    "fixture/PutAppReplicationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAppReplicationConfiguration)
+
+responsePutAppValidationConfiguration :: PutAppValidationConfigurationResponse -> TestTree
+responsePutAppValidationConfiguration =
+  res
+    "PutAppValidationConfigurationResponse"
+    "fixture/PutAppValidationConfigurationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy PutAppValidationConfiguration)
+
+responseStartAppReplication :: StartAppReplicationResponse -> TestTree
+responseStartAppReplication =
+  res
+    "StartAppReplicationResponse"
+    "fixture/StartAppReplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartAppReplication)
+
+responseStartOnDemandAppReplication :: StartOnDemandAppReplicationResponse -> TestTree
+responseStartOnDemandAppReplication =
+  res
+    "StartOnDemandAppReplicationResponse"
+    "fixture/StartOnDemandAppReplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartOnDemandAppReplication)
+
+responseStartOnDemandReplicationRun :: StartOnDemandReplicationRunResponse -> TestTree
+responseStartOnDemandReplicationRun =
+  res
+    "StartOnDemandReplicationRunResponse"
+    "fixture/StartOnDemandReplicationRunResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StartOnDemandReplicationRun)
+
+responseStopAppReplication :: StopAppReplicationResponse -> TestTree
+responseStopAppReplication =
+  res
+    "StopAppReplicationResponse"
+    "fixture/StopAppReplicationResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy StopAppReplication)
+
+responseTerminateApp :: TerminateAppResponse -> TestTree
+responseTerminateApp =
+  res
+    "TerminateAppResponse"
+    "fixture/TerminateAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy TerminateApp)
+
+responseUpdateApp :: UpdateAppResponse -> TestTree
+responseUpdateApp =
+  res
+    "UpdateAppResponse"
+    "fixture/UpdateAppResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateApp)
+
+responseUpdateReplicationJob :: UpdateReplicationJobResponse -> TestTree
+responseUpdateReplicationJob =
+  res
+    "UpdateReplicationJobResponse"
+    "fixture/UpdateReplicationJobResponse.proto"
+    defaultService
+    (Proxy.Proxy :: Proxy.Proxy UpdateReplicationJob)
diff --git a/test/Test/Amazonka/SMS.hs b/test/Test/Amazonka/SMS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/SMS.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.Amazonka.SMS
+-- 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.SMS
+  ( tests,
+    fixtures,
+  )
+where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/Amazonka/SMS/Internal.hs b/test/Test/Amazonka/SMS/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/Amazonka/SMS/Internal.hs
@@ -0,0 +1,8 @@
+-- |
+-- Module      : Test.Amazonka.SMS.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.SMS.Internal where
