diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,49 @@
+# Amazon Database Migration Service SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`1.4.0`
+
+
+## Description
+
+AWS Database Migration Service
+
+AWS Database Migration Service (AWS DMS) can migrate your data to and
+from the most widely used commercial and open-source databases such as
+Oracle, PostgreSQL, Microsoft SQL Server, MariaDB, Amazon Aurora, and
+MySQL. The service supports homogeneous migrations such as Oracle to
+Oracle, as well as heterogeneous migrations between different database
+platforms, such as Oracle to MySQL or SQL Server to PostgreSQL.
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-dms)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount 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
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-dms` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/amazonka-dms.cabal b/amazonka-dms.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-dms.cabal
@@ -0,0 +1,117 @@
+name:                  amazonka-dms
+version:               1.4.0
+synopsis:              Amazon Database Migration Service SDK.
+homepage:              https://github.com/brendanhay/amazonka
+bug-reports:           https://github.com/brendanhay/amazonka/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2013-2016 Brendan Hay
+category:              Network, AWS, Cloud, Distributed Computing
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md fixture/*.yaml fixture/*.proto
+description:
+    AWS Database Migration Service
+
+    AWS Database Migration Service (AWS DMS) can migrate your data to and
+    from the most widely used commercial and open-source databases such as
+    Oracle, PostgreSQL, Microsoft SQL Server, MariaDB, Amazon Aurora, and
+    MySQL. The service supports homogeneous migrations such as Oracle to
+    Oracle, as well as heterogeneous migrations between different database
+    platforms, such as Oracle to MySQL or SQL Server to PostgreSQL.
+    .
+    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 and sending requests.
+    .
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount 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.DMS" or <https://aws.amazon.com/documentation/ the AWS Documentation>
+    to get started.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/amazonka.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.AWS.DMS
+        , Network.AWS.DMS.AddTagsToResource
+        , Network.AWS.DMS.CreateEndpoint
+        , Network.AWS.DMS.CreateReplicationInstance
+        , Network.AWS.DMS.CreateReplicationSubnetGroup
+        , Network.AWS.DMS.CreateReplicationTask
+        , Network.AWS.DMS.DeleteEndpoint
+        , Network.AWS.DMS.DeleteReplicationInstance
+        , Network.AWS.DMS.DeleteReplicationSubnetGroup
+        , Network.AWS.DMS.DeleteReplicationTask
+        , Network.AWS.DMS.DescribeAccountAttributes
+        , Network.AWS.DMS.DescribeConnections
+        , Network.AWS.DMS.DescribeEndpointTypes
+        , Network.AWS.DMS.DescribeEndpoints
+        , Network.AWS.DMS.DescribeOrderableReplicationInstances
+        , Network.AWS.DMS.DescribeRefreshSchemasStatus
+        , Network.AWS.DMS.DescribeReplicationInstances
+        , Network.AWS.DMS.DescribeReplicationSubnetGroups
+        , Network.AWS.DMS.DescribeReplicationTasks
+        , Network.AWS.DMS.DescribeSchemas
+        , Network.AWS.DMS.DescribeTableStatistics
+        , Network.AWS.DMS.ListTagsForResource
+        , Network.AWS.DMS.ModifyEndpoint
+        , Network.AWS.DMS.ModifyReplicationInstance
+        , Network.AWS.DMS.ModifyReplicationSubnetGroup
+        , Network.AWS.DMS.RefreshSchemas
+        , Network.AWS.DMS.RemoveTagsFromResource
+        , Network.AWS.DMS.StartReplicationTask
+        , Network.AWS.DMS.StopReplicationTask
+        , Network.AWS.DMS.TestConnection
+        , Network.AWS.DMS.Types
+        , Network.AWS.DMS.Waiters
+
+    other-modules:
+          Network.AWS.DMS.Types.Product
+        , Network.AWS.DMS.Types.Sum
+
+    build-depends:
+          amazonka-core == 1.4.0.*
+        , base          >= 4.7     && < 5
+
+test-suite amazonka-dms-test
+    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.DMS
+        , Test.AWS.Gen.DMS
+        , Test.AWS.DMS.Internal
+
+    build-depends:
+          amazonka-core == 1.4.0.*
+        , amazonka-test == 1.4.0.*
+        , amazonka-dms == 1.4.0.*
+        , base
+        , bytestring
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/fixture/AddTagsToResource.yaml b/fixture/AddTagsToResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/AddTagsToResource.yaml
diff --git a/fixture/AddTagsToResourceResponse.proto b/fixture/AddTagsToResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/AddTagsToResourceResponse.proto
diff --git a/fixture/CreateEndpoint.yaml b/fixture/CreateEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEndpoint.yaml
diff --git a/fixture/CreateEndpointResponse.proto b/fixture/CreateEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateEndpointResponse.proto
diff --git a/fixture/CreateReplicationInstance.yaml b/fixture/CreateReplicationInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReplicationInstance.yaml
diff --git a/fixture/CreateReplicationInstanceResponse.proto b/fixture/CreateReplicationInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReplicationInstanceResponse.proto
diff --git a/fixture/CreateReplicationSubnetGroup.yaml b/fixture/CreateReplicationSubnetGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReplicationSubnetGroup.yaml
diff --git a/fixture/CreateReplicationSubnetGroupResponse.proto b/fixture/CreateReplicationSubnetGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReplicationSubnetGroupResponse.proto
diff --git a/fixture/CreateReplicationTask.yaml b/fixture/CreateReplicationTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReplicationTask.yaml
diff --git a/fixture/CreateReplicationTaskResponse.proto b/fixture/CreateReplicationTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateReplicationTaskResponse.proto
diff --git a/fixture/DeleteEndpoint.yaml b/fixture/DeleteEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEndpoint.yaml
diff --git a/fixture/DeleteEndpointResponse.proto b/fixture/DeleteEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteEndpointResponse.proto
diff --git a/fixture/DeleteReplicationInstance.yaml b/fixture/DeleteReplicationInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteReplicationInstance.yaml
diff --git a/fixture/DeleteReplicationInstanceResponse.proto b/fixture/DeleteReplicationInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteReplicationInstanceResponse.proto
diff --git a/fixture/DeleteReplicationSubnetGroup.yaml b/fixture/DeleteReplicationSubnetGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteReplicationSubnetGroup.yaml
diff --git a/fixture/DeleteReplicationSubnetGroupResponse.proto b/fixture/DeleteReplicationSubnetGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteReplicationSubnetGroupResponse.proto
diff --git a/fixture/DeleteReplicationTask.yaml b/fixture/DeleteReplicationTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteReplicationTask.yaml
diff --git a/fixture/DeleteReplicationTaskResponse.proto b/fixture/DeleteReplicationTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteReplicationTaskResponse.proto
diff --git a/fixture/DescribeAccountAttributes.yaml b/fixture/DescribeAccountAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountAttributes.yaml
diff --git a/fixture/DescribeAccountAttributesResponse.proto b/fixture/DescribeAccountAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAccountAttributesResponse.proto
diff --git a/fixture/DescribeConnections.yaml b/fixture/DescribeConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConnections.yaml
diff --git a/fixture/DescribeConnectionsResponse.proto b/fixture/DescribeConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeConnectionsResponse.proto
diff --git a/fixture/DescribeEndpointTypes.yaml b/fixture/DescribeEndpointTypes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEndpointTypes.yaml
diff --git a/fixture/DescribeEndpointTypesResponse.proto b/fixture/DescribeEndpointTypesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEndpointTypesResponse.proto
diff --git a/fixture/DescribeEndpoints.yaml b/fixture/DescribeEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEndpoints.yaml
diff --git a/fixture/DescribeEndpointsResponse.proto b/fixture/DescribeEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEndpointsResponse.proto
diff --git a/fixture/DescribeOrderableReplicationInstances.yaml b/fixture/DescribeOrderableReplicationInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOrderableReplicationInstances.yaml
diff --git a/fixture/DescribeOrderableReplicationInstancesResponse.proto b/fixture/DescribeOrderableReplicationInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeOrderableReplicationInstancesResponse.proto
diff --git a/fixture/DescribeRefreshSchemasStatus.yaml b/fixture/DescribeRefreshSchemasStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRefreshSchemasStatus.yaml
diff --git a/fixture/DescribeRefreshSchemasStatusResponse.proto b/fixture/DescribeRefreshSchemasStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeRefreshSchemasStatusResponse.proto
diff --git a/fixture/DescribeReplicationInstances.yaml b/fixture/DescribeReplicationInstances.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReplicationInstances.yaml
diff --git a/fixture/DescribeReplicationInstancesResponse.proto b/fixture/DescribeReplicationInstancesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReplicationInstancesResponse.proto
diff --git a/fixture/DescribeReplicationSubnetGroups.yaml b/fixture/DescribeReplicationSubnetGroups.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReplicationSubnetGroups.yaml
diff --git a/fixture/DescribeReplicationSubnetGroupsResponse.proto b/fixture/DescribeReplicationSubnetGroupsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReplicationSubnetGroupsResponse.proto
diff --git a/fixture/DescribeReplicationTasks.yaml b/fixture/DescribeReplicationTasks.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReplicationTasks.yaml
diff --git a/fixture/DescribeReplicationTasksResponse.proto b/fixture/DescribeReplicationTasksResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeReplicationTasksResponse.proto
diff --git a/fixture/DescribeSchemas.yaml b/fixture/DescribeSchemas.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSchemas.yaml
diff --git a/fixture/DescribeSchemasResponse.proto b/fixture/DescribeSchemasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeSchemasResponse.proto
diff --git a/fixture/DescribeTableStatistics.yaml b/fixture/DescribeTableStatistics.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTableStatistics.yaml
diff --git a/fixture/DescribeTableStatisticsResponse.proto b/fixture/DescribeTableStatisticsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeTableStatisticsResponse.proto
diff --git a/fixture/ListTagsForResource.yaml b/fixture/ListTagsForResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResource.yaml
diff --git a/fixture/ListTagsForResourceResponse.proto b/fixture/ListTagsForResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListTagsForResourceResponse.proto
diff --git a/fixture/ModifyEndpoint.yaml b/fixture/ModifyEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyEndpoint.yaml
diff --git a/fixture/ModifyEndpointResponse.proto b/fixture/ModifyEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyEndpointResponse.proto
diff --git a/fixture/ModifyReplicationInstance.yaml b/fixture/ModifyReplicationInstance.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyReplicationInstance.yaml
diff --git a/fixture/ModifyReplicationInstanceResponse.proto b/fixture/ModifyReplicationInstanceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyReplicationInstanceResponse.proto
diff --git a/fixture/ModifyReplicationSubnetGroup.yaml b/fixture/ModifyReplicationSubnetGroup.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyReplicationSubnetGroup.yaml
diff --git a/fixture/ModifyReplicationSubnetGroupResponse.proto b/fixture/ModifyReplicationSubnetGroupResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ModifyReplicationSubnetGroupResponse.proto
diff --git a/fixture/RefreshSchemas.yaml b/fixture/RefreshSchemas.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RefreshSchemas.yaml
diff --git a/fixture/RefreshSchemasResponse.proto b/fixture/RefreshSchemasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RefreshSchemasResponse.proto
diff --git a/fixture/RemoveTagsFromResource.yaml b/fixture/RemoveTagsFromResource.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveTagsFromResource.yaml
diff --git a/fixture/RemoveTagsFromResourceResponse.proto b/fixture/RemoveTagsFromResourceResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RemoveTagsFromResourceResponse.proto
diff --git a/fixture/StartReplicationTask.yaml b/fixture/StartReplicationTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartReplicationTask.yaml
diff --git a/fixture/StartReplicationTaskResponse.proto b/fixture/StartReplicationTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartReplicationTaskResponse.proto
diff --git a/fixture/StopReplicationTask.yaml b/fixture/StopReplicationTask.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopReplicationTask.yaml
diff --git a/fixture/StopReplicationTaskResponse.proto b/fixture/StopReplicationTaskResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopReplicationTaskResponse.proto
diff --git a/fixture/TestConnection.yaml b/fixture/TestConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/TestConnection.yaml
diff --git a/fixture/TestConnectionResponse.proto b/fixture/TestConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/TestConnectionResponse.proto
diff --git a/gen/Network/AWS/DMS.hs b/gen/Network/AWS/DMS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS.hs
@@ -0,0 +1,393 @@
+{-# 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.DMS
+-- Copyright   : (c) 2013-2016 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)
+--
+-- AWS Database Migration Service
+--
+-- AWS Database Migration Service (AWS DMS) can migrate your data to and
+-- from the most widely used commercial and open-source databases such as
+-- Oracle, PostgreSQL, Microsoft SQL Server, MariaDB, Amazon Aurora, and
+-- MySQL. The service supports homogeneous migrations such as Oracle to
+-- Oracle, as well as heterogeneous migrations between different database
+-- platforms, such as Oracle to MySQL or SQL Server to PostgreSQL.
+module Network.AWS.DMS
+    (
+    -- * Service Configuration
+      dms
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidSubnet
+    , _InvalidSubnet
+
+    -- ** KMSKeyNotAccessibleFault
+    , _KMSKeyNotAccessibleFault
+
+    -- ** ReplicationSubnetGroupDoesNotCoverEnoughAZs
+    , _ReplicationSubnetGroupDoesNotCoverEnoughAZs
+
+    -- ** InvalidResourceStateFault
+    , _InvalidResourceStateFault
+
+    -- ** ResourceAlreadyExistsFault
+    , _ResourceAlreadyExistsFault
+
+    -- ** InsufficientResourceCapacityFault
+    , _InsufficientResourceCapacityFault
+
+    -- ** ResourceQuotaExceededFault
+    , _ResourceQuotaExceededFault
+
+    -- ** UpgradeDependencyFailureFault
+    , _UpgradeDependencyFailureFault
+
+    -- ** ResourceNotFoundFault
+    , _ResourceNotFoundFault
+
+    -- ** StorageQuotaExceededFault
+    , _StorageQuotaExceededFault
+
+    -- ** AccessDeniedFault
+    , _AccessDeniedFault
+
+    -- ** SubnetAlreadyInUse
+    , _SubnetAlreadyInUse
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** DeleteReplicationInstance
+    , module Network.AWS.DMS.DeleteReplicationInstance
+
+    -- ** CreateEndpoint
+    , module Network.AWS.DMS.CreateEndpoint
+
+    -- ** DescribeSchemas
+    , module Network.AWS.DMS.DescribeSchemas
+
+    -- ** DeleteEndpoint
+    , module Network.AWS.DMS.DeleteEndpoint
+
+    -- ** ListTagsForResource
+    , module Network.AWS.DMS.ListTagsForResource
+
+    -- ** DescribeEndpointTypes
+    , module Network.AWS.DMS.DescribeEndpointTypes
+
+    -- ** DeleteReplicationTask
+    , module Network.AWS.DMS.DeleteReplicationTask
+
+    -- ** TestConnection
+    , module Network.AWS.DMS.TestConnection
+
+    -- ** DescribeConnections
+    , module Network.AWS.DMS.DescribeConnections
+
+    -- ** RemoveTagsFromResource
+    , module Network.AWS.DMS.RemoveTagsFromResource
+
+    -- ** ModifyEndpoint
+    , module Network.AWS.DMS.ModifyEndpoint
+
+    -- ** DescribeTableStatistics
+    , module Network.AWS.DMS.DescribeTableStatistics
+
+    -- ** DescribeReplicationSubnetGroups
+    , module Network.AWS.DMS.DescribeReplicationSubnetGroups
+
+    -- ** StartReplicationTask
+    , module Network.AWS.DMS.StartReplicationTask
+
+    -- ** AddTagsToResource
+    , module Network.AWS.DMS.AddTagsToResource
+
+    -- ** CreateReplicationSubnetGroup
+    , module Network.AWS.DMS.CreateReplicationSubnetGroup
+
+    -- ** RefreshSchemas
+    , module Network.AWS.DMS.RefreshSchemas
+
+    -- ** DescribeReplicationTasks
+    , module Network.AWS.DMS.DescribeReplicationTasks
+
+    -- ** DescribeOrderableReplicationInstances
+    , module Network.AWS.DMS.DescribeOrderableReplicationInstances
+
+    -- ** CreateReplicationTask
+    , module Network.AWS.DMS.CreateReplicationTask
+
+    -- ** DescribeEndpoints
+    , module Network.AWS.DMS.DescribeEndpoints
+
+    -- ** ModifyReplicationInstance
+    , module Network.AWS.DMS.ModifyReplicationInstance
+
+    -- ** ModifyReplicationSubnetGroup
+    , module Network.AWS.DMS.ModifyReplicationSubnetGroup
+
+    -- ** DescribeAccountAttributes
+    , module Network.AWS.DMS.DescribeAccountAttributes
+
+    -- ** DescribeReplicationInstances
+    , module Network.AWS.DMS.DescribeReplicationInstances
+
+    -- ** DescribeRefreshSchemasStatus
+    , module Network.AWS.DMS.DescribeRefreshSchemasStatus
+
+    -- ** StopReplicationTask
+    , module Network.AWS.DMS.StopReplicationTask
+
+    -- ** CreateReplicationInstance
+    , module Network.AWS.DMS.CreateReplicationInstance
+
+    -- ** DeleteReplicationSubnetGroup
+    , module Network.AWS.DMS.DeleteReplicationSubnetGroup
+
+    -- * Types
+
+    -- ** MigrationTypeValue
+    , MigrationTypeValue (..)
+
+    -- ** RefreshSchemasStatusTypeValue
+    , RefreshSchemasStatusTypeValue (..)
+
+    -- ** ReplicationEndpointTypeValue
+    , ReplicationEndpointTypeValue (..)
+
+    -- ** StartReplicationTaskTypeValue
+    , StartReplicationTaskTypeValue (..)
+
+    -- ** AccountQuota
+    , AccountQuota
+    , accountQuota
+    , aqMax
+    , aqUsed
+    , aqAccountQuotaName
+
+    -- ** AvailabilityZone
+    , AvailabilityZone
+    , availabilityZone
+    , azName
+
+    -- ** Connection
+    , Connection
+    , connection
+    , cStatus
+    , cReplicationInstanceARN
+    , cEndpointIdentifier
+    , cReplicationInstanceIdentifier
+    , cEndpointARN
+    , cLastFailureMessage
+
+    -- ** Endpoint
+    , Endpoint
+    , endpoint
+    , eStatus
+    , eServerName
+    , eExtraConnectionAttributes
+    , eEndpointType
+    , eUsername
+    , eEngineName
+    , eKMSKeyId
+    , eDatabaseName
+    , eEndpointIdentifier
+    , eEndpointARN
+    , ePort
+
+    -- ** Filter
+    , Filter
+    , filter'
+    , fName
+    , fValues
+
+    -- ** OrderableReplicationInstance
+    , OrderableReplicationInstance
+    , orderableReplicationInstance
+    , oriEngineVersion
+    , oriMinAllocatedStorage
+    , oriIncludedAllocatedStorage
+    , oriMaxAllocatedStorage
+    , oriReplicationInstanceClass
+    , oriDefaultAllocatedStorage
+    , oriStorageType
+
+    -- ** RefreshSchemasStatus
+    , RefreshSchemasStatus
+    , refreshSchemasStatus
+    , rssStatus
+    , rssLastRefreshDate
+    , rssReplicationInstanceARN
+    , rssEndpointARN
+    , rssLastFailureMessage
+
+    -- ** ReplicationInstance
+    , ReplicationInstance
+    , replicationInstance
+    , riEngineVersion
+    , riPubliclyAccessible
+    , riAutoMinorVersionUpgrade
+    , riReplicationSubnetGroup
+    , riInstanceCreateTime
+    , riReplicationInstanceStatus
+    , riPreferredMaintenanceWindow
+    , riReplicationInstancePrivateIPAddress
+    , riKMSKeyId
+    , riAvailabilityZone
+    , riReplicationInstanceARN
+    , riAllocatedStorage
+    , riReplicationInstancePublicIPAddress
+    , riReplicationInstanceClass
+    , riReplicationInstanceIdentifier
+    , riPendingModifiedValues
+
+    -- ** ReplicationPendingModifiedValues
+    , ReplicationPendingModifiedValues
+    , replicationPendingModifiedValues
+    , rpmvEngineVersion
+    , rpmvAllocatedStorage
+    , rpmvReplicationInstanceClass
+
+    -- ** ReplicationSubnetGroup
+    , ReplicationSubnetGroup
+    , replicationSubnetGroup
+    , rsgVPCId
+    , rsgSubnets
+    , rsgReplicationSubnetGroupIdentifier
+    , rsgSubnetGroupStatus
+    , rsgReplicationSubnetGroupDescription
+
+    -- ** ReplicationTask
+    , ReplicationTask
+    , replicationTask
+    , rtReplicationTaskSettings
+    , rtStatus
+    , rtTargetEndpointARN
+    , rtReplicationTaskIdentifier
+    , rtReplicationTaskStartDate
+    , rtSourceEndpointARN
+    , rtTableMappings
+    , rtReplicationTaskCreationDate
+    , rtMigrationType
+    , rtReplicationTaskARN
+    , rtReplicationTaskStats
+    , rtReplicationInstanceARN
+    , rtLastFailureMessage
+
+    -- ** ReplicationTaskStats
+    , ReplicationTaskStats
+    , replicationTaskStats
+    , rtsFullLoadProgressPercent
+    , rtsElapsedTimeMillis
+    , rtsTablesErrored
+    , rtsTablesLoaded
+    , rtsTablesQueued
+    , rtsTablesLoading
+
+    -- ** Subnet
+    , Subnet
+    , subnet
+    , sSubnetStatus
+    , sSubnetIdentifier
+    , sSubnetAvailabilityZone
+
+    -- ** SupportedEndpointType
+    , SupportedEndpointType
+    , supportedEndpointType
+    , setEndpointType
+    , setEngineName
+    , setSupportsCDC
+
+    -- ** TableStatistics
+    , TableStatistics
+    , tableStatistics
+    , tsFullLoadRows
+    , tsInserts
+    , tsSchemaName
+    , tsTableState
+    , tsDdls
+    , tsDeletes
+    , tsUpdates
+    , tsLastUpdateTime
+    , tsTableName
+
+    -- ** Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
+    ) where
+
+import           Network.AWS.DMS.AddTagsToResource
+import           Network.AWS.DMS.CreateEndpoint
+import           Network.AWS.DMS.CreateReplicationInstance
+import           Network.AWS.DMS.CreateReplicationSubnetGroup
+import           Network.AWS.DMS.CreateReplicationTask
+import           Network.AWS.DMS.DeleteEndpoint
+import           Network.AWS.DMS.DeleteReplicationInstance
+import           Network.AWS.DMS.DeleteReplicationSubnetGroup
+import           Network.AWS.DMS.DeleteReplicationTask
+import           Network.AWS.DMS.DescribeAccountAttributes
+import           Network.AWS.DMS.DescribeConnections
+import           Network.AWS.DMS.DescribeEndpoints
+import           Network.AWS.DMS.DescribeEndpointTypes
+import           Network.AWS.DMS.DescribeOrderableReplicationInstances
+import           Network.AWS.DMS.DescribeRefreshSchemasStatus
+import           Network.AWS.DMS.DescribeReplicationInstances
+import           Network.AWS.DMS.DescribeReplicationSubnetGroups
+import           Network.AWS.DMS.DescribeReplicationTasks
+import           Network.AWS.DMS.DescribeSchemas
+import           Network.AWS.DMS.DescribeTableStatistics
+import           Network.AWS.DMS.ListTagsForResource
+import           Network.AWS.DMS.ModifyEndpoint
+import           Network.AWS.DMS.ModifyReplicationInstance
+import           Network.AWS.DMS.ModifyReplicationSubnetGroup
+import           Network.AWS.DMS.RefreshSchemas
+import           Network.AWS.DMS.RemoveTagsFromResource
+import           Network.AWS.DMS.StartReplicationTask
+import           Network.AWS.DMS.StopReplicationTask
+import           Network.AWS.DMS.TestConnection
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.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 'DMS'.
+-}
+
+{- $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/DMS/AddTagsToResource.hs b/gen/Network/AWS/DMS/AddTagsToResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/AddTagsToResource.hs
@@ -0,0 +1,131 @@
+{-# 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.DMS.AddTagsToResource
+-- Copyright   : (c) 2013-2016 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)
+--
+-- For internal use only
+--
+module Network.AWS.DMS.AddTagsToResource
+    (
+    -- * Creating a Request
+      addTagsToResource
+    , AddTagsToResource
+    -- * Request Lenses
+    , attrResourceARN
+    , attrTags
+
+    -- * Destructuring the Response
+    , addTagsToResourceResponse
+    , AddTagsToResourceResponse
+    -- * Response Lenses
+    , attrrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'addTagsToResource' smart constructor.
+data AddTagsToResource = AddTagsToResource'
+    { _attrResourceARN :: !Text
+    , _attrTags        :: ![Tag]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddTagsToResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'attrResourceARN'
+--
+-- * 'attrTags'
+addTagsToResource
+    :: Text -- ^ 'attrResourceARN'
+    -> AddTagsToResource
+addTagsToResource pResourceARN_ =
+    AddTagsToResource'
+    { _attrResourceARN = pResourceARN_
+    , _attrTags = mempty
+    }
+
+-- | The Amazon Resource Name (ARN) of the AWS DMS resource the tag is to be
+-- added to. AWS DMS resources include a replication instance, endpoint,
+-- and a replication task.
+attrResourceARN :: Lens' AddTagsToResource Text
+attrResourceARN = lens _attrResourceARN (\ s a -> s{_attrResourceARN = a});
+
+-- | The tag to be assigned to the DMS resource.
+attrTags :: Lens' AddTagsToResource [Tag]
+attrTags = lens _attrTags (\ s a -> s{_attrTags = a}) . _Coerce;
+
+instance AWSRequest AddTagsToResource where
+        type Rs AddTagsToResource = AddTagsToResourceResponse
+        request = postJSON dms
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 AddTagsToResourceResponse' <$> (pure (fromEnum s)))
+
+instance Hashable AddTagsToResource
+
+instance ToHeaders AddTagsToResource where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.AddTagsToResource" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON AddTagsToResource where
+        toJSON AddTagsToResource'{..}
+          = object
+              (catMaybes
+                 [Just ("ResourceArn" .= _attrResourceARN),
+                  Just ("Tags" .= _attrTags)])
+
+instance ToPath AddTagsToResource where
+        toPath = const "/"
+
+instance ToQuery AddTagsToResource where
+        toQuery = const mempty
+
+-- | /See:/ 'addTagsToResourceResponse' smart constructor.
+newtype AddTagsToResourceResponse = AddTagsToResourceResponse'
+    { _attrrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AddTagsToResourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'attrrsResponseStatus'
+addTagsToResourceResponse
+    :: Int -- ^ 'attrrsResponseStatus'
+    -> AddTagsToResourceResponse
+addTagsToResourceResponse pResponseStatus_ =
+    AddTagsToResourceResponse'
+    { _attrrsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+attrrsResponseStatus :: Lens' AddTagsToResourceResponse Int
+attrrsResponseStatus = lens _attrrsResponseStatus (\ s a -> s{_attrrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/CreateEndpoint.hs b/gen/Network/AWS/DMS/CreateEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/CreateEndpoint.hs
@@ -0,0 +1,242 @@
+{-# 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.DMS.CreateEndpoint
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Creates an endpoint using the provided settings.
+--
+module Network.AWS.DMS.CreateEndpoint
+    (
+    -- * Creating a Request
+      createEndpoint
+    , CreateEndpoint
+    -- * Request Lenses
+    , ceExtraConnectionAttributes
+    , ceKMSKeyId
+    , ceDatabaseName
+    , ceTags
+    , ceEndpointIdentifier
+    , ceEndpointType
+    , ceEngineName
+    , ceUsername
+    , cePassword
+    , ceServerName
+    , cePort
+
+    -- * Destructuring the Response
+    , createEndpointResponse
+    , CreateEndpointResponse
+    -- * Response Lenses
+    , cersEndpoint
+    , cersResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'createEndpoint' smart constructor.
+data CreateEndpoint = CreateEndpoint'
+    { _ceExtraConnectionAttributes :: !(Maybe Text)
+    , _ceKMSKeyId                  :: !(Maybe Text)
+    , _ceDatabaseName              :: !(Maybe Text)
+    , _ceTags                      :: !(Maybe [Tag])
+    , _ceEndpointIdentifier        :: !Text
+    , _ceEndpointType              :: !ReplicationEndpointTypeValue
+    , _ceEngineName                :: !Text
+    , _ceUsername                  :: !Text
+    , _cePassword                  :: !(Sensitive Text)
+    , _ceServerName                :: !Text
+    , _cePort                      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateEndpoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ceExtraConnectionAttributes'
+--
+-- * 'ceKMSKeyId'
+--
+-- * 'ceDatabaseName'
+--
+-- * 'ceTags'
+--
+-- * 'ceEndpointIdentifier'
+--
+-- * 'ceEndpointType'
+--
+-- * 'ceEngineName'
+--
+-- * 'ceUsername'
+--
+-- * 'cePassword'
+--
+-- * 'ceServerName'
+--
+-- * 'cePort'
+createEndpoint
+    :: Text -- ^ 'ceEndpointIdentifier'
+    -> ReplicationEndpointTypeValue -- ^ 'ceEndpointType'
+    -> Text -- ^ 'ceEngineName'
+    -> Text -- ^ 'ceUsername'
+    -> Text -- ^ 'cePassword'
+    -> Text -- ^ 'ceServerName'
+    -> Int -- ^ 'cePort'
+    -> CreateEndpoint
+createEndpoint pEndpointIdentifier_ pEndpointType_ pEngineName_ pUsername_ pPassword_ pServerName_ pPort_ =
+    CreateEndpoint'
+    { _ceExtraConnectionAttributes = Nothing
+    , _ceKMSKeyId = Nothing
+    , _ceDatabaseName = Nothing
+    , _ceTags = Nothing
+    , _ceEndpointIdentifier = pEndpointIdentifier_
+    , _ceEndpointType = pEndpointType_
+    , _ceEngineName = pEngineName_
+    , _ceUsername = pUsername_
+    , _cePassword = _Sensitive # pPassword_
+    , _ceServerName = pServerName_
+    , _cePort = pPort_
+    }
+
+-- | Additional attributes associated with the connection.
+ceExtraConnectionAttributes :: Lens' CreateEndpoint (Maybe Text)
+ceExtraConnectionAttributes = lens _ceExtraConnectionAttributes (\ s a -> s{_ceExtraConnectionAttributes = a});
+
+-- | The KMS key identifier that will be used to encrypt the connection
+-- parameters. If you do not specify a value for the KmsKeyId parameter,
+-- then AWS DMS will use your default encryption key. AWS KMS creates the
+-- default encryption key for your AWS account. Your AWS account has a
+-- different default encryption key for each AWS region.
+ceKMSKeyId :: Lens' CreateEndpoint (Maybe Text)
+ceKMSKeyId = lens _ceKMSKeyId (\ s a -> s{_ceKMSKeyId = a});
+
+-- | The name of the endpoint database.
+ceDatabaseName :: Lens' CreateEndpoint (Maybe Text)
+ceDatabaseName = lens _ceDatabaseName (\ s a -> s{_ceDatabaseName = a});
+
+-- | Tags to be added to the endpoint.
+ceTags :: Lens' CreateEndpoint [Tag]
+ceTags = lens _ceTags (\ s a -> s{_ceTags = a}) . _Default . _Coerce;
+
+-- | The database endpoint identifier. Identifiers must begin with a letter;
+-- must contain only ASCII letters, digits, and hyphens; and must not end
+-- with a hyphen or contain two consecutive hyphens.
+ceEndpointIdentifier :: Lens' CreateEndpoint Text
+ceEndpointIdentifier = lens _ceEndpointIdentifier (\ s a -> s{_ceEndpointIdentifier = a});
+
+-- | The type of endpoint.
+ceEndpointType :: Lens' CreateEndpoint ReplicationEndpointTypeValue
+ceEndpointType = lens _ceEndpointType (\ s a -> s{_ceEndpointType = a});
+
+-- | The type of engine for the endpoint. Valid values include MYSQL, ORACLE,
+-- POSTGRES, MARIADB, AURORA, SQLSERVER.
+ceEngineName :: Lens' CreateEndpoint Text
+ceEngineName = lens _ceEngineName (\ s a -> s{_ceEngineName = a});
+
+-- | The user name to be used to login to the endpoint database.
+ceUsername :: Lens' CreateEndpoint Text
+ceUsername = lens _ceUsername (\ s a -> s{_ceUsername = a});
+
+-- | The password to be used to login to the endpoint database.
+cePassword :: Lens' CreateEndpoint Text
+cePassword = lens _cePassword (\ s a -> s{_cePassword = a}) . _Sensitive;
+
+-- | The name of the server where the endpoint database resides.
+ceServerName :: Lens' CreateEndpoint Text
+ceServerName = lens _ceServerName (\ s a -> s{_ceServerName = a});
+
+-- | The port used by the endpoint database.
+cePort :: Lens' CreateEndpoint Int
+cePort = lens _cePort (\ s a -> s{_cePort = a});
+
+instance AWSRequest CreateEndpoint where
+        type Rs CreateEndpoint = CreateEndpointResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateEndpointResponse' <$>
+                   (x .?> "Endpoint") <*> (pure (fromEnum s)))
+
+instance Hashable CreateEndpoint
+
+instance ToHeaders CreateEndpoint where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.CreateEndpoint" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateEndpoint where
+        toJSON CreateEndpoint'{..}
+          = object
+              (catMaybes
+                 [("ExtraConnectionAttributes" .=) <$>
+                    _ceExtraConnectionAttributes,
+                  ("KmsKeyId" .=) <$> _ceKMSKeyId,
+                  ("DatabaseName" .=) <$> _ceDatabaseName,
+                  ("Tags" .=) <$> _ceTags,
+                  Just ("EndpointIdentifier" .= _ceEndpointIdentifier),
+                  Just ("EndpointType" .= _ceEndpointType),
+                  Just ("EngineName" .= _ceEngineName),
+                  Just ("Username" .= _ceUsername),
+                  Just ("Password" .= _cePassword),
+                  Just ("ServerName" .= _ceServerName),
+                  Just ("Port" .= _cePort)])
+
+instance ToPath CreateEndpoint where
+        toPath = const "/"
+
+instance ToQuery CreateEndpoint where
+        toQuery = const mempty
+
+-- | /See:/ 'createEndpointResponse' smart constructor.
+data CreateEndpointResponse = CreateEndpointResponse'
+    { _cersEndpoint       :: !(Maybe Endpoint)
+    , _cersResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateEndpointResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cersEndpoint'
+--
+-- * 'cersResponseStatus'
+createEndpointResponse
+    :: Int -- ^ 'cersResponseStatus'
+    -> CreateEndpointResponse
+createEndpointResponse pResponseStatus_ =
+    CreateEndpointResponse'
+    { _cersEndpoint = Nothing
+    , _cersResponseStatus = pResponseStatus_
+    }
+
+-- | The endpoint that was created.
+cersEndpoint :: Lens' CreateEndpointResponse (Maybe Endpoint)
+cersEndpoint = lens _cersEndpoint (\ s a -> s{_cersEndpoint = a});
+
+-- | The response status code.
+cersResponseStatus :: Lens' CreateEndpointResponse Int
+cersResponseStatus = lens _cersResponseStatus (\ s a -> s{_cersResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/CreateReplicationInstance.hs b/gen/Network/AWS/DMS/CreateReplicationInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/CreateReplicationInstance.hs
@@ -0,0 +1,281 @@
+{-# 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.DMS.CreateReplicationInstance
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Creates the replication instance using the specified parameters.
+--
+module Network.AWS.DMS.CreateReplicationInstance
+    (
+    -- * Creating a Request
+      createReplicationInstance
+    , CreateReplicationInstance
+    -- * Request Lenses
+    , criEngineVersion
+    , criPubliclyAccessible
+    , criAutoMinorVersionUpgrade
+    , criReplicationSubnetGroupIdentifier
+    , criPreferredMaintenanceWindow
+    , criKMSKeyId
+    , criAvailabilityZone
+    , criAllocatedStorage
+    , criTags
+    , criReplicationInstanceIdentifier
+    , criReplicationInstanceClass
+
+    -- * Destructuring the Response
+    , createReplicationInstanceResponse
+    , CreateReplicationInstanceResponse
+    -- * Response Lenses
+    , crirsReplicationInstance
+    , crirsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- |
+--
+-- /See:/ 'createReplicationInstance' smart constructor.
+data CreateReplicationInstance = CreateReplicationInstance'
+    { _criEngineVersion                    :: !(Maybe Text)
+    , _criPubliclyAccessible               :: !(Maybe Bool)
+    , _criAutoMinorVersionUpgrade          :: !(Maybe Bool)
+    , _criReplicationSubnetGroupIdentifier :: !(Maybe Text)
+    , _criPreferredMaintenanceWindow       :: !(Maybe Text)
+    , _criKMSKeyId                         :: !(Maybe Text)
+    , _criAvailabilityZone                 :: !(Maybe Text)
+    , _criAllocatedStorage                 :: !(Maybe Int)
+    , _criTags                             :: !(Maybe [Tag])
+    , _criReplicationInstanceIdentifier    :: !Text
+    , _criReplicationInstanceClass         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateReplicationInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'criEngineVersion'
+--
+-- * 'criPubliclyAccessible'
+--
+-- * 'criAutoMinorVersionUpgrade'
+--
+-- * 'criReplicationSubnetGroupIdentifier'
+--
+-- * 'criPreferredMaintenanceWindow'
+--
+-- * 'criKMSKeyId'
+--
+-- * 'criAvailabilityZone'
+--
+-- * 'criAllocatedStorage'
+--
+-- * 'criTags'
+--
+-- * 'criReplicationInstanceIdentifier'
+--
+-- * 'criReplicationInstanceClass'
+createReplicationInstance
+    :: Text -- ^ 'criReplicationInstanceIdentifier'
+    -> Text -- ^ 'criReplicationInstanceClass'
+    -> CreateReplicationInstance
+createReplicationInstance pReplicationInstanceIdentifier_ pReplicationInstanceClass_ =
+    CreateReplicationInstance'
+    { _criEngineVersion = Nothing
+    , _criPubliclyAccessible = Nothing
+    , _criAutoMinorVersionUpgrade = Nothing
+    , _criReplicationSubnetGroupIdentifier = Nothing
+    , _criPreferredMaintenanceWindow = Nothing
+    , _criKMSKeyId = Nothing
+    , _criAvailabilityZone = Nothing
+    , _criAllocatedStorage = Nothing
+    , _criTags = Nothing
+    , _criReplicationInstanceIdentifier = pReplicationInstanceIdentifier_
+    , _criReplicationInstanceClass = pReplicationInstanceClass_
+    }
+
+-- | The engine version number of the replication instance.
+criEngineVersion :: Lens' CreateReplicationInstance (Maybe Text)
+criEngineVersion = lens _criEngineVersion (\ s a -> s{_criEngineVersion = a});
+
+-- | Specifies the accessibility options for the replication instance. A
+-- value of 'true' represents an instance with a public IP address. A value
+-- of 'false' represents an instance with a private IP address. The default
+-- value is 'true'.
+criPubliclyAccessible :: Lens' CreateReplicationInstance (Maybe Bool)
+criPubliclyAccessible = lens _criPubliclyAccessible (\ s a -> s{_criPubliclyAccessible = a});
+
+-- | Indicates that minor engine upgrades will be applied automatically to
+-- the replication instance during the maintenance window.
+--
+-- Default: 'true'
+criAutoMinorVersionUpgrade :: Lens' CreateReplicationInstance (Maybe Bool)
+criAutoMinorVersionUpgrade = lens _criAutoMinorVersionUpgrade (\ s a -> s{_criAutoMinorVersionUpgrade = a});
+
+-- | A subnet group to associate with the replication instance.
+criReplicationSubnetGroupIdentifier :: Lens' CreateReplicationInstance (Maybe Text)
+criReplicationSubnetGroupIdentifier = lens _criReplicationSubnetGroupIdentifier (\ s a -> s{_criReplicationSubnetGroupIdentifier = a});
+
+-- | The weekly time range during which system maintenance can occur, in
+-- Universal Coordinated Time (UTC).
+--
+-- Format: 'ddd:hh24:mi-ddd:hh24:mi'
+--
+-- Default: A 30-minute window selected at random from an 8-hour block of
+-- time per region, occurring on a random day of the week.
+--
+-- Valid Days: Mon, Tue, Wed, Thu, Fri, Sat, Sun
+--
+-- Constraints: Minimum 30-minute window.
+criPreferredMaintenanceWindow :: Lens' CreateReplicationInstance (Maybe Text)
+criPreferredMaintenanceWindow = lens _criPreferredMaintenanceWindow (\ s a -> s{_criPreferredMaintenanceWindow = a});
+
+-- | The KMS key identifier that will be used to encrypt the content on the
+-- replication instance. If you do not specify a value for the KmsKeyId
+-- parameter, then AWS DMS will use your default encryption key. AWS KMS
+-- creates the default encryption key for your AWS account. Your AWS
+-- account has a different default encryption key for each AWS region.
+criKMSKeyId :: Lens' CreateReplicationInstance (Maybe Text)
+criKMSKeyId = lens _criKMSKeyId (\ s a -> s{_criKMSKeyId = a});
+
+-- | The EC2 Availability Zone that the replication instance will be created
+-- in.
+--
+-- Default: A random, system-chosen Availability Zone in the endpoint\'s
+-- region.
+--
+-- Example: 'us-east-1d'
+criAvailabilityZone :: Lens' CreateReplicationInstance (Maybe Text)
+criAvailabilityZone = lens _criAvailabilityZone (\ s a -> s{_criAvailabilityZone = a});
+
+-- | The amount of storage (in gigabytes) to be initially allocated for the
+-- replication instance.
+criAllocatedStorage :: Lens' CreateReplicationInstance (Maybe Int)
+criAllocatedStorage = lens _criAllocatedStorage (\ s a -> s{_criAllocatedStorage = a});
+
+-- | Tags to be associated with the replication instance.
+criTags :: Lens' CreateReplicationInstance [Tag]
+criTags = lens _criTags (\ s a -> s{_criTags = a}) . _Default . _Coerce;
+
+-- | The replication instance identifier. This parameter is stored as a
+-- lowercase string.
+--
+-- Constraints:
+--
+-- -   Must contain from 1 to 63 alphanumeric characters or hyphens.
+-- -   First character must be a letter.
+-- -   Cannot end with a hyphen or contain two consecutive hyphens.
+--
+-- Example: 'myrepinstance'
+criReplicationInstanceIdentifier :: Lens' CreateReplicationInstance Text
+criReplicationInstanceIdentifier = lens _criReplicationInstanceIdentifier (\ s a -> s{_criReplicationInstanceIdentifier = a});
+
+-- | The compute and memory capacity of the replication instance as specified
+-- by the replication instance class.
+--
+-- Valid Values:
+-- 'dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge '
+criReplicationInstanceClass :: Lens' CreateReplicationInstance Text
+criReplicationInstanceClass = lens _criReplicationInstanceClass (\ s a -> s{_criReplicationInstanceClass = a});
+
+instance AWSRequest CreateReplicationInstance where
+        type Rs CreateReplicationInstance =
+             CreateReplicationInstanceResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateReplicationInstanceResponse' <$>
+                   (x .?> "ReplicationInstance") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable CreateReplicationInstance
+
+instance ToHeaders CreateReplicationInstance where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.CreateReplicationInstance" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateReplicationInstance where
+        toJSON CreateReplicationInstance'{..}
+          = object
+              (catMaybes
+                 [("EngineVersion" .=) <$> _criEngineVersion,
+                  ("PubliclyAccessible" .=) <$> _criPubliclyAccessible,
+                  ("AutoMinorVersionUpgrade" .=) <$>
+                    _criAutoMinorVersionUpgrade,
+                  ("ReplicationSubnetGroupIdentifier" .=) <$>
+                    _criReplicationSubnetGroupIdentifier,
+                  ("PreferredMaintenanceWindow" .=) <$>
+                    _criPreferredMaintenanceWindow,
+                  ("KmsKeyId" .=) <$> _criKMSKeyId,
+                  ("AvailabilityZone" .=) <$> _criAvailabilityZone,
+                  ("AllocatedStorage" .=) <$> _criAllocatedStorage,
+                  ("Tags" .=) <$> _criTags,
+                  Just
+                    ("ReplicationInstanceIdentifier" .=
+                       _criReplicationInstanceIdentifier),
+                  Just
+                    ("ReplicationInstanceClass" .=
+                       _criReplicationInstanceClass)])
+
+instance ToPath CreateReplicationInstance where
+        toPath = const "/"
+
+instance ToQuery CreateReplicationInstance where
+        toQuery = const mempty
+
+-- | /See:/ 'createReplicationInstanceResponse' smart constructor.
+data CreateReplicationInstanceResponse = CreateReplicationInstanceResponse'
+    { _crirsReplicationInstance :: !(Maybe ReplicationInstance)
+    , _crirsResponseStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateReplicationInstanceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crirsReplicationInstance'
+--
+-- * 'crirsResponseStatus'
+createReplicationInstanceResponse
+    :: Int -- ^ 'crirsResponseStatus'
+    -> CreateReplicationInstanceResponse
+createReplicationInstanceResponse pResponseStatus_ =
+    CreateReplicationInstanceResponse'
+    { _crirsReplicationInstance = Nothing
+    , _crirsResponseStatus = pResponseStatus_
+    }
+
+-- | The replication instance that was created.
+crirsReplicationInstance :: Lens' CreateReplicationInstanceResponse (Maybe ReplicationInstance)
+crirsReplicationInstance = lens _crirsReplicationInstance (\ s a -> s{_crirsReplicationInstance = a});
+
+-- | The response status code.
+crirsResponseStatus :: Lens' CreateReplicationInstanceResponse Int
+crirsResponseStatus = lens _crirsResponseStatus (\ s a -> s{_crirsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/CreateReplicationSubnetGroup.hs b/gen/Network/AWS/DMS/CreateReplicationSubnetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/CreateReplicationSubnetGroup.hs
@@ -0,0 +1,174 @@
+{-# 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.DMS.CreateReplicationSubnetGroup
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Creates a replication subnet group given a list of the subnet IDs in a
+-- VPC.
+--
+module Network.AWS.DMS.CreateReplicationSubnetGroup
+    (
+    -- * Creating a Request
+      createReplicationSubnetGroup
+    , CreateReplicationSubnetGroup
+    -- * Request Lenses
+    , crsgTags
+    , crsgReplicationSubnetGroupIdentifier
+    , crsgReplicationSubnetGroupDescription
+    , crsgSubnetIds
+
+    -- * Destructuring the Response
+    , createReplicationSubnetGroupResponse
+    , CreateReplicationSubnetGroupResponse
+    -- * Response Lenses
+    , crsgrsReplicationSubnetGroup
+    , crsgrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'createReplicationSubnetGroup' smart constructor.
+data CreateReplicationSubnetGroup = CreateReplicationSubnetGroup'
+    { _crsgTags                              :: !(Maybe [Tag])
+    , _crsgReplicationSubnetGroupIdentifier  :: !Text
+    , _crsgReplicationSubnetGroupDescription :: !Text
+    , _crsgSubnetIds                         :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateReplicationSubnetGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crsgTags'
+--
+-- * 'crsgReplicationSubnetGroupIdentifier'
+--
+-- * 'crsgReplicationSubnetGroupDescription'
+--
+-- * 'crsgSubnetIds'
+createReplicationSubnetGroup
+    :: Text -- ^ 'crsgReplicationSubnetGroupIdentifier'
+    -> Text -- ^ 'crsgReplicationSubnetGroupDescription'
+    -> CreateReplicationSubnetGroup
+createReplicationSubnetGroup pReplicationSubnetGroupIdentifier_ pReplicationSubnetGroupDescription_ =
+    CreateReplicationSubnetGroup'
+    { _crsgTags = Nothing
+    , _crsgReplicationSubnetGroupIdentifier = pReplicationSubnetGroupIdentifier_
+    , _crsgReplicationSubnetGroupDescription = pReplicationSubnetGroupDescription_
+    , _crsgSubnetIds = mempty
+    }
+
+-- | The tag to be assigned to the subnet group.
+crsgTags :: Lens' CreateReplicationSubnetGroup [Tag]
+crsgTags = lens _crsgTags (\ s a -> s{_crsgTags = a}) . _Default . _Coerce;
+
+-- | The name for the replication subnet group. This value is stored as a
+-- lowercase string.
+--
+-- Constraints: Must contain no more than 255 alphanumeric characters,
+-- periods, spaces, underscores, or hyphens. Must not be \"default\".
+--
+-- Example: 'mySubnetgroup'
+crsgReplicationSubnetGroupIdentifier :: Lens' CreateReplicationSubnetGroup Text
+crsgReplicationSubnetGroupIdentifier = lens _crsgReplicationSubnetGroupIdentifier (\ s a -> s{_crsgReplicationSubnetGroupIdentifier = a});
+
+-- | The description for the subnet group.
+crsgReplicationSubnetGroupDescription :: Lens' CreateReplicationSubnetGroup Text
+crsgReplicationSubnetGroupDescription = lens _crsgReplicationSubnetGroupDescription (\ s a -> s{_crsgReplicationSubnetGroupDescription = a});
+
+-- | The EC2 subnet IDs for the subnet group.
+crsgSubnetIds :: Lens' CreateReplicationSubnetGroup [Text]
+crsgSubnetIds = lens _crsgSubnetIds (\ s a -> s{_crsgSubnetIds = a}) . _Coerce;
+
+instance AWSRequest CreateReplicationSubnetGroup
+         where
+        type Rs CreateReplicationSubnetGroup =
+             CreateReplicationSubnetGroupResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateReplicationSubnetGroupResponse' <$>
+                   (x .?> "ReplicationSubnetGroup") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable CreateReplicationSubnetGroup
+
+instance ToHeaders CreateReplicationSubnetGroup where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.CreateReplicationSubnetGroup" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateReplicationSubnetGroup where
+        toJSON CreateReplicationSubnetGroup'{..}
+          = object
+              (catMaybes
+                 [("Tags" .=) <$> _crsgTags,
+                  Just
+                    ("ReplicationSubnetGroupIdentifier" .=
+                       _crsgReplicationSubnetGroupIdentifier),
+                  Just
+                    ("ReplicationSubnetGroupDescription" .=
+                       _crsgReplicationSubnetGroupDescription),
+                  Just ("SubnetIds" .= _crsgSubnetIds)])
+
+instance ToPath CreateReplicationSubnetGroup where
+        toPath = const "/"
+
+instance ToQuery CreateReplicationSubnetGroup where
+        toQuery = const mempty
+
+-- | /See:/ 'createReplicationSubnetGroupResponse' smart constructor.
+data CreateReplicationSubnetGroupResponse = CreateReplicationSubnetGroupResponse'
+    { _crsgrsReplicationSubnetGroup :: !(Maybe ReplicationSubnetGroup)
+    , _crsgrsResponseStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateReplicationSubnetGroupResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crsgrsReplicationSubnetGroup'
+--
+-- * 'crsgrsResponseStatus'
+createReplicationSubnetGroupResponse
+    :: Int -- ^ 'crsgrsResponseStatus'
+    -> CreateReplicationSubnetGroupResponse
+createReplicationSubnetGroupResponse pResponseStatus_ =
+    CreateReplicationSubnetGroupResponse'
+    { _crsgrsReplicationSubnetGroup = Nothing
+    , _crsgrsResponseStatus = pResponseStatus_
+    }
+
+-- | The replication subnet group that was created.
+crsgrsReplicationSubnetGroup :: Lens' CreateReplicationSubnetGroupResponse (Maybe ReplicationSubnetGroup)
+crsgrsReplicationSubnetGroup = lens _crsgrsReplicationSubnetGroup (\ s a -> s{_crsgrsReplicationSubnetGroup = a});
+
+-- | The response status code.
+crsgrsResponseStatus :: Lens' CreateReplicationSubnetGroupResponse Int
+crsgrsResponseStatus = lens _crsgrsResponseStatus (\ s a -> s{_crsgrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/CreateReplicationTask.hs b/gen/Network/AWS/DMS/CreateReplicationTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/CreateReplicationTask.hs
@@ -0,0 +1,228 @@
+{-# 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.DMS.CreateReplicationTask
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Creates a replication task using the specified parameters.
+--
+module Network.AWS.DMS.CreateReplicationTask
+    (
+    -- * Creating a Request
+      createReplicationTask
+    , CreateReplicationTask
+    -- * Request Lenses
+    , crtReplicationTaskSettings
+    , crtTags
+    , crtCdcStartTime
+    , crtReplicationTaskIdentifier
+    , crtSourceEndpointARN
+    , crtTargetEndpointARN
+    , crtReplicationInstanceARN
+    , crtMigrationType
+    , crtTableMappings
+
+    -- * Destructuring the Response
+    , createReplicationTaskResponse
+    , CreateReplicationTaskResponse
+    -- * Response Lenses
+    , crtrsReplicationTask
+    , crtrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'createReplicationTask' smart constructor.
+data CreateReplicationTask = CreateReplicationTask'
+    { _crtReplicationTaskSettings   :: !(Maybe Text)
+    , _crtTags                      :: !(Maybe [Tag])
+    , _crtCdcStartTime              :: !(Maybe POSIX)
+    , _crtReplicationTaskIdentifier :: !Text
+    , _crtSourceEndpointARN         :: !Text
+    , _crtTargetEndpointARN         :: !Text
+    , _crtReplicationInstanceARN    :: !Text
+    , _crtMigrationType             :: !MigrationTypeValue
+    , _crtTableMappings             :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateReplicationTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crtReplicationTaskSettings'
+--
+-- * 'crtTags'
+--
+-- * 'crtCdcStartTime'
+--
+-- * 'crtReplicationTaskIdentifier'
+--
+-- * 'crtSourceEndpointARN'
+--
+-- * 'crtTargetEndpointARN'
+--
+-- * 'crtReplicationInstanceARN'
+--
+-- * 'crtMigrationType'
+--
+-- * 'crtTableMappings'
+createReplicationTask
+    :: Text -- ^ 'crtReplicationTaskIdentifier'
+    -> Text -- ^ 'crtSourceEndpointARN'
+    -> Text -- ^ 'crtTargetEndpointARN'
+    -> Text -- ^ 'crtReplicationInstanceARN'
+    -> MigrationTypeValue -- ^ 'crtMigrationType'
+    -> Text -- ^ 'crtTableMappings'
+    -> CreateReplicationTask
+createReplicationTask pReplicationTaskIdentifier_ pSourceEndpointARN_ pTargetEndpointARN_ pReplicationInstanceARN_ pMigrationType_ pTableMappings_ =
+    CreateReplicationTask'
+    { _crtReplicationTaskSettings = Nothing
+    , _crtTags = Nothing
+    , _crtCdcStartTime = Nothing
+    , _crtReplicationTaskIdentifier = pReplicationTaskIdentifier_
+    , _crtSourceEndpointARN = pSourceEndpointARN_
+    , _crtTargetEndpointARN = pTargetEndpointARN_
+    , _crtReplicationInstanceARN = pReplicationInstanceARN_
+    , _crtMigrationType = pMigrationType_
+    , _crtTableMappings = pTableMappings_
+    }
+
+-- | Settings for the task, such as target metadata settings.
+crtReplicationTaskSettings :: Lens' CreateReplicationTask (Maybe Text)
+crtReplicationTaskSettings = lens _crtReplicationTaskSettings (\ s a -> s{_crtReplicationTaskSettings = a});
+
+-- | Tags to be added to the replication instance.
+crtTags :: Lens' CreateReplicationTask [Tag]
+crtTags = lens _crtTags (\ s a -> s{_crtTags = a}) . _Default . _Coerce;
+
+-- | The start time for the Change Data Capture (CDC) operation.
+crtCdcStartTime :: Lens' CreateReplicationTask (Maybe UTCTime)
+crtCdcStartTime = lens _crtCdcStartTime (\ s a -> s{_crtCdcStartTime = a}) . mapping _Time;
+
+-- | The replication task identifier.
+--
+-- Constraints:
+--
+-- -   Must contain from 1 to 63 alphanumeric characters or hyphens.
+-- -   First character must be a letter.
+-- -   Cannot end with a hyphen or contain two consecutive hyphens.
+crtReplicationTaskIdentifier :: Lens' CreateReplicationTask Text
+crtReplicationTaskIdentifier = lens _crtReplicationTaskIdentifier (\ s a -> s{_crtReplicationTaskIdentifier = a});
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+crtSourceEndpointARN :: Lens' CreateReplicationTask Text
+crtSourceEndpointARN = lens _crtSourceEndpointARN (\ s a -> s{_crtSourceEndpointARN = a});
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+crtTargetEndpointARN :: Lens' CreateReplicationTask Text
+crtTargetEndpointARN = lens _crtTargetEndpointARN (\ s a -> s{_crtTargetEndpointARN = a});
+
+-- | The Amazon Resource Name (ARN) of the replication instance.
+crtReplicationInstanceARN :: Lens' CreateReplicationTask Text
+crtReplicationInstanceARN = lens _crtReplicationInstanceARN (\ s a -> s{_crtReplicationInstanceARN = a});
+
+-- | The migration type.
+crtMigrationType :: Lens' CreateReplicationTask MigrationTypeValue
+crtMigrationType = lens _crtMigrationType (\ s a -> s{_crtMigrationType = a});
+
+-- | The path of the JSON file that contains the table mappings.
+crtTableMappings :: Lens' CreateReplicationTask Text
+crtTableMappings = lens _crtTableMappings (\ s a -> s{_crtTableMappings = a});
+
+instance AWSRequest CreateReplicationTask where
+        type Rs CreateReplicationTask =
+             CreateReplicationTaskResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateReplicationTaskResponse' <$>
+                   (x .?> "ReplicationTask") <*> (pure (fromEnum s)))
+
+instance Hashable CreateReplicationTask
+
+instance ToHeaders CreateReplicationTask where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.CreateReplicationTask" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateReplicationTask where
+        toJSON CreateReplicationTask'{..}
+          = object
+              (catMaybes
+                 [("ReplicationTaskSettings" .=) <$>
+                    _crtReplicationTaskSettings,
+                  ("Tags" .=) <$> _crtTags,
+                  ("CdcStartTime" .=) <$> _crtCdcStartTime,
+                  Just
+                    ("ReplicationTaskIdentifier" .=
+                       _crtReplicationTaskIdentifier),
+                  Just ("SourceEndpointArn" .= _crtSourceEndpointARN),
+                  Just ("TargetEndpointArn" .= _crtTargetEndpointARN),
+                  Just
+                    ("ReplicationInstanceArn" .=
+                       _crtReplicationInstanceARN),
+                  Just ("MigrationType" .= _crtMigrationType),
+                  Just ("TableMappings" .= _crtTableMappings)])
+
+instance ToPath CreateReplicationTask where
+        toPath = const "/"
+
+instance ToQuery CreateReplicationTask where
+        toQuery = const mempty
+
+-- | /See:/ 'createReplicationTaskResponse' smart constructor.
+data CreateReplicationTaskResponse = CreateReplicationTaskResponse'
+    { _crtrsReplicationTask :: !(Maybe ReplicationTask)
+    , _crtrsResponseStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateReplicationTaskResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crtrsReplicationTask'
+--
+-- * 'crtrsResponseStatus'
+createReplicationTaskResponse
+    :: Int -- ^ 'crtrsResponseStatus'
+    -> CreateReplicationTaskResponse
+createReplicationTaskResponse pResponseStatus_ =
+    CreateReplicationTaskResponse'
+    { _crtrsReplicationTask = Nothing
+    , _crtrsResponseStatus = pResponseStatus_
+    }
+
+-- | The replication task that was created.
+crtrsReplicationTask :: Lens' CreateReplicationTaskResponse (Maybe ReplicationTask)
+crtrsReplicationTask = lens _crtrsReplicationTask (\ s a -> s{_crtrsReplicationTask = a});
+
+-- | The response status code.
+crtrsResponseStatus :: Lens' CreateReplicationTaskResponse Int
+crtrsResponseStatus = lens _crtrsResponseStatus (\ s a -> s{_crtrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DeleteEndpoint.hs b/gen/Network/AWS/DMS/DeleteEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DeleteEndpoint.hs
@@ -0,0 +1,131 @@
+{-# 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.DMS.DeleteEndpoint
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Deletes the specified endpoint.
+--
+-- All tasks associated with the endpoint must be deleted before you can
+-- delete the endpoint.
+--
+module Network.AWS.DMS.DeleteEndpoint
+    (
+    -- * Creating a Request
+      deleteEndpoint
+    , DeleteEndpoint
+    -- * Request Lenses
+    , deEndpointARN
+
+    -- * Destructuring the Response
+    , deleteEndpointResponse
+    , DeleteEndpointResponse
+    -- * Response Lenses
+    , drsEndpoint
+    , drsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'deleteEndpoint' smart constructor.
+newtype DeleteEndpoint = DeleteEndpoint'
+    { _deEndpointARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteEndpoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'deEndpointARN'
+deleteEndpoint
+    :: Text -- ^ 'deEndpointARN'
+    -> DeleteEndpoint
+deleteEndpoint pEndpointARN_ =
+    DeleteEndpoint'
+    { _deEndpointARN = pEndpointARN_
+    }
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+deEndpointARN :: Lens' DeleteEndpoint Text
+deEndpointARN = lens _deEndpointARN (\ s a -> s{_deEndpointARN = a});
+
+instance AWSRequest DeleteEndpoint where
+        type Rs DeleteEndpoint = DeleteEndpointResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DeleteEndpointResponse' <$>
+                   (x .?> "Endpoint") <*> (pure (fromEnum s)))
+
+instance Hashable DeleteEndpoint
+
+instance ToHeaders DeleteEndpoint where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DeleteEndpoint" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteEndpoint where
+        toJSON DeleteEndpoint'{..}
+          = object
+              (catMaybes [Just ("EndpointArn" .= _deEndpointARN)])
+
+instance ToPath DeleteEndpoint where
+        toPath = const "/"
+
+instance ToQuery DeleteEndpoint where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteEndpointResponse' smart constructor.
+data DeleteEndpointResponse = DeleteEndpointResponse'
+    { _drsEndpoint       :: !(Maybe Endpoint)
+    , _drsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteEndpointResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsEndpoint'
+--
+-- * 'drsResponseStatus'
+deleteEndpointResponse
+    :: Int -- ^ 'drsResponseStatus'
+    -> DeleteEndpointResponse
+deleteEndpointResponse pResponseStatus_ =
+    DeleteEndpointResponse'
+    { _drsEndpoint = Nothing
+    , _drsResponseStatus = pResponseStatus_
+    }
+
+-- | The endpoint that was deleted.
+drsEndpoint :: Lens' DeleteEndpointResponse (Maybe Endpoint)
+drsEndpoint = lens _drsEndpoint (\ s a -> s{_drsEndpoint = a});
+
+-- | The response status code.
+drsResponseStatus :: Lens' DeleteEndpointResponse Int
+drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DeleteReplicationInstance.hs b/gen/Network/AWS/DMS/DeleteReplicationInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DeleteReplicationInstance.hs
@@ -0,0 +1,137 @@
+{-# 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.DMS.DeleteReplicationInstance
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Deletes the specified replication instance.
+--
+-- You must delete any migration tasks that are associated with the
+-- replication instance before you can delete it.
+--
+module Network.AWS.DMS.DeleteReplicationInstance
+    (
+    -- * Creating a Request
+      deleteReplicationInstance
+    , DeleteReplicationInstance
+    -- * Request Lenses
+    , driReplicationInstanceARN
+
+    -- * Destructuring the Response
+    , deleteReplicationInstanceResponse
+    , DeleteReplicationInstanceResponse
+    -- * Response Lenses
+    , drirsReplicationInstance
+    , drirsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'deleteReplicationInstance' smart constructor.
+newtype DeleteReplicationInstance = DeleteReplicationInstance'
+    { _driReplicationInstanceARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteReplicationInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'driReplicationInstanceARN'
+deleteReplicationInstance
+    :: Text -- ^ 'driReplicationInstanceARN'
+    -> DeleteReplicationInstance
+deleteReplicationInstance pReplicationInstanceARN_ =
+    DeleteReplicationInstance'
+    { _driReplicationInstanceARN = pReplicationInstanceARN_
+    }
+
+-- | The Amazon Resource Name (ARN) of the replication instance to be
+-- deleted.
+driReplicationInstanceARN :: Lens' DeleteReplicationInstance Text
+driReplicationInstanceARN = lens _driReplicationInstanceARN (\ s a -> s{_driReplicationInstanceARN = a});
+
+instance AWSRequest DeleteReplicationInstance where
+        type Rs DeleteReplicationInstance =
+             DeleteReplicationInstanceResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DeleteReplicationInstanceResponse' <$>
+                   (x .?> "ReplicationInstance") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable DeleteReplicationInstance
+
+instance ToHeaders DeleteReplicationInstance where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DeleteReplicationInstance" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteReplicationInstance where
+        toJSON DeleteReplicationInstance'{..}
+          = object
+              (catMaybes
+                 [Just
+                    ("ReplicationInstanceArn" .=
+                       _driReplicationInstanceARN)])
+
+instance ToPath DeleteReplicationInstance where
+        toPath = const "/"
+
+instance ToQuery DeleteReplicationInstance where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteReplicationInstanceResponse' smart constructor.
+data DeleteReplicationInstanceResponse = DeleteReplicationInstanceResponse'
+    { _drirsReplicationInstance :: !(Maybe ReplicationInstance)
+    , _drirsResponseStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteReplicationInstanceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drirsReplicationInstance'
+--
+-- * 'drirsResponseStatus'
+deleteReplicationInstanceResponse
+    :: Int -- ^ 'drirsResponseStatus'
+    -> DeleteReplicationInstanceResponse
+deleteReplicationInstanceResponse pResponseStatus_ =
+    DeleteReplicationInstanceResponse'
+    { _drirsReplicationInstance = Nothing
+    , _drirsResponseStatus = pResponseStatus_
+    }
+
+-- | The replication instance that was deleted.
+drirsReplicationInstance :: Lens' DeleteReplicationInstanceResponse (Maybe ReplicationInstance)
+drirsReplicationInstance = lens _drirsReplicationInstance (\ s a -> s{_drirsReplicationInstance = a});
+
+-- | The response status code.
+drirsResponseStatus :: Lens' DeleteReplicationInstanceResponse Int
+drirsResponseStatus = lens _drirsResponseStatus (\ s a -> s{_drirsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DeleteReplicationSubnetGroup.hs b/gen/Network/AWS/DMS/DeleteReplicationSubnetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DeleteReplicationSubnetGroup.hs
@@ -0,0 +1,124 @@
+{-# 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.DMS.DeleteReplicationSubnetGroup
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Deletes a subnet group.
+--
+module Network.AWS.DMS.DeleteReplicationSubnetGroup
+    (
+    -- * Creating a Request
+      deleteReplicationSubnetGroup
+    , DeleteReplicationSubnetGroup
+    -- * Request Lenses
+    , drsgReplicationSubnetGroupIdentifier
+
+    -- * Destructuring the Response
+    , deleteReplicationSubnetGroupResponse
+    , DeleteReplicationSubnetGroupResponse
+    -- * Response Lenses
+    , drsgrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'deleteReplicationSubnetGroup' smart constructor.
+newtype DeleteReplicationSubnetGroup = DeleteReplicationSubnetGroup'
+    { _drsgReplicationSubnetGroupIdentifier :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteReplicationSubnetGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsgReplicationSubnetGroupIdentifier'
+deleteReplicationSubnetGroup
+    :: Text -- ^ 'drsgReplicationSubnetGroupIdentifier'
+    -> DeleteReplicationSubnetGroup
+deleteReplicationSubnetGroup pReplicationSubnetGroupIdentifier_ =
+    DeleteReplicationSubnetGroup'
+    { _drsgReplicationSubnetGroupIdentifier = pReplicationSubnetGroupIdentifier_
+    }
+
+-- | The subnet group name of the replication instance.
+drsgReplicationSubnetGroupIdentifier :: Lens' DeleteReplicationSubnetGroup Text
+drsgReplicationSubnetGroupIdentifier = lens _drsgReplicationSubnetGroupIdentifier (\ s a -> s{_drsgReplicationSubnetGroupIdentifier = a});
+
+instance AWSRequest DeleteReplicationSubnetGroup
+         where
+        type Rs DeleteReplicationSubnetGroup =
+             DeleteReplicationSubnetGroupResponse
+        request = postJSON dms
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteReplicationSubnetGroupResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable DeleteReplicationSubnetGroup
+
+instance ToHeaders DeleteReplicationSubnetGroup where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DeleteReplicationSubnetGroup" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteReplicationSubnetGroup where
+        toJSON DeleteReplicationSubnetGroup'{..}
+          = object
+              (catMaybes
+                 [Just
+                    ("ReplicationSubnetGroupIdentifier" .=
+                       _drsgReplicationSubnetGroupIdentifier)])
+
+instance ToPath DeleteReplicationSubnetGroup where
+        toPath = const "/"
+
+instance ToQuery DeleteReplicationSubnetGroup where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteReplicationSubnetGroupResponse' smart constructor.
+newtype DeleteReplicationSubnetGroupResponse = DeleteReplicationSubnetGroupResponse'
+    { _drsgrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteReplicationSubnetGroupResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsgrsResponseStatus'
+deleteReplicationSubnetGroupResponse
+    :: Int -- ^ 'drsgrsResponseStatus'
+    -> DeleteReplicationSubnetGroupResponse
+deleteReplicationSubnetGroupResponse pResponseStatus_ =
+    DeleteReplicationSubnetGroupResponse'
+    { _drsgrsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+drsgrsResponseStatus :: Lens' DeleteReplicationSubnetGroupResponse Int
+drsgrsResponseStatus = lens _drsgrsResponseStatus (\ s a -> s{_drsgrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DeleteReplicationTask.hs b/gen/Network/AWS/DMS/DeleteReplicationTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DeleteReplicationTask.hs
@@ -0,0 +1,131 @@
+{-# 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.DMS.DeleteReplicationTask
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Deletes the specified replication task.
+--
+module Network.AWS.DMS.DeleteReplicationTask
+    (
+    -- * Creating a Request
+      deleteReplicationTask
+    , DeleteReplicationTask
+    -- * Request Lenses
+    , drtReplicationTaskARN
+
+    -- * Destructuring the Response
+    , deleteReplicationTaskResponse
+    , DeleteReplicationTaskResponse
+    -- * Response Lenses
+    , drtrsReplicationTask
+    , drtrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'deleteReplicationTask' smart constructor.
+newtype DeleteReplicationTask = DeleteReplicationTask'
+    { _drtReplicationTaskARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteReplicationTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drtReplicationTaskARN'
+deleteReplicationTask
+    :: Text -- ^ 'drtReplicationTaskARN'
+    -> DeleteReplicationTask
+deleteReplicationTask pReplicationTaskARN_ =
+    DeleteReplicationTask'
+    { _drtReplicationTaskARN = pReplicationTaskARN_
+    }
+
+-- | The Amazon Resource Name (ARN) of the replication task to be deleted.
+drtReplicationTaskARN :: Lens' DeleteReplicationTask Text
+drtReplicationTaskARN = lens _drtReplicationTaskARN (\ s a -> s{_drtReplicationTaskARN = a});
+
+instance AWSRequest DeleteReplicationTask where
+        type Rs DeleteReplicationTask =
+             DeleteReplicationTaskResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DeleteReplicationTaskResponse' <$>
+                   (x .?> "ReplicationTask") <*> (pure (fromEnum s)))
+
+instance Hashable DeleteReplicationTask
+
+instance ToHeaders DeleteReplicationTask where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DeleteReplicationTask" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteReplicationTask where
+        toJSON DeleteReplicationTask'{..}
+          = object
+              (catMaybes
+                 [Just
+                    ("ReplicationTaskArn" .= _drtReplicationTaskARN)])
+
+instance ToPath DeleteReplicationTask where
+        toPath = const "/"
+
+instance ToQuery DeleteReplicationTask where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteReplicationTaskResponse' smart constructor.
+data DeleteReplicationTaskResponse = DeleteReplicationTaskResponse'
+    { _drtrsReplicationTask :: !(Maybe ReplicationTask)
+    , _drtrsResponseStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteReplicationTaskResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drtrsReplicationTask'
+--
+-- * 'drtrsResponseStatus'
+deleteReplicationTaskResponse
+    :: Int -- ^ 'drtrsResponseStatus'
+    -> DeleteReplicationTaskResponse
+deleteReplicationTaskResponse pResponseStatus_ =
+    DeleteReplicationTaskResponse'
+    { _drtrsReplicationTask = Nothing
+    , _drtrsResponseStatus = pResponseStatus_
+    }
+
+-- | The deleted replication task.
+drtrsReplicationTask :: Lens' DeleteReplicationTaskResponse (Maybe ReplicationTask)
+drtrsReplicationTask = lens _drtrsReplicationTask (\ s a -> s{_drtrsReplicationTask = a});
+
+-- | The response status code.
+drtrsResponseStatus :: Lens' DeleteReplicationTaskResponse Int
+drtrsResponseStatus = lens _drtrsResponseStatus (\ s a -> s{_drtrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeAccountAttributes.hs b/gen/Network/AWS/DMS/DescribeAccountAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeAccountAttributes.hs
@@ -0,0 +1,121 @@
+{-# 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.DMS.DescribeAccountAttributes
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Lists all of the AWS DMS attributes for a customer account. The
+-- attributes include AWS DMS quotas for the account, such as the number of
+-- replication instances allowed. The description for a quota includes the
+-- quota name, current usage toward that quota, and the quota\'s maximum
+-- value.
+--
+-- This command does not take any parameters.
+--
+module Network.AWS.DMS.DescribeAccountAttributes
+    (
+    -- * Creating a Request
+      describeAccountAttributes
+    , DescribeAccountAttributes
+
+    -- * Destructuring the Response
+    , describeAccountAttributesResponse
+    , DescribeAccountAttributesResponse
+    -- * Response Lenses
+    , daarsAccountQuotas
+    , daarsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeAccountAttributes' smart constructor.
+data DescribeAccountAttributes =
+    DescribeAccountAttributes'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeAccountAttributes' with the minimum fields required to make a request.
+--
+describeAccountAttributes
+    :: DescribeAccountAttributes
+describeAccountAttributes = DescribeAccountAttributes'
+
+instance AWSRequest DescribeAccountAttributes where
+        type Rs DescribeAccountAttributes =
+             DescribeAccountAttributesResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeAccountAttributesResponse' <$>
+                   (x .?> "AccountQuotas" .!@ mempty) <*>
+                     (pure (fromEnum s)))
+
+instance Hashable DescribeAccountAttributes
+
+instance ToHeaders DescribeAccountAttributes where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeAccountAttributes" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeAccountAttributes where
+        toJSON = const (Object mempty)
+
+instance ToPath DescribeAccountAttributes where
+        toPath = const "/"
+
+instance ToQuery DescribeAccountAttributes where
+        toQuery = const mempty
+
+-- | /See:/ 'describeAccountAttributesResponse' smart constructor.
+data DescribeAccountAttributesResponse = DescribeAccountAttributesResponse'
+    { _daarsAccountQuotas  :: !(Maybe [AccountQuota])
+    , _daarsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeAccountAttributesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daarsAccountQuotas'
+--
+-- * 'daarsResponseStatus'
+describeAccountAttributesResponse
+    :: Int -- ^ 'daarsResponseStatus'
+    -> DescribeAccountAttributesResponse
+describeAccountAttributesResponse pResponseStatus_ =
+    DescribeAccountAttributesResponse'
+    { _daarsAccountQuotas = Nothing
+    , _daarsResponseStatus = pResponseStatus_
+    }
+
+-- | Account quota information.
+daarsAccountQuotas :: Lens' DescribeAccountAttributesResponse [AccountQuota]
+daarsAccountQuotas = lens _daarsAccountQuotas (\ s a -> s{_daarsAccountQuotas = a}) . _Default . _Coerce;
+
+-- | The response status code.
+daarsResponseStatus :: Lens' DescribeAccountAttributesResponse Int
+daarsResponseStatus = lens _daarsResponseStatus (\ s a -> s{_daarsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeConnections.hs b/gen/Network/AWS/DMS/DescribeConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeConnections.hs
@@ -0,0 +1,174 @@
+{-# 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.DMS.DescribeConnections
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Describes the status of the connections that have been made between the
+-- replication instance and an endpoint. Connections are created when you
+-- test an endpoint.
+--
+module Network.AWS.DMS.DescribeConnections
+    (
+    -- * Creating a Request
+      describeConnections
+    , DescribeConnections
+    -- * Request Lenses
+    , dcFilters
+    , dcMarker
+    , dcMaxRecords
+
+    -- * Destructuring the Response
+    , describeConnectionsResponse
+    , DescribeConnectionsResponse
+    -- * Response Lenses
+    , dcrsConnections
+    , dcrsMarker
+    , dcrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeConnections' smart constructor.
+data DescribeConnections = DescribeConnections'
+    { _dcFilters    :: !(Maybe [Filter])
+    , _dcMarker     :: !(Maybe Text)
+    , _dcMaxRecords :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeConnections' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcFilters'
+--
+-- * 'dcMarker'
+--
+-- * 'dcMaxRecords'
+describeConnections
+    :: DescribeConnections
+describeConnections =
+    DescribeConnections'
+    { _dcFilters = Nothing
+    , _dcMarker = Nothing
+    , _dcMaxRecords = Nothing
+    }
+
+-- | The filters applied to the connection.
+--
+-- Valid filter names: endpoint-arn | replication-instance-arn
+dcFilters :: Lens' DescribeConnections [Filter]
+dcFilters = lens _dcFilters (\ s a -> s{_dcFilters = a}) . _Default . _Coerce;
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+dcMarker :: Lens' DescribeConnections (Maybe Text)
+dcMarker = lens _dcMarker (\ s a -> s{_dcMarker = a});
+
+-- | The maximum number of records to include in the response. If more
+-- records exist than the specified 'MaxRecords' value, a pagination token
+-- called a marker is included in the response so that the remaining
+-- results can be retrieved.
+--
+-- Default: 100
+--
+-- Constraints: Minimum 20, maximum 100.
+dcMaxRecords :: Lens' DescribeConnections (Maybe Int)
+dcMaxRecords = lens _dcMaxRecords (\ s a -> s{_dcMaxRecords = a});
+
+instance AWSRequest DescribeConnections where
+        type Rs DescribeConnections =
+             DescribeConnectionsResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeConnectionsResponse' <$>
+                   (x .?> "Connections" .!@ mempty) <*> (x .?> "Marker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeConnections
+
+instance ToHeaders DescribeConnections where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeConnections" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeConnections where
+        toJSON DescribeConnections'{..}
+          = object
+              (catMaybes
+                 [("Filters" .=) <$> _dcFilters,
+                  ("Marker" .=) <$> _dcMarker,
+                  ("MaxRecords" .=) <$> _dcMaxRecords])
+
+instance ToPath DescribeConnections where
+        toPath = const "/"
+
+instance ToQuery DescribeConnections where
+        toQuery = const mempty
+
+-- | /See:/ 'describeConnectionsResponse' smart constructor.
+data DescribeConnectionsResponse = DescribeConnectionsResponse'
+    { _dcrsConnections    :: !(Maybe [Connection])
+    , _dcrsMarker         :: !(Maybe Text)
+    , _dcrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeConnectionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcrsConnections'
+--
+-- * 'dcrsMarker'
+--
+-- * 'dcrsResponseStatus'
+describeConnectionsResponse
+    :: Int -- ^ 'dcrsResponseStatus'
+    -> DescribeConnectionsResponse
+describeConnectionsResponse pResponseStatus_ =
+    DescribeConnectionsResponse'
+    { _dcrsConnections = Nothing
+    , _dcrsMarker = Nothing
+    , _dcrsResponseStatus = pResponseStatus_
+    }
+
+-- | A description of the connections.
+dcrsConnections :: Lens' DescribeConnectionsResponse [Connection]
+dcrsConnections = lens _dcrsConnections (\ s a -> s{_dcrsConnections = a}) . _Default . _Coerce;
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+dcrsMarker :: Lens' DescribeConnectionsResponse (Maybe Text)
+dcrsMarker = lens _dcrsMarker (\ s a -> s{_dcrsMarker = a});
+
+-- | The response status code.
+dcrsResponseStatus :: Lens' DescribeConnectionsResponse Int
+dcrsResponseStatus = lens _dcrsResponseStatus (\ s a -> s{_dcrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeEndpointTypes.hs b/gen/Network/AWS/DMS/DescribeEndpointTypes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeEndpointTypes.hs
@@ -0,0 +1,173 @@
+{-# 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.DMS.DescribeEndpointTypes
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Returns information about the type of endpoints available.
+--
+module Network.AWS.DMS.DescribeEndpointTypes
+    (
+    -- * Creating a Request
+      describeEndpointTypes
+    , DescribeEndpointTypes
+    -- * Request Lenses
+    , detFilters
+    , detMarker
+    , detMaxRecords
+
+    -- * Destructuring the Response
+    , describeEndpointTypesResponse
+    , DescribeEndpointTypesResponse
+    -- * Response Lenses
+    , detrsSupportedEndpointTypes
+    , detrsMarker
+    , detrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeEndpointTypes' smart constructor.
+data DescribeEndpointTypes = DescribeEndpointTypes'
+    { _detFilters    :: !(Maybe [Filter])
+    , _detMarker     :: !(Maybe Text)
+    , _detMaxRecords :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeEndpointTypes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'detFilters'
+--
+-- * 'detMarker'
+--
+-- * 'detMaxRecords'
+describeEndpointTypes
+    :: DescribeEndpointTypes
+describeEndpointTypes =
+    DescribeEndpointTypes'
+    { _detFilters = Nothing
+    , _detMarker = Nothing
+    , _detMaxRecords = Nothing
+    }
+
+-- | Filters applied to the describe action.
+--
+-- Valid filter names: engine-name | endpoint-type
+detFilters :: Lens' DescribeEndpointTypes [Filter]
+detFilters = lens _detFilters (\ s a -> s{_detFilters = a}) . _Default . _Coerce;
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+detMarker :: Lens' DescribeEndpointTypes (Maybe Text)
+detMarker = lens _detMarker (\ s a -> s{_detMarker = a});
+
+-- | The maximum number of records to include in the response. If more
+-- records exist than the specified 'MaxRecords' value, a pagination token
+-- called a marker is included in the response so that the remaining
+-- results can be retrieved.
+--
+-- Default: 100
+--
+-- Constraints: Minimum 20, maximum 100.
+detMaxRecords :: Lens' DescribeEndpointTypes (Maybe Int)
+detMaxRecords = lens _detMaxRecords (\ s a -> s{_detMaxRecords = a});
+
+instance AWSRequest DescribeEndpointTypes where
+        type Rs DescribeEndpointTypes =
+             DescribeEndpointTypesResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeEndpointTypesResponse' <$>
+                   (x .?> "SupportedEndpointTypes" .!@ mempty) <*>
+                     (x .?> "Marker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeEndpointTypes
+
+instance ToHeaders DescribeEndpointTypes where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeEndpointTypes" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeEndpointTypes where
+        toJSON DescribeEndpointTypes'{..}
+          = object
+              (catMaybes
+                 [("Filters" .=) <$> _detFilters,
+                  ("Marker" .=) <$> _detMarker,
+                  ("MaxRecords" .=) <$> _detMaxRecords])
+
+instance ToPath DescribeEndpointTypes where
+        toPath = const "/"
+
+instance ToQuery DescribeEndpointTypes where
+        toQuery = const mempty
+
+-- | /See:/ 'describeEndpointTypesResponse' smart constructor.
+data DescribeEndpointTypesResponse = DescribeEndpointTypesResponse'
+    { _detrsSupportedEndpointTypes :: !(Maybe [SupportedEndpointType])
+    , _detrsMarker                 :: !(Maybe Text)
+    , _detrsResponseStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeEndpointTypesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'detrsSupportedEndpointTypes'
+--
+-- * 'detrsMarker'
+--
+-- * 'detrsResponseStatus'
+describeEndpointTypesResponse
+    :: Int -- ^ 'detrsResponseStatus'
+    -> DescribeEndpointTypesResponse
+describeEndpointTypesResponse pResponseStatus_ =
+    DescribeEndpointTypesResponse'
+    { _detrsSupportedEndpointTypes = Nothing
+    , _detrsMarker = Nothing
+    , _detrsResponseStatus = pResponseStatus_
+    }
+
+-- | The type of endpoints that are supported.
+detrsSupportedEndpointTypes :: Lens' DescribeEndpointTypesResponse [SupportedEndpointType]
+detrsSupportedEndpointTypes = lens _detrsSupportedEndpointTypes (\ s a -> s{_detrsSupportedEndpointTypes = a}) . _Default . _Coerce;
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+detrsMarker :: Lens' DescribeEndpointTypesResponse (Maybe Text)
+detrsMarker = lens _detrsMarker (\ s a -> s{_detrsMarker = a});
+
+-- | The response status code.
+detrsResponseStatus :: Lens' DescribeEndpointTypesResponse Int
+detrsResponseStatus = lens _detrsResponseStatus (\ s a -> s{_detrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeEndpoints.hs b/gen/Network/AWS/DMS/DescribeEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeEndpoints.hs
@@ -0,0 +1,173 @@
+{-# 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.DMS.DescribeEndpoints
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Returns information about the endpoints for your account in the current
+-- region.
+--
+module Network.AWS.DMS.DescribeEndpoints
+    (
+    -- * Creating a Request
+      describeEndpoints
+    , DescribeEndpoints
+    -- * Request Lenses
+    , deFilters
+    , deMarker
+    , deMaxRecords
+
+    -- * Destructuring the Response
+    , describeEndpointsResponse
+    , DescribeEndpointsResponse
+    -- * Response Lenses
+    , dersMarker
+    , dersEndpoints
+    , dersResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeEndpoints' smart constructor.
+data DescribeEndpoints = DescribeEndpoints'
+    { _deFilters    :: !(Maybe [Filter])
+    , _deMarker     :: !(Maybe Text)
+    , _deMaxRecords :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeEndpoints' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'deFilters'
+--
+-- * 'deMarker'
+--
+-- * 'deMaxRecords'
+describeEndpoints
+    :: DescribeEndpoints
+describeEndpoints =
+    DescribeEndpoints'
+    { _deFilters = Nothing
+    , _deMarker = Nothing
+    , _deMaxRecords = Nothing
+    }
+
+-- | Filters applied to the describe action.
+--
+-- Valid filter names: endpoint-arn | endpoint-type | endpoint-id |
+-- engine-name
+deFilters :: Lens' DescribeEndpoints [Filter]
+deFilters = lens _deFilters (\ s a -> s{_deFilters = a}) . _Default . _Coerce;
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+deMarker :: Lens' DescribeEndpoints (Maybe Text)
+deMarker = lens _deMarker (\ s a -> s{_deMarker = a});
+
+-- | The maximum number of records to include in the response. If more
+-- records exist than the specified 'MaxRecords' value, a pagination token
+-- called a marker is included in the response so that the remaining
+-- results can be retrieved.
+--
+-- Default: 100
+--
+-- Constraints: Minimum 20, maximum 100.
+deMaxRecords :: Lens' DescribeEndpoints (Maybe Int)
+deMaxRecords = lens _deMaxRecords (\ s a -> s{_deMaxRecords = a});
+
+instance AWSRequest DescribeEndpoints where
+        type Rs DescribeEndpoints = DescribeEndpointsResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeEndpointsResponse' <$>
+                   (x .?> "Marker") <*> (x .?> "Endpoints" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeEndpoints
+
+instance ToHeaders DescribeEndpoints where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeEndpoints" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeEndpoints where
+        toJSON DescribeEndpoints'{..}
+          = object
+              (catMaybes
+                 [("Filters" .=) <$> _deFilters,
+                  ("Marker" .=) <$> _deMarker,
+                  ("MaxRecords" .=) <$> _deMaxRecords])
+
+instance ToPath DescribeEndpoints where
+        toPath = const "/"
+
+instance ToQuery DescribeEndpoints where
+        toQuery = const mempty
+
+-- | /See:/ 'describeEndpointsResponse' smart constructor.
+data DescribeEndpointsResponse = DescribeEndpointsResponse'
+    { _dersMarker         :: !(Maybe Text)
+    , _dersEndpoints      :: !(Maybe [Endpoint])
+    , _dersResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeEndpointsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dersMarker'
+--
+-- * 'dersEndpoints'
+--
+-- * 'dersResponseStatus'
+describeEndpointsResponse
+    :: Int -- ^ 'dersResponseStatus'
+    -> DescribeEndpointsResponse
+describeEndpointsResponse pResponseStatus_ =
+    DescribeEndpointsResponse'
+    { _dersMarker = Nothing
+    , _dersEndpoints = Nothing
+    , _dersResponseStatus = pResponseStatus_
+    }
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+dersMarker :: Lens' DescribeEndpointsResponse (Maybe Text)
+dersMarker = lens _dersMarker (\ s a -> s{_dersMarker = a});
+
+-- | Endpoint description.
+dersEndpoints :: Lens' DescribeEndpointsResponse [Endpoint]
+dersEndpoints = lens _dersEndpoints (\ s a -> s{_dersEndpoints = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dersResponseStatus :: Lens' DescribeEndpointsResponse Int
+dersResponseStatus = lens _dersResponseStatus (\ s a -> s{_dersResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeOrderableReplicationInstances.hs b/gen/Network/AWS/DMS/DescribeOrderableReplicationInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeOrderableReplicationInstances.hs
@@ -0,0 +1,168 @@
+{-# 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.DMS.DescribeOrderableReplicationInstances
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Returns information about the replication instance types that can be
+-- created in the specified region.
+--
+module Network.AWS.DMS.DescribeOrderableReplicationInstances
+    (
+    -- * Creating a Request
+      describeOrderableReplicationInstances
+    , DescribeOrderableReplicationInstances
+    -- * Request Lenses
+    , doriMarker
+    , doriMaxRecords
+
+    -- * Destructuring the Response
+    , describeOrderableReplicationInstancesResponse
+    , DescribeOrderableReplicationInstancesResponse
+    -- * Response Lenses
+    , dorirsMarker
+    , dorirsOrderableReplicationInstances
+    , dorirsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeOrderableReplicationInstances' smart constructor.
+data DescribeOrderableReplicationInstances = DescribeOrderableReplicationInstances'
+    { _doriMarker     :: !(Maybe Text)
+    , _doriMaxRecords :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeOrderableReplicationInstances' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'doriMarker'
+--
+-- * 'doriMaxRecords'
+describeOrderableReplicationInstances
+    :: DescribeOrderableReplicationInstances
+describeOrderableReplicationInstances =
+    DescribeOrderableReplicationInstances'
+    { _doriMarker = Nothing
+    , _doriMaxRecords = Nothing
+    }
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+doriMarker :: Lens' DescribeOrderableReplicationInstances (Maybe Text)
+doriMarker = lens _doriMarker (\ s a -> s{_doriMarker = a});
+
+-- | The maximum number of records to include in the response. If more
+-- records exist than the specified 'MaxRecords' value, a pagination token
+-- called a marker is included in the response so that the remaining
+-- results can be retrieved.
+--
+-- Default: 100
+--
+-- Constraints: Minimum 20, maximum 100.
+doriMaxRecords :: Lens' DescribeOrderableReplicationInstances (Maybe Int)
+doriMaxRecords = lens _doriMaxRecords (\ s a -> s{_doriMaxRecords = a});
+
+instance AWSRequest
+         DescribeOrderableReplicationInstances where
+        type Rs DescribeOrderableReplicationInstances =
+             DescribeOrderableReplicationInstancesResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeOrderableReplicationInstancesResponse' <$>
+                   (x .?> "Marker") <*>
+                     (x .?> "OrderableReplicationInstances" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable
+         DescribeOrderableReplicationInstances
+
+instance ToHeaders
+         DescribeOrderableReplicationInstances where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeOrderableReplicationInstances"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeOrderableReplicationInstances
+         where
+        toJSON DescribeOrderableReplicationInstances'{..}
+          = object
+              (catMaybes
+                 [("Marker" .=) <$> _doriMarker,
+                  ("MaxRecords" .=) <$> _doriMaxRecords])
+
+instance ToPath DescribeOrderableReplicationInstances
+         where
+        toPath = const "/"
+
+instance ToQuery
+         DescribeOrderableReplicationInstances where
+        toQuery = const mempty
+
+-- | /See:/ 'describeOrderableReplicationInstancesResponse' smart constructor.
+data DescribeOrderableReplicationInstancesResponse = DescribeOrderableReplicationInstancesResponse'
+    { _dorirsMarker                        :: !(Maybe Text)
+    , _dorirsOrderableReplicationInstances :: !(Maybe [OrderableReplicationInstance])
+    , _dorirsResponseStatus                :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeOrderableReplicationInstancesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dorirsMarker'
+--
+-- * 'dorirsOrderableReplicationInstances'
+--
+-- * 'dorirsResponseStatus'
+describeOrderableReplicationInstancesResponse
+    :: Int -- ^ 'dorirsResponseStatus'
+    -> DescribeOrderableReplicationInstancesResponse
+describeOrderableReplicationInstancesResponse pResponseStatus_ =
+    DescribeOrderableReplicationInstancesResponse'
+    { _dorirsMarker = Nothing
+    , _dorirsOrderableReplicationInstances = Nothing
+    , _dorirsResponseStatus = pResponseStatus_
+    }
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+dorirsMarker :: Lens' DescribeOrderableReplicationInstancesResponse (Maybe Text)
+dorirsMarker = lens _dorirsMarker (\ s a -> s{_dorirsMarker = a});
+
+-- | The order-able replication instances available.
+dorirsOrderableReplicationInstances :: Lens' DescribeOrderableReplicationInstancesResponse [OrderableReplicationInstance]
+dorirsOrderableReplicationInstances = lens _dorirsOrderableReplicationInstances (\ s a -> s{_dorirsOrderableReplicationInstances = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dorirsResponseStatus :: Lens' DescribeOrderableReplicationInstancesResponse Int
+dorirsResponseStatus = lens _dorirsResponseStatus (\ s a -> s{_dorirsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeRefreshSchemasStatus.hs b/gen/Network/AWS/DMS/DescribeRefreshSchemasStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeRefreshSchemasStatus.hs
@@ -0,0 +1,133 @@
+{-# 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.DMS.DescribeRefreshSchemasStatus
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Returns the status of the RefreshSchemas operation.
+--
+module Network.AWS.DMS.DescribeRefreshSchemasStatus
+    (
+    -- * Creating a Request
+      describeRefreshSchemasStatus
+    , DescribeRefreshSchemasStatus
+    -- * Request Lenses
+    , drssEndpointARN
+
+    -- * Destructuring the Response
+    , describeRefreshSchemasStatusResponse
+    , DescribeRefreshSchemasStatusResponse
+    -- * Response Lenses
+    , drssrsRefreshSchemasStatus
+    , drssrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeRefreshSchemasStatus' smart constructor.
+newtype DescribeRefreshSchemasStatus = DescribeRefreshSchemasStatus'
+    { _drssEndpointARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeRefreshSchemasStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drssEndpointARN'
+describeRefreshSchemasStatus
+    :: Text -- ^ 'drssEndpointARN'
+    -> DescribeRefreshSchemasStatus
+describeRefreshSchemasStatus pEndpointARN_ =
+    DescribeRefreshSchemasStatus'
+    { _drssEndpointARN = pEndpointARN_
+    }
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+drssEndpointARN :: Lens' DescribeRefreshSchemasStatus Text
+drssEndpointARN = lens _drssEndpointARN (\ s a -> s{_drssEndpointARN = a});
+
+instance AWSRequest DescribeRefreshSchemasStatus
+         where
+        type Rs DescribeRefreshSchemasStatus =
+             DescribeRefreshSchemasStatusResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeRefreshSchemasStatusResponse' <$>
+                   (x .?> "RefreshSchemasStatus") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable DescribeRefreshSchemasStatus
+
+instance ToHeaders DescribeRefreshSchemasStatus where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeRefreshSchemasStatus" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeRefreshSchemasStatus where
+        toJSON DescribeRefreshSchemasStatus'{..}
+          = object
+              (catMaybes
+                 [Just ("EndpointArn" .= _drssEndpointARN)])
+
+instance ToPath DescribeRefreshSchemasStatus where
+        toPath = const "/"
+
+instance ToQuery DescribeRefreshSchemasStatus where
+        toQuery = const mempty
+
+-- | /See:/ 'describeRefreshSchemasStatusResponse' smart constructor.
+data DescribeRefreshSchemasStatusResponse = DescribeRefreshSchemasStatusResponse'
+    { _drssrsRefreshSchemasStatus :: !(Maybe RefreshSchemasStatus)
+    , _drssrsResponseStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeRefreshSchemasStatusResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drssrsRefreshSchemasStatus'
+--
+-- * 'drssrsResponseStatus'
+describeRefreshSchemasStatusResponse
+    :: Int -- ^ 'drssrsResponseStatus'
+    -> DescribeRefreshSchemasStatusResponse
+describeRefreshSchemasStatusResponse pResponseStatus_ =
+    DescribeRefreshSchemasStatusResponse'
+    { _drssrsRefreshSchemasStatus = Nothing
+    , _drssrsResponseStatus = pResponseStatus_
+    }
+
+-- | The status of the schema.
+drssrsRefreshSchemasStatus :: Lens' DescribeRefreshSchemasStatusResponse (Maybe RefreshSchemasStatus)
+drssrsRefreshSchemasStatus = lens _drssrsRefreshSchemasStatus (\ s a -> s{_drssrsRefreshSchemasStatus = a});
+
+-- | The response status code.
+drssrsResponseStatus :: Lens' DescribeRefreshSchemasStatusResponse Int
+drssrsResponseStatus = lens _drssrsResponseStatus (\ s a -> s{_drssrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeReplicationInstances.hs b/gen/Network/AWS/DMS/DescribeReplicationInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeReplicationInstances.hs
@@ -0,0 +1,176 @@
+{-# 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.DMS.DescribeReplicationInstances
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Returns information about replication instances for your account in the
+-- current region.
+--
+module Network.AWS.DMS.DescribeReplicationInstances
+    (
+    -- * Creating a Request
+      describeReplicationInstances
+    , DescribeReplicationInstances
+    -- * Request Lenses
+    , driFilters
+    , driMarker
+    , driMaxRecords
+
+    -- * Destructuring the Response
+    , describeReplicationInstancesResponse
+    , DescribeReplicationInstancesResponse
+    -- * Response Lenses
+    , drisrsMarker
+    , drisrsReplicationInstances
+    , drisrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeReplicationInstances' smart constructor.
+data DescribeReplicationInstances = DescribeReplicationInstances'
+    { _driFilters    :: !(Maybe [Filter])
+    , _driMarker     :: !(Maybe Text)
+    , _driMaxRecords :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeReplicationInstances' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'driFilters'
+--
+-- * 'driMarker'
+--
+-- * 'driMaxRecords'
+describeReplicationInstances
+    :: DescribeReplicationInstances
+describeReplicationInstances =
+    DescribeReplicationInstances'
+    { _driFilters = Nothing
+    , _driMarker = Nothing
+    , _driMaxRecords = Nothing
+    }
+
+-- | Filters applied to the describe action.
+--
+-- Valid filter names: replication-instance-arn | replication-instance-id |
+-- replication-instance-class | engine-version
+driFilters :: Lens' DescribeReplicationInstances [Filter]
+driFilters = lens _driFilters (\ s a -> s{_driFilters = a}) . _Default . _Coerce;
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+driMarker :: Lens' DescribeReplicationInstances (Maybe Text)
+driMarker = lens _driMarker (\ s a -> s{_driMarker = a});
+
+-- | The maximum number of records to include in the response. If more
+-- records exist than the specified 'MaxRecords' value, a pagination token
+-- called a marker is included in the response so that the remaining
+-- results can be retrieved.
+--
+-- Default: 100
+--
+-- Constraints: Minimum 20, maximum 100.
+driMaxRecords :: Lens' DescribeReplicationInstances (Maybe Int)
+driMaxRecords = lens _driMaxRecords (\ s a -> s{_driMaxRecords = a});
+
+instance AWSRequest DescribeReplicationInstances
+         where
+        type Rs DescribeReplicationInstances =
+             DescribeReplicationInstancesResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeReplicationInstancesResponse' <$>
+                   (x .?> "Marker") <*>
+                     (x .?> "ReplicationInstances" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeReplicationInstances
+
+instance ToHeaders DescribeReplicationInstances where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeReplicationInstances" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeReplicationInstances where
+        toJSON DescribeReplicationInstances'{..}
+          = object
+              (catMaybes
+                 [("Filters" .=) <$> _driFilters,
+                  ("Marker" .=) <$> _driMarker,
+                  ("MaxRecords" .=) <$> _driMaxRecords])
+
+instance ToPath DescribeReplicationInstances where
+        toPath = const "/"
+
+instance ToQuery DescribeReplicationInstances where
+        toQuery = const mempty
+
+-- | /See:/ 'describeReplicationInstancesResponse' smart constructor.
+data DescribeReplicationInstancesResponse = DescribeReplicationInstancesResponse'
+    { _drisrsMarker               :: !(Maybe Text)
+    , _drisrsReplicationInstances :: !(Maybe [ReplicationInstance])
+    , _drisrsResponseStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeReplicationInstancesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drisrsMarker'
+--
+-- * 'drisrsReplicationInstances'
+--
+-- * 'drisrsResponseStatus'
+describeReplicationInstancesResponse
+    :: Int -- ^ 'drisrsResponseStatus'
+    -> DescribeReplicationInstancesResponse
+describeReplicationInstancesResponse pResponseStatus_ =
+    DescribeReplicationInstancesResponse'
+    { _drisrsMarker = Nothing
+    , _drisrsReplicationInstances = Nothing
+    , _drisrsResponseStatus = pResponseStatus_
+    }
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+drisrsMarker :: Lens' DescribeReplicationInstancesResponse (Maybe Text)
+drisrsMarker = lens _drisrsMarker (\ s a -> s{_drisrsMarker = a});
+
+-- | The replication instances described.
+drisrsReplicationInstances :: Lens' DescribeReplicationInstancesResponse [ReplicationInstance]
+drisrsReplicationInstances = lens _drisrsReplicationInstances (\ s a -> s{_drisrsReplicationInstances = a}) . _Default . _Coerce;
+
+-- | The response status code.
+drisrsResponseStatus :: Lens' DescribeReplicationInstancesResponse Int
+drisrsResponseStatus = lens _drisrsResponseStatus (\ s a -> s{_drisrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeReplicationSubnetGroups.hs b/gen/Network/AWS/DMS/DescribeReplicationSubnetGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeReplicationSubnetGroups.hs
@@ -0,0 +1,174 @@
+{-# 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.DMS.DescribeReplicationSubnetGroups
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Returns information about the replication subnet groups.
+--
+module Network.AWS.DMS.DescribeReplicationSubnetGroups
+    (
+    -- * Creating a Request
+      describeReplicationSubnetGroups
+    , DescribeReplicationSubnetGroups
+    -- * Request Lenses
+    , drsgFilters
+    , drsgMarker
+    , drsgMaxRecords
+
+    -- * Destructuring the Response
+    , describeReplicationSubnetGroupsResponse
+    , DescribeReplicationSubnetGroupsResponse
+    -- * Response Lenses
+    , drsgsrsMarker
+    , drsgsrsReplicationSubnetGroups
+    , drsgsrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeReplicationSubnetGroups' smart constructor.
+data DescribeReplicationSubnetGroups = DescribeReplicationSubnetGroups'
+    { _drsgFilters    :: !(Maybe [Filter])
+    , _drsgMarker     :: !(Maybe Text)
+    , _drsgMaxRecords :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeReplicationSubnetGroups' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsgFilters'
+--
+-- * 'drsgMarker'
+--
+-- * 'drsgMaxRecords'
+describeReplicationSubnetGroups
+    :: DescribeReplicationSubnetGroups
+describeReplicationSubnetGroups =
+    DescribeReplicationSubnetGroups'
+    { _drsgFilters = Nothing
+    , _drsgMarker = Nothing
+    , _drsgMaxRecords = Nothing
+    }
+
+-- | Filters applied to the describe action.
+drsgFilters :: Lens' DescribeReplicationSubnetGroups [Filter]
+drsgFilters = lens _drsgFilters (\ s a -> s{_drsgFilters = a}) . _Default . _Coerce;
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+drsgMarker :: Lens' DescribeReplicationSubnetGroups (Maybe Text)
+drsgMarker = lens _drsgMarker (\ s a -> s{_drsgMarker = a});
+
+-- | The maximum number of records to include in the response. If more
+-- records exist than the specified 'MaxRecords' value, a pagination token
+-- called a marker is included in the response so that the remaining
+-- results can be retrieved.
+--
+-- Default: 100
+--
+-- Constraints: Minimum 20, maximum 100.
+drsgMaxRecords :: Lens' DescribeReplicationSubnetGroups (Maybe Int)
+drsgMaxRecords = lens _drsgMaxRecords (\ s a -> s{_drsgMaxRecords = a});
+
+instance AWSRequest DescribeReplicationSubnetGroups
+         where
+        type Rs DescribeReplicationSubnetGroups =
+             DescribeReplicationSubnetGroupsResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeReplicationSubnetGroupsResponse' <$>
+                   (x .?> "Marker") <*>
+                     (x .?> "ReplicationSubnetGroups" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeReplicationSubnetGroups
+
+instance ToHeaders DescribeReplicationSubnetGroups
+         where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeReplicationSubnetGroups"
+                       :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeReplicationSubnetGroups where
+        toJSON DescribeReplicationSubnetGroups'{..}
+          = object
+              (catMaybes
+                 [("Filters" .=) <$> _drsgFilters,
+                  ("Marker" .=) <$> _drsgMarker,
+                  ("MaxRecords" .=) <$> _drsgMaxRecords])
+
+instance ToPath DescribeReplicationSubnetGroups where
+        toPath = const "/"
+
+instance ToQuery DescribeReplicationSubnetGroups
+         where
+        toQuery = const mempty
+
+-- | /See:/ 'describeReplicationSubnetGroupsResponse' smart constructor.
+data DescribeReplicationSubnetGroupsResponse = DescribeReplicationSubnetGroupsResponse'
+    { _drsgsrsMarker                  :: !(Maybe Text)
+    , _drsgsrsReplicationSubnetGroups :: !(Maybe [ReplicationSubnetGroup])
+    , _drsgsrsResponseStatus          :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeReplicationSubnetGroupsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsgsrsMarker'
+--
+-- * 'drsgsrsReplicationSubnetGroups'
+--
+-- * 'drsgsrsResponseStatus'
+describeReplicationSubnetGroupsResponse
+    :: Int -- ^ 'drsgsrsResponseStatus'
+    -> DescribeReplicationSubnetGroupsResponse
+describeReplicationSubnetGroupsResponse pResponseStatus_ =
+    DescribeReplicationSubnetGroupsResponse'
+    { _drsgsrsMarker = Nothing
+    , _drsgsrsReplicationSubnetGroups = Nothing
+    , _drsgsrsResponseStatus = pResponseStatus_
+    }
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+drsgsrsMarker :: Lens' DescribeReplicationSubnetGroupsResponse (Maybe Text)
+drsgsrsMarker = lens _drsgsrsMarker (\ s a -> s{_drsgsrsMarker = a});
+
+-- | A description of the replication subnet groups.
+drsgsrsReplicationSubnetGroups :: Lens' DescribeReplicationSubnetGroupsResponse [ReplicationSubnetGroup]
+drsgsrsReplicationSubnetGroups = lens _drsgsrsReplicationSubnetGroups (\ s a -> s{_drsgsrsReplicationSubnetGroups = a}) . _Default . _Coerce;
+
+-- | The response status code.
+drsgsrsResponseStatus :: Lens' DescribeReplicationSubnetGroupsResponse Int
+drsgsrsResponseStatus = lens _drsgsrsResponseStatus (\ s a -> s{_drsgsrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeReplicationTasks.hs b/gen/Network/AWS/DMS/DescribeReplicationTasks.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeReplicationTasks.hs
@@ -0,0 +1,175 @@
+{-# 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.DMS.DescribeReplicationTasks
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Returns information about replication tasks for your account in the
+-- current region.
+--
+module Network.AWS.DMS.DescribeReplicationTasks
+    (
+    -- * Creating a Request
+      describeReplicationTasks
+    , DescribeReplicationTasks
+    -- * Request Lenses
+    , drtFilters
+    , drtMarker
+    , drtMaxRecords
+
+    -- * Destructuring the Response
+    , describeReplicationTasksResponse
+    , DescribeReplicationTasksResponse
+    -- * Response Lenses
+    , drtsrsReplicationTasks
+    , drtsrsMarker
+    , drtsrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeReplicationTasks' smart constructor.
+data DescribeReplicationTasks = DescribeReplicationTasks'
+    { _drtFilters    :: !(Maybe [Filter])
+    , _drtMarker     :: !(Maybe Text)
+    , _drtMaxRecords :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeReplicationTasks' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drtFilters'
+--
+-- * 'drtMarker'
+--
+-- * 'drtMaxRecords'
+describeReplicationTasks
+    :: DescribeReplicationTasks
+describeReplicationTasks =
+    DescribeReplicationTasks'
+    { _drtFilters = Nothing
+    , _drtMarker = Nothing
+    , _drtMaxRecords = Nothing
+    }
+
+-- | Filters applied to the describe action.
+--
+-- Valid filter names: replication-task-arn | replication-task-id |
+-- migration-type | endpoint-arn | replication-instance-arn
+drtFilters :: Lens' DescribeReplicationTasks [Filter]
+drtFilters = lens _drtFilters (\ s a -> s{_drtFilters = a}) . _Default . _Coerce;
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+drtMarker :: Lens' DescribeReplicationTasks (Maybe Text)
+drtMarker = lens _drtMarker (\ s a -> s{_drtMarker = a});
+
+-- | The maximum number of records to include in the response. If more
+-- records exist than the specified 'MaxRecords' value, a pagination token
+-- called a marker is included in the response so that the remaining
+-- results can be retrieved.
+--
+-- Default: 100
+--
+-- Constraints: Minimum 20, maximum 100.
+drtMaxRecords :: Lens' DescribeReplicationTasks (Maybe Int)
+drtMaxRecords = lens _drtMaxRecords (\ s a -> s{_drtMaxRecords = a});
+
+instance AWSRequest DescribeReplicationTasks where
+        type Rs DescribeReplicationTasks =
+             DescribeReplicationTasksResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeReplicationTasksResponse' <$>
+                   (x .?> "ReplicationTasks" .!@ mempty) <*>
+                     (x .?> "Marker")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeReplicationTasks
+
+instance ToHeaders DescribeReplicationTasks where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeReplicationTasks" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeReplicationTasks where
+        toJSON DescribeReplicationTasks'{..}
+          = object
+              (catMaybes
+                 [("Filters" .=) <$> _drtFilters,
+                  ("Marker" .=) <$> _drtMarker,
+                  ("MaxRecords" .=) <$> _drtMaxRecords])
+
+instance ToPath DescribeReplicationTasks where
+        toPath = const "/"
+
+instance ToQuery DescribeReplicationTasks where
+        toQuery = const mempty
+
+-- | /See:/ 'describeReplicationTasksResponse' smart constructor.
+data DescribeReplicationTasksResponse = DescribeReplicationTasksResponse'
+    { _drtsrsReplicationTasks :: !(Maybe [ReplicationTask])
+    , _drtsrsMarker           :: !(Maybe Text)
+    , _drtsrsResponseStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeReplicationTasksResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drtsrsReplicationTasks'
+--
+-- * 'drtsrsMarker'
+--
+-- * 'drtsrsResponseStatus'
+describeReplicationTasksResponse
+    :: Int -- ^ 'drtsrsResponseStatus'
+    -> DescribeReplicationTasksResponse
+describeReplicationTasksResponse pResponseStatus_ =
+    DescribeReplicationTasksResponse'
+    { _drtsrsReplicationTasks = Nothing
+    , _drtsrsMarker = Nothing
+    , _drtsrsResponseStatus = pResponseStatus_
+    }
+
+-- | A description of the replication tasks.
+drtsrsReplicationTasks :: Lens' DescribeReplicationTasksResponse [ReplicationTask]
+drtsrsReplicationTasks = lens _drtsrsReplicationTasks (\ s a -> s{_drtsrsReplicationTasks = a}) . _Default . _Coerce;
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+drtsrsMarker :: Lens' DescribeReplicationTasksResponse (Maybe Text)
+drtsrsMarker = lens _drtsrsMarker (\ s a -> s{_drtsrsMarker = a});
+
+-- | The response status code.
+drtsrsResponseStatus :: Lens' DescribeReplicationTasksResponse Int
+drtsrsResponseStatus = lens _drtsrsResponseStatus (\ s a -> s{_drtsrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeSchemas.hs b/gen/Network/AWS/DMS/DescribeSchemas.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeSchemas.hs
@@ -0,0 +1,170 @@
+{-# 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.DMS.DescribeSchemas
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Returns information about the schema for the specified endpoint.
+--
+module Network.AWS.DMS.DescribeSchemas
+    (
+    -- * Creating a Request
+      describeSchemas
+    , DescribeSchemas
+    -- * Request Lenses
+    , dsMarker
+    , dsMaxRecords
+    , dsEndpointARN
+
+    -- * Destructuring the Response
+    , describeSchemasResponse
+    , DescribeSchemasResponse
+    -- * Response Lenses
+    , dsrsSchemas
+    , dsrsMarker
+    , dsrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeSchemas' smart constructor.
+data DescribeSchemas = DescribeSchemas'
+    { _dsMarker      :: !(Maybe Text)
+    , _dsMaxRecords  :: !(Maybe Int)
+    , _dsEndpointARN :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeSchemas' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsMarker'
+--
+-- * 'dsMaxRecords'
+--
+-- * 'dsEndpointARN'
+describeSchemas
+    :: Text -- ^ 'dsEndpointARN'
+    -> DescribeSchemas
+describeSchemas pEndpointARN_ =
+    DescribeSchemas'
+    { _dsMarker = Nothing
+    , _dsMaxRecords = Nothing
+    , _dsEndpointARN = pEndpointARN_
+    }
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+dsMarker :: Lens' DescribeSchemas (Maybe Text)
+dsMarker = lens _dsMarker (\ s a -> s{_dsMarker = a});
+
+-- | The maximum number of records to include in the response. If more
+-- records exist than the specified 'MaxRecords' value, a pagination token
+-- called a marker is included in the response so that the remaining
+-- results can be retrieved.
+--
+-- Default: 100
+--
+-- Constraints: Minimum 20, maximum 100.
+dsMaxRecords :: Lens' DescribeSchemas (Maybe Int)
+dsMaxRecords = lens _dsMaxRecords (\ s a -> s{_dsMaxRecords = a});
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+dsEndpointARN :: Lens' DescribeSchemas Text
+dsEndpointARN = lens _dsEndpointARN (\ s a -> s{_dsEndpointARN = a});
+
+instance AWSRequest DescribeSchemas where
+        type Rs DescribeSchemas = DescribeSchemasResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeSchemasResponse' <$>
+                   (x .?> "Schemas" .!@ mempty) <*> (x .?> "Marker") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable DescribeSchemas
+
+instance ToHeaders DescribeSchemas where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeSchemas" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeSchemas where
+        toJSON DescribeSchemas'{..}
+          = object
+              (catMaybes
+                 [("Marker" .=) <$> _dsMarker,
+                  ("MaxRecords" .=) <$> _dsMaxRecords,
+                  Just ("EndpointArn" .= _dsEndpointARN)])
+
+instance ToPath DescribeSchemas where
+        toPath = const "/"
+
+instance ToQuery DescribeSchemas where
+        toQuery = const mempty
+
+-- | /See:/ 'describeSchemasResponse' smart constructor.
+data DescribeSchemasResponse = DescribeSchemasResponse'
+    { _dsrsSchemas        :: !(Maybe [Text])
+    , _dsrsMarker         :: !(Maybe Text)
+    , _dsrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeSchemasResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsrsSchemas'
+--
+-- * 'dsrsMarker'
+--
+-- * 'dsrsResponseStatus'
+describeSchemasResponse
+    :: Int -- ^ 'dsrsResponseStatus'
+    -> DescribeSchemasResponse
+describeSchemasResponse pResponseStatus_ =
+    DescribeSchemasResponse'
+    { _dsrsSchemas = Nothing
+    , _dsrsMarker = Nothing
+    , _dsrsResponseStatus = pResponseStatus_
+    }
+
+-- | The described schema.
+dsrsSchemas :: Lens' DescribeSchemasResponse [Text]
+dsrsSchemas = lens _dsrsSchemas (\ s a -> s{_dsrsSchemas = a}) . _Default . _Coerce;
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+dsrsMarker :: Lens' DescribeSchemasResponse (Maybe Text)
+dsrsMarker = lens _dsrsMarker (\ s a -> s{_dsrsMarker = a});
+
+-- | The response status code.
+dsrsResponseStatus :: Lens' DescribeSchemasResponse Int
+dsrsResponseStatus = lens _dsrsResponseStatus (\ s a -> s{_dsrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/DescribeTableStatistics.hs b/gen/Network/AWS/DMS/DescribeTableStatistics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/DescribeTableStatistics.hs
@@ -0,0 +1,183 @@
+{-# 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.DMS.DescribeTableStatistics
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Returns table statistics on the database migration task, including table
+-- name, rows inserted, rows updated, and rows deleted.
+--
+module Network.AWS.DMS.DescribeTableStatistics
+    (
+    -- * Creating a Request
+      describeTableStatistics
+    , DescribeTableStatistics
+    -- * Request Lenses
+    , dtsMarker
+    , dtsMaxRecords
+    , dtsReplicationTaskARN
+
+    -- * Destructuring the Response
+    , describeTableStatisticsResponse
+    , DescribeTableStatisticsResponse
+    -- * Response Lenses
+    , dtsrsReplicationTaskARN
+    , dtsrsMarker
+    , dtsrsTableStatistics
+    , dtsrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'describeTableStatistics' smart constructor.
+data DescribeTableStatistics = DescribeTableStatistics'
+    { _dtsMarker             :: !(Maybe Text)
+    , _dtsMaxRecords         :: !(Maybe Int)
+    , _dtsReplicationTaskARN :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeTableStatistics' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtsMarker'
+--
+-- * 'dtsMaxRecords'
+--
+-- * 'dtsReplicationTaskARN'
+describeTableStatistics
+    :: Text -- ^ 'dtsReplicationTaskARN'
+    -> DescribeTableStatistics
+describeTableStatistics pReplicationTaskARN_ =
+    DescribeTableStatistics'
+    { _dtsMarker = Nothing
+    , _dtsMaxRecords = Nothing
+    , _dtsReplicationTaskARN = pReplicationTaskARN_
+    }
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+dtsMarker :: Lens' DescribeTableStatistics (Maybe Text)
+dtsMarker = lens _dtsMarker (\ s a -> s{_dtsMarker = a});
+
+-- | The maximum number of records to include in the response. If more
+-- records exist than the specified 'MaxRecords' value, a pagination token
+-- called a marker is included in the response so that the remaining
+-- results can be retrieved.
+--
+-- Default: 100
+--
+-- Constraints: Minimum 20, maximum 100.
+dtsMaxRecords :: Lens' DescribeTableStatistics (Maybe Int)
+dtsMaxRecords = lens _dtsMaxRecords (\ s a -> s{_dtsMaxRecords = a});
+
+-- | The Amazon Resource Name (ARN) of the replication task.
+dtsReplicationTaskARN :: Lens' DescribeTableStatistics Text
+dtsReplicationTaskARN = lens _dtsReplicationTaskARN (\ s a -> s{_dtsReplicationTaskARN = a});
+
+instance AWSRequest DescribeTableStatistics where
+        type Rs DescribeTableStatistics =
+             DescribeTableStatisticsResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeTableStatisticsResponse' <$>
+                   (x .?> "ReplicationTaskArn") <*> (x .?> "Marker") <*>
+                     (x .?> "TableStatistics" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeTableStatistics
+
+instance ToHeaders DescribeTableStatistics where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.DescribeTableStatistics" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeTableStatistics where
+        toJSON DescribeTableStatistics'{..}
+          = object
+              (catMaybes
+                 [("Marker" .=) <$> _dtsMarker,
+                  ("MaxRecords" .=) <$> _dtsMaxRecords,
+                  Just
+                    ("ReplicationTaskArn" .= _dtsReplicationTaskARN)])
+
+instance ToPath DescribeTableStatistics where
+        toPath = const "/"
+
+instance ToQuery DescribeTableStatistics where
+        toQuery = const mempty
+
+-- | /See:/ 'describeTableStatisticsResponse' smart constructor.
+data DescribeTableStatisticsResponse = DescribeTableStatisticsResponse'
+    { _dtsrsReplicationTaskARN :: !(Maybe Text)
+    , _dtsrsMarker             :: !(Maybe Text)
+    , _dtsrsTableStatistics    :: !(Maybe [TableStatistics])
+    , _dtsrsResponseStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeTableStatisticsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtsrsReplicationTaskARN'
+--
+-- * 'dtsrsMarker'
+--
+-- * 'dtsrsTableStatistics'
+--
+-- * 'dtsrsResponseStatus'
+describeTableStatisticsResponse
+    :: Int -- ^ 'dtsrsResponseStatus'
+    -> DescribeTableStatisticsResponse
+describeTableStatisticsResponse pResponseStatus_ =
+    DescribeTableStatisticsResponse'
+    { _dtsrsReplicationTaskARN = Nothing
+    , _dtsrsMarker = Nothing
+    , _dtsrsTableStatistics = Nothing
+    , _dtsrsResponseStatus = pResponseStatus_
+    }
+
+-- | The Amazon Resource Name (ARN) of the replication task.
+dtsrsReplicationTaskARN :: Lens' DescribeTableStatisticsResponse (Maybe Text)
+dtsrsReplicationTaskARN = lens _dtsrsReplicationTaskARN (\ s a -> s{_dtsrsReplicationTaskARN = a});
+
+-- | An optional pagination token provided by a previous request. If this
+-- parameter is specified, the response includes only records beyond the
+-- marker, up to the value specified by 'MaxRecords'.
+dtsrsMarker :: Lens' DescribeTableStatisticsResponse (Maybe Text)
+dtsrsMarker = lens _dtsrsMarker (\ s a -> s{_dtsrsMarker = a});
+
+-- | The table statistics.
+dtsrsTableStatistics :: Lens' DescribeTableStatisticsResponse [TableStatistics]
+dtsrsTableStatistics = lens _dtsrsTableStatistics (\ s a -> s{_dtsrsTableStatistics = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dtsrsResponseStatus :: Lens' DescribeTableStatisticsResponse Int
+dtsrsResponseStatus = lens _dtsrsResponseStatus (\ s a -> s{_dtsrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/ListTagsForResource.hs b/gen/Network/AWS/DMS/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/ListTagsForResource.hs
@@ -0,0 +1,131 @@
+{-# 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.DMS.ListTagsForResource
+-- Copyright   : (c) 2013-2016 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)
+--
+-- For internal use only
+--
+module Network.AWS.DMS.ListTagsForResource
+    (
+    -- * Creating a Request
+      listTagsForResource
+    , ListTagsForResource
+    -- * Request Lenses
+    , ltfrResourceARN
+
+    -- * Destructuring the Response
+    , listTagsForResourceResponse
+    , ListTagsForResourceResponse
+    -- * Response Lenses
+    , ltfrrsTagList
+    , ltfrrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'listTagsForResource' smart constructor.
+newtype ListTagsForResource = ListTagsForResource'
+    { _ltfrResourceARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTagsForResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltfrResourceARN'
+listTagsForResource
+    :: Text -- ^ 'ltfrResourceARN'
+    -> ListTagsForResource
+listTagsForResource pResourceARN_ =
+    ListTagsForResource'
+    { _ltfrResourceARN = pResourceARN_
+    }
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the AWS
+-- DMS resource.
+ltfrResourceARN :: Lens' ListTagsForResource Text
+ltfrResourceARN = lens _ltfrResourceARN (\ s a -> s{_ltfrResourceARN = a});
+
+instance AWSRequest ListTagsForResource where
+        type Rs ListTagsForResource =
+             ListTagsForResourceResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListTagsForResourceResponse' <$>
+                   (x .?> "TagList" .!@ mempty) <*> (pure (fromEnum s)))
+
+instance Hashable ListTagsForResource
+
+instance ToHeaders ListTagsForResource where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.ListTagsForResource" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListTagsForResource where
+        toJSON ListTagsForResource'{..}
+          = object
+              (catMaybes
+                 [Just ("ResourceArn" .= _ltfrResourceARN)])
+
+instance ToPath ListTagsForResource where
+        toPath = const "/"
+
+instance ToQuery ListTagsForResource where
+        toQuery = const mempty
+
+-- | /See:/ 'listTagsForResourceResponse' smart constructor.
+data ListTagsForResourceResponse = ListTagsForResourceResponse'
+    { _ltfrrsTagList        :: !(Maybe [Tag])
+    , _ltfrrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListTagsForResourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ltfrrsTagList'
+--
+-- * 'ltfrrsResponseStatus'
+listTagsForResourceResponse
+    :: Int -- ^ 'ltfrrsResponseStatus'
+    -> ListTagsForResourceResponse
+listTagsForResourceResponse pResponseStatus_ =
+    ListTagsForResourceResponse'
+    { _ltfrrsTagList = Nothing
+    , _ltfrrsResponseStatus = pResponseStatus_
+    }
+
+-- | A list of tags for the resource.
+ltfrrsTagList :: Lens' ListTagsForResourceResponse [Tag]
+ltfrrsTagList = lens _ltfrrsTagList (\ s a -> s{_ltfrrsTagList = a}) . _Default . _Coerce;
+
+-- | The response status code.
+ltfrrsResponseStatus :: Lens' ListTagsForResourceResponse Int
+ltfrrsResponseStatus = lens _ltfrrsResponseStatus (\ s a -> s{_ltfrrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/ModifyEndpoint.hs b/gen/Network/AWS/DMS/ModifyEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/ModifyEndpoint.hs
@@ -0,0 +1,223 @@
+{-# 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.DMS.ModifyEndpoint
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Modifies the specified endpoint.
+--
+module Network.AWS.DMS.ModifyEndpoint
+    (
+    -- * Creating a Request
+      modifyEndpoint
+    , ModifyEndpoint
+    -- * Request Lenses
+    , meServerName
+    , meExtraConnectionAttributes
+    , meEndpointType
+    , meUsername
+    , meEngineName
+    , mePassword
+    , meDatabaseName
+    , meEndpointIdentifier
+    , mePort
+    , meEndpointARN
+
+    -- * Destructuring the Response
+    , modifyEndpointResponse
+    , ModifyEndpointResponse
+    -- * Response Lenses
+    , mersEndpoint
+    , mersResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'modifyEndpoint' smart constructor.
+data ModifyEndpoint = ModifyEndpoint'
+    { _meServerName                :: !(Maybe Text)
+    , _meExtraConnectionAttributes :: !(Maybe Text)
+    , _meEndpointType              :: !(Maybe ReplicationEndpointTypeValue)
+    , _meUsername                  :: !(Maybe Text)
+    , _meEngineName                :: !(Maybe Text)
+    , _mePassword                  :: !(Maybe (Sensitive Text))
+    , _meDatabaseName              :: !(Maybe Text)
+    , _meEndpointIdentifier        :: !(Maybe Text)
+    , _mePort                      :: !(Maybe Int)
+    , _meEndpointARN               :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyEndpoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'meServerName'
+--
+-- * 'meExtraConnectionAttributes'
+--
+-- * 'meEndpointType'
+--
+-- * 'meUsername'
+--
+-- * 'meEngineName'
+--
+-- * 'mePassword'
+--
+-- * 'meDatabaseName'
+--
+-- * 'meEndpointIdentifier'
+--
+-- * 'mePort'
+--
+-- * 'meEndpointARN'
+modifyEndpoint
+    :: Text -- ^ 'meEndpointARN'
+    -> ModifyEndpoint
+modifyEndpoint pEndpointARN_ =
+    ModifyEndpoint'
+    { _meServerName = Nothing
+    , _meExtraConnectionAttributes = Nothing
+    , _meEndpointType = Nothing
+    , _meUsername = Nothing
+    , _meEngineName = Nothing
+    , _mePassword = Nothing
+    , _meDatabaseName = Nothing
+    , _meEndpointIdentifier = Nothing
+    , _mePort = Nothing
+    , _meEndpointARN = pEndpointARN_
+    }
+
+-- | The name of the server where the endpoint database resides.
+meServerName :: Lens' ModifyEndpoint (Maybe Text)
+meServerName = lens _meServerName (\ s a -> s{_meServerName = a});
+
+-- | Additional attributes associated with the connection.
+meExtraConnectionAttributes :: Lens' ModifyEndpoint (Maybe Text)
+meExtraConnectionAttributes = lens _meExtraConnectionAttributes (\ s a -> s{_meExtraConnectionAttributes = a});
+
+-- | The type of endpoint.
+meEndpointType :: Lens' ModifyEndpoint (Maybe ReplicationEndpointTypeValue)
+meEndpointType = lens _meEndpointType (\ s a -> s{_meEndpointType = a});
+
+-- | The user name to be used to login to the endpoint database.
+meUsername :: Lens' ModifyEndpoint (Maybe Text)
+meUsername = lens _meUsername (\ s a -> s{_meUsername = a});
+
+-- | The type of engine for the endpoint. Valid values include MYSQL, ORACLE,
+-- POSTGRES.
+meEngineName :: Lens' ModifyEndpoint (Maybe Text)
+meEngineName = lens _meEngineName (\ s a -> s{_meEngineName = a});
+
+-- | The password to be used to login to the endpoint database.
+mePassword :: Lens' ModifyEndpoint (Maybe Text)
+mePassword = lens _mePassword (\ s a -> s{_mePassword = a}) . mapping _Sensitive;
+
+-- | The name of the endpoint database.
+meDatabaseName :: Lens' ModifyEndpoint (Maybe Text)
+meDatabaseName = lens _meDatabaseName (\ s a -> s{_meDatabaseName = a});
+
+-- | The database endpoint identifier. Identifiers must begin with a letter;
+-- must contain only ASCII letters, digits, and hyphens; and must not end
+-- with a hyphen or contain two consecutive hyphens.
+meEndpointIdentifier :: Lens' ModifyEndpoint (Maybe Text)
+meEndpointIdentifier = lens _meEndpointIdentifier (\ s a -> s{_meEndpointIdentifier = a});
+
+-- | The port used by the endpoint database.
+mePort :: Lens' ModifyEndpoint (Maybe Int)
+mePort = lens _mePort (\ s a -> s{_mePort = a});
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+meEndpointARN :: Lens' ModifyEndpoint Text
+meEndpointARN = lens _meEndpointARN (\ s a -> s{_meEndpointARN = a});
+
+instance AWSRequest ModifyEndpoint where
+        type Rs ModifyEndpoint = ModifyEndpointResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ModifyEndpointResponse' <$>
+                   (x .?> "Endpoint") <*> (pure (fromEnum s)))
+
+instance Hashable ModifyEndpoint
+
+instance ToHeaders ModifyEndpoint where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.ModifyEndpoint" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ModifyEndpoint where
+        toJSON ModifyEndpoint'{..}
+          = object
+              (catMaybes
+                 [("ServerName" .=) <$> _meServerName,
+                  ("ExtraConnectionAttributes" .=) <$>
+                    _meExtraConnectionAttributes,
+                  ("EndpointType" .=) <$> _meEndpointType,
+                  ("Username" .=) <$> _meUsername,
+                  ("EngineName" .=) <$> _meEngineName,
+                  ("Password" .=) <$> _mePassword,
+                  ("DatabaseName" .=) <$> _meDatabaseName,
+                  ("EndpointIdentifier" .=) <$> _meEndpointIdentifier,
+                  ("Port" .=) <$> _mePort,
+                  Just ("EndpointArn" .= _meEndpointARN)])
+
+instance ToPath ModifyEndpoint where
+        toPath = const "/"
+
+instance ToQuery ModifyEndpoint where
+        toQuery = const mempty
+
+-- | /See:/ 'modifyEndpointResponse' smart constructor.
+data ModifyEndpointResponse = ModifyEndpointResponse'
+    { _mersEndpoint       :: !(Maybe Endpoint)
+    , _mersResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyEndpointResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mersEndpoint'
+--
+-- * 'mersResponseStatus'
+modifyEndpointResponse
+    :: Int -- ^ 'mersResponseStatus'
+    -> ModifyEndpointResponse
+modifyEndpointResponse pResponseStatus_ =
+    ModifyEndpointResponse'
+    { _mersEndpoint = Nothing
+    , _mersResponseStatus = pResponseStatus_
+    }
+
+-- | The modified endpoint.
+mersEndpoint :: Lens' ModifyEndpointResponse (Maybe Endpoint)
+mersEndpoint = lens _mersEndpoint (\ s a -> s{_mersEndpoint = a});
+
+-- | The response status code.
+mersResponseStatus :: Lens' ModifyEndpointResponse Int
+mersResponseStatus = lens _mersResponseStatus (\ s a -> s{_mersResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/ModifyReplicationInstance.hs b/gen/Network/AWS/DMS/ModifyReplicationInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/ModifyReplicationInstance.hs
@@ -0,0 +1,253 @@
+{-# 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.DMS.ModifyReplicationInstance
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Modifies the replication instance to apply new settings. You can change
+-- one or more parameters by specifying these parameters and the new values
+-- in the request.
+--
+-- Some settings are applied during the maintenance window.
+--
+module Network.AWS.DMS.ModifyReplicationInstance
+    (
+    -- * Creating a Request
+      modifyReplicationInstance
+    , ModifyReplicationInstance
+    -- * Request Lenses
+    , mriEngineVersion
+    , mriAutoMinorVersionUpgrade
+    , mriAllowMajorVersionUpgrade
+    , mriPreferredMaintenanceWindow
+    , mriAllocatedStorage
+    , mriApplyImmediately
+    , mriReplicationInstanceClass
+    , mriReplicationInstanceIdentifier
+    , mriReplicationInstanceARN
+
+    -- * Destructuring the Response
+    , modifyReplicationInstanceResponse
+    , ModifyReplicationInstanceResponse
+    -- * Response Lenses
+    , mrirsReplicationInstance
+    , mrirsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'modifyReplicationInstance' smart constructor.
+data ModifyReplicationInstance = ModifyReplicationInstance'
+    { _mriEngineVersion                 :: !(Maybe Text)
+    , _mriAutoMinorVersionUpgrade       :: !(Maybe Bool)
+    , _mriAllowMajorVersionUpgrade      :: !(Maybe Bool)
+    , _mriPreferredMaintenanceWindow    :: !(Maybe Text)
+    , _mriAllocatedStorage              :: !(Maybe Int)
+    , _mriApplyImmediately              :: !(Maybe Bool)
+    , _mriReplicationInstanceClass      :: !(Maybe Text)
+    , _mriReplicationInstanceIdentifier :: !(Maybe Text)
+    , _mriReplicationInstanceARN        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyReplicationInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mriEngineVersion'
+--
+-- * 'mriAutoMinorVersionUpgrade'
+--
+-- * 'mriAllowMajorVersionUpgrade'
+--
+-- * 'mriPreferredMaintenanceWindow'
+--
+-- * 'mriAllocatedStorage'
+--
+-- * 'mriApplyImmediately'
+--
+-- * 'mriReplicationInstanceClass'
+--
+-- * 'mriReplicationInstanceIdentifier'
+--
+-- * 'mriReplicationInstanceARN'
+modifyReplicationInstance
+    :: Text -- ^ 'mriReplicationInstanceARN'
+    -> ModifyReplicationInstance
+modifyReplicationInstance pReplicationInstanceARN_ =
+    ModifyReplicationInstance'
+    { _mriEngineVersion = Nothing
+    , _mriAutoMinorVersionUpgrade = Nothing
+    , _mriAllowMajorVersionUpgrade = Nothing
+    , _mriPreferredMaintenanceWindow = Nothing
+    , _mriAllocatedStorage = Nothing
+    , _mriApplyImmediately = Nothing
+    , _mriReplicationInstanceClass = Nothing
+    , _mriReplicationInstanceIdentifier = Nothing
+    , _mriReplicationInstanceARN = pReplicationInstanceARN_
+    }
+
+-- | The engine version number of the replication instance.
+mriEngineVersion :: Lens' ModifyReplicationInstance (Maybe Text)
+mriEngineVersion = lens _mriEngineVersion (\ s a -> s{_mriEngineVersion = a});
+
+-- | Indicates that minor version upgrades will be applied automatically to
+-- the replication instance during the maintenance window. Changing this
+-- parameter does not result in an outage except in the following case and
+-- the change is asynchronously applied as soon as possible. An outage will
+-- result if this parameter is set to 'true' during the maintenance window,
+-- and a newer minor version is available, and AWS DMS has enabled auto
+-- patching for that engine version.
+mriAutoMinorVersionUpgrade :: Lens' ModifyReplicationInstance (Maybe Bool)
+mriAutoMinorVersionUpgrade = lens _mriAutoMinorVersionUpgrade (\ s a -> s{_mriAutoMinorVersionUpgrade = a});
+
+-- | Indicates that major version upgrades are allowed. Changing this
+-- parameter does not result in an outage and the change is asynchronously
+-- applied as soon as possible.
+--
+-- Constraints: This parameter must be set to true when specifying a value
+-- for the 'EngineVersion' parameter that is a different major version than
+-- the replication instance\'s current version.
+mriAllowMajorVersionUpgrade :: Lens' ModifyReplicationInstance (Maybe Bool)
+mriAllowMajorVersionUpgrade = lens _mriAllowMajorVersionUpgrade (\ s a -> s{_mriAllowMajorVersionUpgrade = a});
+
+-- | The weekly time range (in UTC) during which system maintenance can
+-- occur, which might result in an outage. Changing this parameter does not
+-- result in an outage, except in the following situation, and the change
+-- is asynchronously applied as soon as possible. If moving this window to
+-- the current time, there must be at least 30 minutes between the current
+-- time and end of the window to ensure pending changes are applied.
+--
+-- Default: Uses existing setting
+--
+-- Format: ddd:hh24:mi-ddd:hh24:mi
+--
+-- Valid Days: Mon | Tue | Wed | Thu | Fri | Sat | Sun
+--
+-- Constraints: Must be at least 30 minutes
+mriPreferredMaintenanceWindow :: Lens' ModifyReplicationInstance (Maybe Text)
+mriPreferredMaintenanceWindow = lens _mriPreferredMaintenanceWindow (\ s a -> s{_mriPreferredMaintenanceWindow = a});
+
+-- | The amount of storage (in gigabytes) to be allocated for the replication
+-- instance.
+mriAllocatedStorage :: Lens' ModifyReplicationInstance (Maybe Int)
+mriAllocatedStorage = lens _mriAllocatedStorage (\ s a -> s{_mriAllocatedStorage = a});
+
+-- | Indicates whether the changes should be applied immediately or during
+-- the next maintenance window.
+mriApplyImmediately :: Lens' ModifyReplicationInstance (Maybe Bool)
+mriApplyImmediately = lens _mriApplyImmediately (\ s a -> s{_mriApplyImmediately = a});
+
+-- | The compute and memory capacity of the replication instance.
+--
+-- Valid Values:
+-- 'dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge '
+mriReplicationInstanceClass :: Lens' ModifyReplicationInstance (Maybe Text)
+mriReplicationInstanceClass = lens _mriReplicationInstanceClass (\ s a -> s{_mriReplicationInstanceClass = a});
+
+-- | The replication instance identifier. This parameter is stored as a
+-- lowercase string.
+mriReplicationInstanceIdentifier :: Lens' ModifyReplicationInstance (Maybe Text)
+mriReplicationInstanceIdentifier = lens _mriReplicationInstanceIdentifier (\ s a -> s{_mriReplicationInstanceIdentifier = a});
+
+-- | The Amazon Resource Name (ARN) of the replication instance.
+mriReplicationInstanceARN :: Lens' ModifyReplicationInstance Text
+mriReplicationInstanceARN = lens _mriReplicationInstanceARN (\ s a -> s{_mriReplicationInstanceARN = a});
+
+instance AWSRequest ModifyReplicationInstance where
+        type Rs ModifyReplicationInstance =
+             ModifyReplicationInstanceResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ModifyReplicationInstanceResponse' <$>
+                   (x .?> "ReplicationInstance") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable ModifyReplicationInstance
+
+instance ToHeaders ModifyReplicationInstance where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.ModifyReplicationInstance" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ModifyReplicationInstance where
+        toJSON ModifyReplicationInstance'{..}
+          = object
+              (catMaybes
+                 [("EngineVersion" .=) <$> _mriEngineVersion,
+                  ("AutoMinorVersionUpgrade" .=) <$>
+                    _mriAutoMinorVersionUpgrade,
+                  ("AllowMajorVersionUpgrade" .=) <$>
+                    _mriAllowMajorVersionUpgrade,
+                  ("PreferredMaintenanceWindow" .=) <$>
+                    _mriPreferredMaintenanceWindow,
+                  ("AllocatedStorage" .=) <$> _mriAllocatedStorage,
+                  ("ApplyImmediately" .=) <$> _mriApplyImmediately,
+                  ("ReplicationInstanceClass" .=) <$>
+                    _mriReplicationInstanceClass,
+                  ("ReplicationInstanceIdentifier" .=) <$>
+                    _mriReplicationInstanceIdentifier,
+                  Just
+                    ("ReplicationInstanceArn" .=
+                       _mriReplicationInstanceARN)])
+
+instance ToPath ModifyReplicationInstance where
+        toPath = const "/"
+
+instance ToQuery ModifyReplicationInstance where
+        toQuery = const mempty
+
+-- | /See:/ 'modifyReplicationInstanceResponse' smart constructor.
+data ModifyReplicationInstanceResponse = ModifyReplicationInstanceResponse'
+    { _mrirsReplicationInstance :: !(Maybe ReplicationInstance)
+    , _mrirsResponseStatus      :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyReplicationInstanceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mrirsReplicationInstance'
+--
+-- * 'mrirsResponseStatus'
+modifyReplicationInstanceResponse
+    :: Int -- ^ 'mrirsResponseStatus'
+    -> ModifyReplicationInstanceResponse
+modifyReplicationInstanceResponse pResponseStatus_ =
+    ModifyReplicationInstanceResponse'
+    { _mrirsReplicationInstance = Nothing
+    , _mrirsResponseStatus = pResponseStatus_
+    }
+
+-- | The modified replication instance.
+mrirsReplicationInstance :: Lens' ModifyReplicationInstanceResponse (Maybe ReplicationInstance)
+mrirsReplicationInstance = lens _mrirsReplicationInstance (\ s a -> s{_mrirsReplicationInstance = a});
+
+-- | The response status code.
+mrirsResponseStatus :: Lens' ModifyReplicationInstanceResponse Int
+mrirsResponseStatus = lens _mrirsResponseStatus (\ s a -> s{_mrirsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/ModifyReplicationSubnetGroup.hs b/gen/Network/AWS/DMS/ModifyReplicationSubnetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/ModifyReplicationSubnetGroup.hs
@@ -0,0 +1,155 @@
+{-# 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.DMS.ModifyReplicationSubnetGroup
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Modifies the settings for the specified replication subnet group.
+--
+module Network.AWS.DMS.ModifyReplicationSubnetGroup
+    (
+    -- * Creating a Request
+      modifyReplicationSubnetGroup
+    , ModifyReplicationSubnetGroup
+    -- * Request Lenses
+    , mrsgReplicationSubnetGroupDescription
+    , mrsgReplicationSubnetGroupIdentifier
+    , mrsgSubnetIds
+
+    -- * Destructuring the Response
+    , modifyReplicationSubnetGroupResponse
+    , ModifyReplicationSubnetGroupResponse
+    -- * Response Lenses
+    , mrsgrsReplicationSubnetGroup
+    , mrsgrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'modifyReplicationSubnetGroup' smart constructor.
+data ModifyReplicationSubnetGroup = ModifyReplicationSubnetGroup'
+    { _mrsgReplicationSubnetGroupDescription :: !(Maybe Text)
+    , _mrsgReplicationSubnetGroupIdentifier  :: !Text
+    , _mrsgSubnetIds                         :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyReplicationSubnetGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mrsgReplicationSubnetGroupDescription'
+--
+-- * 'mrsgReplicationSubnetGroupIdentifier'
+--
+-- * 'mrsgSubnetIds'
+modifyReplicationSubnetGroup
+    :: Text -- ^ 'mrsgReplicationSubnetGroupIdentifier'
+    -> ModifyReplicationSubnetGroup
+modifyReplicationSubnetGroup pReplicationSubnetGroupIdentifier_ =
+    ModifyReplicationSubnetGroup'
+    { _mrsgReplicationSubnetGroupDescription = Nothing
+    , _mrsgReplicationSubnetGroupIdentifier = pReplicationSubnetGroupIdentifier_
+    , _mrsgSubnetIds = mempty
+    }
+
+-- | The description of the replication instance subnet group.
+mrsgReplicationSubnetGroupDescription :: Lens' ModifyReplicationSubnetGroup (Maybe Text)
+mrsgReplicationSubnetGroupDescription = lens _mrsgReplicationSubnetGroupDescription (\ s a -> s{_mrsgReplicationSubnetGroupDescription = a});
+
+-- | The name of the replication instance subnet group.
+mrsgReplicationSubnetGroupIdentifier :: Lens' ModifyReplicationSubnetGroup Text
+mrsgReplicationSubnetGroupIdentifier = lens _mrsgReplicationSubnetGroupIdentifier (\ s a -> s{_mrsgReplicationSubnetGroupIdentifier = a});
+
+-- | A list of subnet IDs.
+mrsgSubnetIds :: Lens' ModifyReplicationSubnetGroup [Text]
+mrsgSubnetIds = lens _mrsgSubnetIds (\ s a -> s{_mrsgSubnetIds = a}) . _Coerce;
+
+instance AWSRequest ModifyReplicationSubnetGroup
+         where
+        type Rs ModifyReplicationSubnetGroup =
+             ModifyReplicationSubnetGroupResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ModifyReplicationSubnetGroupResponse' <$>
+                   (x .?> "ReplicationSubnetGroup") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable ModifyReplicationSubnetGroup
+
+instance ToHeaders ModifyReplicationSubnetGroup where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.ModifyReplicationSubnetGroup" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ModifyReplicationSubnetGroup where
+        toJSON ModifyReplicationSubnetGroup'{..}
+          = object
+              (catMaybes
+                 [("ReplicationSubnetGroupDescription" .=) <$>
+                    _mrsgReplicationSubnetGroupDescription,
+                  Just
+                    ("ReplicationSubnetGroupIdentifier" .=
+                       _mrsgReplicationSubnetGroupIdentifier),
+                  Just ("SubnetIds" .= _mrsgSubnetIds)])
+
+instance ToPath ModifyReplicationSubnetGroup where
+        toPath = const "/"
+
+instance ToQuery ModifyReplicationSubnetGroup where
+        toQuery = const mempty
+
+-- | /See:/ 'modifyReplicationSubnetGroupResponse' smart constructor.
+data ModifyReplicationSubnetGroupResponse = ModifyReplicationSubnetGroupResponse'
+    { _mrsgrsReplicationSubnetGroup :: !(Maybe ReplicationSubnetGroup)
+    , _mrsgrsResponseStatus         :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ModifyReplicationSubnetGroupResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'mrsgrsReplicationSubnetGroup'
+--
+-- * 'mrsgrsResponseStatus'
+modifyReplicationSubnetGroupResponse
+    :: Int -- ^ 'mrsgrsResponseStatus'
+    -> ModifyReplicationSubnetGroupResponse
+modifyReplicationSubnetGroupResponse pResponseStatus_ =
+    ModifyReplicationSubnetGroupResponse'
+    { _mrsgrsReplicationSubnetGroup = Nothing
+    , _mrsgrsResponseStatus = pResponseStatus_
+    }
+
+-- | The modified replication subnet group.
+mrsgrsReplicationSubnetGroup :: Lens' ModifyReplicationSubnetGroupResponse (Maybe ReplicationSubnetGroup)
+mrsgrsReplicationSubnetGroup = lens _mrsgrsReplicationSubnetGroup (\ s a -> s{_mrsgrsReplicationSubnetGroup = a});
+
+-- | The response status code.
+mrsgrsResponseStatus :: Lens' ModifyReplicationSubnetGroupResponse Int
+mrsgrsResponseStatus = lens _mrsgrsResponseStatus (\ s a -> s{_mrsgrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/RefreshSchemas.hs b/gen/Network/AWS/DMS/RefreshSchemas.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/RefreshSchemas.hs
@@ -0,0 +1,145 @@
+{-# 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.DMS.RefreshSchemas
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Populates the schema for the specified endpoint. This is an asynchronous
+-- operation and can take several minutes. You can check the status of this
+-- operation by calling the DescribeRefreshSchemasStatus operation.
+--
+module Network.AWS.DMS.RefreshSchemas
+    (
+    -- * Creating a Request
+      refreshSchemas
+    , RefreshSchemas
+    -- * Request Lenses
+    , rsEndpointARN
+    , rsReplicationInstanceARN
+
+    -- * Destructuring the Response
+    , refreshSchemasResponse
+    , RefreshSchemasResponse
+    -- * Response Lenses
+    , rsrsRefreshSchemasStatus
+    , rsrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'refreshSchemas' smart constructor.
+data RefreshSchemas = RefreshSchemas'
+    { _rsEndpointARN            :: !Text
+    , _rsReplicationInstanceARN :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RefreshSchemas' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rsEndpointARN'
+--
+-- * 'rsReplicationInstanceARN'
+refreshSchemas
+    :: Text -- ^ 'rsEndpointARN'
+    -> Text -- ^ 'rsReplicationInstanceARN'
+    -> RefreshSchemas
+refreshSchemas pEndpointARN_ pReplicationInstanceARN_ =
+    RefreshSchemas'
+    { _rsEndpointARN = pEndpointARN_
+    , _rsReplicationInstanceARN = pReplicationInstanceARN_
+    }
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+rsEndpointARN :: Lens' RefreshSchemas Text
+rsEndpointARN = lens _rsEndpointARN (\ s a -> s{_rsEndpointARN = a});
+
+-- | The Amazon Resource Name (ARN) of the replication instance.
+rsReplicationInstanceARN :: Lens' RefreshSchemas Text
+rsReplicationInstanceARN = lens _rsReplicationInstanceARN (\ s a -> s{_rsReplicationInstanceARN = a});
+
+instance AWSRequest RefreshSchemas where
+        type Rs RefreshSchemas = RefreshSchemasResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RefreshSchemasResponse' <$>
+                   (x .?> "RefreshSchemasStatus") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable RefreshSchemas
+
+instance ToHeaders RefreshSchemas where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.RefreshSchemas" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON RefreshSchemas where
+        toJSON RefreshSchemas'{..}
+          = object
+              (catMaybes
+                 [Just ("EndpointArn" .= _rsEndpointARN),
+                  Just
+                    ("ReplicationInstanceArn" .=
+                       _rsReplicationInstanceARN)])
+
+instance ToPath RefreshSchemas where
+        toPath = const "/"
+
+instance ToQuery RefreshSchemas where
+        toQuery = const mempty
+
+-- | /See:/ 'refreshSchemasResponse' smart constructor.
+data RefreshSchemasResponse = RefreshSchemasResponse'
+    { _rsrsRefreshSchemasStatus :: !(Maybe RefreshSchemasStatus)
+    , _rsrsResponseStatus       :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RefreshSchemasResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rsrsRefreshSchemasStatus'
+--
+-- * 'rsrsResponseStatus'
+refreshSchemasResponse
+    :: Int -- ^ 'rsrsResponseStatus'
+    -> RefreshSchemasResponse
+refreshSchemasResponse pResponseStatus_ =
+    RefreshSchemasResponse'
+    { _rsrsRefreshSchemasStatus = Nothing
+    , _rsrsResponseStatus = pResponseStatus_
+    }
+
+-- | The status of the refreshed schema.
+rsrsRefreshSchemasStatus :: Lens' RefreshSchemasResponse (Maybe RefreshSchemasStatus)
+rsrsRefreshSchemasStatus = lens _rsrsRefreshSchemasStatus (\ s a -> s{_rsrsRefreshSchemasStatus = a});
+
+-- | The response status code.
+rsrsResponseStatus :: Lens' RefreshSchemasResponse Int
+rsrsResponseStatus = lens _rsrsResponseStatus (\ s a -> s{_rsrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/RemoveTagsFromResource.hs b/gen/Network/AWS/DMS/RemoveTagsFromResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/RemoveTagsFromResource.hs
@@ -0,0 +1,132 @@
+{-# 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.DMS.RemoveTagsFromResource
+-- Copyright   : (c) 2013-2016 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)
+--
+-- For internal use only
+--
+module Network.AWS.DMS.RemoveTagsFromResource
+    (
+    -- * Creating a Request
+      removeTagsFromResource
+    , RemoveTagsFromResource
+    -- * Request Lenses
+    , rtfrResourceARN
+    , rtfrTagKeys
+
+    -- * Destructuring the Response
+    , removeTagsFromResourceResponse
+    , RemoveTagsFromResourceResponse
+    -- * Response Lenses
+    , rtfrrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'removeTagsFromResource' smart constructor.
+data RemoveTagsFromResource = RemoveTagsFromResource'
+    { _rtfrResourceARN :: !Text
+    , _rtfrTagKeys     :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RemoveTagsFromResource' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtfrResourceARN'
+--
+-- * 'rtfrTagKeys'
+removeTagsFromResource
+    :: Text -- ^ 'rtfrResourceARN'
+    -> RemoveTagsFromResource
+removeTagsFromResource pResourceARN_ =
+    RemoveTagsFromResource'
+    { _rtfrResourceARN = pResourceARN_
+    , _rtfrTagKeys = mempty
+    }
+
+-- | >The Amazon Resource Name (ARN) of the AWS DMS resource the tag is to be
+-- removed from.
+rtfrResourceARN :: Lens' RemoveTagsFromResource Text
+rtfrResourceARN = lens _rtfrResourceARN (\ s a -> s{_rtfrResourceARN = a});
+
+-- | The tag key (name) of the tag to be removed.
+rtfrTagKeys :: Lens' RemoveTagsFromResource [Text]
+rtfrTagKeys = lens _rtfrTagKeys (\ s a -> s{_rtfrTagKeys = a}) . _Coerce;
+
+instance AWSRequest RemoveTagsFromResource where
+        type Rs RemoveTagsFromResource =
+             RemoveTagsFromResourceResponse
+        request = postJSON dms
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 RemoveTagsFromResourceResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable RemoveTagsFromResource
+
+instance ToHeaders RemoveTagsFromResource where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.RemoveTagsFromResource" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON RemoveTagsFromResource where
+        toJSON RemoveTagsFromResource'{..}
+          = object
+              (catMaybes
+                 [Just ("ResourceArn" .= _rtfrResourceARN),
+                  Just ("TagKeys" .= _rtfrTagKeys)])
+
+instance ToPath RemoveTagsFromResource where
+        toPath = const "/"
+
+instance ToQuery RemoveTagsFromResource where
+        toQuery = const mempty
+
+-- | /See:/ 'removeTagsFromResourceResponse' smart constructor.
+newtype RemoveTagsFromResourceResponse = RemoveTagsFromResourceResponse'
+    { _rtfrrsResponseStatus :: Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RemoveTagsFromResourceResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtfrrsResponseStatus'
+removeTagsFromResourceResponse
+    :: Int -- ^ 'rtfrrsResponseStatus'
+    -> RemoveTagsFromResourceResponse
+removeTagsFromResourceResponse pResponseStatus_ =
+    RemoveTagsFromResourceResponse'
+    { _rtfrrsResponseStatus = pResponseStatus_
+    }
+
+-- | The response status code.
+rtfrrsResponseStatus :: Lens' RemoveTagsFromResourceResponse Int
+rtfrrsResponseStatus = lens _rtfrrsResponseStatus (\ s a -> s{_rtfrrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/StartReplicationTask.hs b/gen/Network/AWS/DMS/StartReplicationTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/StartReplicationTask.hs
@@ -0,0 +1,154 @@
+{-# 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.DMS.StartReplicationTask
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Starts the replication task.
+--
+module Network.AWS.DMS.StartReplicationTask
+    (
+    -- * Creating a Request
+      startReplicationTask
+    , StartReplicationTask
+    -- * Request Lenses
+    , srtCdcStartTime
+    , srtReplicationTaskARN
+    , srtStartReplicationTaskType
+
+    -- * Destructuring the Response
+    , startReplicationTaskResponse
+    , StartReplicationTaskResponse
+    -- * Response Lenses
+    , srtrsReplicationTask
+    , srtrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'startReplicationTask' smart constructor.
+data StartReplicationTask = StartReplicationTask'
+    { _srtCdcStartTime             :: !(Maybe POSIX)
+    , _srtReplicationTaskARN       :: !Text
+    , _srtStartReplicationTaskType :: !StartReplicationTaskTypeValue
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartReplicationTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srtCdcStartTime'
+--
+-- * 'srtReplicationTaskARN'
+--
+-- * 'srtStartReplicationTaskType'
+startReplicationTask
+    :: Text -- ^ 'srtReplicationTaskARN'
+    -> StartReplicationTaskTypeValue -- ^ 'srtStartReplicationTaskType'
+    -> StartReplicationTask
+startReplicationTask pReplicationTaskARN_ pStartReplicationTaskType_ =
+    StartReplicationTask'
+    { _srtCdcStartTime = Nothing
+    , _srtReplicationTaskARN = pReplicationTaskARN_
+    , _srtStartReplicationTaskType = pStartReplicationTaskType_
+    }
+
+-- | The start time for the Change Data Capture (CDC) operation.
+srtCdcStartTime :: Lens' StartReplicationTask (Maybe UTCTime)
+srtCdcStartTime = lens _srtCdcStartTime (\ s a -> s{_srtCdcStartTime = a}) . mapping _Time;
+
+-- | The Amazon Resource Number (ARN) of the replication task to be started.
+srtReplicationTaskARN :: Lens' StartReplicationTask Text
+srtReplicationTaskARN = lens _srtReplicationTaskARN (\ s a -> s{_srtReplicationTaskARN = a});
+
+-- | The type of replication task.
+srtStartReplicationTaskType :: Lens' StartReplicationTask StartReplicationTaskTypeValue
+srtStartReplicationTaskType = lens _srtStartReplicationTaskType (\ s a -> s{_srtStartReplicationTaskType = a});
+
+instance AWSRequest StartReplicationTask where
+        type Rs StartReplicationTask =
+             StartReplicationTaskResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StartReplicationTaskResponse' <$>
+                   (x .?> "ReplicationTask") <*> (pure (fromEnum s)))
+
+instance Hashable StartReplicationTask
+
+instance ToHeaders StartReplicationTask where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.StartReplicationTask" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StartReplicationTask where
+        toJSON StartReplicationTask'{..}
+          = object
+              (catMaybes
+                 [("CdcStartTime" .=) <$> _srtCdcStartTime,
+                  Just
+                    ("ReplicationTaskArn" .= _srtReplicationTaskARN),
+                  Just
+                    ("StartReplicationTaskType" .=
+                       _srtStartReplicationTaskType)])
+
+instance ToPath StartReplicationTask where
+        toPath = const "/"
+
+instance ToQuery StartReplicationTask where
+        toQuery = const mempty
+
+-- | /See:/ 'startReplicationTaskResponse' smart constructor.
+data StartReplicationTaskResponse = StartReplicationTaskResponse'
+    { _srtrsReplicationTask :: !(Maybe ReplicationTask)
+    , _srtrsResponseStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StartReplicationTaskResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srtrsReplicationTask'
+--
+-- * 'srtrsResponseStatus'
+startReplicationTaskResponse
+    :: Int -- ^ 'srtrsResponseStatus'
+    -> StartReplicationTaskResponse
+startReplicationTaskResponse pResponseStatus_ =
+    StartReplicationTaskResponse'
+    { _srtrsReplicationTask = Nothing
+    , _srtrsResponseStatus = pResponseStatus_
+    }
+
+-- | The replication task started.
+srtrsReplicationTask :: Lens' StartReplicationTaskResponse (Maybe ReplicationTask)
+srtrsReplicationTask = lens _srtrsReplicationTask (\ s a -> s{_srtrsReplicationTask = a});
+
+-- | The response status code.
+srtrsResponseStatus :: Lens' StartReplicationTaskResponse Int
+srtrsResponseStatus = lens _srtrsResponseStatus (\ s a -> s{_srtrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/StopReplicationTask.hs b/gen/Network/AWS/DMS/StopReplicationTask.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/StopReplicationTask.hs
@@ -0,0 +1,131 @@
+{-# 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.DMS.StopReplicationTask
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Stops the replication task.
+--
+module Network.AWS.DMS.StopReplicationTask
+    (
+    -- * Creating a Request
+      stopReplicationTask
+    , StopReplicationTask
+    -- * Request Lenses
+    , sReplicationTaskARN
+
+    -- * Destructuring the Response
+    , stopReplicationTaskResponse
+    , StopReplicationTaskResponse
+    -- * Response Lenses
+    , srsReplicationTask
+    , srsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'stopReplicationTask' smart constructor.
+newtype StopReplicationTask = StopReplicationTask'
+    { _sReplicationTaskARN :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StopReplicationTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sReplicationTaskARN'
+stopReplicationTask
+    :: Text -- ^ 'sReplicationTaskARN'
+    -> StopReplicationTask
+stopReplicationTask pReplicationTaskARN_ =
+    StopReplicationTask'
+    { _sReplicationTaskARN = pReplicationTaskARN_
+    }
+
+-- | The Amazon Resource Number(ARN) of the replication task to be stopped.
+sReplicationTaskARN :: Lens' StopReplicationTask Text
+sReplicationTaskARN = lens _sReplicationTaskARN (\ s a -> s{_sReplicationTaskARN = a});
+
+instance AWSRequest StopReplicationTask where
+        type Rs StopReplicationTask =
+             StopReplicationTaskResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StopReplicationTaskResponse' <$>
+                   (x .?> "ReplicationTask") <*> (pure (fromEnum s)))
+
+instance Hashable StopReplicationTask
+
+instance ToHeaders StopReplicationTask where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.StopReplicationTask" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StopReplicationTask where
+        toJSON StopReplicationTask'{..}
+          = object
+              (catMaybes
+                 [Just
+                    ("ReplicationTaskArn" .= _sReplicationTaskARN)])
+
+instance ToPath StopReplicationTask where
+        toPath = const "/"
+
+instance ToQuery StopReplicationTask where
+        toQuery = const mempty
+
+-- | /See:/ 'stopReplicationTaskResponse' smart constructor.
+data StopReplicationTaskResponse = StopReplicationTaskResponse'
+    { _srsReplicationTask :: !(Maybe ReplicationTask)
+    , _srsResponseStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'StopReplicationTaskResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srsReplicationTask'
+--
+-- * 'srsResponseStatus'
+stopReplicationTaskResponse
+    :: Int -- ^ 'srsResponseStatus'
+    -> StopReplicationTaskResponse
+stopReplicationTaskResponse pResponseStatus_ =
+    StopReplicationTaskResponse'
+    { _srsReplicationTask = Nothing
+    , _srsResponseStatus = pResponseStatus_
+    }
+
+-- | The replication task stopped.
+srsReplicationTask :: Lens' StopReplicationTaskResponse (Maybe ReplicationTask)
+srsReplicationTask = lens _srsReplicationTask (\ s a -> s{_srsReplicationTask = a});
+
+-- | The response status code.
+srsResponseStatus :: Lens' StopReplicationTaskResponse Int
+srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/TestConnection.hs b/gen/Network/AWS/DMS/TestConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/TestConnection.hs
@@ -0,0 +1,142 @@
+{-# 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.DMS.TestConnection
+-- Copyright   : (c) 2013-2016 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)
+--
+-- Tests the connection between the replication instance and the endpoint.
+--
+module Network.AWS.DMS.TestConnection
+    (
+    -- * Creating a Request
+      testConnection
+    , TestConnection
+    -- * Request Lenses
+    , tcReplicationInstanceARN
+    , tcEndpointARN
+
+    -- * Destructuring the Response
+    , testConnectionResponse
+    , TestConnectionResponse
+    -- * Response Lenses
+    , tcrsConnection
+    , tcrsResponseStatus
+    ) where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | /See:/ 'testConnection' smart constructor.
+data TestConnection = TestConnection'
+    { _tcReplicationInstanceARN :: !Text
+    , _tcEndpointARN            :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TestConnection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tcReplicationInstanceARN'
+--
+-- * 'tcEndpointARN'
+testConnection
+    :: Text -- ^ 'tcReplicationInstanceARN'
+    -> Text -- ^ 'tcEndpointARN'
+    -> TestConnection
+testConnection pReplicationInstanceARN_ pEndpointARN_ =
+    TestConnection'
+    { _tcReplicationInstanceARN = pReplicationInstanceARN_
+    , _tcEndpointARN = pEndpointARN_
+    }
+
+-- | The Amazon Resource Number (ARN) of the replication instance.
+tcReplicationInstanceARN :: Lens' TestConnection Text
+tcReplicationInstanceARN = lens _tcReplicationInstanceARN (\ s a -> s{_tcReplicationInstanceARN = a});
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+tcEndpointARN :: Lens' TestConnection Text
+tcEndpointARN = lens _tcEndpointARN (\ s a -> s{_tcEndpointARN = a});
+
+instance AWSRequest TestConnection where
+        type Rs TestConnection = TestConnectionResponse
+        request = postJSON dms
+        response
+          = receiveJSON
+              (\ s h x ->
+                 TestConnectionResponse' <$>
+                   (x .?> "Connection") <*> (pure (fromEnum s)))
+
+instance Hashable TestConnection
+
+instance ToHeaders TestConnection where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AmazonDMSv20160101.TestConnection" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON TestConnection where
+        toJSON TestConnection'{..}
+          = object
+              (catMaybes
+                 [Just
+                    ("ReplicationInstanceArn" .=
+                       _tcReplicationInstanceARN),
+                  Just ("EndpointArn" .= _tcEndpointARN)])
+
+instance ToPath TestConnection where
+        toPath = const "/"
+
+instance ToQuery TestConnection where
+        toQuery = const mempty
+
+-- | /See:/ 'testConnectionResponse' smart constructor.
+data TestConnectionResponse = TestConnectionResponse'
+    { _tcrsConnection     :: !(Maybe Connection)
+    , _tcrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TestConnectionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tcrsConnection'
+--
+-- * 'tcrsResponseStatus'
+testConnectionResponse
+    :: Int -- ^ 'tcrsResponseStatus'
+    -> TestConnectionResponse
+testConnectionResponse pResponseStatus_ =
+    TestConnectionResponse'
+    { _tcrsConnection = Nothing
+    , _tcrsResponseStatus = pResponseStatus_
+    }
+
+-- | The connection tested.
+tcrsConnection :: Lens' TestConnectionResponse (Maybe Connection)
+tcrsConnection = lens _tcrsConnection (\ s a -> s{_tcrsConnection = a});
+
+-- | The response status code.
+tcrsResponseStatus :: Lens' TestConnectionResponse Int
+tcrsResponseStatus = lens _tcrsResponseStatus (\ s a -> s{_tcrsResponseStatus = a});
diff --git a/gen/Network/AWS/DMS/Types.hs b/gen/Network/AWS/DMS/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/Types.hs
@@ -0,0 +1,295 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.DMS.Types
+-- Copyright   : (c) 2013-2016 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 Network.AWS.DMS.Types
+    (
+    -- * Service Configuration
+      dms
+
+    -- * Errors
+    , _InvalidSubnet
+    , _KMSKeyNotAccessibleFault
+    , _ReplicationSubnetGroupDoesNotCoverEnoughAZs
+    , _InvalidResourceStateFault
+    , _ResourceAlreadyExistsFault
+    , _InsufficientResourceCapacityFault
+    , _ResourceQuotaExceededFault
+    , _UpgradeDependencyFailureFault
+    , _ResourceNotFoundFault
+    , _StorageQuotaExceededFault
+    , _AccessDeniedFault
+    , _SubnetAlreadyInUse
+
+    -- * MigrationTypeValue
+    , MigrationTypeValue (..)
+
+    -- * RefreshSchemasStatusTypeValue
+    , RefreshSchemasStatusTypeValue (..)
+
+    -- * ReplicationEndpointTypeValue
+    , ReplicationEndpointTypeValue (..)
+
+    -- * StartReplicationTaskTypeValue
+    , StartReplicationTaskTypeValue (..)
+
+    -- * AccountQuota
+    , AccountQuota
+    , accountQuota
+    , aqMax
+    , aqUsed
+    , aqAccountQuotaName
+
+    -- * AvailabilityZone
+    , AvailabilityZone
+    , availabilityZone
+    , azName
+
+    -- * Connection
+    , Connection
+    , connection
+    , cStatus
+    , cReplicationInstanceARN
+    , cEndpointIdentifier
+    , cReplicationInstanceIdentifier
+    , cEndpointARN
+    , cLastFailureMessage
+
+    -- * Endpoint
+    , Endpoint
+    , endpoint
+    , eStatus
+    , eServerName
+    , eExtraConnectionAttributes
+    , eEndpointType
+    , eUsername
+    , eEngineName
+    , eKMSKeyId
+    , eDatabaseName
+    , eEndpointIdentifier
+    , eEndpointARN
+    , ePort
+
+    -- * Filter
+    , Filter
+    , filter'
+    , fName
+    , fValues
+
+    -- * OrderableReplicationInstance
+    , OrderableReplicationInstance
+    , orderableReplicationInstance
+    , oriEngineVersion
+    , oriMinAllocatedStorage
+    , oriIncludedAllocatedStorage
+    , oriMaxAllocatedStorage
+    , oriReplicationInstanceClass
+    , oriDefaultAllocatedStorage
+    , oriStorageType
+
+    -- * RefreshSchemasStatus
+    , RefreshSchemasStatus
+    , refreshSchemasStatus
+    , rssStatus
+    , rssLastRefreshDate
+    , rssReplicationInstanceARN
+    , rssEndpointARN
+    , rssLastFailureMessage
+
+    -- * ReplicationInstance
+    , ReplicationInstance
+    , replicationInstance
+    , riEngineVersion
+    , riPubliclyAccessible
+    , riAutoMinorVersionUpgrade
+    , riReplicationSubnetGroup
+    , riInstanceCreateTime
+    , riReplicationInstanceStatus
+    , riPreferredMaintenanceWindow
+    , riReplicationInstancePrivateIPAddress
+    , riKMSKeyId
+    , riAvailabilityZone
+    , riReplicationInstanceARN
+    , riAllocatedStorage
+    , riReplicationInstancePublicIPAddress
+    , riReplicationInstanceClass
+    , riReplicationInstanceIdentifier
+    , riPendingModifiedValues
+
+    -- * ReplicationPendingModifiedValues
+    , ReplicationPendingModifiedValues
+    , replicationPendingModifiedValues
+    , rpmvEngineVersion
+    , rpmvAllocatedStorage
+    , rpmvReplicationInstanceClass
+
+    -- * ReplicationSubnetGroup
+    , ReplicationSubnetGroup
+    , replicationSubnetGroup
+    , rsgVPCId
+    , rsgSubnets
+    , rsgReplicationSubnetGroupIdentifier
+    , rsgSubnetGroupStatus
+    , rsgReplicationSubnetGroupDescription
+
+    -- * ReplicationTask
+    , ReplicationTask
+    , replicationTask
+    , rtReplicationTaskSettings
+    , rtStatus
+    , rtTargetEndpointARN
+    , rtReplicationTaskIdentifier
+    , rtReplicationTaskStartDate
+    , rtSourceEndpointARN
+    , rtTableMappings
+    , rtReplicationTaskCreationDate
+    , rtMigrationType
+    , rtReplicationTaskARN
+    , rtReplicationTaskStats
+    , rtReplicationInstanceARN
+    , rtLastFailureMessage
+
+    -- * ReplicationTaskStats
+    , ReplicationTaskStats
+    , replicationTaskStats
+    , rtsFullLoadProgressPercent
+    , rtsElapsedTimeMillis
+    , rtsTablesErrored
+    , rtsTablesLoaded
+    , rtsTablesQueued
+    , rtsTablesLoading
+
+    -- * Subnet
+    , Subnet
+    , subnet
+    , sSubnetStatus
+    , sSubnetIdentifier
+    , sSubnetAvailabilityZone
+
+    -- * SupportedEndpointType
+    , SupportedEndpointType
+    , supportedEndpointType
+    , setEndpointType
+    , setEngineName
+    , setSupportsCDC
+
+    -- * TableStatistics
+    , TableStatistics
+    , tableStatistics
+    , tsFullLoadRows
+    , tsInserts
+    , tsSchemaName
+    , tsTableState
+    , tsDdls
+    , tsDeletes
+    , tsUpdates
+    , tsLastUpdateTime
+    , tsTableName
+
+    -- * Tag
+    , Tag
+    , tag
+    , tagValue
+    , tagKey
+    ) where
+
+import           Network.AWS.DMS.Types.Product
+import           Network.AWS.DMS.Types.Sum
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+
+-- | API version '2016-01-01' of the Amazon Database Migration Service SDK configuration.
+dms :: Service
+dms =
+    Service
+    { _svcAbbrev = "DMS"
+    , _svcSigner = v4
+    , _svcPrefix = "dms"
+    , _svcVersion = "2016-01-01"
+    , _svcEndpoint = defaultEndpoint dms
+    , _svcTimeout = Just 70
+    , _svcCheck = statusSuccess
+    , _svcError = parseJSONError
+    , _svcRetry = retry
+    }
+  where
+    retry =
+        Exponential
+        { _retryBase = 5.0e-2
+        , _retryGrowth = 2
+        , _retryAttempts = 5
+        , _retryCheck = check
+        }
+    check e
+      | 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 503) e = Just "service_unavailable"
+      | has (hasStatus 500) e = Just "general_server_error"
+      | has (hasStatus 509) e = Just "limit_exceeded"
+      | otherwise = Nothing
+
+-- | Prism for InvalidSubnet' errors.
+_InvalidSubnet :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidSubnet = _ServiceError . hasCode "InvalidSubnet"
+
+-- | Prism for KMSKeyNotAccessibleFault' errors.
+_KMSKeyNotAccessibleFault :: AsError a => Getting (First ServiceError) a ServiceError
+_KMSKeyNotAccessibleFault = _ServiceError . hasCode "KMSKeyNotAccessibleFault"
+
+-- | Prism for ReplicationSubnetGroupDoesNotCoverEnoughAZs' errors.
+_ReplicationSubnetGroupDoesNotCoverEnoughAZs :: AsError a => Getting (First ServiceError) a ServiceError
+_ReplicationSubnetGroupDoesNotCoverEnoughAZs =
+    _ServiceError . hasCode "ReplicationSubnetGroupDoesNotCoverEnoughAZs"
+
+-- | Prism for InvalidResourceStateFault' errors.
+_InvalidResourceStateFault :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidResourceStateFault =
+    _ServiceError . hasCode "InvalidResourceStateFault"
+
+-- | Prism for ResourceAlreadyExistsFault' errors.
+_ResourceAlreadyExistsFault :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceAlreadyExistsFault =
+    _ServiceError . hasCode "ResourceAlreadyExistsFault"
+
+-- | Prism for InsufficientResourceCapacityFault' errors.
+_InsufficientResourceCapacityFault :: AsError a => Getting (First ServiceError) a ServiceError
+_InsufficientResourceCapacityFault =
+    _ServiceError . hasCode "InsufficientResourceCapacityFault"
+
+-- | Prism for ResourceQuotaExceededFault' errors.
+_ResourceQuotaExceededFault :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceQuotaExceededFault =
+    _ServiceError . hasCode "ResourceQuotaExceededFault"
+
+-- | Prism for UpgradeDependencyFailureFault' errors.
+_UpgradeDependencyFailureFault :: AsError a => Getting (First ServiceError) a ServiceError
+_UpgradeDependencyFailureFault =
+    _ServiceError . hasCode "UpgradeDependencyFailureFault"
+
+-- | Prism for ResourceNotFoundFault' errors.
+_ResourceNotFoundFault :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceNotFoundFault = _ServiceError . hasCode "ResourceNotFoundFault"
+
+-- | Prism for StorageQuotaExceededFault' errors.
+_StorageQuotaExceededFault :: AsError a => Getting (First ServiceError) a ServiceError
+_StorageQuotaExceededFault =
+    _ServiceError . hasCode "StorageQuotaExceededFault"
+
+-- | Prism for AccessDeniedFault' errors.
+_AccessDeniedFault :: AsError a => Getting (First ServiceError) a ServiceError
+_AccessDeniedFault = _ServiceError . hasCode "AccessDeniedFault"
+
+-- | Prism for SubnetAlreadyInUse' errors.
+_SubnetAlreadyInUse :: AsError a => Getting (First ServiceError) a ServiceError
+_SubnetAlreadyInUse = _ServiceError . hasCode "SubnetAlreadyInUse"
diff --git a/gen/Network/AWS/DMS/Types/Product.hs b/gen/Network/AWS/DMS/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/Types/Product.hs
@@ -0,0 +1,1272 @@
+{-# 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.DMS.Types.Product
+-- Copyright   : (c) 2013-2016 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 Network.AWS.DMS.Types.Product where
+
+import           Network.AWS.DMS.Types.Sum
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+
+-- | Describes a quota for an AWS account, for example, the number of
+-- replication instances allowed.
+--
+-- /See:/ 'accountQuota' smart constructor.
+data AccountQuota = AccountQuota'
+    { _aqMax              :: !(Maybe Integer)
+    , _aqUsed             :: !(Maybe Integer)
+    , _aqAccountQuotaName :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AccountQuota' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aqMax'
+--
+-- * 'aqUsed'
+--
+-- * 'aqAccountQuotaName'
+accountQuota
+    :: AccountQuota
+accountQuota =
+    AccountQuota'
+    { _aqMax = Nothing
+    , _aqUsed = Nothing
+    , _aqAccountQuotaName = Nothing
+    }
+
+-- | The maximum allowed value for the quota.
+aqMax :: Lens' AccountQuota (Maybe Integer)
+aqMax = lens _aqMax (\ s a -> s{_aqMax = a});
+
+-- | The amount currently used toward the quota maximum.
+aqUsed :: Lens' AccountQuota (Maybe Integer)
+aqUsed = lens _aqUsed (\ s a -> s{_aqUsed = a});
+
+-- | The name of the AWS DMS quota for this AWS account.
+aqAccountQuotaName :: Lens' AccountQuota (Maybe Text)
+aqAccountQuotaName = lens _aqAccountQuotaName (\ s a -> s{_aqAccountQuotaName = a});
+
+instance FromJSON AccountQuota where
+        parseJSON
+          = withObject "AccountQuota"
+              (\ x ->
+                 AccountQuota' <$>
+                   (x .:? "Max") <*> (x .:? "Used") <*>
+                     (x .:? "AccountQuotaName"))
+
+instance Hashable AccountQuota
+
+-- | /See:/ 'availabilityZone' smart constructor.
+newtype AvailabilityZone = AvailabilityZone'
+    { _azName :: Maybe Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AvailabilityZone' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'azName'
+availabilityZone
+    :: AvailabilityZone
+availabilityZone =
+    AvailabilityZone'
+    { _azName = Nothing
+    }
+
+-- | The name of the availability zone.
+azName :: Lens' AvailabilityZone (Maybe Text)
+azName = lens _azName (\ s a -> s{_azName = a});
+
+instance FromJSON AvailabilityZone where
+        parseJSON
+          = withObject "AvailabilityZone"
+              (\ x -> AvailabilityZone' <$> (x .:? "Name"))
+
+instance Hashable AvailabilityZone
+
+-- | /See:/ 'connection' smart constructor.
+data Connection = Connection'
+    { _cStatus                        :: !(Maybe Text)
+    , _cReplicationInstanceARN        :: !(Maybe Text)
+    , _cEndpointIdentifier            :: !(Maybe Text)
+    , _cReplicationInstanceIdentifier :: !(Maybe Text)
+    , _cEndpointARN                   :: !(Maybe Text)
+    , _cLastFailureMessage            :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Connection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cStatus'
+--
+-- * 'cReplicationInstanceARN'
+--
+-- * 'cEndpointIdentifier'
+--
+-- * 'cReplicationInstanceIdentifier'
+--
+-- * 'cEndpointARN'
+--
+-- * 'cLastFailureMessage'
+connection
+    :: Connection
+connection =
+    Connection'
+    { _cStatus = Nothing
+    , _cReplicationInstanceARN = Nothing
+    , _cEndpointIdentifier = Nothing
+    , _cReplicationInstanceIdentifier = Nothing
+    , _cEndpointARN = Nothing
+    , _cLastFailureMessage = Nothing
+    }
+
+-- | The connection status.
+cStatus :: Lens' Connection (Maybe Text)
+cStatus = lens _cStatus (\ s a -> s{_cStatus = a});
+
+-- | The Amazon Resource Name (ARN) of the replication instance.
+cReplicationInstanceARN :: Lens' Connection (Maybe Text)
+cReplicationInstanceARN = lens _cReplicationInstanceARN (\ s a -> s{_cReplicationInstanceARN = a});
+
+-- | The identifier of the endpoint. Identifiers must begin with a letter;
+-- must contain only ASCII letters, digits, and hyphens; and must not end
+-- with a hyphen or contain two consecutive hyphens.
+cEndpointIdentifier :: Lens' Connection (Maybe Text)
+cEndpointIdentifier = lens _cEndpointIdentifier (\ s a -> s{_cEndpointIdentifier = a});
+
+-- | The replication instance identifier. This parameter is stored as a
+-- lowercase string.
+cReplicationInstanceIdentifier :: Lens' Connection (Maybe Text)
+cReplicationInstanceIdentifier = lens _cReplicationInstanceIdentifier (\ s a -> s{_cReplicationInstanceIdentifier = a});
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+cEndpointARN :: Lens' Connection (Maybe Text)
+cEndpointARN = lens _cEndpointARN (\ s a -> s{_cEndpointARN = a});
+
+-- | The error message when the connection last failed.
+cLastFailureMessage :: Lens' Connection (Maybe Text)
+cLastFailureMessage = lens _cLastFailureMessage (\ s a -> s{_cLastFailureMessage = a});
+
+instance FromJSON Connection where
+        parseJSON
+          = withObject "Connection"
+              (\ x ->
+                 Connection' <$>
+                   (x .:? "Status") <*> (x .:? "ReplicationInstanceArn")
+                     <*> (x .:? "EndpointIdentifier")
+                     <*> (x .:? "ReplicationInstanceIdentifier")
+                     <*> (x .:? "EndpointArn")
+                     <*> (x .:? "LastFailureMessage"))
+
+instance Hashable Connection
+
+-- | /See:/ 'endpoint' smart constructor.
+data Endpoint = Endpoint'
+    { _eStatus                    :: !(Maybe Text)
+    , _eServerName                :: !(Maybe Text)
+    , _eExtraConnectionAttributes :: !(Maybe Text)
+    , _eEndpointType              :: !(Maybe ReplicationEndpointTypeValue)
+    , _eUsername                  :: !(Maybe Text)
+    , _eEngineName                :: !(Maybe Text)
+    , _eKMSKeyId                  :: !(Maybe Text)
+    , _eDatabaseName              :: !(Maybe Text)
+    , _eEndpointIdentifier        :: !(Maybe Text)
+    , _eEndpointARN               :: !(Maybe Text)
+    , _ePort                      :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Endpoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eStatus'
+--
+-- * 'eServerName'
+--
+-- * 'eExtraConnectionAttributes'
+--
+-- * 'eEndpointType'
+--
+-- * 'eUsername'
+--
+-- * 'eEngineName'
+--
+-- * 'eKMSKeyId'
+--
+-- * 'eDatabaseName'
+--
+-- * 'eEndpointIdentifier'
+--
+-- * 'eEndpointARN'
+--
+-- * 'ePort'
+endpoint
+    :: Endpoint
+endpoint =
+    Endpoint'
+    { _eStatus = Nothing
+    , _eServerName = Nothing
+    , _eExtraConnectionAttributes = Nothing
+    , _eEndpointType = Nothing
+    , _eUsername = Nothing
+    , _eEngineName = Nothing
+    , _eKMSKeyId = Nothing
+    , _eDatabaseName = Nothing
+    , _eEndpointIdentifier = Nothing
+    , _eEndpointARN = Nothing
+    , _ePort = Nothing
+    }
+
+-- | The status of the endpoint.
+eStatus :: Lens' Endpoint (Maybe Text)
+eStatus = lens _eStatus (\ s a -> s{_eStatus = a});
+
+-- | The name of the server at the endpoint.
+eServerName :: Lens' Endpoint (Maybe Text)
+eServerName = lens _eServerName (\ s a -> s{_eServerName = a});
+
+-- | Additional connection attributes used to connect to the endpoint.
+eExtraConnectionAttributes :: Lens' Endpoint (Maybe Text)
+eExtraConnectionAttributes = lens _eExtraConnectionAttributes (\ s a -> s{_eExtraConnectionAttributes = a});
+
+-- | The type of endpoint.
+eEndpointType :: Lens' Endpoint (Maybe ReplicationEndpointTypeValue)
+eEndpointType = lens _eEndpointType (\ s a -> s{_eEndpointType = a});
+
+-- | The user name used to connect to the endpoint.
+eUsername :: Lens' Endpoint (Maybe Text)
+eUsername = lens _eUsername (\ s a -> s{_eUsername = a});
+
+-- | The database engine name.
+eEngineName :: Lens' Endpoint (Maybe Text)
+eEngineName = lens _eEngineName (\ s a -> s{_eEngineName = a});
+
+-- | The KMS key identifier that will be used to encrypt the connection
+-- parameters. If you do not specify a value for the KmsKeyId parameter,
+-- then AWS DMS will use your default encryption key. AWS KMS creates the
+-- default encryption key for your AWS account. Your AWS account has a
+-- different default encryption key for each AWS region.
+eKMSKeyId :: Lens' Endpoint (Maybe Text)
+eKMSKeyId = lens _eKMSKeyId (\ s a -> s{_eKMSKeyId = a});
+
+-- | The name of the database at the endpoint.
+eDatabaseName :: Lens' Endpoint (Maybe Text)
+eDatabaseName = lens _eDatabaseName (\ s a -> s{_eDatabaseName = a});
+
+-- | The database endpoint identifier. Identifiers must begin with a letter;
+-- must contain only ASCII letters, digits, and hyphens; and must not end
+-- with a hyphen or contain two consecutive hyphens.
+eEndpointIdentifier :: Lens' Endpoint (Maybe Text)
+eEndpointIdentifier = lens _eEndpointIdentifier (\ s a -> s{_eEndpointIdentifier = a});
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+eEndpointARN :: Lens' Endpoint (Maybe Text)
+eEndpointARN = lens _eEndpointARN (\ s a -> s{_eEndpointARN = a});
+
+-- | The port value used to access the endpoint.
+ePort :: Lens' Endpoint (Maybe Int)
+ePort = lens _ePort (\ s a -> s{_ePort = a});
+
+instance FromJSON Endpoint where
+        parseJSON
+          = withObject "Endpoint"
+              (\ x ->
+                 Endpoint' <$>
+                   (x .:? "Status") <*> (x .:? "ServerName") <*>
+                     (x .:? "ExtraConnectionAttributes")
+                     <*> (x .:? "EndpointType")
+                     <*> (x .:? "Username")
+                     <*> (x .:? "EngineName")
+                     <*> (x .:? "KmsKeyId")
+                     <*> (x .:? "DatabaseName")
+                     <*> (x .:? "EndpointIdentifier")
+                     <*> (x .:? "EndpointArn")
+                     <*> (x .:? "Port"))
+
+instance Hashable Endpoint
+
+-- | /See:/ 'filter'' smart constructor.
+data Filter = Filter'
+    { _fName   :: !Text
+    , _fValues :: ![Text]
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Filter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fName'
+--
+-- * 'fValues'
+filter'
+    :: Text -- ^ 'fName'
+    -> Filter
+filter' pName_ =
+    Filter'
+    { _fName = pName_
+    , _fValues = mempty
+    }
+
+-- | The name of the filter.
+fName :: Lens' Filter Text
+fName = lens _fName (\ s a -> s{_fName = a});
+
+-- | The filter value.
+fValues :: Lens' Filter [Text]
+fValues = lens _fValues (\ s a -> s{_fValues = a}) . _Coerce;
+
+instance Hashable Filter
+
+instance ToJSON Filter where
+        toJSON Filter'{..}
+          = object
+              (catMaybes
+                 [Just ("Name" .= _fName),
+                  Just ("Values" .= _fValues)])
+
+-- | /See:/ 'orderableReplicationInstance' smart constructor.
+data OrderableReplicationInstance = OrderableReplicationInstance'
+    { _oriEngineVersion            :: !(Maybe Text)
+    , _oriMinAllocatedStorage      :: !(Maybe Int)
+    , _oriIncludedAllocatedStorage :: !(Maybe Int)
+    , _oriMaxAllocatedStorage      :: !(Maybe Int)
+    , _oriReplicationInstanceClass :: !(Maybe Text)
+    , _oriDefaultAllocatedStorage  :: !(Maybe Int)
+    , _oriStorageType              :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'OrderableReplicationInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oriEngineVersion'
+--
+-- * 'oriMinAllocatedStorage'
+--
+-- * 'oriIncludedAllocatedStorage'
+--
+-- * 'oriMaxAllocatedStorage'
+--
+-- * 'oriReplicationInstanceClass'
+--
+-- * 'oriDefaultAllocatedStorage'
+--
+-- * 'oriStorageType'
+orderableReplicationInstance
+    :: OrderableReplicationInstance
+orderableReplicationInstance =
+    OrderableReplicationInstance'
+    { _oriEngineVersion = Nothing
+    , _oriMinAllocatedStorage = Nothing
+    , _oriIncludedAllocatedStorage = Nothing
+    , _oriMaxAllocatedStorage = Nothing
+    , _oriReplicationInstanceClass = Nothing
+    , _oriDefaultAllocatedStorage = Nothing
+    , _oriStorageType = Nothing
+    }
+
+-- | The version of the replication engine.
+oriEngineVersion :: Lens' OrderableReplicationInstance (Maybe Text)
+oriEngineVersion = lens _oriEngineVersion (\ s a -> s{_oriEngineVersion = a});
+
+-- | The minimum amount of storage (in gigabytes) that can be allocated for
+-- the replication instance.
+oriMinAllocatedStorage :: Lens' OrderableReplicationInstance (Maybe Int)
+oriMinAllocatedStorage = lens _oriMinAllocatedStorage (\ s a -> s{_oriMinAllocatedStorage = a});
+
+-- | The amount of storage (in gigabytes) that is allocated for the
+-- replication instance.
+oriIncludedAllocatedStorage :: Lens' OrderableReplicationInstance (Maybe Int)
+oriIncludedAllocatedStorage = lens _oriIncludedAllocatedStorage (\ s a -> s{_oriIncludedAllocatedStorage = a});
+
+-- | The minimum amount of storage (in gigabytes) that can be allocated for
+-- the replication instance.
+oriMaxAllocatedStorage :: Lens' OrderableReplicationInstance (Maybe Int)
+oriMaxAllocatedStorage = lens _oriMaxAllocatedStorage (\ s a -> s{_oriMaxAllocatedStorage = a});
+
+-- | The compute and memory capacity of the replication instance.
+--
+-- Valid Values:
+-- 'dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge '
+oriReplicationInstanceClass :: Lens' OrderableReplicationInstance (Maybe Text)
+oriReplicationInstanceClass = lens _oriReplicationInstanceClass (\ s a -> s{_oriReplicationInstanceClass = a});
+
+-- | The default amount of storage (in gigabytes) that is allocated for the
+-- replication instance.
+oriDefaultAllocatedStorage :: Lens' OrderableReplicationInstance (Maybe Int)
+oriDefaultAllocatedStorage = lens _oriDefaultAllocatedStorage (\ s a -> s{_oriDefaultAllocatedStorage = a});
+
+-- | The type of storage used by the replication instance.
+oriStorageType :: Lens' OrderableReplicationInstance (Maybe Text)
+oriStorageType = lens _oriStorageType (\ s a -> s{_oriStorageType = a});
+
+instance FromJSON OrderableReplicationInstance where
+        parseJSON
+          = withObject "OrderableReplicationInstance"
+              (\ x ->
+                 OrderableReplicationInstance' <$>
+                   (x .:? "EngineVersion") <*>
+                     (x .:? "MinAllocatedStorage")
+                     <*> (x .:? "IncludedAllocatedStorage")
+                     <*> (x .:? "MaxAllocatedStorage")
+                     <*> (x .:? "ReplicationInstanceClass")
+                     <*> (x .:? "DefaultAllocatedStorage")
+                     <*> (x .:? "StorageType"))
+
+instance Hashable OrderableReplicationInstance
+
+-- | /See:/ 'refreshSchemasStatus' smart constructor.
+data RefreshSchemasStatus = RefreshSchemasStatus'
+    { _rssStatus                 :: !(Maybe RefreshSchemasStatusTypeValue)
+    , _rssLastRefreshDate        :: !(Maybe POSIX)
+    , _rssReplicationInstanceARN :: !(Maybe Text)
+    , _rssEndpointARN            :: !(Maybe Text)
+    , _rssLastFailureMessage     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RefreshSchemasStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rssStatus'
+--
+-- * 'rssLastRefreshDate'
+--
+-- * 'rssReplicationInstanceARN'
+--
+-- * 'rssEndpointARN'
+--
+-- * 'rssLastFailureMessage'
+refreshSchemasStatus
+    :: RefreshSchemasStatus
+refreshSchemasStatus =
+    RefreshSchemasStatus'
+    { _rssStatus = Nothing
+    , _rssLastRefreshDate = Nothing
+    , _rssReplicationInstanceARN = Nothing
+    , _rssEndpointARN = Nothing
+    , _rssLastFailureMessage = Nothing
+    }
+
+-- | The status of the schema.
+rssStatus :: Lens' RefreshSchemasStatus (Maybe RefreshSchemasStatusTypeValue)
+rssStatus = lens _rssStatus (\ s a -> s{_rssStatus = a});
+
+-- | The date the schema was last refreshed.
+rssLastRefreshDate :: Lens' RefreshSchemasStatus (Maybe UTCTime)
+rssLastRefreshDate = lens _rssLastRefreshDate (\ s a -> s{_rssLastRefreshDate = a}) . mapping _Time;
+
+-- | The Amazon Resource Name (ARN) of the replication instance.
+rssReplicationInstanceARN :: Lens' RefreshSchemasStatus (Maybe Text)
+rssReplicationInstanceARN = lens _rssReplicationInstanceARN (\ s a -> s{_rssReplicationInstanceARN = a});
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+rssEndpointARN :: Lens' RefreshSchemasStatus (Maybe Text)
+rssEndpointARN = lens _rssEndpointARN (\ s a -> s{_rssEndpointARN = a});
+
+-- | The last failure message for the schema.
+rssLastFailureMessage :: Lens' RefreshSchemasStatus (Maybe Text)
+rssLastFailureMessage = lens _rssLastFailureMessage (\ s a -> s{_rssLastFailureMessage = a});
+
+instance FromJSON RefreshSchemasStatus where
+        parseJSON
+          = withObject "RefreshSchemasStatus"
+              (\ x ->
+                 RefreshSchemasStatus' <$>
+                   (x .:? "Status") <*> (x .:? "LastRefreshDate") <*>
+                     (x .:? "ReplicationInstanceArn")
+                     <*> (x .:? "EndpointArn")
+                     <*> (x .:? "LastFailureMessage"))
+
+instance Hashable RefreshSchemasStatus
+
+-- | /See:/ 'replicationInstance' smart constructor.
+data ReplicationInstance = ReplicationInstance'
+    { _riEngineVersion                       :: !(Maybe Text)
+    , _riPubliclyAccessible                  :: !(Maybe Bool)
+    , _riAutoMinorVersionUpgrade             :: !(Maybe Bool)
+    , _riReplicationSubnetGroup              :: !(Maybe ReplicationSubnetGroup)
+    , _riInstanceCreateTime                  :: !(Maybe POSIX)
+    , _riReplicationInstanceStatus           :: !(Maybe Text)
+    , _riPreferredMaintenanceWindow          :: !(Maybe Text)
+    , _riReplicationInstancePrivateIPAddress :: !(Maybe Text)
+    , _riKMSKeyId                            :: !(Maybe Text)
+    , _riAvailabilityZone                    :: !(Maybe Text)
+    , _riReplicationInstanceARN              :: !(Maybe Text)
+    , _riAllocatedStorage                    :: !(Maybe Int)
+    , _riReplicationInstancePublicIPAddress  :: !(Maybe Text)
+    , _riReplicationInstanceClass            :: !(Maybe Text)
+    , _riReplicationInstanceIdentifier       :: !(Maybe Text)
+    , _riPendingModifiedValues               :: !(Maybe ReplicationPendingModifiedValues)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReplicationInstance' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'riEngineVersion'
+--
+-- * 'riPubliclyAccessible'
+--
+-- * 'riAutoMinorVersionUpgrade'
+--
+-- * 'riReplicationSubnetGroup'
+--
+-- * 'riInstanceCreateTime'
+--
+-- * 'riReplicationInstanceStatus'
+--
+-- * 'riPreferredMaintenanceWindow'
+--
+-- * 'riReplicationInstancePrivateIPAddress'
+--
+-- * 'riKMSKeyId'
+--
+-- * 'riAvailabilityZone'
+--
+-- * 'riReplicationInstanceARN'
+--
+-- * 'riAllocatedStorage'
+--
+-- * 'riReplicationInstancePublicIPAddress'
+--
+-- * 'riReplicationInstanceClass'
+--
+-- * 'riReplicationInstanceIdentifier'
+--
+-- * 'riPendingModifiedValues'
+replicationInstance
+    :: ReplicationInstance
+replicationInstance =
+    ReplicationInstance'
+    { _riEngineVersion = Nothing
+    , _riPubliclyAccessible = Nothing
+    , _riAutoMinorVersionUpgrade = Nothing
+    , _riReplicationSubnetGroup = Nothing
+    , _riInstanceCreateTime = Nothing
+    , _riReplicationInstanceStatus = Nothing
+    , _riPreferredMaintenanceWindow = Nothing
+    , _riReplicationInstancePrivateIPAddress = Nothing
+    , _riKMSKeyId = Nothing
+    , _riAvailabilityZone = Nothing
+    , _riReplicationInstanceARN = Nothing
+    , _riAllocatedStorage = Nothing
+    , _riReplicationInstancePublicIPAddress = Nothing
+    , _riReplicationInstanceClass = Nothing
+    , _riReplicationInstanceIdentifier = Nothing
+    , _riPendingModifiedValues = Nothing
+    }
+
+-- | The engine version number of the replication instance.
+riEngineVersion :: Lens' ReplicationInstance (Maybe Text)
+riEngineVersion = lens _riEngineVersion (\ s a -> s{_riEngineVersion = a});
+
+-- | Specifies the accessibility options for the replication instance. A
+-- value of 'true' represents an instance with a public IP address. A value
+-- of 'false' represents an instance with a private IP address. The default
+-- value is 'true'.
+riPubliclyAccessible :: Lens' ReplicationInstance (Maybe Bool)
+riPubliclyAccessible = lens _riPubliclyAccessible (\ s a -> s{_riPubliclyAccessible = a});
+
+-- | Boolean value indicating if minor version upgrades will be automatically
+-- applied to the instance.
+riAutoMinorVersionUpgrade :: Lens' ReplicationInstance (Maybe Bool)
+riAutoMinorVersionUpgrade = lens _riAutoMinorVersionUpgrade (\ s a -> s{_riAutoMinorVersionUpgrade = a});
+
+-- | The subnet group for the replication instance.
+riReplicationSubnetGroup :: Lens' ReplicationInstance (Maybe ReplicationSubnetGroup)
+riReplicationSubnetGroup = lens _riReplicationSubnetGroup (\ s a -> s{_riReplicationSubnetGroup = a});
+
+-- | The time the replication instance was created.
+riInstanceCreateTime :: Lens' ReplicationInstance (Maybe UTCTime)
+riInstanceCreateTime = lens _riInstanceCreateTime (\ s a -> s{_riInstanceCreateTime = a}) . mapping _Time;
+
+-- | The status of the replication instance.
+riReplicationInstanceStatus :: Lens' ReplicationInstance (Maybe Text)
+riReplicationInstanceStatus = lens _riReplicationInstanceStatus (\ s a -> s{_riReplicationInstanceStatus = a});
+
+-- | The maintenance window times for the replication instance.
+riPreferredMaintenanceWindow :: Lens' ReplicationInstance (Maybe Text)
+riPreferredMaintenanceWindow = lens _riPreferredMaintenanceWindow (\ s a -> s{_riPreferredMaintenanceWindow = a});
+
+-- | The private IP address of the replication instance.
+riReplicationInstancePrivateIPAddress :: Lens' ReplicationInstance (Maybe Text)
+riReplicationInstancePrivateIPAddress = lens _riReplicationInstancePrivateIPAddress (\ s a -> s{_riReplicationInstancePrivateIPAddress = a});
+
+-- | The KMS key identifier that is used to encrypt the content on the
+-- replication instance. If you do not specify a value for the KmsKeyId
+-- parameter, then AWS DMS will use your default encryption key. AWS KMS
+-- creates the default encryption key for your AWS account. Your AWS
+-- account has a different default encryption key for each AWS region.
+riKMSKeyId :: Lens' ReplicationInstance (Maybe Text)
+riKMSKeyId = lens _riKMSKeyId (\ s a -> s{_riKMSKeyId = a});
+
+-- | The Availability Zone for the instance.
+riAvailabilityZone :: Lens' ReplicationInstance (Maybe Text)
+riAvailabilityZone = lens _riAvailabilityZone (\ s a -> s{_riAvailabilityZone = a});
+
+-- | The Amazon Resource Name (ARN) of the replication instance.
+riReplicationInstanceARN :: Lens' ReplicationInstance (Maybe Text)
+riReplicationInstanceARN = lens _riReplicationInstanceARN (\ s a -> s{_riReplicationInstanceARN = a});
+
+-- | The amount of storage (in gigabytes) that is allocated for the
+-- replication instance.
+riAllocatedStorage :: Lens' ReplicationInstance (Maybe Int)
+riAllocatedStorage = lens _riAllocatedStorage (\ s a -> s{_riAllocatedStorage = a});
+
+-- | The public IP address of the replication instance.
+riReplicationInstancePublicIPAddress :: Lens' ReplicationInstance (Maybe Text)
+riReplicationInstancePublicIPAddress = lens _riReplicationInstancePublicIPAddress (\ s a -> s{_riReplicationInstancePublicIPAddress = a});
+
+-- | The compute and memory capacity of the replication instance.
+--
+-- Valid Values:
+-- 'dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge '
+riReplicationInstanceClass :: Lens' ReplicationInstance (Maybe Text)
+riReplicationInstanceClass = lens _riReplicationInstanceClass (\ s a -> s{_riReplicationInstanceClass = a});
+
+-- | The replication instance identifier. This parameter is stored as a
+-- lowercase string.
+--
+-- Constraints:
+--
+-- -   Must contain from 1 to 63 alphanumeric characters or hyphens.
+-- -   First character must be a letter.
+-- -   Cannot end with a hyphen or contain two consecutive hyphens.
+--
+-- Example: 'myrepinstance'
+riReplicationInstanceIdentifier :: Lens' ReplicationInstance (Maybe Text)
+riReplicationInstanceIdentifier = lens _riReplicationInstanceIdentifier (\ s a -> s{_riReplicationInstanceIdentifier = a});
+
+-- | The pending modification values.
+riPendingModifiedValues :: Lens' ReplicationInstance (Maybe ReplicationPendingModifiedValues)
+riPendingModifiedValues = lens _riPendingModifiedValues (\ s a -> s{_riPendingModifiedValues = a});
+
+instance FromJSON ReplicationInstance where
+        parseJSON
+          = withObject "ReplicationInstance"
+              (\ x ->
+                 ReplicationInstance' <$>
+                   (x .:? "EngineVersion") <*>
+                     (x .:? "PubliclyAccessible")
+                     <*> (x .:? "AutoMinorVersionUpgrade")
+                     <*> (x .:? "ReplicationSubnetGroup")
+                     <*> (x .:? "InstanceCreateTime")
+                     <*> (x .:? "ReplicationInstanceStatus")
+                     <*> (x .:? "PreferredMaintenanceWindow")
+                     <*> (x .:? "ReplicationInstancePrivateIpAddress")
+                     <*> (x .:? "KmsKeyId")
+                     <*> (x .:? "AvailabilityZone")
+                     <*> (x .:? "ReplicationInstanceArn")
+                     <*> (x .:? "AllocatedStorage")
+                     <*> (x .:? "ReplicationInstancePublicIpAddress")
+                     <*> (x .:? "ReplicationInstanceClass")
+                     <*> (x .:? "ReplicationInstanceIdentifier")
+                     <*> (x .:? "PendingModifiedValues"))
+
+instance Hashable ReplicationInstance
+
+-- | /See:/ 'replicationPendingModifiedValues' smart constructor.
+data ReplicationPendingModifiedValues = ReplicationPendingModifiedValues'
+    { _rpmvEngineVersion            :: !(Maybe Text)
+    , _rpmvAllocatedStorage         :: !(Maybe Int)
+    , _rpmvReplicationInstanceClass :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReplicationPendingModifiedValues' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rpmvEngineVersion'
+--
+-- * 'rpmvAllocatedStorage'
+--
+-- * 'rpmvReplicationInstanceClass'
+replicationPendingModifiedValues
+    :: ReplicationPendingModifiedValues
+replicationPendingModifiedValues =
+    ReplicationPendingModifiedValues'
+    { _rpmvEngineVersion = Nothing
+    , _rpmvAllocatedStorage = Nothing
+    , _rpmvReplicationInstanceClass = Nothing
+    }
+
+-- | The engine version number of the replication instance.
+rpmvEngineVersion :: Lens' ReplicationPendingModifiedValues (Maybe Text)
+rpmvEngineVersion = lens _rpmvEngineVersion (\ s a -> s{_rpmvEngineVersion = a});
+
+-- | The amount of storage (in gigabytes) that is allocated for the
+-- replication instance.
+rpmvAllocatedStorage :: Lens' ReplicationPendingModifiedValues (Maybe Int)
+rpmvAllocatedStorage = lens _rpmvAllocatedStorage (\ s a -> s{_rpmvAllocatedStorage = a});
+
+-- | The compute and memory capacity of the replication instance.
+--
+-- Valid Values:
+-- 'dms.t2.micro | dms.t2.small | dms.t2.medium | dms.t2.large | dms.c4.large | dms.c4.xlarge | dms.c4.2xlarge | dms.c4.4xlarge '
+rpmvReplicationInstanceClass :: Lens' ReplicationPendingModifiedValues (Maybe Text)
+rpmvReplicationInstanceClass = lens _rpmvReplicationInstanceClass (\ s a -> s{_rpmvReplicationInstanceClass = a});
+
+instance FromJSON ReplicationPendingModifiedValues
+         where
+        parseJSON
+          = withObject "ReplicationPendingModifiedValues"
+              (\ x ->
+                 ReplicationPendingModifiedValues' <$>
+                   (x .:? "EngineVersion") <*>
+                     (x .:? "AllocatedStorage")
+                     <*> (x .:? "ReplicationInstanceClass"))
+
+instance Hashable ReplicationPendingModifiedValues
+
+-- | /See:/ 'replicationSubnetGroup' smart constructor.
+data ReplicationSubnetGroup = ReplicationSubnetGroup'
+    { _rsgVPCId                             :: !(Maybe Text)
+    , _rsgSubnets                           :: !(Maybe [Subnet])
+    , _rsgReplicationSubnetGroupIdentifier  :: !(Maybe Text)
+    , _rsgSubnetGroupStatus                 :: !(Maybe Text)
+    , _rsgReplicationSubnetGroupDescription :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReplicationSubnetGroup' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rsgVPCId'
+--
+-- * 'rsgSubnets'
+--
+-- * 'rsgReplicationSubnetGroupIdentifier'
+--
+-- * 'rsgSubnetGroupStatus'
+--
+-- * 'rsgReplicationSubnetGroupDescription'
+replicationSubnetGroup
+    :: ReplicationSubnetGroup
+replicationSubnetGroup =
+    ReplicationSubnetGroup'
+    { _rsgVPCId = Nothing
+    , _rsgSubnets = Nothing
+    , _rsgReplicationSubnetGroupIdentifier = Nothing
+    , _rsgSubnetGroupStatus = Nothing
+    , _rsgReplicationSubnetGroupDescription = Nothing
+    }
+
+-- | The ID of the VPC.
+rsgVPCId :: Lens' ReplicationSubnetGroup (Maybe Text)
+rsgVPCId = lens _rsgVPCId (\ s a -> s{_rsgVPCId = a});
+
+-- | The subnets that are in the subnet group.
+rsgSubnets :: Lens' ReplicationSubnetGroup [Subnet]
+rsgSubnets = lens _rsgSubnets (\ s a -> s{_rsgSubnets = a}) . _Default . _Coerce;
+
+-- | The identifier of the replication instance subnet group.
+rsgReplicationSubnetGroupIdentifier :: Lens' ReplicationSubnetGroup (Maybe Text)
+rsgReplicationSubnetGroupIdentifier = lens _rsgReplicationSubnetGroupIdentifier (\ s a -> s{_rsgReplicationSubnetGroupIdentifier = a});
+
+-- | The status of the subnet group.
+rsgSubnetGroupStatus :: Lens' ReplicationSubnetGroup (Maybe Text)
+rsgSubnetGroupStatus = lens _rsgSubnetGroupStatus (\ s a -> s{_rsgSubnetGroupStatus = a});
+
+-- | The description of the replication subnet group.
+rsgReplicationSubnetGroupDescription :: Lens' ReplicationSubnetGroup (Maybe Text)
+rsgReplicationSubnetGroupDescription = lens _rsgReplicationSubnetGroupDescription (\ s a -> s{_rsgReplicationSubnetGroupDescription = a});
+
+instance FromJSON ReplicationSubnetGroup where
+        parseJSON
+          = withObject "ReplicationSubnetGroup"
+              (\ x ->
+                 ReplicationSubnetGroup' <$>
+                   (x .:? "VpcId") <*> (x .:? "Subnets" .!= mempty) <*>
+                     (x .:? "ReplicationSubnetGroupIdentifier")
+                     <*> (x .:? "SubnetGroupStatus")
+                     <*> (x .:? "ReplicationSubnetGroupDescription"))
+
+instance Hashable ReplicationSubnetGroup
+
+-- | /See:/ 'replicationTask' smart constructor.
+data ReplicationTask = ReplicationTask'
+    { _rtReplicationTaskSettings     :: !(Maybe Text)
+    , _rtStatus                      :: !(Maybe Text)
+    , _rtTargetEndpointARN           :: !(Maybe Text)
+    , _rtReplicationTaskIdentifier   :: !(Maybe Text)
+    , _rtReplicationTaskStartDate    :: !(Maybe POSIX)
+    , _rtSourceEndpointARN           :: !(Maybe Text)
+    , _rtTableMappings               :: !(Maybe Text)
+    , _rtReplicationTaskCreationDate :: !(Maybe POSIX)
+    , _rtMigrationType               :: !(Maybe MigrationTypeValue)
+    , _rtReplicationTaskARN          :: !(Maybe Text)
+    , _rtReplicationTaskStats        :: !(Maybe ReplicationTaskStats)
+    , _rtReplicationInstanceARN      :: !(Maybe Text)
+    , _rtLastFailureMessage          :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReplicationTask' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtReplicationTaskSettings'
+--
+-- * 'rtStatus'
+--
+-- * 'rtTargetEndpointARN'
+--
+-- * 'rtReplicationTaskIdentifier'
+--
+-- * 'rtReplicationTaskStartDate'
+--
+-- * 'rtSourceEndpointARN'
+--
+-- * 'rtTableMappings'
+--
+-- * 'rtReplicationTaskCreationDate'
+--
+-- * 'rtMigrationType'
+--
+-- * 'rtReplicationTaskARN'
+--
+-- * 'rtReplicationTaskStats'
+--
+-- * 'rtReplicationInstanceARN'
+--
+-- * 'rtLastFailureMessage'
+replicationTask
+    :: ReplicationTask
+replicationTask =
+    ReplicationTask'
+    { _rtReplicationTaskSettings = Nothing
+    , _rtStatus = Nothing
+    , _rtTargetEndpointARN = Nothing
+    , _rtReplicationTaskIdentifier = Nothing
+    , _rtReplicationTaskStartDate = Nothing
+    , _rtSourceEndpointARN = Nothing
+    , _rtTableMappings = Nothing
+    , _rtReplicationTaskCreationDate = Nothing
+    , _rtMigrationType = Nothing
+    , _rtReplicationTaskARN = Nothing
+    , _rtReplicationTaskStats = Nothing
+    , _rtReplicationInstanceARN = Nothing
+    , _rtLastFailureMessage = Nothing
+    }
+
+-- | The settings for the replication task.
+rtReplicationTaskSettings :: Lens' ReplicationTask (Maybe Text)
+rtReplicationTaskSettings = lens _rtReplicationTaskSettings (\ s a -> s{_rtReplicationTaskSettings = a});
+
+-- | The status of the replication task.
+rtStatus :: Lens' ReplicationTask (Maybe Text)
+rtStatus = lens _rtStatus (\ s a -> s{_rtStatus = a});
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+rtTargetEndpointARN :: Lens' ReplicationTask (Maybe Text)
+rtTargetEndpointARN = lens _rtTargetEndpointARN (\ s a -> s{_rtTargetEndpointARN = a});
+
+-- | The replication task identifier.
+--
+-- Constraints:
+--
+-- -   Must contain from 1 to 63 alphanumeric characters or hyphens.
+-- -   First character must be a letter.
+-- -   Cannot end with a hyphen or contain two consecutive hyphens.
+rtReplicationTaskIdentifier :: Lens' ReplicationTask (Maybe Text)
+rtReplicationTaskIdentifier = lens _rtReplicationTaskIdentifier (\ s a -> s{_rtReplicationTaskIdentifier = a});
+
+-- | The date the replication task is scheduled to start.
+rtReplicationTaskStartDate :: Lens' ReplicationTask (Maybe UTCTime)
+rtReplicationTaskStartDate = lens _rtReplicationTaskStartDate (\ s a -> s{_rtReplicationTaskStartDate = a}) . mapping _Time;
+
+-- | The Amazon Resource Name (ARN) string that uniquely identifies the
+-- endpoint.
+rtSourceEndpointARN :: Lens' ReplicationTask (Maybe Text)
+rtSourceEndpointARN = lens _rtSourceEndpointARN (\ s a -> s{_rtSourceEndpointARN = a});
+
+-- | Table mappings specified in the task.
+rtTableMappings :: Lens' ReplicationTask (Maybe Text)
+rtTableMappings = lens _rtTableMappings (\ s a -> s{_rtTableMappings = a});
+
+-- | The date the replication task was created.
+rtReplicationTaskCreationDate :: Lens' ReplicationTask (Maybe UTCTime)
+rtReplicationTaskCreationDate = lens _rtReplicationTaskCreationDate (\ s a -> s{_rtReplicationTaskCreationDate = a}) . mapping _Time;
+
+-- | The type of migration.
+rtMigrationType :: Lens' ReplicationTask (Maybe MigrationTypeValue)
+rtMigrationType = lens _rtMigrationType (\ s a -> s{_rtMigrationType = a});
+
+-- | The Amazon Resource Name (ARN) of the replication task.
+rtReplicationTaskARN :: Lens' ReplicationTask (Maybe Text)
+rtReplicationTaskARN = lens _rtReplicationTaskARN (\ s a -> s{_rtReplicationTaskARN = a});
+
+-- | The statistics for the task, including elapsed time, tables loaded, and
+-- table errors.
+rtReplicationTaskStats :: Lens' ReplicationTask (Maybe ReplicationTaskStats)
+rtReplicationTaskStats = lens _rtReplicationTaskStats (\ s a -> s{_rtReplicationTaskStats = a});
+
+-- | The Amazon Resource Name (ARN) of the replication instance.
+rtReplicationInstanceARN :: Lens' ReplicationTask (Maybe Text)
+rtReplicationInstanceARN = lens _rtReplicationInstanceARN (\ s a -> s{_rtReplicationInstanceARN = a});
+
+-- | The last error (failure) message generated for the replication instance.
+rtLastFailureMessage :: Lens' ReplicationTask (Maybe Text)
+rtLastFailureMessage = lens _rtLastFailureMessage (\ s a -> s{_rtLastFailureMessage = a});
+
+instance FromJSON ReplicationTask where
+        parseJSON
+          = withObject "ReplicationTask"
+              (\ x ->
+                 ReplicationTask' <$>
+                   (x .:? "ReplicationTaskSettings") <*>
+                     (x .:? "Status")
+                     <*> (x .:? "TargetEndpointArn")
+                     <*> (x .:? "ReplicationTaskIdentifier")
+                     <*> (x .:? "ReplicationTaskStartDate")
+                     <*> (x .:? "SourceEndpointArn")
+                     <*> (x .:? "TableMappings")
+                     <*> (x .:? "ReplicationTaskCreationDate")
+                     <*> (x .:? "MigrationType")
+                     <*> (x .:? "ReplicationTaskArn")
+                     <*> (x .:? "ReplicationTaskStats")
+                     <*> (x .:? "ReplicationInstanceArn")
+                     <*> (x .:? "LastFailureMessage"))
+
+instance Hashable ReplicationTask
+
+-- | /See:/ 'replicationTaskStats' smart constructor.
+data ReplicationTaskStats = ReplicationTaskStats'
+    { _rtsFullLoadProgressPercent :: !(Maybe Int)
+    , _rtsElapsedTimeMillis       :: !(Maybe Integer)
+    , _rtsTablesErrored           :: !(Maybe Int)
+    , _rtsTablesLoaded            :: !(Maybe Int)
+    , _rtsTablesQueued            :: !(Maybe Int)
+    , _rtsTablesLoading           :: !(Maybe Int)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ReplicationTaskStats' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rtsFullLoadProgressPercent'
+--
+-- * 'rtsElapsedTimeMillis'
+--
+-- * 'rtsTablesErrored'
+--
+-- * 'rtsTablesLoaded'
+--
+-- * 'rtsTablesQueued'
+--
+-- * 'rtsTablesLoading'
+replicationTaskStats
+    :: ReplicationTaskStats
+replicationTaskStats =
+    ReplicationTaskStats'
+    { _rtsFullLoadProgressPercent = Nothing
+    , _rtsElapsedTimeMillis = Nothing
+    , _rtsTablesErrored = Nothing
+    , _rtsTablesLoaded = Nothing
+    , _rtsTablesQueued = Nothing
+    , _rtsTablesLoading = Nothing
+    }
+
+-- | The percent complete for the full load migration task.
+rtsFullLoadProgressPercent :: Lens' ReplicationTaskStats (Maybe Int)
+rtsFullLoadProgressPercent = lens _rtsFullLoadProgressPercent (\ s a -> s{_rtsFullLoadProgressPercent = a});
+
+-- | The elapsed time of the task, in milliseconds.
+rtsElapsedTimeMillis :: Lens' ReplicationTaskStats (Maybe Integer)
+rtsElapsedTimeMillis = lens _rtsElapsedTimeMillis (\ s a -> s{_rtsElapsedTimeMillis = a});
+
+-- | The number of errors that have occurred during this task.
+rtsTablesErrored :: Lens' ReplicationTaskStats (Maybe Int)
+rtsTablesErrored = lens _rtsTablesErrored (\ s a -> s{_rtsTablesErrored = a});
+
+-- | The number of tables loaded for this task.
+rtsTablesLoaded :: Lens' ReplicationTaskStats (Maybe Int)
+rtsTablesLoaded = lens _rtsTablesLoaded (\ s a -> s{_rtsTablesLoaded = a});
+
+-- | The number of tables queued for this task.
+rtsTablesQueued :: Lens' ReplicationTaskStats (Maybe Int)
+rtsTablesQueued = lens _rtsTablesQueued (\ s a -> s{_rtsTablesQueued = a});
+
+-- | The number of tables currently loading for this task.
+rtsTablesLoading :: Lens' ReplicationTaskStats (Maybe Int)
+rtsTablesLoading = lens _rtsTablesLoading (\ s a -> s{_rtsTablesLoading = a});
+
+instance FromJSON ReplicationTaskStats where
+        parseJSON
+          = withObject "ReplicationTaskStats"
+              (\ x ->
+                 ReplicationTaskStats' <$>
+                   (x .:? "FullLoadProgressPercent") <*>
+                     (x .:? "ElapsedTimeMillis")
+                     <*> (x .:? "TablesErrored")
+                     <*> (x .:? "TablesLoaded")
+                     <*> (x .:? "TablesQueued")
+                     <*> (x .:? "TablesLoading"))
+
+instance Hashable ReplicationTaskStats
+
+-- | /See:/ 'subnet' smart constructor.
+data Subnet = Subnet'
+    { _sSubnetStatus           :: !(Maybe Text)
+    , _sSubnetIdentifier       :: !(Maybe Text)
+    , _sSubnetAvailabilityZone :: !(Maybe AvailabilityZone)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Subnet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sSubnetStatus'
+--
+-- * 'sSubnetIdentifier'
+--
+-- * 'sSubnetAvailabilityZone'
+subnet
+    :: Subnet
+subnet =
+    Subnet'
+    { _sSubnetStatus = Nothing
+    , _sSubnetIdentifier = Nothing
+    , _sSubnetAvailabilityZone = Nothing
+    }
+
+-- | The status of the subnet.
+sSubnetStatus :: Lens' Subnet (Maybe Text)
+sSubnetStatus = lens _sSubnetStatus (\ s a -> s{_sSubnetStatus = a});
+
+-- | The subnet identifier.
+sSubnetIdentifier :: Lens' Subnet (Maybe Text)
+sSubnetIdentifier = lens _sSubnetIdentifier (\ s a -> s{_sSubnetIdentifier = a});
+
+-- | The Availability Zone of the subnet.
+sSubnetAvailabilityZone :: Lens' Subnet (Maybe AvailabilityZone)
+sSubnetAvailabilityZone = lens _sSubnetAvailabilityZone (\ s a -> s{_sSubnetAvailabilityZone = a});
+
+instance FromJSON Subnet where
+        parseJSON
+          = withObject "Subnet"
+              (\ x ->
+                 Subnet' <$>
+                   (x .:? "SubnetStatus") <*> (x .:? "SubnetIdentifier")
+                     <*> (x .:? "SubnetAvailabilityZone"))
+
+instance Hashable Subnet
+
+-- | /See:/ 'supportedEndpointType' smart constructor.
+data SupportedEndpointType = SupportedEndpointType'
+    { _setEndpointType :: !(Maybe ReplicationEndpointTypeValue)
+    , _setEngineName   :: !(Maybe Text)
+    , _setSupportsCDC  :: !(Maybe Bool)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'SupportedEndpointType' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'setEndpointType'
+--
+-- * 'setEngineName'
+--
+-- * 'setSupportsCDC'
+supportedEndpointType
+    :: SupportedEndpointType
+supportedEndpointType =
+    SupportedEndpointType'
+    { _setEndpointType = Nothing
+    , _setEngineName = Nothing
+    , _setSupportsCDC = Nothing
+    }
+
+-- | The type of endpoint.
+setEndpointType :: Lens' SupportedEndpointType (Maybe ReplicationEndpointTypeValue)
+setEndpointType = lens _setEndpointType (\ s a -> s{_setEndpointType = a});
+
+-- | The database engine name.
+setEngineName :: Lens' SupportedEndpointType (Maybe Text)
+setEngineName = lens _setEngineName (\ s a -> s{_setEngineName = a});
+
+-- | Indicates if Change Data Capture (CDC) is supported.
+setSupportsCDC :: Lens' SupportedEndpointType (Maybe Bool)
+setSupportsCDC = lens _setSupportsCDC (\ s a -> s{_setSupportsCDC = a});
+
+instance FromJSON SupportedEndpointType where
+        parseJSON
+          = withObject "SupportedEndpointType"
+              (\ x ->
+                 SupportedEndpointType' <$>
+                   (x .:? "EndpointType") <*> (x .:? "EngineName") <*>
+                     (x .:? "SupportsCDC"))
+
+instance Hashable SupportedEndpointType
+
+-- | /See:/ 'tableStatistics' smart constructor.
+data TableStatistics = TableStatistics'
+    { _tsFullLoadRows   :: !(Maybe Integer)
+    , _tsInserts        :: !(Maybe Integer)
+    , _tsSchemaName     :: !(Maybe Text)
+    , _tsTableState     :: !(Maybe Text)
+    , _tsDdls           :: !(Maybe Integer)
+    , _tsDeletes        :: !(Maybe Integer)
+    , _tsUpdates        :: !(Maybe Integer)
+    , _tsLastUpdateTime :: !(Maybe POSIX)
+    , _tsTableName      :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'TableStatistics' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tsFullLoadRows'
+--
+-- * 'tsInserts'
+--
+-- * 'tsSchemaName'
+--
+-- * 'tsTableState'
+--
+-- * 'tsDdls'
+--
+-- * 'tsDeletes'
+--
+-- * 'tsUpdates'
+--
+-- * 'tsLastUpdateTime'
+--
+-- * 'tsTableName'
+tableStatistics
+    :: TableStatistics
+tableStatistics =
+    TableStatistics'
+    { _tsFullLoadRows = Nothing
+    , _tsInserts = Nothing
+    , _tsSchemaName = Nothing
+    , _tsTableState = Nothing
+    , _tsDdls = Nothing
+    , _tsDeletes = Nothing
+    , _tsUpdates = Nothing
+    , _tsLastUpdateTime = Nothing
+    , _tsTableName = Nothing
+    }
+
+-- | The number of rows added during the Full Load operation.
+tsFullLoadRows :: Lens' TableStatistics (Maybe Integer)
+tsFullLoadRows = lens _tsFullLoadRows (\ s a -> s{_tsFullLoadRows = a});
+
+-- | The number of insert actions performed on a table.
+tsInserts :: Lens' TableStatistics (Maybe Integer)
+tsInserts = lens _tsInserts (\ s a -> s{_tsInserts = a});
+
+-- | The schema name.
+tsSchemaName :: Lens' TableStatistics (Maybe Text)
+tsSchemaName = lens _tsSchemaName (\ s a -> s{_tsSchemaName = a});
+
+-- | The state of the table.
+tsTableState :: Lens' TableStatistics (Maybe Text)
+tsTableState = lens _tsTableState (\ s a -> s{_tsTableState = a});
+
+-- | The Data Definition Language (DDL) used to build and modify the
+-- structure of your tables.
+tsDdls :: Lens' TableStatistics (Maybe Integer)
+tsDdls = lens _tsDdls (\ s a -> s{_tsDdls = a});
+
+-- | The number of delete actions performed on a table.
+tsDeletes :: Lens' TableStatistics (Maybe Integer)
+tsDeletes = lens _tsDeletes (\ s a -> s{_tsDeletes = a});
+
+-- | The number of update actions performed on a table.
+tsUpdates :: Lens' TableStatistics (Maybe Integer)
+tsUpdates = lens _tsUpdates (\ s a -> s{_tsUpdates = a});
+
+-- | The last time the table was updated.
+tsLastUpdateTime :: Lens' TableStatistics (Maybe UTCTime)
+tsLastUpdateTime = lens _tsLastUpdateTime (\ s a -> s{_tsLastUpdateTime = a}) . mapping _Time;
+
+-- | The name of the table.
+tsTableName :: Lens' TableStatistics (Maybe Text)
+tsTableName = lens _tsTableName (\ s a -> s{_tsTableName = a});
+
+instance FromJSON TableStatistics where
+        parseJSON
+          = withObject "TableStatistics"
+              (\ x ->
+                 TableStatistics' <$>
+                   (x .:? "FullLoadRows") <*> (x .:? "Inserts") <*>
+                     (x .:? "SchemaName")
+                     <*> (x .:? "TableState")
+                     <*> (x .:? "Ddls")
+                     <*> (x .:? "Deletes")
+                     <*> (x .:? "Updates")
+                     <*> (x .:? "LastUpdateTime")
+                     <*> (x .:? "TableName"))
+
+instance Hashable TableStatistics
+
+-- | /See:/ 'tag' smart constructor.
+data Tag = Tag'
+    { _tagValue :: !(Maybe Text)
+    , _tagKey   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Tag' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tagValue'
+--
+-- * 'tagKey'
+tag
+    :: Tag
+tag =
+    Tag'
+    { _tagValue = Nothing
+    , _tagKey = Nothing
+    }
+
+-- | A value is the optional value of the tag. The string value can be from 1
+-- to 256 Unicode characters in length and cannot be prefixed with \"aws:\"
+-- or \"dms:\". The string can only contain only the set of Unicode
+-- letters, digits, white-space, \'_\', \'.\', \'\/\', \'=\', \'+\', \'-\'
+-- (Java regex: \"^([\\\\p{L}\\\\p{Z}\\\\p{N}_.:\/=+\\\\-]*)$\").
+tagValue :: Lens' Tag (Maybe Text)
+tagValue = lens _tagValue (\ s a -> s{_tagValue = a});
+
+-- | A key is the required name of the tag. The string value can be from 1 to
+-- 128 Unicode characters in length and cannot be prefixed with \"aws:\" or
+-- \"dms:\". The string can only contain only the set of Unicode letters,
+-- digits, white-space, \'_\', \'.\', \'\/\', \'=\', \'+\', \'-\' (Java
+-- regex: \"^([\\\\p{L}\\\\p{Z}\\\\p{N}_.:\/=+\\\\-]*)$\").
+tagKey :: Lens' Tag (Maybe Text)
+tagKey = lens _tagKey (\ s a -> s{_tagKey = a});
+
+instance FromJSON Tag where
+        parseJSON
+          = withObject "Tag"
+              (\ x -> Tag' <$> (x .:? "Value") <*> (x .:? "Key"))
+
+instance Hashable Tag
+
+instance ToJSON Tag where
+        toJSON Tag'{..}
+          = object
+              (catMaybes
+                 [("Value" .=) <$> _tagValue, ("Key" .=) <$> _tagKey])
diff --git a/gen/Network/AWS/DMS/Types/Sum.hs b/gen/Network/AWS/DMS/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/Types/Sum.hs
@@ -0,0 +1,135 @@
+{-# 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.DMS.Types.Sum
+-- Copyright   : (c) 2013-2016 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 Network.AWS.DMS.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data MigrationTypeValue
+    = Cdc
+    | FullLoad
+    | FullLoadAndCdc
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText MigrationTypeValue where
+    parser = takeLowerText >>= \case
+        "cdc" -> pure Cdc
+        "full-load" -> pure FullLoad
+        "full-load-and-cdc" -> pure FullLoadAndCdc
+        e -> fromTextError $ "Failure parsing MigrationTypeValue from value: '" <> e
+           <> "'. Accepted values: cdc, full-load, full-load-and-cdc"
+
+instance ToText MigrationTypeValue where
+    toText = \case
+        Cdc -> "cdc"
+        FullLoad -> "full-load"
+        FullLoadAndCdc -> "full-load-and-cdc"
+
+instance Hashable     MigrationTypeValue
+instance ToByteString MigrationTypeValue
+instance ToQuery      MigrationTypeValue
+instance ToHeader     MigrationTypeValue
+
+instance ToJSON MigrationTypeValue where
+    toJSON = toJSONText
+
+instance FromJSON MigrationTypeValue where
+    parseJSON = parseJSONText "MigrationTypeValue"
+
+data RefreshSchemasStatusTypeValue
+    = Failed
+    | Refreshing
+    | Successful
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText RefreshSchemasStatusTypeValue where
+    parser = takeLowerText >>= \case
+        "failed" -> pure Failed
+        "refreshing" -> pure Refreshing
+        "successful" -> pure Successful
+        e -> fromTextError $ "Failure parsing RefreshSchemasStatusTypeValue from value: '" <> e
+           <> "'. Accepted values: failed, refreshing, successful"
+
+instance ToText RefreshSchemasStatusTypeValue where
+    toText = \case
+        Failed -> "failed"
+        Refreshing -> "refreshing"
+        Successful -> "successful"
+
+instance Hashable     RefreshSchemasStatusTypeValue
+instance ToByteString RefreshSchemasStatusTypeValue
+instance ToQuery      RefreshSchemasStatusTypeValue
+instance ToHeader     RefreshSchemasStatusTypeValue
+
+instance FromJSON RefreshSchemasStatusTypeValue where
+    parseJSON = parseJSONText "RefreshSchemasStatusTypeValue"
+
+data ReplicationEndpointTypeValue
+    = Source
+    | Target
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText ReplicationEndpointTypeValue where
+    parser = takeLowerText >>= \case
+        "source" -> pure Source
+        "target" -> pure Target
+        e -> fromTextError $ "Failure parsing ReplicationEndpointTypeValue from value: '" <> e
+           <> "'. Accepted values: source, target"
+
+instance ToText ReplicationEndpointTypeValue where
+    toText = \case
+        Source -> "source"
+        Target -> "target"
+
+instance Hashable     ReplicationEndpointTypeValue
+instance ToByteString ReplicationEndpointTypeValue
+instance ToQuery      ReplicationEndpointTypeValue
+instance ToHeader     ReplicationEndpointTypeValue
+
+instance ToJSON ReplicationEndpointTypeValue where
+    toJSON = toJSONText
+
+instance FromJSON ReplicationEndpointTypeValue where
+    parseJSON = parseJSONText "ReplicationEndpointTypeValue"
+
+data StartReplicationTaskTypeValue
+    = ReloadTarget
+    | ResumeProcessing
+    | StartReplication
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText StartReplicationTaskTypeValue where
+    parser = takeLowerText >>= \case
+        "reload-target" -> pure ReloadTarget
+        "resume-processing" -> pure ResumeProcessing
+        "start-replication" -> pure StartReplication
+        e -> fromTextError $ "Failure parsing StartReplicationTaskTypeValue from value: '" <> e
+           <> "'. Accepted values: reload-target, resume-processing, start-replication"
+
+instance ToText StartReplicationTaskTypeValue where
+    toText = \case
+        ReloadTarget -> "reload-target"
+        ResumeProcessing -> "resume-processing"
+        StartReplication -> "start-replication"
+
+instance Hashable     StartReplicationTaskTypeValue
+instance ToByteString StartReplicationTaskTypeValue
+instance ToQuery      StartReplicationTaskTypeValue
+instance ToHeader     StartReplicationTaskTypeValue
+
+instance ToJSON StartReplicationTaskTypeValue where
+    toJSON = toJSONText
diff --git a/gen/Network/AWS/DMS/Waiters.hs b/gen/Network/AWS/DMS/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/DMS/Waiters.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.DMS.Waiters
+-- Copyright   : (c) 2013-2016 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 Network.AWS.DMS.Waiters where
+
+import           Network.AWS.DMS.Types
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2016 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 Main (main) where
+
+import Test.Tasty
+import Test.AWS.DMS
+import Test.AWS.DMS.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "DMS"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/DMS.hs b/test/Test/AWS/DMS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/DMS.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell   #-}
+
+-- |
+-- Module      : Test.AWS.DMS
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.DMS
+    ( tests
+    , fixtures
+    ) where
+
+import           Test.AWS.Prelude
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/DMS/Internal.hs b/test/Test/AWS/DMS/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/DMS/Internal.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Test.AWS.DMS.Internal
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+
+module Test.AWS.DMS.Internal where
+
+import           Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/DMS.hs b/test/Test/AWS/Gen/DMS.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/DMS.hs
@@ -0,0 +1,561 @@
+{-# 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.DMS
+-- Copyright   : (c) 2013-2016 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.Gen.DMS where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.DMS
+import Test.AWS.DMS.Internal
+
+-- 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"
+--         [ testDeleteReplicationInstance $
+--             deleteReplicationInstance
+--
+--         , testCreateEndpoint $
+--             createEndpoint
+--
+--         , testDescribeSchemas $
+--             describeSchemas
+--
+--         , testDeleteEndpoint $
+--             deleteEndpoint
+--
+--         , testListTagsForResource $
+--             listTagsForResource
+--
+--         , testDescribeEndpointTypes $
+--             describeEndpointTypes
+--
+--         , testDeleteReplicationTask $
+--             deleteReplicationTask
+--
+--         , testTestConnection $
+--             testConnection
+--
+--         , testDescribeConnections $
+--             describeConnections
+--
+--         , testRemoveTagsFromResource $
+--             removeTagsFromResource
+--
+--         , testModifyEndpoint $
+--             modifyEndpoint
+--
+--         , testDescribeTableStatistics $
+--             describeTableStatistics
+--
+--         , testDescribeReplicationSubnetGroups $
+--             describeReplicationSubnetGroups
+--
+--         , testStartReplicationTask $
+--             startReplicationTask
+--
+--         , testAddTagsToResource $
+--             addTagsToResource
+--
+--         , testCreateReplicationSubnetGroup $
+--             createReplicationSubnetGroup
+--
+--         , testRefreshSchemas $
+--             refreshSchemas
+--
+--         , testDescribeReplicationTasks $
+--             describeReplicationTasks
+--
+--         , testDescribeOrderableReplicationInstances $
+--             describeOrderableReplicationInstances
+--
+--         , testCreateReplicationTask $
+--             createReplicationTask
+--
+--         , testDescribeEndpoints $
+--             describeEndpoints
+--
+--         , testModifyReplicationInstance $
+--             modifyReplicationInstance
+--
+--         , testModifyReplicationSubnetGroup $
+--             modifyReplicationSubnetGroup
+--
+--         , testDescribeAccountAttributes $
+--             describeAccountAttributes
+--
+--         , testDescribeReplicationInstances $
+--             describeReplicationInstances
+--
+--         , testDescribeRefreshSchemasStatus $
+--             describeRefreshSchemasStatus
+--
+--         , testStopReplicationTask $
+--             stopReplicationTask
+--
+--         , testCreateReplicationInstance $
+--             createReplicationInstance
+--
+--         , testDeleteReplicationSubnetGroup $
+--             deleteReplicationSubnetGroup
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testDeleteReplicationInstanceResponse $
+--             deleteReplicationInstanceResponse
+--
+--         , testCreateEndpointResponse $
+--             createEndpointResponse
+--
+--         , testDescribeSchemasResponse $
+--             describeSchemasResponse
+--
+--         , testDeleteEndpointResponse $
+--             deleteEndpointResponse
+--
+--         , testListTagsForResourceResponse $
+--             listTagsForResourceResponse
+--
+--         , testDescribeEndpointTypesResponse $
+--             describeEndpointTypesResponse
+--
+--         , testDeleteReplicationTaskResponse $
+--             deleteReplicationTaskResponse
+--
+--         , testTestConnectionResponse $
+--             testConnectionResponse
+--
+--         , testDescribeConnectionsResponse $
+--             describeConnectionsResponse
+--
+--         , testRemoveTagsFromResourceResponse $
+--             removeTagsFromResourceResponse
+--
+--         , testModifyEndpointResponse $
+--             modifyEndpointResponse
+--
+--         , testDescribeTableStatisticsResponse $
+--             describeTableStatisticsResponse
+--
+--         , testDescribeReplicationSubnetGroupsResponse $
+--             describeReplicationSubnetGroupsResponse
+--
+--         , testStartReplicationTaskResponse $
+--             startReplicationTaskResponse
+--
+--         , testAddTagsToResourceResponse $
+--             addTagsToResourceResponse
+--
+--         , testCreateReplicationSubnetGroupResponse $
+--             createReplicationSubnetGroupResponse
+--
+--         , testRefreshSchemasResponse $
+--             refreshSchemasResponse
+--
+--         , testDescribeReplicationTasksResponse $
+--             describeReplicationTasksResponse
+--
+--         , testDescribeOrderableReplicationInstancesResponse $
+--             describeOrderableReplicationInstancesResponse
+--
+--         , testCreateReplicationTaskResponse $
+--             createReplicationTaskResponse
+--
+--         , testDescribeEndpointsResponse $
+--             describeEndpointsResponse
+--
+--         , testModifyReplicationInstanceResponse $
+--             modifyReplicationInstanceResponse
+--
+--         , testModifyReplicationSubnetGroupResponse $
+--             modifyReplicationSubnetGroupResponse
+--
+--         , testDescribeAccountAttributesResponse $
+--             describeAccountAttributesResponse
+--
+--         , testDescribeReplicationInstancesResponse $
+--             describeReplicationInstancesResponse
+--
+--         , testDescribeRefreshSchemasStatusResponse $
+--             describeRefreshSchemasStatusResponse
+--
+--         , testStopReplicationTaskResponse $
+--             stopReplicationTaskResponse
+--
+--         , testCreateReplicationInstanceResponse $
+--             createReplicationInstanceResponse
+--
+--         , testDeleteReplicationSubnetGroupResponse $
+--             deleteReplicationSubnetGroupResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testDeleteReplicationInstance :: DeleteReplicationInstance -> TestTree
+testDeleteReplicationInstance = req
+    "DeleteReplicationInstance"
+    "fixture/DeleteReplicationInstance.yaml"
+
+testCreateEndpoint :: CreateEndpoint -> TestTree
+testCreateEndpoint = req
+    "CreateEndpoint"
+    "fixture/CreateEndpoint.yaml"
+
+testDescribeSchemas :: DescribeSchemas -> TestTree
+testDescribeSchemas = req
+    "DescribeSchemas"
+    "fixture/DescribeSchemas.yaml"
+
+testDeleteEndpoint :: DeleteEndpoint -> TestTree
+testDeleteEndpoint = req
+    "DeleteEndpoint"
+    "fixture/DeleteEndpoint.yaml"
+
+testListTagsForResource :: ListTagsForResource -> TestTree
+testListTagsForResource = req
+    "ListTagsForResource"
+    "fixture/ListTagsForResource.yaml"
+
+testDescribeEndpointTypes :: DescribeEndpointTypes -> TestTree
+testDescribeEndpointTypes = req
+    "DescribeEndpointTypes"
+    "fixture/DescribeEndpointTypes.yaml"
+
+testDeleteReplicationTask :: DeleteReplicationTask -> TestTree
+testDeleteReplicationTask = req
+    "DeleteReplicationTask"
+    "fixture/DeleteReplicationTask.yaml"
+
+testTestConnection :: TestConnection -> TestTree
+testTestConnection = req
+    "TestConnection"
+    "fixture/TestConnection.yaml"
+
+testDescribeConnections :: DescribeConnections -> TestTree
+testDescribeConnections = req
+    "DescribeConnections"
+    "fixture/DescribeConnections.yaml"
+
+testRemoveTagsFromResource :: RemoveTagsFromResource -> TestTree
+testRemoveTagsFromResource = req
+    "RemoveTagsFromResource"
+    "fixture/RemoveTagsFromResource.yaml"
+
+testModifyEndpoint :: ModifyEndpoint -> TestTree
+testModifyEndpoint = req
+    "ModifyEndpoint"
+    "fixture/ModifyEndpoint.yaml"
+
+testDescribeTableStatistics :: DescribeTableStatistics -> TestTree
+testDescribeTableStatistics = req
+    "DescribeTableStatistics"
+    "fixture/DescribeTableStatistics.yaml"
+
+testDescribeReplicationSubnetGroups :: DescribeReplicationSubnetGroups -> TestTree
+testDescribeReplicationSubnetGroups = req
+    "DescribeReplicationSubnetGroups"
+    "fixture/DescribeReplicationSubnetGroups.yaml"
+
+testStartReplicationTask :: StartReplicationTask -> TestTree
+testStartReplicationTask = req
+    "StartReplicationTask"
+    "fixture/StartReplicationTask.yaml"
+
+testAddTagsToResource :: AddTagsToResource -> TestTree
+testAddTagsToResource = req
+    "AddTagsToResource"
+    "fixture/AddTagsToResource.yaml"
+
+testCreateReplicationSubnetGroup :: CreateReplicationSubnetGroup -> TestTree
+testCreateReplicationSubnetGroup = req
+    "CreateReplicationSubnetGroup"
+    "fixture/CreateReplicationSubnetGroup.yaml"
+
+testRefreshSchemas :: RefreshSchemas -> TestTree
+testRefreshSchemas = req
+    "RefreshSchemas"
+    "fixture/RefreshSchemas.yaml"
+
+testDescribeReplicationTasks :: DescribeReplicationTasks -> TestTree
+testDescribeReplicationTasks = req
+    "DescribeReplicationTasks"
+    "fixture/DescribeReplicationTasks.yaml"
+
+testDescribeOrderableReplicationInstances :: DescribeOrderableReplicationInstances -> TestTree
+testDescribeOrderableReplicationInstances = req
+    "DescribeOrderableReplicationInstances"
+    "fixture/DescribeOrderableReplicationInstances.yaml"
+
+testCreateReplicationTask :: CreateReplicationTask -> TestTree
+testCreateReplicationTask = req
+    "CreateReplicationTask"
+    "fixture/CreateReplicationTask.yaml"
+
+testDescribeEndpoints :: DescribeEndpoints -> TestTree
+testDescribeEndpoints = req
+    "DescribeEndpoints"
+    "fixture/DescribeEndpoints.yaml"
+
+testModifyReplicationInstance :: ModifyReplicationInstance -> TestTree
+testModifyReplicationInstance = req
+    "ModifyReplicationInstance"
+    "fixture/ModifyReplicationInstance.yaml"
+
+testModifyReplicationSubnetGroup :: ModifyReplicationSubnetGroup -> TestTree
+testModifyReplicationSubnetGroup = req
+    "ModifyReplicationSubnetGroup"
+    "fixture/ModifyReplicationSubnetGroup.yaml"
+
+testDescribeAccountAttributes :: DescribeAccountAttributes -> TestTree
+testDescribeAccountAttributes = req
+    "DescribeAccountAttributes"
+    "fixture/DescribeAccountAttributes.yaml"
+
+testDescribeReplicationInstances :: DescribeReplicationInstances -> TestTree
+testDescribeReplicationInstances = req
+    "DescribeReplicationInstances"
+    "fixture/DescribeReplicationInstances.yaml"
+
+testDescribeRefreshSchemasStatus :: DescribeRefreshSchemasStatus -> TestTree
+testDescribeRefreshSchemasStatus = req
+    "DescribeRefreshSchemasStatus"
+    "fixture/DescribeRefreshSchemasStatus.yaml"
+
+testStopReplicationTask :: StopReplicationTask -> TestTree
+testStopReplicationTask = req
+    "StopReplicationTask"
+    "fixture/StopReplicationTask.yaml"
+
+testCreateReplicationInstance :: CreateReplicationInstance -> TestTree
+testCreateReplicationInstance = req
+    "CreateReplicationInstance"
+    "fixture/CreateReplicationInstance.yaml"
+
+testDeleteReplicationSubnetGroup :: DeleteReplicationSubnetGroup -> TestTree
+testDeleteReplicationSubnetGroup = req
+    "DeleteReplicationSubnetGroup"
+    "fixture/DeleteReplicationSubnetGroup.yaml"
+
+-- Responses
+
+testDeleteReplicationInstanceResponse :: DeleteReplicationInstanceResponse -> TestTree
+testDeleteReplicationInstanceResponse = res
+    "DeleteReplicationInstanceResponse"
+    "fixture/DeleteReplicationInstanceResponse.proto"
+    dms
+    (Proxy :: Proxy DeleteReplicationInstance)
+
+testCreateEndpointResponse :: CreateEndpointResponse -> TestTree
+testCreateEndpointResponse = res
+    "CreateEndpointResponse"
+    "fixture/CreateEndpointResponse.proto"
+    dms
+    (Proxy :: Proxy CreateEndpoint)
+
+testDescribeSchemasResponse :: DescribeSchemasResponse -> TestTree
+testDescribeSchemasResponse = res
+    "DescribeSchemasResponse"
+    "fixture/DescribeSchemasResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeSchemas)
+
+testDeleteEndpointResponse :: DeleteEndpointResponse -> TestTree
+testDeleteEndpointResponse = res
+    "DeleteEndpointResponse"
+    "fixture/DeleteEndpointResponse.proto"
+    dms
+    (Proxy :: Proxy DeleteEndpoint)
+
+testListTagsForResourceResponse :: ListTagsForResourceResponse -> TestTree
+testListTagsForResourceResponse = res
+    "ListTagsForResourceResponse"
+    "fixture/ListTagsForResourceResponse.proto"
+    dms
+    (Proxy :: Proxy ListTagsForResource)
+
+testDescribeEndpointTypesResponse :: DescribeEndpointTypesResponse -> TestTree
+testDescribeEndpointTypesResponse = res
+    "DescribeEndpointTypesResponse"
+    "fixture/DescribeEndpointTypesResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeEndpointTypes)
+
+testDeleteReplicationTaskResponse :: DeleteReplicationTaskResponse -> TestTree
+testDeleteReplicationTaskResponse = res
+    "DeleteReplicationTaskResponse"
+    "fixture/DeleteReplicationTaskResponse.proto"
+    dms
+    (Proxy :: Proxy DeleteReplicationTask)
+
+testTestConnectionResponse :: TestConnectionResponse -> TestTree
+testTestConnectionResponse = res
+    "TestConnectionResponse"
+    "fixture/TestConnectionResponse.proto"
+    dms
+    (Proxy :: Proxy TestConnection)
+
+testDescribeConnectionsResponse :: DescribeConnectionsResponse -> TestTree
+testDescribeConnectionsResponse = res
+    "DescribeConnectionsResponse"
+    "fixture/DescribeConnectionsResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeConnections)
+
+testRemoveTagsFromResourceResponse :: RemoveTagsFromResourceResponse -> TestTree
+testRemoveTagsFromResourceResponse = res
+    "RemoveTagsFromResourceResponse"
+    "fixture/RemoveTagsFromResourceResponse.proto"
+    dms
+    (Proxy :: Proxy RemoveTagsFromResource)
+
+testModifyEndpointResponse :: ModifyEndpointResponse -> TestTree
+testModifyEndpointResponse = res
+    "ModifyEndpointResponse"
+    "fixture/ModifyEndpointResponse.proto"
+    dms
+    (Proxy :: Proxy ModifyEndpoint)
+
+testDescribeTableStatisticsResponse :: DescribeTableStatisticsResponse -> TestTree
+testDescribeTableStatisticsResponse = res
+    "DescribeTableStatisticsResponse"
+    "fixture/DescribeTableStatisticsResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeTableStatistics)
+
+testDescribeReplicationSubnetGroupsResponse :: DescribeReplicationSubnetGroupsResponse -> TestTree
+testDescribeReplicationSubnetGroupsResponse = res
+    "DescribeReplicationSubnetGroupsResponse"
+    "fixture/DescribeReplicationSubnetGroupsResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeReplicationSubnetGroups)
+
+testStartReplicationTaskResponse :: StartReplicationTaskResponse -> TestTree
+testStartReplicationTaskResponse = res
+    "StartReplicationTaskResponse"
+    "fixture/StartReplicationTaskResponse.proto"
+    dms
+    (Proxy :: Proxy StartReplicationTask)
+
+testAddTagsToResourceResponse :: AddTagsToResourceResponse -> TestTree
+testAddTagsToResourceResponse = res
+    "AddTagsToResourceResponse"
+    "fixture/AddTagsToResourceResponse.proto"
+    dms
+    (Proxy :: Proxy AddTagsToResource)
+
+testCreateReplicationSubnetGroupResponse :: CreateReplicationSubnetGroupResponse -> TestTree
+testCreateReplicationSubnetGroupResponse = res
+    "CreateReplicationSubnetGroupResponse"
+    "fixture/CreateReplicationSubnetGroupResponse.proto"
+    dms
+    (Proxy :: Proxy CreateReplicationSubnetGroup)
+
+testRefreshSchemasResponse :: RefreshSchemasResponse -> TestTree
+testRefreshSchemasResponse = res
+    "RefreshSchemasResponse"
+    "fixture/RefreshSchemasResponse.proto"
+    dms
+    (Proxy :: Proxy RefreshSchemas)
+
+testDescribeReplicationTasksResponse :: DescribeReplicationTasksResponse -> TestTree
+testDescribeReplicationTasksResponse = res
+    "DescribeReplicationTasksResponse"
+    "fixture/DescribeReplicationTasksResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeReplicationTasks)
+
+testDescribeOrderableReplicationInstancesResponse :: DescribeOrderableReplicationInstancesResponse -> TestTree
+testDescribeOrderableReplicationInstancesResponse = res
+    "DescribeOrderableReplicationInstancesResponse"
+    "fixture/DescribeOrderableReplicationInstancesResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeOrderableReplicationInstances)
+
+testCreateReplicationTaskResponse :: CreateReplicationTaskResponse -> TestTree
+testCreateReplicationTaskResponse = res
+    "CreateReplicationTaskResponse"
+    "fixture/CreateReplicationTaskResponse.proto"
+    dms
+    (Proxy :: Proxy CreateReplicationTask)
+
+testDescribeEndpointsResponse :: DescribeEndpointsResponse -> TestTree
+testDescribeEndpointsResponse = res
+    "DescribeEndpointsResponse"
+    "fixture/DescribeEndpointsResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeEndpoints)
+
+testModifyReplicationInstanceResponse :: ModifyReplicationInstanceResponse -> TestTree
+testModifyReplicationInstanceResponse = res
+    "ModifyReplicationInstanceResponse"
+    "fixture/ModifyReplicationInstanceResponse.proto"
+    dms
+    (Proxy :: Proxy ModifyReplicationInstance)
+
+testModifyReplicationSubnetGroupResponse :: ModifyReplicationSubnetGroupResponse -> TestTree
+testModifyReplicationSubnetGroupResponse = res
+    "ModifyReplicationSubnetGroupResponse"
+    "fixture/ModifyReplicationSubnetGroupResponse.proto"
+    dms
+    (Proxy :: Proxy ModifyReplicationSubnetGroup)
+
+testDescribeAccountAttributesResponse :: DescribeAccountAttributesResponse -> TestTree
+testDescribeAccountAttributesResponse = res
+    "DescribeAccountAttributesResponse"
+    "fixture/DescribeAccountAttributesResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeAccountAttributes)
+
+testDescribeReplicationInstancesResponse :: DescribeReplicationInstancesResponse -> TestTree
+testDescribeReplicationInstancesResponse = res
+    "DescribeReplicationInstancesResponse"
+    "fixture/DescribeReplicationInstancesResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeReplicationInstances)
+
+testDescribeRefreshSchemasStatusResponse :: DescribeRefreshSchemasStatusResponse -> TestTree
+testDescribeRefreshSchemasStatusResponse = res
+    "DescribeRefreshSchemasStatusResponse"
+    "fixture/DescribeRefreshSchemasStatusResponse.proto"
+    dms
+    (Proxy :: Proxy DescribeRefreshSchemasStatus)
+
+testStopReplicationTaskResponse :: StopReplicationTaskResponse -> TestTree
+testStopReplicationTaskResponse = res
+    "StopReplicationTaskResponse"
+    "fixture/StopReplicationTaskResponse.proto"
+    dms
+    (Proxy :: Proxy StopReplicationTask)
+
+testCreateReplicationInstanceResponse :: CreateReplicationInstanceResponse -> TestTree
+testCreateReplicationInstanceResponse = res
+    "CreateReplicationInstanceResponse"
+    "fixture/CreateReplicationInstanceResponse.proto"
+    dms
+    (Proxy :: Proxy CreateReplicationInstance)
+
+testDeleteReplicationSubnetGroupResponse :: DeleteReplicationSubnetGroupResponse -> TestTree
+testDeleteReplicationSubnetGroupResponse = res
+    "DeleteReplicationSubnetGroupResponse"
+    "fixture/DeleteReplicationSubnetGroupResponse.proto"
+    dms
+    (Proxy :: Proxy DeleteReplicationSubnetGroup)
