diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,373 @@
+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.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+  This Source Code Form is "Incompatible With Secondary Licenses", as
+  defined by the Mozilla Public License, v. 2.0.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,26 @@
+# Amazon Relational Database Service SDK
+
+> _Warning:_ This is an experimental preview release which is still under heavy development and not intended for public consumption, _caveat emptor_!
+
+* [description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+## Description
+
+Amazon Relational Database Service (Amazon RDS) is a web service that makes it easy to set up, operate, and scale a relational database in the cloud. It provides cost-efficient and resizable capacity while managing time-consuming database administration tasks, freeing you up to focus on your applications and business.
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-rds)
+and [AWS API Reference](http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/Welcome.html).
+
+
+## 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-rds` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
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-rds.cabal b/amazonka-rds.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-rds.cabal
@@ -0,0 +1,99 @@
+name:                  amazonka-rds
+version:               0.0.0
+synopsis:              Amazon Relational Database Service SDK.
+homepage:              https://github.com/brendanhay/amazonka
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2013-2014 Brendan Hay
+category:              Network, AWS, Cloud
+build-type:            Simple
+extra-source-files:    README.md
+cabal-version:         >= 1.10
+
+description:
+    Amazon Relational Database Service (Amazon RDS) is a web service that
+    makes it easy to set up, operate, and scale a relational database in
+    the cloud. It provides cost-efficient and resizable capacity while
+    managing time-consuming database administration tasks, freeing you up
+    to focus on your applications and business.
+    .
+    /See:/ <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/Welcome.html AWS API Reference>
+    .
+    /Warning:/ This is an experimental preview release which is still under
+    heavy development and not intended for public consumption, caveat emptor!
+
+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.RDS
+        , Network.AWS.RDS.AddSourceIdentifierToSubscription
+        , Network.AWS.RDS.AddTagsToResource
+        , Network.AWS.RDS.AuthorizeDBSecurityGroupIngress
+        , Network.AWS.RDS.CopyDBParameterGroup
+        , Network.AWS.RDS.CopyDBSnapshot
+        , Network.AWS.RDS.CopyOptionGroup
+        , Network.AWS.RDS.CreateDBInstance
+        , Network.AWS.RDS.CreateDBInstanceReadReplica
+        , Network.AWS.RDS.CreateDBParameterGroup
+        , Network.AWS.RDS.CreateDBSecurityGroup
+        , Network.AWS.RDS.CreateDBSnapshot
+        , Network.AWS.RDS.CreateDBSubnetGroup
+        , Network.AWS.RDS.CreateEventSubscription
+        , Network.AWS.RDS.CreateOptionGroup
+        , Network.AWS.RDS.DeleteDBInstance
+        , Network.AWS.RDS.DeleteDBParameterGroup
+        , Network.AWS.RDS.DeleteDBSecurityGroup
+        , Network.AWS.RDS.DeleteDBSnapshot
+        , Network.AWS.RDS.DeleteDBSubnetGroup
+        , Network.AWS.RDS.DeleteEventSubscription
+        , Network.AWS.RDS.DeleteOptionGroup
+        , Network.AWS.RDS.DescribeDBEngineVersions
+        , Network.AWS.RDS.DescribeDBInstances
+        , Network.AWS.RDS.DescribeDBLogFiles
+        , Network.AWS.RDS.DescribeDBParameterGroups
+        , Network.AWS.RDS.DescribeDBParameters
+        , Network.AWS.RDS.DescribeDBSecurityGroups
+        , Network.AWS.RDS.DescribeDBSnapshots
+        , Network.AWS.RDS.DescribeDBSubnetGroups
+        , Network.AWS.RDS.DescribeEngineDefaultParameters
+        , Network.AWS.RDS.DescribeEventCategories
+        , Network.AWS.RDS.DescribeEventSubscriptions
+        , Network.AWS.RDS.DescribeEvents
+        , Network.AWS.RDS.DescribeOptionGroupOptions
+        , Network.AWS.RDS.DescribeOptionGroups
+        , Network.AWS.RDS.DescribeOrderableDBInstanceOptions
+        , Network.AWS.RDS.DescribeReservedDBInstances
+        , Network.AWS.RDS.DescribeReservedDBInstancesOfferings
+        , Network.AWS.RDS.DownloadDBLogFilePortion
+        , Network.AWS.RDS.ListTagsForResource
+        , Network.AWS.RDS.ModifyDBInstance
+        , Network.AWS.RDS.ModifyDBParameterGroup
+        , Network.AWS.RDS.ModifyDBSubnetGroup
+        , Network.AWS.RDS.ModifyEventSubscription
+        , Network.AWS.RDS.ModifyOptionGroup
+        , Network.AWS.RDS.PromoteReadReplica
+        , Network.AWS.RDS.PurchaseReservedDBInstancesOffering
+        , Network.AWS.RDS.RebootDBInstance
+        , Network.AWS.RDS.RemoveSourceIdentifierFromSubscription
+        , Network.AWS.RDS.RemoveTagsFromResource
+        , Network.AWS.RDS.ResetDBParameterGroup
+        , Network.AWS.RDS.RestoreDBInstanceFromDBSnapshot
+        , Network.AWS.RDS.RestoreDBInstanceToPointInTime
+        , Network.AWS.RDS.RevokeDBSecurityGroupIngress
+        , Network.AWS.RDS.Types
+
+    other-modules:
+
+    build-depends:
+          amazonka-core
+        , base          >= 4.7 && < 5
diff --git a/gen/Network/AWS/RDS.hs b/gen/Network/AWS/RDS.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS.hs
@@ -0,0 +1,128 @@
+-- Module      : Network.AWS.RDS
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Amazon Relational Database Service (Amazon RDS) is a web service that makes
+-- it easy to set up, operate, and scale a relational database in the cloud.
+-- It provides cost-efficient and resizable capacity while managing
+-- time-consuming database administration tasks, freeing you up to focus on
+-- your applications and business.
+module Network.AWS.RDS
+    ( module Network.AWS.RDS.AddSourceIdentifierToSubscription
+    , module Network.AWS.RDS.AddTagsToResource
+    , module Network.AWS.RDS.AuthorizeDBSecurityGroupIngress
+    , module Network.AWS.RDS.CopyDBParameterGroup
+    , module Network.AWS.RDS.CopyDBSnapshot
+    , module Network.AWS.RDS.CopyOptionGroup
+    , module Network.AWS.RDS.CreateDBInstance
+    , module Network.AWS.RDS.CreateDBInstanceReadReplica
+    , module Network.AWS.RDS.CreateDBParameterGroup
+    , module Network.AWS.RDS.CreateDBSecurityGroup
+    , module Network.AWS.RDS.CreateDBSnapshot
+    , module Network.AWS.RDS.CreateDBSubnetGroup
+    , module Network.AWS.RDS.CreateEventSubscription
+    , module Network.AWS.RDS.CreateOptionGroup
+    , module Network.AWS.RDS.DeleteDBInstance
+    , module Network.AWS.RDS.DeleteDBParameterGroup
+    , module Network.AWS.RDS.DeleteDBSecurityGroup
+    , module Network.AWS.RDS.DeleteDBSnapshot
+    , module Network.AWS.RDS.DeleteDBSubnetGroup
+    , module Network.AWS.RDS.DeleteEventSubscription
+    , module Network.AWS.RDS.DeleteOptionGroup
+    , module Network.AWS.RDS.DescribeDBEngineVersions
+    , module Network.AWS.RDS.DescribeDBInstances
+    , module Network.AWS.RDS.DescribeDBLogFiles
+    , module Network.AWS.RDS.DescribeDBParameterGroups
+    , module Network.AWS.RDS.DescribeDBParameters
+    , module Network.AWS.RDS.DescribeDBSecurityGroups
+    , module Network.AWS.RDS.DescribeDBSnapshots
+    , module Network.AWS.RDS.DescribeDBSubnetGroups
+    , module Network.AWS.RDS.DescribeEngineDefaultParameters
+    , module Network.AWS.RDS.DescribeEventCategories
+    , module Network.AWS.RDS.DescribeEventSubscriptions
+    , module Network.AWS.RDS.DescribeEvents
+    , module Network.AWS.RDS.DescribeOptionGroupOptions
+    , module Network.AWS.RDS.DescribeOptionGroups
+    , module Network.AWS.RDS.DescribeOrderableDBInstanceOptions
+    , module Network.AWS.RDS.DescribeReservedDBInstances
+    , module Network.AWS.RDS.DescribeReservedDBInstancesOfferings
+    , module Network.AWS.RDS.DownloadDBLogFilePortion
+    , module Network.AWS.RDS.ListTagsForResource
+    , module Network.AWS.RDS.ModifyDBInstance
+    , module Network.AWS.RDS.ModifyDBParameterGroup
+    , module Network.AWS.RDS.ModifyDBSubnetGroup
+    , module Network.AWS.RDS.ModifyEventSubscription
+    , module Network.AWS.RDS.ModifyOptionGroup
+    , module Network.AWS.RDS.PromoteReadReplica
+    , module Network.AWS.RDS.PurchaseReservedDBInstancesOffering
+    , module Network.AWS.RDS.RebootDBInstance
+    , module Network.AWS.RDS.RemoveSourceIdentifierFromSubscription
+    , module Network.AWS.RDS.RemoveTagsFromResource
+    , module Network.AWS.RDS.ResetDBParameterGroup
+    , module Network.AWS.RDS.RestoreDBInstanceFromDBSnapshot
+    , module Network.AWS.RDS.RestoreDBInstanceToPointInTime
+    , module Network.AWS.RDS.RevokeDBSecurityGroupIngress
+    , module Network.AWS.RDS.Types
+    ) where
+
+import Network.AWS.RDS.AddSourceIdentifierToSubscription
+import Network.AWS.RDS.AddTagsToResource
+import Network.AWS.RDS.AuthorizeDBSecurityGroupIngress
+import Network.AWS.RDS.CopyDBParameterGroup
+import Network.AWS.RDS.CopyDBSnapshot
+import Network.AWS.RDS.CopyOptionGroup
+import Network.AWS.RDS.CreateDBInstance
+import Network.AWS.RDS.CreateDBInstanceReadReplica
+import Network.AWS.RDS.CreateDBParameterGroup
+import Network.AWS.RDS.CreateDBSecurityGroup
+import Network.AWS.RDS.CreateDBSnapshot
+import Network.AWS.RDS.CreateDBSubnetGroup
+import Network.AWS.RDS.CreateEventSubscription
+import Network.AWS.RDS.CreateOptionGroup
+import Network.AWS.RDS.DeleteDBInstance
+import Network.AWS.RDS.DeleteDBParameterGroup
+import Network.AWS.RDS.DeleteDBSecurityGroup
+import Network.AWS.RDS.DeleteDBSnapshot
+import Network.AWS.RDS.DeleteDBSubnetGroup
+import Network.AWS.RDS.DeleteEventSubscription
+import Network.AWS.RDS.DeleteOptionGroup
+import Network.AWS.RDS.DescribeDBEngineVersions
+import Network.AWS.RDS.DescribeDBInstances
+import Network.AWS.RDS.DescribeDBLogFiles
+import Network.AWS.RDS.DescribeDBParameterGroups
+import Network.AWS.RDS.DescribeDBParameters
+import Network.AWS.RDS.DescribeDBSecurityGroups
+import Network.AWS.RDS.DescribeDBSnapshots
+import Network.AWS.RDS.DescribeDBSubnetGroups
+import Network.AWS.RDS.DescribeEngineDefaultParameters
+import Network.AWS.RDS.DescribeEventCategories
+import Network.AWS.RDS.DescribeEventSubscriptions
+import Network.AWS.RDS.DescribeEvents
+import Network.AWS.RDS.DescribeOptionGroupOptions
+import Network.AWS.RDS.DescribeOptionGroups
+import Network.AWS.RDS.DescribeOrderableDBInstanceOptions
+import Network.AWS.RDS.DescribeReservedDBInstances
+import Network.AWS.RDS.DescribeReservedDBInstancesOfferings
+import Network.AWS.RDS.DownloadDBLogFilePortion
+import Network.AWS.RDS.ListTagsForResource
+import Network.AWS.RDS.ModifyDBInstance
+import Network.AWS.RDS.ModifyDBParameterGroup
+import Network.AWS.RDS.ModifyDBSubnetGroup
+import Network.AWS.RDS.ModifyEventSubscription
+import Network.AWS.RDS.ModifyOptionGroup
+import Network.AWS.RDS.PromoteReadReplica
+import Network.AWS.RDS.PurchaseReservedDBInstancesOffering
+import Network.AWS.RDS.RebootDBInstance
+import Network.AWS.RDS.RemoveSourceIdentifierFromSubscription
+import Network.AWS.RDS.RemoveTagsFromResource
+import Network.AWS.RDS.ResetDBParameterGroup
+import Network.AWS.RDS.RestoreDBInstanceFromDBSnapshot
+import Network.AWS.RDS.RestoreDBInstanceToPointInTime
+import Network.AWS.RDS.RevokeDBSecurityGroupIngress
+import Network.AWS.RDS.Types
diff --git a/gen/Network/AWS/RDS/AddSourceIdentifierToSubscription.hs b/gen/Network/AWS/RDS/AddSourceIdentifierToSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/AddSourceIdentifierToSubscription.hs
@@ -0,0 +1,129 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.AddSourceIdentifierToSubscription
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Adds a source identifier to an existing RDS event notification
+-- subscription.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AddSourceIdentifierToSubscription.html>
+module Network.AWS.RDS.AddSourceIdentifierToSubscription
+    (
+    -- * Request
+      AddSourceIdentifierToSubscription
+    -- ** Request constructor
+    , addSourceIdentifierToSubscription
+    -- ** Request lenses
+    , asitsSourceIdentifier
+    , asitsSubscriptionName
+
+    -- * Response
+    , AddSourceIdentifierToSubscriptionResponse
+    -- ** Response constructor
+    , addSourceIdentifierToSubscriptionResponse
+    -- ** Response lenses
+    , asitsrEventSubscription
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data AddSourceIdentifierToSubscription = AddSourceIdentifierToSubscription
+    { _asitsSourceIdentifier :: Text
+    , _asitsSubscriptionName :: Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'AddSourceIdentifierToSubscription' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'asitsSourceIdentifier' @::@ 'Text'
+--
+-- * 'asitsSubscriptionName' @::@ 'Text'
+--
+addSourceIdentifierToSubscription :: Text -- ^ 'asitsSubscriptionName'
+                                  -> Text -- ^ 'asitsSourceIdentifier'
+                                  -> AddSourceIdentifierToSubscription
+addSourceIdentifierToSubscription p1 p2 = AddSourceIdentifierToSubscription
+    { _asitsSubscriptionName = p1
+    , _asitsSourceIdentifier = p2
+    }
+
+-- | The identifier of the event source to be added. An identifier must begin
+-- with a letter and must contain only ASCII letters, digits, and hyphens;
+-- it cannot end with a hyphen or contain two consecutive hyphens.
+-- Constraints: If the source type is a DB instance, then a
+-- DBInstanceIdentifier must be supplied. If the source type is a DB
+-- security group, a DBSecurityGroupName must be supplied. If the source
+-- type is a DB parameter group, a DBParameterGroupName must be supplied. If
+-- the source type is a DB snapshot, a DBSnapshotIdentifier must be
+-- supplied.
+asitsSourceIdentifier :: Lens' AddSourceIdentifierToSubscription Text
+asitsSourceIdentifier =
+    lens _asitsSourceIdentifier (\s a -> s { _asitsSourceIdentifier = a })
+
+-- | The name of the RDS event notification subscription you want to add a
+-- source identifier to.
+asitsSubscriptionName :: Lens' AddSourceIdentifierToSubscription Text
+asitsSubscriptionName =
+    lens _asitsSubscriptionName (\s a -> s { _asitsSubscriptionName = a })
+
+newtype AddSourceIdentifierToSubscriptionResponse = AddSourceIdentifierToSubscriptionResponse
+    { _asitsrEventSubscription :: Maybe EventSubscription
+    } deriving (Eq, Show)
+
+-- | 'AddSourceIdentifierToSubscriptionResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'asitsrEventSubscription' @::@ 'Maybe' 'EventSubscription'
+--
+addSourceIdentifierToSubscriptionResponse :: AddSourceIdentifierToSubscriptionResponse
+addSourceIdentifierToSubscriptionResponse = AddSourceIdentifierToSubscriptionResponse
+    { _asitsrEventSubscription = Nothing
+    }
+
+asitsrEventSubscription :: Lens' AddSourceIdentifierToSubscriptionResponse (Maybe EventSubscription)
+asitsrEventSubscription =
+    lens _asitsrEventSubscription (\s a -> s { _asitsrEventSubscription = a })
+
+instance ToPath AddSourceIdentifierToSubscription where
+    toPath = const "/"
+
+instance ToQuery AddSourceIdentifierToSubscription where
+    toQuery AddSourceIdentifierToSubscription{..} = mconcat
+        [ "SourceIdentifier" =? _asitsSourceIdentifier
+        , "SubscriptionName" =? _asitsSubscriptionName
+        ]
+
+instance ToHeaders AddSourceIdentifierToSubscription
+
+instance AWSRequest AddSourceIdentifierToSubscription where
+    type Sv AddSourceIdentifierToSubscription = RDS
+    type Rs AddSourceIdentifierToSubscription = AddSourceIdentifierToSubscriptionResponse
+
+    request  = post "AddSourceIdentifierToSubscription"
+    response = xmlResponse
+
+instance FromXML AddSourceIdentifierToSubscriptionResponse where
+    parseXML = withElement "AddSourceIdentifierToSubscriptionResult" $ \x -> AddSourceIdentifierToSubscriptionResponse
+        <$> x .@? "EventSubscription"
diff --git a/gen/Network/AWS/RDS/AddTagsToResource.hs b/gen/Network/AWS/RDS/AddTagsToResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/AddTagsToResource.hs
@@ -0,0 +1,104 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.AddTagsToResource
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Adds metadata tags to an Amazon RDS resource. These tags can also be used
+-- with cost allocation reporting to track cost associated with Amazon RDS
+-- resources, or used in Condition statement in IAM policy for Amazon RDS. For
+-- an overview on tagging Amazon RDS resources, see Tagging Amazon RDS
+-- Resources.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AddTagsToResource.html>
+module Network.AWS.RDS.AddTagsToResource
+    (
+    -- * Request
+      AddTagsToResource
+    -- ** Request constructor
+    , addTagsToResource
+    -- ** Request lenses
+    , attrResourceName
+    , attrTags
+
+    -- * Response
+    , AddTagsToResourceResponse
+    -- ** Response constructor
+    , addTagsToResourceResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data AddTagsToResource = AddTagsToResource
+    { _attrResourceName :: Text
+    , _attrTags         :: List "Tag" Tag
+    } deriving (Eq, Show)
+
+-- | 'AddTagsToResource' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'attrResourceName' @::@ 'Text'
+--
+-- * 'attrTags' @::@ ['Tag']
+--
+addTagsToResource :: Text -- ^ 'attrResourceName'
+                  -> AddTagsToResource
+addTagsToResource p1 = AddTagsToResource
+    { _attrResourceName = p1
+    , _attrTags         = mempty
+    }
+
+-- | The Amazon RDS resource the tags will be added to. This value is an
+-- Amazon Resource Name (ARN). For information about creating an ARN, see
+-- Constructing an RDS Amazon Resource Name (ARN).
+attrResourceName :: Lens' AddTagsToResource Text
+attrResourceName = lens _attrResourceName (\s a -> s { _attrResourceName = a })
+
+-- | The tags to be assigned to the Amazon RDS resource.
+attrTags :: Lens' AddTagsToResource [Tag]
+attrTags = lens _attrTags (\s a -> s { _attrTags = a }) . _List
+
+data AddTagsToResourceResponse = AddTagsToResourceResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'AddTagsToResourceResponse' constructor.
+addTagsToResourceResponse :: AddTagsToResourceResponse
+addTagsToResourceResponse = AddTagsToResourceResponse
+
+instance ToPath AddTagsToResource where
+    toPath = const "/"
+
+instance ToQuery AddTagsToResource where
+    toQuery AddTagsToResource{..} = mconcat
+        [ "ResourceName" =? _attrResourceName
+        , "Tags"         =? _attrTags
+        ]
+
+instance ToHeaders AddTagsToResource
+
+instance AWSRequest AddTagsToResource where
+    type Sv AddTagsToResource = RDS
+    type Rs AddTagsToResource = AddTagsToResourceResponse
+
+    request  = post "AddTagsToResource"
+    response = nullResponse AddTagsToResourceResponse
diff --git a/gen/Network/AWS/RDS/AuthorizeDBSecurityGroupIngress.hs b/gen/Network/AWS/RDS/AuthorizeDBSecurityGroupIngress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/AuthorizeDBSecurityGroupIngress.hs
@@ -0,0 +1,170 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.AuthorizeDBSecurityGroupIngress
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Enables ingress to a DBSecurityGroup using one of two forms of
+-- authorization. First, EC2 or VPC security groups can be added to the
+-- DBSecurityGroup if the application using the database is running on EC2 or
+-- VPC instances. Second, IP ranges are available if the application accessing
+-- your database is running on the Internet. Required parameters for this API
+-- are one of CIDR range, EC2SecurityGroupId for VPC, or
+-- (EC2SecurityGroupOwnerId and either EC2SecurityGroupName or
+-- EC2SecurityGroupId for non-VPC). For an overview of CIDR ranges, go to the
+-- Wikipedia Tutorial.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_AuthorizeDBSecurityGroupIngress.html>
+module Network.AWS.RDS.AuthorizeDBSecurityGroupIngress
+    (
+    -- * Request
+      AuthorizeDBSecurityGroupIngress
+    -- ** Request constructor
+    , authorizeDBSecurityGroupIngress
+    -- ** Request lenses
+    , adbsgiCIDRIP
+    , adbsgiDBSecurityGroupName
+    , adbsgiEC2SecurityGroupId
+    , adbsgiEC2SecurityGroupName
+    , adbsgiEC2SecurityGroupOwnerId
+
+    -- * Response
+    , AuthorizeDBSecurityGroupIngressResponse
+    -- ** Response constructor
+    , authorizeDBSecurityGroupIngressResponse
+    -- ** Response lenses
+    , adbsgirDBSecurityGroup
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data AuthorizeDBSecurityGroupIngress = AuthorizeDBSecurityGroupIngress
+    { _adbsgiCIDRIP                  :: Maybe Text
+    , _adbsgiDBSecurityGroupName     :: Text
+    , _adbsgiEC2SecurityGroupId      :: Maybe Text
+    , _adbsgiEC2SecurityGroupName    :: Maybe Text
+    , _adbsgiEC2SecurityGroupOwnerId :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'AuthorizeDBSecurityGroupIngress' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'adbsgiCIDRIP' @::@ 'Maybe' 'Text'
+--
+-- * 'adbsgiDBSecurityGroupName' @::@ 'Text'
+--
+-- * 'adbsgiEC2SecurityGroupId' @::@ 'Maybe' 'Text'
+--
+-- * 'adbsgiEC2SecurityGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'adbsgiEC2SecurityGroupOwnerId' @::@ 'Maybe' 'Text'
+--
+authorizeDBSecurityGroupIngress :: Text -- ^ 'adbsgiDBSecurityGroupName'
+                                -> AuthorizeDBSecurityGroupIngress
+authorizeDBSecurityGroupIngress p1 = AuthorizeDBSecurityGroupIngress
+    { _adbsgiDBSecurityGroupName     = p1
+    , _adbsgiCIDRIP                  = Nothing
+    , _adbsgiEC2SecurityGroupName    = Nothing
+    , _adbsgiEC2SecurityGroupId      = Nothing
+    , _adbsgiEC2SecurityGroupOwnerId = Nothing
+    }
+
+-- | The IP range to authorize.
+adbsgiCIDRIP :: Lens' AuthorizeDBSecurityGroupIngress (Maybe Text)
+adbsgiCIDRIP = lens _adbsgiCIDRIP (\s a -> s { _adbsgiCIDRIP = a })
+
+-- | The name of the DB security group to add authorization to.
+adbsgiDBSecurityGroupName :: Lens' AuthorizeDBSecurityGroupIngress Text
+adbsgiDBSecurityGroupName =
+    lens _adbsgiDBSecurityGroupName
+        (\s a -> s { _adbsgiDBSecurityGroupName = a })
+
+-- | Id of the EC2 security group to authorize. For VPC DB security groups,
+-- EC2SecurityGroupId must be provided. Otherwise, EC2SecurityGroupOwnerId
+-- and either EC2SecurityGroupName or EC2SecurityGroupId must be provided.
+adbsgiEC2SecurityGroupId :: Lens' AuthorizeDBSecurityGroupIngress (Maybe Text)
+adbsgiEC2SecurityGroupId =
+    lens _adbsgiEC2SecurityGroupId
+        (\s a -> s { _adbsgiEC2SecurityGroupId = a })
+
+-- | Name of the EC2 security group to authorize. For VPC DB security groups,
+-- EC2SecurityGroupId must be provided. Otherwise, EC2SecurityGroupOwnerId
+-- and either EC2SecurityGroupName or EC2SecurityGroupId must be provided.
+adbsgiEC2SecurityGroupName :: Lens' AuthorizeDBSecurityGroupIngress (Maybe Text)
+adbsgiEC2SecurityGroupName =
+    lens _adbsgiEC2SecurityGroupName
+        (\s a -> s { _adbsgiEC2SecurityGroupName = a })
+
+-- | AWS Account Number of the owner of the EC2 security group specified in
+-- the EC2SecurityGroupName parameter. The AWS Access Key ID is not an
+-- acceptable value. For VPC DB security groups, EC2SecurityGroupId must be
+-- provided. Otherwise, EC2SecurityGroupOwnerId and either
+-- EC2SecurityGroupName or EC2SecurityGroupId must be provided.
+adbsgiEC2SecurityGroupOwnerId :: Lens' AuthorizeDBSecurityGroupIngress (Maybe Text)
+adbsgiEC2SecurityGroupOwnerId =
+    lens _adbsgiEC2SecurityGroupOwnerId
+        (\s a -> s { _adbsgiEC2SecurityGroupOwnerId = a })
+
+newtype AuthorizeDBSecurityGroupIngressResponse = AuthorizeDBSecurityGroupIngressResponse
+    { _adbsgirDBSecurityGroup :: Maybe DBSecurityGroup
+    } deriving (Eq, Show)
+
+-- | 'AuthorizeDBSecurityGroupIngressResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'adbsgirDBSecurityGroup' @::@ 'Maybe' 'DBSecurityGroup'
+--
+authorizeDBSecurityGroupIngressResponse :: AuthorizeDBSecurityGroupIngressResponse
+authorizeDBSecurityGroupIngressResponse = AuthorizeDBSecurityGroupIngressResponse
+    { _adbsgirDBSecurityGroup = Nothing
+    }
+
+adbsgirDBSecurityGroup :: Lens' AuthorizeDBSecurityGroupIngressResponse (Maybe DBSecurityGroup)
+adbsgirDBSecurityGroup =
+    lens _adbsgirDBSecurityGroup (\s a -> s { _adbsgirDBSecurityGroup = a })
+
+instance ToPath AuthorizeDBSecurityGroupIngress where
+    toPath = const "/"
+
+instance ToQuery AuthorizeDBSecurityGroupIngress where
+    toQuery AuthorizeDBSecurityGroupIngress{..} = mconcat
+        [ "CIDRIP"                  =? _adbsgiCIDRIP
+        , "DBSecurityGroupName"     =? _adbsgiDBSecurityGroupName
+        , "EC2SecurityGroupId"      =? _adbsgiEC2SecurityGroupId
+        , "EC2SecurityGroupName"    =? _adbsgiEC2SecurityGroupName
+        , "EC2SecurityGroupOwnerId" =? _adbsgiEC2SecurityGroupOwnerId
+        ]
+
+instance ToHeaders AuthorizeDBSecurityGroupIngress
+
+instance AWSRequest AuthorizeDBSecurityGroupIngress where
+    type Sv AuthorizeDBSecurityGroupIngress = RDS
+    type Rs AuthorizeDBSecurityGroupIngress = AuthorizeDBSecurityGroupIngressResponse
+
+    request  = post "AuthorizeDBSecurityGroupIngress"
+    response = xmlResponse
+
+instance FromXML AuthorizeDBSecurityGroupIngressResponse where
+    parseXML = withElement "AuthorizeDBSecurityGroupIngressResult" $ \x -> AuthorizeDBSecurityGroupIngressResponse
+        <$> x .@? "DBSecurityGroup"
diff --git a/gen/Network/AWS/RDS/CopyDBParameterGroup.hs b/gen/Network/AWS/RDS/CopyDBParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CopyDBParameterGroup.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CopyDBParameterGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Copies the specified DBParameterGroup.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CopyDBParameterGroup.html>
+module Network.AWS.RDS.CopyDBParameterGroup
+    (
+    -- * Request
+      CopyDBParameterGroup
+    -- ** Request constructor
+    , copyDBParameterGroup
+    -- ** Request lenses
+    , cdbpgSourceDBParameterGroupIdentifier
+    , cdbpgTags
+    , cdbpgTargetDBParameterGroupDescription
+    , cdbpgTargetDBParameterGroupIdentifier
+
+    -- * Response
+    , CopyDBParameterGroupResponse
+    -- ** Response constructor
+    , copyDBParameterGroupResponse
+    -- ** Response lenses
+    , cdbpgr1DBParameterGroup
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CopyDBParameterGroup = CopyDBParameterGroup
+    { _cdbpgSourceDBParameterGroupIdentifier  :: Text
+    , _cdbpgTags                              :: List "Tag" Tag
+    , _cdbpgTargetDBParameterGroupDescription :: Text
+    , _cdbpgTargetDBParameterGroupIdentifier  :: Text
+    } deriving (Eq, Show)
+
+-- | 'CopyDBParameterGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbpgSourceDBParameterGroupIdentifier' @::@ 'Text'
+--
+-- * 'cdbpgTags' @::@ ['Tag']
+--
+-- * 'cdbpgTargetDBParameterGroupDescription' @::@ 'Text'
+--
+-- * 'cdbpgTargetDBParameterGroupIdentifier' @::@ 'Text'
+--
+copyDBParameterGroup :: Text -- ^ 'cdbpgSourceDBParameterGroupIdentifier'
+                     -> Text -- ^ 'cdbpgTargetDBParameterGroupIdentifier'
+                     -> Text -- ^ 'cdbpgTargetDBParameterGroupDescription'
+                     -> CopyDBParameterGroup
+copyDBParameterGroup p1 p2 p3 = CopyDBParameterGroup
+    { _cdbpgSourceDBParameterGroupIdentifier  = p1
+    , _cdbpgTargetDBParameterGroupIdentifier  = p2
+    , _cdbpgTargetDBParameterGroupDescription = p3
+    , _cdbpgTags                              = mempty
+    }
+
+-- | The identifier or ARN for the source DB Parameter Group. Constraints:
+-- Must specify a valid DB Parameter Group. If the source DB Parameter Group
+-- is in the same region as the copy, specify a valid DB Parameter Group
+-- identifier, or a valid ARN. If the source DB Parameter Group is in a
+-- different region than the copy, specify a valid DB parameter group ARN.
+-- Example: my-db-param-group Example:
+-- arn:aws:rds:us-west-2:123456789012:pg:special-parameters.
+cdbpgSourceDBParameterGroupIdentifier :: Lens' CopyDBParameterGroup Text
+cdbpgSourceDBParameterGroupIdentifier =
+    lens _cdbpgSourceDBParameterGroupIdentifier
+        (\s a -> s { _cdbpgSourceDBParameterGroupIdentifier = a })
+
+cdbpgTags :: Lens' CopyDBParameterGroup [Tag]
+cdbpgTags = lens _cdbpgTags (\s a -> s { _cdbpgTags = a }) . _List
+
+-- | The description for the copied DB Parameter Group.
+cdbpgTargetDBParameterGroupDescription :: Lens' CopyDBParameterGroup Text
+cdbpgTargetDBParameterGroupDescription =
+    lens _cdbpgTargetDBParameterGroupDescription
+        (\s a -> s { _cdbpgTargetDBParameterGroupDescription = a })
+
+-- | The identifier for the copied DB Parameter Group. Constraints: Cannot be
+-- null, empty, or blank Must contain from 1 to 255 alphanumeric characters
+-- or hyphens First character must be a letter Cannot end with a hyphen or
+-- contain two consecutive hyphens Example: my-db-parameter-group.
+cdbpgTargetDBParameterGroupIdentifier :: Lens' CopyDBParameterGroup Text
+cdbpgTargetDBParameterGroupIdentifier =
+    lens _cdbpgTargetDBParameterGroupIdentifier
+        (\s a -> s { _cdbpgTargetDBParameterGroupIdentifier = a })
+
+newtype CopyDBParameterGroupResponse = CopyDBParameterGroupResponse
+    { _cdbpgr1DBParameterGroup :: Maybe DBParameterGroup
+    } deriving (Eq, Show)
+
+-- | 'CopyDBParameterGroupResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbpgr1DBParameterGroup' @::@ 'Maybe' 'DBParameterGroup'
+--
+copyDBParameterGroupResponse :: CopyDBParameterGroupResponse
+copyDBParameterGroupResponse = CopyDBParameterGroupResponse
+    { _cdbpgr1DBParameterGroup = Nothing
+    }
+
+cdbpgr1DBParameterGroup :: Lens' CopyDBParameterGroupResponse (Maybe DBParameterGroup)
+cdbpgr1DBParameterGroup =
+    lens _cdbpgr1DBParameterGroup (\s a -> s { _cdbpgr1DBParameterGroup = a })
+
+instance ToPath CopyDBParameterGroup where
+    toPath = const "/"
+
+instance ToQuery CopyDBParameterGroup where
+    toQuery CopyDBParameterGroup{..} = mconcat
+        [ "SourceDBParameterGroupIdentifier"  =? _cdbpgSourceDBParameterGroupIdentifier
+        , "Tags"                              =? _cdbpgTags
+        , "TargetDBParameterGroupDescription" =? _cdbpgTargetDBParameterGroupDescription
+        , "TargetDBParameterGroupIdentifier"  =? _cdbpgTargetDBParameterGroupIdentifier
+        ]
+
+instance ToHeaders CopyDBParameterGroup
+
+instance AWSRequest CopyDBParameterGroup where
+    type Sv CopyDBParameterGroup = RDS
+    type Rs CopyDBParameterGroup = CopyDBParameterGroupResponse
+
+    request  = post "CopyDBParameterGroup"
+    response = xmlResponse
+
+instance FromXML CopyDBParameterGroupResponse where
+    parseXML = withElement "CopyDBParameterGroupResult" $ \x -> CopyDBParameterGroupResponse
+        <$> x .@? "DBParameterGroup"
diff --git a/gen/Network/AWS/RDS/CopyDBSnapshot.hs b/gen/Network/AWS/RDS/CopyDBSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CopyDBSnapshot.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CopyDBSnapshot
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Copies the specified DBSnapshot. The source DBSnapshot must be in the
+-- "available" state.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CopyDBSnapshot.html>
+module Network.AWS.RDS.CopyDBSnapshot
+    (
+    -- * Request
+      CopyDBSnapshot
+    -- ** Request constructor
+    , copyDBSnapshot
+    -- ** Request lenses
+    , cdbsSourceDBSnapshotIdentifier
+    , cdbsTags
+    , cdbsTargetDBSnapshotIdentifier
+
+    -- * Response
+    , CopyDBSnapshotResponse
+    -- ** Response constructor
+    , copyDBSnapshotResponse
+    -- ** Response lenses
+    , cdbsrDBSnapshot
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CopyDBSnapshot = CopyDBSnapshot
+    { _cdbsSourceDBSnapshotIdentifier :: Text
+    , _cdbsTags                       :: List "Tag" Tag
+    , _cdbsTargetDBSnapshotIdentifier :: Text
+    } deriving (Eq, Show)
+
+-- | 'CopyDBSnapshot' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbsSourceDBSnapshotIdentifier' @::@ 'Text'
+--
+-- * 'cdbsTags' @::@ ['Tag']
+--
+-- * 'cdbsTargetDBSnapshotIdentifier' @::@ 'Text'
+--
+copyDBSnapshot :: Text -- ^ 'cdbsSourceDBSnapshotIdentifier'
+               -> Text -- ^ 'cdbsTargetDBSnapshotIdentifier'
+               -> CopyDBSnapshot
+copyDBSnapshot p1 p2 = CopyDBSnapshot
+    { _cdbsSourceDBSnapshotIdentifier = p1
+    , _cdbsTargetDBSnapshotIdentifier = p2
+    , _cdbsTags                       = mempty
+    }
+
+-- | The identifier for the source DB snapshot. Constraints: Must specify a
+-- valid system snapshot in the "available" state. If the source snapshot is
+-- in the same region as the copy, specify a valid DB snapshot identifier.
+-- If the source snapshot is in a different region than the copy, specify a
+-- valid DB snapshot ARN. For more information, go to Copying a DB Snapshot.
+-- Example: rds:mydb-2012-04-02-00-01 Example:
+-- arn:aws:rds:rr-regn-1:123456789012:snapshot:mysql-instance1-snapshot-20130805.
+-- 
+cdbsSourceDBSnapshotIdentifier :: Lens' CopyDBSnapshot Text
+cdbsSourceDBSnapshotIdentifier =
+    lens _cdbsSourceDBSnapshotIdentifier
+        (\s a -> s { _cdbsSourceDBSnapshotIdentifier = a })
+
+cdbsTags :: Lens' CopyDBSnapshot [Tag]
+cdbsTags = lens _cdbsTags (\s a -> s { _cdbsTags = a }) . _List
+
+-- | The identifier for the copied snapshot. Constraints: Cannot be null,
+-- empty, or blank Must contain from 1 to 255 alphanumeric characters or
+-- hyphens First character must be a letter Cannot end with a hyphen or
+-- contain two consecutive hyphens Example: my-db-snapshot.
+cdbsTargetDBSnapshotIdentifier :: Lens' CopyDBSnapshot Text
+cdbsTargetDBSnapshotIdentifier =
+    lens _cdbsTargetDBSnapshotIdentifier
+        (\s a -> s { _cdbsTargetDBSnapshotIdentifier = a })
+
+newtype CopyDBSnapshotResponse = CopyDBSnapshotResponse
+    { _cdbsrDBSnapshot :: Maybe DBSnapshot
+    } deriving (Eq, Show)
+
+-- | 'CopyDBSnapshotResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbsrDBSnapshot' @::@ 'Maybe' 'DBSnapshot'
+--
+copyDBSnapshotResponse :: CopyDBSnapshotResponse
+copyDBSnapshotResponse = CopyDBSnapshotResponse
+    { _cdbsrDBSnapshot = Nothing
+    }
+
+cdbsrDBSnapshot :: Lens' CopyDBSnapshotResponse (Maybe DBSnapshot)
+cdbsrDBSnapshot = lens _cdbsrDBSnapshot (\s a -> s { _cdbsrDBSnapshot = a })
+
+instance ToPath CopyDBSnapshot where
+    toPath = const "/"
+
+instance ToQuery CopyDBSnapshot where
+    toQuery CopyDBSnapshot{..} = mconcat
+        [ "SourceDBSnapshotIdentifier" =? _cdbsSourceDBSnapshotIdentifier
+        , "Tags"                       =? _cdbsTags
+        , "TargetDBSnapshotIdentifier" =? _cdbsTargetDBSnapshotIdentifier
+        ]
+
+instance ToHeaders CopyDBSnapshot
+
+instance AWSRequest CopyDBSnapshot where
+    type Sv CopyDBSnapshot = RDS
+    type Rs CopyDBSnapshot = CopyDBSnapshotResponse
+
+    request  = post "CopyDBSnapshot"
+    response = xmlResponse
+
+instance FromXML CopyDBSnapshotResponse where
+    parseXML = withElement "CopyDBSnapshotResult" $ \x -> CopyDBSnapshotResponse
+        <$> x .@? "DBSnapshot"
diff --git a/gen/Network/AWS/RDS/CopyOptionGroup.hs b/gen/Network/AWS/RDS/CopyOptionGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CopyOptionGroup.hs
@@ -0,0 +1,150 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CopyOptionGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Copies the specified Option Group.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CopyOptionGroup.html>
+module Network.AWS.RDS.CopyOptionGroup
+    (
+    -- * Request
+      CopyOptionGroup
+    -- ** Request constructor
+    , copyOptionGroup
+    -- ** Request lenses
+    , cog1SourceOptionGroupIdentifier
+    , cog1Tags
+    , cog1TargetOptionGroupDescription
+    , cog1TargetOptionGroupIdentifier
+
+    -- * Response
+    , CopyOptionGroupResponse
+    -- ** Response constructor
+    , copyOptionGroupResponse
+    -- ** Response lenses
+    , cogrOptionGroup
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CopyOptionGroup = CopyOptionGroup
+    { _cog1SourceOptionGroupIdentifier  :: Text
+    , _cog1Tags                         :: List "Tag" Tag
+    , _cog1TargetOptionGroupDescription :: Text
+    , _cog1TargetOptionGroupIdentifier  :: Text
+    } deriving (Eq, Show)
+
+-- | 'CopyOptionGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cog1SourceOptionGroupIdentifier' @::@ 'Text'
+--
+-- * 'cog1Tags' @::@ ['Tag']
+--
+-- * 'cog1TargetOptionGroupDescription' @::@ 'Text'
+--
+-- * 'cog1TargetOptionGroupIdentifier' @::@ 'Text'
+--
+copyOptionGroup :: Text -- ^ 'cog1SourceOptionGroupIdentifier'
+                -> Text -- ^ 'cog1TargetOptionGroupIdentifier'
+                -> Text -- ^ 'cog1TargetOptionGroupDescription'
+                -> CopyOptionGroup
+copyOptionGroup p1 p2 p3 = CopyOptionGroup
+    { _cog1SourceOptionGroupIdentifier  = p1
+    , _cog1TargetOptionGroupIdentifier  = p2
+    , _cog1TargetOptionGroupDescription = p3
+    , _cog1Tags                         = mempty
+    }
+
+-- | The identifier or ARN for the source Option Group. Constraints: Must
+-- specify a valid Option Group. If the source Option Group is in the same
+-- region as the copy, specify a valid Option Group identifier, or a valid
+-- ARN. If the source Option Group is in a different region than the copy,
+-- specify a valid Option group ARN. Example: my-option-group Example:
+-- arn:aws:rds:us-west-2:123456789012:og:special-options.
+cog1SourceOptionGroupIdentifier :: Lens' CopyOptionGroup Text
+cog1SourceOptionGroupIdentifier =
+    lens _cog1SourceOptionGroupIdentifier
+        (\s a -> s { _cog1SourceOptionGroupIdentifier = a })
+
+cog1Tags :: Lens' CopyOptionGroup [Tag]
+cog1Tags = lens _cog1Tags (\s a -> s { _cog1Tags = a }) . _List
+
+-- | The description for the copied Option Group.
+cog1TargetOptionGroupDescription :: Lens' CopyOptionGroup Text
+cog1TargetOptionGroupDescription =
+    lens _cog1TargetOptionGroupDescription
+        (\s a -> s { _cog1TargetOptionGroupDescription = a })
+
+-- | The identifier for the copied Option Group. Constraints: Cannot be null,
+-- empty, or blank Must contain from 1 to 255 alphanumeric characters or
+-- hyphens First character must be a letter Cannot end with a hyphen or
+-- contain two consecutive hyphens Example: my-option-group.
+cog1TargetOptionGroupIdentifier :: Lens' CopyOptionGroup Text
+cog1TargetOptionGroupIdentifier =
+    lens _cog1TargetOptionGroupIdentifier
+        (\s a -> s { _cog1TargetOptionGroupIdentifier = a })
+
+newtype CopyOptionGroupResponse = CopyOptionGroupResponse
+    { _cogrOptionGroup :: Maybe OptionGroup
+    } deriving (Eq, Show)
+
+-- | 'CopyOptionGroupResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cogrOptionGroup' @::@ 'Maybe' 'OptionGroup'
+--
+copyOptionGroupResponse :: CopyOptionGroupResponse
+copyOptionGroupResponse = CopyOptionGroupResponse
+    { _cogrOptionGroup = Nothing
+    }
+
+cogrOptionGroup :: Lens' CopyOptionGroupResponse (Maybe OptionGroup)
+cogrOptionGroup = lens _cogrOptionGroup (\s a -> s { _cogrOptionGroup = a })
+
+instance ToPath CopyOptionGroup where
+    toPath = const "/"
+
+instance ToQuery CopyOptionGroup where
+    toQuery CopyOptionGroup{..} = mconcat
+        [ "SourceOptionGroupIdentifier"  =? _cog1SourceOptionGroupIdentifier
+        , "Tags"                         =? _cog1Tags
+        , "TargetOptionGroupDescription" =? _cog1TargetOptionGroupDescription
+        , "TargetOptionGroupIdentifier"  =? _cog1TargetOptionGroupIdentifier
+        ]
+
+instance ToHeaders CopyOptionGroup
+
+instance AWSRequest CopyOptionGroup where
+    type Sv CopyOptionGroup = RDS
+    type Rs CopyOptionGroup = CopyOptionGroupResponse
+
+    request  = post "CopyOptionGroup"
+    response = xmlResponse
+
+instance FromXML CopyOptionGroupResponse where
+    parseXML = withElement "CopyOptionGroupResult" $ \x -> CopyOptionGroupResponse
+        <$> x .@? "OptionGroup"
diff --git a/gen/Network/AWS/RDS/CreateDBInstance.hs b/gen/Network/AWS/RDS/CreateDBInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CreateDBInstance.hs
@@ -0,0 +1,508 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CreateDBInstance
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Creates a new DB instance.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstance.html>
+module Network.AWS.RDS.CreateDBInstance
+    (
+    -- * Request
+      CreateDBInstance
+    -- ** Request constructor
+    , createDBInstance
+    -- ** Request lenses
+    , cdbiAllocatedStorage
+    , cdbiAutoMinorVersionUpgrade
+    , cdbiAvailabilityZone
+    , cdbiBackupRetentionPeriod
+    , cdbiCharacterSetName
+    , cdbiDBInstanceClass
+    , cdbiDBInstanceIdentifier
+    , cdbiDBName
+    , cdbiDBParameterGroupName
+    , cdbiDBSecurityGroups
+    , cdbiDBSubnetGroupName
+    , cdbiEngine
+    , cdbiEngineVersion
+    , cdbiIops
+    , cdbiLicenseModel
+    , cdbiMasterUserPassword
+    , cdbiMasterUsername
+    , cdbiMultiAZ
+    , cdbiOptionGroupName
+    , cdbiPort
+    , cdbiPreferredBackupWindow
+    , cdbiPreferredMaintenanceWindow
+    , cdbiPubliclyAccessible
+    , cdbiStorageType
+    , cdbiTags
+    , cdbiTdeCredentialArn
+    , cdbiTdeCredentialPassword
+    , cdbiVpcSecurityGroupIds
+
+    -- * Response
+    , CreateDBInstanceResponse
+    -- ** Response constructor
+    , createDBInstanceResponse
+    -- ** Response lenses
+    , cdbirDBInstance
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CreateDBInstance = CreateDBInstance
+    { _cdbiAllocatedStorage           :: Int
+    , _cdbiAutoMinorVersionUpgrade    :: Maybe Bool
+    , _cdbiAvailabilityZone           :: Maybe Text
+    , _cdbiBackupRetentionPeriod      :: Maybe Int
+    , _cdbiCharacterSetName           :: Maybe Text
+    , _cdbiDBInstanceClass            :: Text
+    , _cdbiDBInstanceIdentifier       :: Text
+    , _cdbiDBName                     :: Maybe Text
+    , _cdbiDBParameterGroupName       :: Maybe Text
+    , _cdbiDBSecurityGroups           :: List "DBSecurityGroupName" Text
+    , _cdbiDBSubnetGroupName          :: Maybe Text
+    , _cdbiEngine                     :: Text
+    , _cdbiEngineVersion              :: Maybe Text
+    , _cdbiIops                       :: Maybe Int
+    , _cdbiLicenseModel               :: Maybe Text
+    , _cdbiMasterUserPassword         :: Text
+    , _cdbiMasterUsername             :: Text
+    , _cdbiMultiAZ                    :: Maybe Bool
+    , _cdbiOptionGroupName            :: Maybe Text
+    , _cdbiPort                       :: Maybe Int
+    , _cdbiPreferredBackupWindow      :: Maybe Text
+    , _cdbiPreferredMaintenanceWindow :: Maybe Text
+    , _cdbiPubliclyAccessible         :: Maybe Bool
+    , _cdbiStorageType                :: Maybe Text
+    , _cdbiTags                       :: List "Tag" Tag
+    , _cdbiTdeCredentialArn           :: Maybe Text
+    , _cdbiTdeCredentialPassword      :: Maybe Text
+    , _cdbiVpcSecurityGroupIds        :: List "VpcSecurityGroupId" Text
+    } deriving (Eq, Show)
+
+-- | 'CreateDBInstance' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbiAllocatedStorage' @::@ 'Int'
+--
+-- * 'cdbiAutoMinorVersionUpgrade' @::@ 'Maybe' 'Bool'
+--
+-- * 'cdbiAvailabilityZone' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiBackupRetentionPeriod' @::@ 'Maybe' 'Int'
+--
+-- * 'cdbiCharacterSetName' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiDBInstanceClass' @::@ 'Text'
+--
+-- * 'cdbiDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'cdbiDBName' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiDBParameterGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiDBSecurityGroups' @::@ ['Text']
+--
+-- * 'cdbiDBSubnetGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiEngine' @::@ 'Text'
+--
+-- * 'cdbiEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiIops' @::@ 'Maybe' 'Int'
+--
+-- * 'cdbiLicenseModel' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiMasterUserPassword' @::@ 'Text'
+--
+-- * 'cdbiMasterUsername' @::@ 'Text'
+--
+-- * 'cdbiMultiAZ' @::@ 'Maybe' 'Bool'
+--
+-- * 'cdbiOptionGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiPort' @::@ 'Maybe' 'Int'
+--
+-- * 'cdbiPreferredBackupWindow' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiPreferredMaintenanceWindow' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiPubliclyAccessible' @::@ 'Maybe' 'Bool'
+--
+-- * 'cdbiStorageType' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiTags' @::@ ['Tag']
+--
+-- * 'cdbiTdeCredentialArn' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiTdeCredentialPassword' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbiVpcSecurityGroupIds' @::@ ['Text']
+--
+createDBInstance :: Text -- ^ 'cdbiDBInstanceIdentifier'
+                 -> Int -- ^ 'cdbiAllocatedStorage'
+                 -> Text -- ^ 'cdbiDBInstanceClass'
+                 -> Text -- ^ 'cdbiEngine'
+                 -> Text -- ^ 'cdbiMasterUsername'
+                 -> Text -- ^ 'cdbiMasterUserPassword'
+                 -> CreateDBInstance
+createDBInstance p1 p2 p3 p4 p5 p6 = CreateDBInstance
+    { _cdbiDBInstanceIdentifier       = p1
+    , _cdbiAllocatedStorage           = p2
+    , _cdbiDBInstanceClass            = p3
+    , _cdbiEngine                     = p4
+    , _cdbiMasterUsername             = p5
+    , _cdbiMasterUserPassword         = p6
+    , _cdbiDBName                     = Nothing
+    , _cdbiDBSecurityGroups           = mempty
+    , _cdbiVpcSecurityGroupIds        = mempty
+    , _cdbiAvailabilityZone           = Nothing
+    , _cdbiDBSubnetGroupName          = Nothing
+    , _cdbiPreferredMaintenanceWindow = Nothing
+    , _cdbiDBParameterGroupName       = Nothing
+    , _cdbiBackupRetentionPeriod      = Nothing
+    , _cdbiPreferredBackupWindow      = Nothing
+    , _cdbiPort                       = Nothing
+    , _cdbiMultiAZ                    = Nothing
+    , _cdbiEngineVersion              = Nothing
+    , _cdbiAutoMinorVersionUpgrade    = Nothing
+    , _cdbiLicenseModel               = Nothing
+    , _cdbiIops                       = Nothing
+    , _cdbiOptionGroupName            = Nothing
+    , _cdbiCharacterSetName           = Nothing
+    , _cdbiPubliclyAccessible         = Nothing
+    , _cdbiTags                       = mempty
+    , _cdbiStorageType                = Nothing
+    , _cdbiTdeCredentialArn           = Nothing
+    , _cdbiTdeCredentialPassword      = Nothing
+    }
+
+-- | The amount of storage (in gigabytes) to be initially allocated for the
+-- database instance. Type: Integer MySQL Constraints: Must be an integer
+-- from 5 to 3072. PostgreSQL Constraints: Must be an integer from 5 to
+-- 3072. Oracle Constraints: Must be an integer from 10 to 3072. SQL Server
+-- Constraints: Must be an integer from 200 to 1024 (Standard Edition and
+-- Enterprise Edition) or from 30 to 1024 (Express Edition and Web Edition).
+cdbiAllocatedStorage :: Lens' CreateDBInstance Int
+cdbiAllocatedStorage =
+    lens _cdbiAllocatedStorage (\s a -> s { _cdbiAllocatedStorage = a })
+
+-- | Indicates that minor engine upgrades will be applied automatically to the
+-- DB instance during the maintenance window. Default: true.
+cdbiAutoMinorVersionUpgrade :: Lens' CreateDBInstance (Maybe Bool)
+cdbiAutoMinorVersionUpgrade =
+    lens _cdbiAutoMinorVersionUpgrade
+        (\s a -> s { _cdbiAutoMinorVersionUpgrade = a })
+
+-- | The EC2 Availability Zone that the database instance will be created in.
+-- Default: A random, system-chosen Availability Zone in the endpoint's
+-- region. Example: us-east-1d Constraint: The AvailabilityZone parameter
+-- cannot be specified if the MultiAZ parameter is set to true. The
+-- specified Availability Zone must be in the same region as the current
+-- endpoint.
+cdbiAvailabilityZone :: Lens' CreateDBInstance (Maybe Text)
+cdbiAvailabilityZone =
+    lens _cdbiAvailabilityZone (\s a -> s { _cdbiAvailabilityZone = a })
+
+-- | The number of days for which automated backups are retained. Setting this
+-- parameter to a positive number enables backups. Setting this parameter to
+-- 0 disables automated backups. Default: 1 Constraints: Must be a value
+-- from 0 to 35 Cannot be set to 0 if the DB instance is a source to read
+-- replicas.
+cdbiBackupRetentionPeriod :: Lens' CreateDBInstance (Maybe Int)
+cdbiBackupRetentionPeriod =
+    lens _cdbiBackupRetentionPeriod
+        (\s a -> s { _cdbiBackupRetentionPeriod = a })
+
+-- | For supported engines, indicates that the DB instance should be
+-- associated with the specified CharacterSet.
+cdbiCharacterSetName :: Lens' CreateDBInstance (Maybe Text)
+cdbiCharacterSetName =
+    lens _cdbiCharacterSetName (\s a -> s { _cdbiCharacterSetName = a })
+
+-- | The compute and memory capacity of the DB instance. Valid Values:
+-- db.t1.micro | db.m1.small | db.m1.medium | db.m1.large | db.m1.xlarge |
+-- db.m2.xlarge |db.m2.2xlarge | db.m2.4xlarge | db.m3.medium | db.m3.large
+-- | db.m3.xlarge | db.m3.2xlarge | db.r3.large | db.r3.xlarge |
+-- db.r3.2xlarge | db.r3.4xlarge | db.r3.8xlarge | db.t2.micro | db.t2.small
+-- | db.t2.medium.
+cdbiDBInstanceClass :: Lens' CreateDBInstance Text
+cdbiDBInstanceClass =
+    lens _cdbiDBInstanceClass (\s a -> s { _cdbiDBInstanceClass = a })
+
+-- | The DB instance identifier. This parameter is stored as a lowercase
+-- string. Constraints: Must contain from 1 to 63 alphanumeric characters or
+-- hyphens (1 to 15 for SQL Server). First character must be a letter.
+-- Cannot end with a hyphen or contain two consecutive hyphens. Example:
+-- mydbinstance.
+cdbiDBInstanceIdentifier :: Lens' CreateDBInstance Text
+cdbiDBInstanceIdentifier =
+    lens _cdbiDBInstanceIdentifier
+        (\s a -> s { _cdbiDBInstanceIdentifier = a })
+
+-- | The meaning of this parameter differs according to the database engine
+-- you use. Type: String MySQL The name of the database to create when the
+-- DB instance is created. If this parameter is not specified, no database
+-- is created in the DB instance. Constraints: Must contain 1 to 64
+-- alphanumeric characters Cannot be a word reserved by the specified
+-- database engine PostgreSQL The name of the database to create when the DB
+-- instance is created. If this parameter is not specified, no database is
+-- created in the DB instance. Constraints: Must contain 1 to 63
+-- alphanumeric characters Must begin with a letter or an underscore.
+-- Subsequent characters can be letters, underscores, or digits (0-9).
+-- Cannot be a word reserved by the specified database engine Oracle The
+-- Oracle System ID (SID) of the created DB instance. Default: ORCL
+-- Constraints: Cannot be longer than 8 characters SQL Server Not
+-- applicable. Must be null.
+cdbiDBName :: Lens' CreateDBInstance (Maybe Text)
+cdbiDBName = lens _cdbiDBName (\s a -> s { _cdbiDBName = a })
+
+-- | The name of the DB parameter group to associate with this DB instance. If
+-- this argument is omitted, the default DBParameterGroup for the specified
+-- engine will be used. Constraints: Must be 1 to 255 alphanumeric
+-- characters First character must be a letter Cannot end with a hyphen or
+-- contain two consecutive hyphens.
+cdbiDBParameterGroupName :: Lens' CreateDBInstance (Maybe Text)
+cdbiDBParameterGroupName =
+    lens _cdbiDBParameterGroupName
+        (\s a -> s { _cdbiDBParameterGroupName = a })
+
+-- | A list of DB security groups to associate with this DB instance. Default:
+-- The default DB security group for the database engine.
+cdbiDBSecurityGroups :: Lens' CreateDBInstance [Text]
+cdbiDBSecurityGroups =
+    lens _cdbiDBSecurityGroups (\s a -> s { _cdbiDBSecurityGroups = a })
+        . _List
+
+-- | A DB subnet group to associate with this DB instance. If there is no DB
+-- subnet group, then it is a non-VPC DB instance.
+cdbiDBSubnetGroupName :: Lens' CreateDBInstance (Maybe Text)
+cdbiDBSubnetGroupName =
+    lens _cdbiDBSubnetGroupName (\s a -> s { _cdbiDBSubnetGroupName = a })
+
+-- | The name of the database engine to be used for this instance. Valid
+-- Values: MySQL | oracle-se1 | oracle-se | oracle-ee | sqlserver-ee |
+-- sqlserver-se | sqlserver-ex | sqlserver-web | postgres.
+cdbiEngine :: Lens' CreateDBInstance Text
+cdbiEngine = lens _cdbiEngine (\s a -> s { _cdbiEngine = a })
+
+-- | The version number of the database engine to use. MySQL Example: 5.1.42
+-- Type: String PostgreSQL Example: 9.3 Type: String Oracle Example:
+-- 11.2.0.2.v2 Type: String SQL Server Example: 10.50.2789.0.v1.
+cdbiEngineVersion :: Lens' CreateDBInstance (Maybe Text)
+cdbiEngineVersion =
+    lens _cdbiEngineVersion (\s a -> s { _cdbiEngineVersion = a })
+
+-- | The amount of Provisioned IOPS (input/output operations per second) to be
+-- initially allocated for the DB instance. Constraints: To use PIOPS, this
+-- value must be an integer greater than 1000.
+cdbiIops :: Lens' CreateDBInstance (Maybe Int)
+cdbiIops = lens _cdbiIops (\s a -> s { _cdbiIops = a })
+
+-- | License model information for this DB instance. Valid values:
+-- license-included | bring-your-own-license | general-public-license.
+cdbiLicenseModel :: Lens' CreateDBInstance (Maybe Text)
+cdbiLicenseModel = lens _cdbiLicenseModel (\s a -> s { _cdbiLicenseModel = a })
+
+-- | The password for the master database user. Can be any printable ASCII
+-- character except "/", """, or "@". Type: String MySQL Constraints: Must
+-- contain from 8 to 41 characters. Oracle Constraints: Must contain from 8
+-- to 30 characters. SQL Server Constraints: Must contain from 8 to 128
+-- characters.
+cdbiMasterUserPassword :: Lens' CreateDBInstance Text
+cdbiMasterUserPassword =
+    lens _cdbiMasterUserPassword (\s a -> s { _cdbiMasterUserPassword = a })
+
+-- | The name of master user for the client DB instance. MySQL Constraints:
+-- Must be 1 to 16 alphanumeric characters. First character must be a
+-- letter. Cannot be a reserved word for the chosen database engine. Type:
+-- String Oracle Constraints: Must be 1 to 30 alphanumeric characters. First
+-- character must be a letter. Cannot be a reserved word for the chosen
+-- database engine. SQL Server Constraints: Must be 1 to 128 alphanumeric
+-- characters. First character must be a letter. Cannot be a reserved word
+-- for the chosen database engine.
+cdbiMasterUsername :: Lens' CreateDBInstance Text
+cdbiMasterUsername =
+    lens _cdbiMasterUsername (\s a -> s { _cdbiMasterUsername = a })
+
+-- | Specifies if the DB instance is a Multi-AZ deployment. You cannot set the
+-- AvailabilityZone parameter if the MultiAZ parameter is set to true.
+cdbiMultiAZ :: Lens' CreateDBInstance (Maybe Bool)
+cdbiMultiAZ = lens _cdbiMultiAZ (\s a -> s { _cdbiMultiAZ = a })
+
+-- | Indicates that the DB instance should be associated with the specified
+-- option group. Permanent options, such as the TDE option for Oracle
+-- Advanced Security TDE, cannot be removed from an option group, and that
+-- option group cannot be removed from a DB instance once it is associated
+-- with a DB instance.
+cdbiOptionGroupName :: Lens' CreateDBInstance (Maybe Text)
+cdbiOptionGroupName =
+    lens _cdbiOptionGroupName (\s a -> s { _cdbiOptionGroupName = a })
+
+-- | The port number on which the database accepts connections. MySQL Default:
+-- 3306 Valid Values: 1150-65535 Type: Integer PostgreSQL Default: 5432
+-- Valid Values: 1150-65535 Type: Integer Oracle Default: 1521 Valid Values:
+-- 1150-65535 SQL Server Default: 1433 Valid Values: 1150-65535 except for
+-- 1434, 3389, 47001, 49152, and 49152 through 49156.
+cdbiPort :: Lens' CreateDBInstance (Maybe Int)
+cdbiPort = lens _cdbiPort (\s a -> s { _cdbiPort = a })
+
+-- | The daily time range during which automated backups are created if
+-- automated backups are enabled, using the BackupRetentionPeriod parameter.
+-- Default: A 30-minute window selected at random from an 8-hour block of
+-- time per region. See the Amazon RDS User Guide for the time blocks for
+-- each region from which the default backup windows are assigned.
+-- Constraints: Must be in the format hh24:mi-hh24:mi. Times should be
+-- Universal Time Coordinated (UTC). Must not conflict with the preferred
+-- maintenance window. Must be at least 30 minutes.
+cdbiPreferredBackupWindow :: Lens' CreateDBInstance (Maybe Text)
+cdbiPreferredBackupWindow =
+    lens _cdbiPreferredBackupWindow
+        (\s a -> s { _cdbiPreferredBackupWindow = a })
+
+-- | The weekly time range (in UTC) during which system maintenance can occur.
+-- 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. To see the time blocks available, see Adjusting the
+-- Preferred Maintenance Window in the Amazon RDS User Guide. Valid Days:
+-- Mon, Tue, Wed, Thu, Fri, Sat, Sun Constraints: Minimum 30-minute window.
+cdbiPreferredMaintenanceWindow :: Lens' CreateDBInstance (Maybe Text)
+cdbiPreferredMaintenanceWindow =
+    lens _cdbiPreferredMaintenanceWindow
+        (\s a -> s { _cdbiPreferredMaintenanceWindow = a })
+
+-- | Specifies the accessibility options for the DB instance. A value of true
+-- specifies an Internet-facing instance with a publicly resolvable DNS
+-- name, which resolves to a public IP address. A value of false specifies
+-- an internal instance with a DNS name that resolves to a private IP
+-- address. Default: The default behavior varies depending on whether a VPC
+-- has been requested or not. The following list shows the default behavior
+-- in each case. Default VPC:true VPC:false If no DB subnet group has been
+-- specified as part of the request and the PubliclyAccessible value has not
+-- been set, the DB instance will be publicly accessible. If a specific DB
+-- subnet group has been specified as part of the request and the
+-- PubliclyAccessible value has not been set, the DB instance will be
+-- private.
+cdbiPubliclyAccessible :: Lens' CreateDBInstance (Maybe Bool)
+cdbiPubliclyAccessible =
+    lens _cdbiPubliclyAccessible (\s a -> s { _cdbiPubliclyAccessible = a })
+
+-- | Specifies storage type to be associated with the DB Instance. Valid
+-- values: standard | gp2 | io1 If you specify io1, you must also include a
+-- value for the Iops parameter.
+cdbiStorageType :: Lens' CreateDBInstance (Maybe Text)
+cdbiStorageType = lens _cdbiStorageType (\s a -> s { _cdbiStorageType = a })
+
+cdbiTags :: Lens' CreateDBInstance [Tag]
+cdbiTags = lens _cdbiTags (\s a -> s { _cdbiTags = a }) . _List
+
+-- | The ARN from the Key Store with which to associate the instance for TDE
+-- encryption.
+cdbiTdeCredentialArn :: Lens' CreateDBInstance (Maybe Text)
+cdbiTdeCredentialArn =
+    lens _cdbiTdeCredentialArn (\s a -> s { _cdbiTdeCredentialArn = a })
+
+-- | The password for the given ARN from the Key Store in order to access the
+-- device.
+cdbiTdeCredentialPassword :: Lens' CreateDBInstance (Maybe Text)
+cdbiTdeCredentialPassword =
+    lens _cdbiTdeCredentialPassword
+        (\s a -> s { _cdbiTdeCredentialPassword = a })
+
+-- | A list of EC2 VPC security groups to associate with this DB instance.
+-- Default: The default EC2 VPC security group for the DB subnet group's
+-- VPC.
+cdbiVpcSecurityGroupIds :: Lens' CreateDBInstance [Text]
+cdbiVpcSecurityGroupIds =
+    lens _cdbiVpcSecurityGroupIds (\s a -> s { _cdbiVpcSecurityGroupIds = a })
+        . _List
+
+newtype CreateDBInstanceResponse = CreateDBInstanceResponse
+    { _cdbirDBInstance :: Maybe DBInstance
+    } deriving (Eq, Show)
+
+-- | 'CreateDBInstanceResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbirDBInstance' @::@ 'Maybe' 'DBInstance'
+--
+createDBInstanceResponse :: CreateDBInstanceResponse
+createDBInstanceResponse = CreateDBInstanceResponse
+    { _cdbirDBInstance = Nothing
+    }
+
+cdbirDBInstance :: Lens' CreateDBInstanceResponse (Maybe DBInstance)
+cdbirDBInstance = lens _cdbirDBInstance (\s a -> s { _cdbirDBInstance = a })
+
+instance ToPath CreateDBInstance where
+    toPath = const "/"
+
+instance ToQuery CreateDBInstance where
+    toQuery CreateDBInstance{..} = mconcat
+        [ "AllocatedStorage"           =? _cdbiAllocatedStorage
+        , "AutoMinorVersionUpgrade"    =? _cdbiAutoMinorVersionUpgrade
+        , "AvailabilityZone"           =? _cdbiAvailabilityZone
+        , "BackupRetentionPeriod"      =? _cdbiBackupRetentionPeriod
+        , "CharacterSetName"           =? _cdbiCharacterSetName
+        , "DBInstanceClass"            =? _cdbiDBInstanceClass
+        , "DBInstanceIdentifier"       =? _cdbiDBInstanceIdentifier
+        , "DBName"                     =? _cdbiDBName
+        , "DBParameterGroupName"       =? _cdbiDBParameterGroupName
+        , "DBSecurityGroups"           =? _cdbiDBSecurityGroups
+        , "DBSubnetGroupName"          =? _cdbiDBSubnetGroupName
+        , "Engine"                     =? _cdbiEngine
+        , "EngineVersion"              =? _cdbiEngineVersion
+        , "Iops"                       =? _cdbiIops
+        , "LicenseModel"               =? _cdbiLicenseModel
+        , "MasterUserPassword"         =? _cdbiMasterUserPassword
+        , "MasterUsername"             =? _cdbiMasterUsername
+        , "MultiAZ"                    =? _cdbiMultiAZ
+        , "OptionGroupName"            =? _cdbiOptionGroupName
+        , "Port"                       =? _cdbiPort
+        , "PreferredBackupWindow"      =? _cdbiPreferredBackupWindow
+        , "PreferredMaintenanceWindow" =? _cdbiPreferredMaintenanceWindow
+        , "PubliclyAccessible"         =? _cdbiPubliclyAccessible
+        , "StorageType"                =? _cdbiStorageType
+        , "Tags"                       =? _cdbiTags
+        , "TdeCredentialArn"           =? _cdbiTdeCredentialArn
+        , "TdeCredentialPassword"      =? _cdbiTdeCredentialPassword
+        , "VpcSecurityGroupIds"        =? _cdbiVpcSecurityGroupIds
+        ]
+
+instance ToHeaders CreateDBInstance
+
+instance AWSRequest CreateDBInstance where
+    type Sv CreateDBInstance = RDS
+    type Rs CreateDBInstance = CreateDBInstanceResponse
+
+    request  = post "CreateDBInstance"
+    response = xmlResponse
+
+instance FromXML CreateDBInstanceResponse where
+    parseXML = withElement "CreateDBInstanceResult" $ \x -> CreateDBInstanceResponse
+        <$> x .@? "DBInstance"
diff --git a/gen/Network/AWS/RDS/CreateDBInstanceReadReplica.hs b/gen/Network/AWS/RDS/CreateDBInstanceReadReplica.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CreateDBInstanceReadReplica.hs
@@ -0,0 +1,280 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CreateDBInstanceReadReplica
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Creates a DB instance that acts as a read replica of a source DB instance.
+-- All read replica DB instances are created as Single-AZ deployments with
+-- backups disabled. All other DB instance attributes (including DB security
+-- groups and DB parameter groups) are inherited from the source DB instance,
+-- except as specified below. The source DB instance must have backup
+-- retention enabled.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBInstanceReadReplica.html>
+module Network.AWS.RDS.CreateDBInstanceReadReplica
+    (
+    -- * Request
+      CreateDBInstanceReadReplica
+    -- ** Request constructor
+    , createDBInstanceReadReplica
+    -- ** Request lenses
+    , cdbirrAutoMinorVersionUpgrade
+    , cdbirrAvailabilityZone
+    , cdbirrDBInstanceClass
+    , cdbirrDBInstanceIdentifier
+    , cdbirrDBSubnetGroupName
+    , cdbirrIops
+    , cdbirrOptionGroupName
+    , cdbirrPort
+    , cdbirrPubliclyAccessible
+    , cdbirrSourceDBInstanceIdentifier
+    , cdbirrStorageType
+    , cdbirrTags
+
+    -- * Response
+    , CreateDBInstanceReadReplicaResponse
+    -- ** Response constructor
+    , createDBInstanceReadReplicaResponse
+    -- ** Response lenses
+    , cdbirrrDBInstance
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CreateDBInstanceReadReplica = CreateDBInstanceReadReplica
+    { _cdbirrAutoMinorVersionUpgrade    :: Maybe Bool
+    , _cdbirrAvailabilityZone           :: Maybe Text
+    , _cdbirrDBInstanceClass            :: Maybe Text
+    , _cdbirrDBInstanceIdentifier       :: Text
+    , _cdbirrDBSubnetGroupName          :: Maybe Text
+    , _cdbirrIops                       :: Maybe Int
+    , _cdbirrOptionGroupName            :: Maybe Text
+    , _cdbirrPort                       :: Maybe Int
+    , _cdbirrPubliclyAccessible         :: Maybe Bool
+    , _cdbirrSourceDBInstanceIdentifier :: Text
+    , _cdbirrStorageType                :: Maybe Text
+    , _cdbirrTags                       :: List "Tag" Tag
+    } deriving (Eq, Show)
+
+-- | 'CreateDBInstanceReadReplica' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbirrAutoMinorVersionUpgrade' @::@ 'Maybe' 'Bool'
+--
+-- * 'cdbirrAvailabilityZone' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbirrDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbirrDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'cdbirrDBSubnetGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbirrIops' @::@ 'Maybe' 'Int'
+--
+-- * 'cdbirrOptionGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbirrPort' @::@ 'Maybe' 'Int'
+--
+-- * 'cdbirrPubliclyAccessible' @::@ 'Maybe' 'Bool'
+--
+-- * 'cdbirrSourceDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'cdbirrStorageType' @::@ 'Maybe' 'Text'
+--
+-- * 'cdbirrTags' @::@ ['Tag']
+--
+createDBInstanceReadReplica :: Text -- ^ 'cdbirrDBInstanceIdentifier'
+                            -> Text -- ^ 'cdbirrSourceDBInstanceIdentifier'
+                            -> CreateDBInstanceReadReplica
+createDBInstanceReadReplica p1 p2 = CreateDBInstanceReadReplica
+    { _cdbirrDBInstanceIdentifier       = p1
+    , _cdbirrSourceDBInstanceIdentifier = p2
+    , _cdbirrDBInstanceClass            = Nothing
+    , _cdbirrAvailabilityZone           = Nothing
+    , _cdbirrPort                       = Nothing
+    , _cdbirrAutoMinorVersionUpgrade    = Nothing
+    , _cdbirrIops                       = Nothing
+    , _cdbirrOptionGroupName            = Nothing
+    , _cdbirrPubliclyAccessible         = Nothing
+    , _cdbirrTags                       = mempty
+    , _cdbirrDBSubnetGroupName          = Nothing
+    , _cdbirrStorageType                = Nothing
+    }
+
+-- | Indicates that minor engine upgrades will be applied automatically to the
+-- read replica during the maintenance window. Default: Inherits from the
+-- source DB instance.
+cdbirrAutoMinorVersionUpgrade :: Lens' CreateDBInstanceReadReplica (Maybe Bool)
+cdbirrAutoMinorVersionUpgrade =
+    lens _cdbirrAutoMinorVersionUpgrade
+        (\s a -> s { _cdbirrAutoMinorVersionUpgrade = a })
+
+-- | The Amazon EC2 Availability Zone that the read replica will be created
+-- in. Default: A random, system-chosen Availability Zone in the endpoint's
+-- region. Example: us-east-1d.
+cdbirrAvailabilityZone :: Lens' CreateDBInstanceReadReplica (Maybe Text)
+cdbirrAvailabilityZone =
+    lens _cdbirrAvailabilityZone (\s a -> s { _cdbirrAvailabilityZone = a })
+
+-- | The compute and memory capacity of the read replica. Valid Values:
+-- db.m1.small | db.m1.medium | db.m1.large | db.m1.xlarge | db.m2.xlarge
+-- |db.m2.2xlarge | db.m2.4xlarge | db.m3.medium | db.m3.large |
+-- db.m3.xlarge | db.m3.2xlarge | db.r3.large | db.r3.xlarge | db.r3.2xlarge
+-- | db.r3.4xlarge | db.r3.8xlarge | db.t2.micro | db.t2.small |
+-- db.t2.medium Default: Inherits from the source DB instance.
+cdbirrDBInstanceClass :: Lens' CreateDBInstanceReadReplica (Maybe Text)
+cdbirrDBInstanceClass =
+    lens _cdbirrDBInstanceClass (\s a -> s { _cdbirrDBInstanceClass = a })
+
+-- | The DB instance identifier of the read replica. This is the unique key
+-- that identifies a DB instance. This parameter is stored as a lowercase
+-- string.
+cdbirrDBInstanceIdentifier :: Lens' CreateDBInstanceReadReplica Text
+cdbirrDBInstanceIdentifier =
+    lens _cdbirrDBInstanceIdentifier
+        (\s a -> s { _cdbirrDBInstanceIdentifier = a })
+
+-- | Specifies a DB subnet group for the DB instance. The new DB instance will
+-- be created in the VPC associated with the DB subnet group. If no DB
+-- subnet group is specified, then the new DB instance is not created in a
+-- VPC. Constraints: Can only be specified if the source DB instance
+-- identifier specifies a DB instance in another region. The specified DB
+-- subnet group must be in the same region in which the operation is
+-- running. All read replicas in one region that are created from the same
+-- source DB instance must either: Specify DB subnet groups from the same
+-- VPC. All these read replicas will be created in the same VPC. Not specify
+-- a DB subnet group. All these read replicas will be created outside of any
+-- VPC.
+cdbirrDBSubnetGroupName :: Lens' CreateDBInstanceReadReplica (Maybe Text)
+cdbirrDBSubnetGroupName =
+    lens _cdbirrDBSubnetGroupName (\s a -> s { _cdbirrDBSubnetGroupName = a })
+
+-- | The amount of Provisioned IOPS (input/output operations per second) to be
+-- initially allocated for the DB instance.
+cdbirrIops :: Lens' CreateDBInstanceReadReplica (Maybe Int)
+cdbirrIops = lens _cdbirrIops (\s a -> s { _cdbirrIops = a })
+
+-- | The option group the DB instance will be associated with. If omitted, the
+-- default option group for the engine specified will be used.
+cdbirrOptionGroupName :: Lens' CreateDBInstanceReadReplica (Maybe Text)
+cdbirrOptionGroupName =
+    lens _cdbirrOptionGroupName (\s a -> s { _cdbirrOptionGroupName = a })
+
+-- | The port number that the DB instance uses for connections. Default:
+-- Inherits from the source DB instance Valid Values: 1150-65535.
+cdbirrPort :: Lens' CreateDBInstanceReadReplica (Maybe Int)
+cdbirrPort = lens _cdbirrPort (\s a -> s { _cdbirrPort = a })
+
+-- | Specifies the accessibility options for the DB instance. A value of true
+-- specifies an Internet-facing instance with a publicly resolvable DNS
+-- name, which resolves to a public IP address. A value of false specifies
+-- an internal instance with a DNS name that resolves to a private IP
+-- address. Default: The default behavior varies depending on whether a VPC
+-- has been requested or not. The following list shows the default behavior
+-- in each case. Default VPC:true VPC:false If no DB subnet group has been
+-- specified as part of the request and the PubliclyAccessible value has not
+-- been set, the DB instance will be publicly accessible. If a specific DB
+-- subnet group has been specified as part of the request and the
+-- PubliclyAccessible value has not been set, the DB instance will be
+-- private.
+cdbirrPubliclyAccessible :: Lens' CreateDBInstanceReadReplica (Maybe Bool)
+cdbirrPubliclyAccessible =
+    lens _cdbirrPubliclyAccessible
+        (\s a -> s { _cdbirrPubliclyAccessible = a })
+
+-- | The identifier of the DB instance that will act as the source for the
+-- read replica. Each DB instance can have up to five read replicas.
+-- Constraints: Must be the identifier of an existing DB instance. Can
+-- specify a DB instance that is a read replica only if the source is
+-- running MySQL 5.6. The specified DB instance must have automatic backups
+-- enabled, its backup retention period must be greater than 0. If the
+-- source DB instance is in the same region as the read replica, specify a
+-- valid DB instance identifier. If the source DB instance is in a different
+-- region than the read replica, specify a valid DB instance ARN. For more
+-- information, go to Constructing a Amazon RDS Amazon Resource Name (ARN).
+cdbirrSourceDBInstanceIdentifier :: Lens' CreateDBInstanceReadReplica Text
+cdbirrSourceDBInstanceIdentifier =
+    lens _cdbirrSourceDBInstanceIdentifier
+        (\s a -> s { _cdbirrSourceDBInstanceIdentifier = a })
+
+-- | Specifies storage type to be associated with the DB Instance read
+-- replica. Valid values: standard | gp2 | io1 If you specify io1, you must
+-- also include a value for the Iops parameter.
+cdbirrStorageType :: Lens' CreateDBInstanceReadReplica (Maybe Text)
+cdbirrStorageType =
+    lens _cdbirrStorageType (\s a -> s { _cdbirrStorageType = a })
+
+cdbirrTags :: Lens' CreateDBInstanceReadReplica [Tag]
+cdbirrTags = lens _cdbirrTags (\s a -> s { _cdbirrTags = a }) . _List
+
+newtype CreateDBInstanceReadReplicaResponse = CreateDBInstanceReadReplicaResponse
+    { _cdbirrrDBInstance :: Maybe DBInstance
+    } deriving (Eq, Show)
+
+-- | 'CreateDBInstanceReadReplicaResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbirrrDBInstance' @::@ 'Maybe' 'DBInstance'
+--
+createDBInstanceReadReplicaResponse :: CreateDBInstanceReadReplicaResponse
+createDBInstanceReadReplicaResponse = CreateDBInstanceReadReplicaResponse
+    { _cdbirrrDBInstance = Nothing
+    }
+
+cdbirrrDBInstance :: Lens' CreateDBInstanceReadReplicaResponse (Maybe DBInstance)
+cdbirrrDBInstance =
+    lens _cdbirrrDBInstance (\s a -> s { _cdbirrrDBInstance = a })
+
+instance ToPath CreateDBInstanceReadReplica where
+    toPath = const "/"
+
+instance ToQuery CreateDBInstanceReadReplica where
+    toQuery CreateDBInstanceReadReplica{..} = mconcat
+        [ "AutoMinorVersionUpgrade"    =? _cdbirrAutoMinorVersionUpgrade
+        , "AvailabilityZone"           =? _cdbirrAvailabilityZone
+        , "DBInstanceClass"            =? _cdbirrDBInstanceClass
+        , "DBInstanceIdentifier"       =? _cdbirrDBInstanceIdentifier
+        , "DBSubnetGroupName"          =? _cdbirrDBSubnetGroupName
+        , "Iops"                       =? _cdbirrIops
+        , "OptionGroupName"            =? _cdbirrOptionGroupName
+        , "Port"                       =? _cdbirrPort
+        , "PubliclyAccessible"         =? _cdbirrPubliclyAccessible
+        , "SourceDBInstanceIdentifier" =? _cdbirrSourceDBInstanceIdentifier
+        , "StorageType"                =? _cdbirrStorageType
+        , "Tags"                       =? _cdbirrTags
+        ]
+
+instance ToHeaders CreateDBInstanceReadReplica
+
+instance AWSRequest CreateDBInstanceReadReplica where
+    type Sv CreateDBInstanceReadReplica = RDS
+    type Rs CreateDBInstanceReadReplica = CreateDBInstanceReadReplicaResponse
+
+    request  = post "CreateDBInstanceReadReplica"
+    response = xmlResponse
+
+instance FromXML CreateDBInstanceReadReplicaResponse where
+    parseXML = withElement "CreateDBInstanceReadReplicaResult" $ \x -> CreateDBInstanceReadReplicaResponse
+        <$> x .@? "DBInstance"
diff --git a/gen/Network/AWS/RDS/CreateDBParameterGroup.hs b/gen/Network/AWS/RDS/CreateDBParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CreateDBParameterGroup.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CreateDBParameterGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Creates a new DB parameter group. A DB parameter group is initially created
+-- with the default parameters for the database engine used by the DB
+-- instance. To provide custom values for any of the parameters, you must
+-- modify the group after creating it using ModifyDBParameterGroup. Once
+-- you've created a DB parameter group, you need to associate it with your DB
+-- instance using ModifyDBInstance. When you associate a new DB parameter
+-- group with a running DB instance, you need to reboot the DB instance
+-- without failover for the new DB parameter group and associated settings to
+-- take effect. After you create a DB parameter group, you should wait at
+-- least 5 minutes before creating your first DB instance that uses that DB
+-- parameter group as the default parameter group. This allows Amazon RDS to
+-- fully complete the create action before the parameter group is used as the
+-- default for a new DB instance. This is especially important for parameters
+-- that are critical when creating the default database for a DB instance,
+-- such as the character set for the default database defined by the
+-- character_set_database parameter. You can use the Parameter Groups option
+-- of the Amazon RDS console or the DescribeDBParameters command to verify
+-- that your DB parameter group has been created or modified.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBParameterGroup.html>
+module Network.AWS.RDS.CreateDBParameterGroup
+    (
+    -- * Request
+      CreateDBParameterGroup
+    -- ** Request constructor
+    , createDBParameterGroup
+    -- ** Request lenses
+    , cdbpg1DBParameterGroupFamily
+    , cdbpg1DBParameterGroupName
+    , cdbpg1Description
+    , cdbpg1Tags
+
+    -- * Response
+    , CreateDBParameterGroupResponse
+    -- ** Response constructor
+    , createDBParameterGroupResponse
+    -- ** Response lenses
+    , cdbpgrDBParameterGroup
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CreateDBParameterGroup = CreateDBParameterGroup
+    { _cdbpg1DBParameterGroupFamily :: Text
+    , _cdbpg1DBParameterGroupName   :: Text
+    , _cdbpg1Description            :: Text
+    , _cdbpg1Tags                   :: List "Tag" Tag
+    } deriving (Eq, Show)
+
+-- | 'CreateDBParameterGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbpg1DBParameterGroupFamily' @::@ 'Text'
+--
+-- * 'cdbpg1DBParameterGroupName' @::@ 'Text'
+--
+-- * 'cdbpg1Description' @::@ 'Text'
+--
+-- * 'cdbpg1Tags' @::@ ['Tag']
+--
+createDBParameterGroup :: Text -- ^ 'cdbpg1DBParameterGroupName'
+                       -> Text -- ^ 'cdbpg1DBParameterGroupFamily'
+                       -> Text -- ^ 'cdbpg1Description'
+                       -> CreateDBParameterGroup
+createDBParameterGroup p1 p2 p3 = CreateDBParameterGroup
+    { _cdbpg1DBParameterGroupName   = p1
+    , _cdbpg1DBParameterGroupFamily = p2
+    , _cdbpg1Description            = p3
+    , _cdbpg1Tags                   = mempty
+    }
+
+-- | The DB parameter group family name. A DB parameter group can be
+-- associated with one and only one DB parameter group family, and can be
+-- applied only to a DB instance running a database engine and engine
+-- version compatible with that DB parameter group family.
+cdbpg1DBParameterGroupFamily :: Lens' CreateDBParameterGroup Text
+cdbpg1DBParameterGroupFamily =
+    lens _cdbpg1DBParameterGroupFamily
+        (\s a -> s { _cdbpg1DBParameterGroupFamily = a })
+
+-- | The name of the DB parameter group. Constraints: Must be 1 to 255
+-- alphanumeric characters First character must be a letter Cannot end with
+-- a hyphen or contain two consecutive hyphens.
+cdbpg1DBParameterGroupName :: Lens' CreateDBParameterGroup Text
+cdbpg1DBParameterGroupName =
+    lens _cdbpg1DBParameterGroupName
+        (\s a -> s { _cdbpg1DBParameterGroupName = a })
+
+-- | The description for the DB parameter group.
+cdbpg1Description :: Lens' CreateDBParameterGroup Text
+cdbpg1Description =
+    lens _cdbpg1Description (\s a -> s { _cdbpg1Description = a })
+
+cdbpg1Tags :: Lens' CreateDBParameterGroup [Tag]
+cdbpg1Tags = lens _cdbpg1Tags (\s a -> s { _cdbpg1Tags = a }) . _List
+
+newtype CreateDBParameterGroupResponse = CreateDBParameterGroupResponse
+    { _cdbpgrDBParameterGroup :: Maybe DBParameterGroup
+    } deriving (Eq, Show)
+
+-- | 'CreateDBParameterGroupResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbpgrDBParameterGroup' @::@ 'Maybe' 'DBParameterGroup'
+--
+createDBParameterGroupResponse :: CreateDBParameterGroupResponse
+createDBParameterGroupResponse = CreateDBParameterGroupResponse
+    { _cdbpgrDBParameterGroup = Nothing
+    }
+
+cdbpgrDBParameterGroup :: Lens' CreateDBParameterGroupResponse (Maybe DBParameterGroup)
+cdbpgrDBParameterGroup =
+    lens _cdbpgrDBParameterGroup (\s a -> s { _cdbpgrDBParameterGroup = a })
+
+instance ToPath CreateDBParameterGroup where
+    toPath = const "/"
+
+instance ToQuery CreateDBParameterGroup where
+    toQuery CreateDBParameterGroup{..} = mconcat
+        [ "DBParameterGroupFamily" =? _cdbpg1DBParameterGroupFamily
+        , "DBParameterGroupName"   =? _cdbpg1DBParameterGroupName
+        , "Description"            =? _cdbpg1Description
+        , "Tags"                   =? _cdbpg1Tags
+        ]
+
+instance ToHeaders CreateDBParameterGroup
+
+instance AWSRequest CreateDBParameterGroup where
+    type Sv CreateDBParameterGroup = RDS
+    type Rs CreateDBParameterGroup = CreateDBParameterGroupResponse
+
+    request  = post "CreateDBParameterGroup"
+    response = xmlResponse
+
+instance FromXML CreateDBParameterGroupResponse where
+    parseXML = withElement "CreateDBParameterGroupResult" $ \x -> CreateDBParameterGroupResponse
+        <$> x .@? "DBParameterGroup"
diff --git a/gen/Network/AWS/RDS/CreateDBSecurityGroup.hs b/gen/Network/AWS/RDS/CreateDBSecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CreateDBSecurityGroup.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CreateDBSecurityGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Creates a new DB security group. DB security groups control access to a DB
+-- instance.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBSecurityGroup.html>
+module Network.AWS.RDS.CreateDBSecurityGroup
+    (
+    -- * Request
+      CreateDBSecurityGroup
+    -- ** Request constructor
+    , createDBSecurityGroup
+    -- ** Request lenses
+    , cdbsgDBSecurityGroupDescription
+    , cdbsgDBSecurityGroupName
+    , cdbsgTags
+
+    -- * Response
+    , CreateDBSecurityGroupResponse
+    -- ** Response constructor
+    , createDBSecurityGroupResponse
+    -- ** Response lenses
+    , cdbsgrDBSecurityGroup
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CreateDBSecurityGroup = CreateDBSecurityGroup
+    { _cdbsgDBSecurityGroupDescription :: Text
+    , _cdbsgDBSecurityGroupName        :: Text
+    , _cdbsgTags                       :: List "Tag" Tag
+    } deriving (Eq, Show)
+
+-- | 'CreateDBSecurityGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbsgDBSecurityGroupDescription' @::@ 'Text'
+--
+-- * 'cdbsgDBSecurityGroupName' @::@ 'Text'
+--
+-- * 'cdbsgTags' @::@ ['Tag']
+--
+createDBSecurityGroup :: Text -- ^ 'cdbsgDBSecurityGroupName'
+                      -> Text -- ^ 'cdbsgDBSecurityGroupDescription'
+                      -> CreateDBSecurityGroup
+createDBSecurityGroup p1 p2 = CreateDBSecurityGroup
+    { _cdbsgDBSecurityGroupName        = p1
+    , _cdbsgDBSecurityGroupDescription = p2
+    , _cdbsgTags                       = mempty
+    }
+
+-- | The description for the DB security group.
+cdbsgDBSecurityGroupDescription :: Lens' CreateDBSecurityGroup Text
+cdbsgDBSecurityGroupDescription =
+    lens _cdbsgDBSecurityGroupDescription
+        (\s a -> s { _cdbsgDBSecurityGroupDescription = a })
+
+-- | The name for the DB security group. This value is stored as a lowercase
+-- string. Constraints: Must be 1 to 255 alphanumeric characters First
+-- character must be a letter Cannot end with a hyphen or contain two
+-- consecutive hyphens Must not be "Default" May not contain spaces Example:
+-- mysecuritygroup.
+cdbsgDBSecurityGroupName :: Lens' CreateDBSecurityGroup Text
+cdbsgDBSecurityGroupName =
+    lens _cdbsgDBSecurityGroupName
+        (\s a -> s { _cdbsgDBSecurityGroupName = a })
+
+cdbsgTags :: Lens' CreateDBSecurityGroup [Tag]
+cdbsgTags = lens _cdbsgTags (\s a -> s { _cdbsgTags = a }) . _List
+
+newtype CreateDBSecurityGroupResponse = CreateDBSecurityGroupResponse
+    { _cdbsgrDBSecurityGroup :: Maybe DBSecurityGroup
+    } deriving (Eq, Show)
+
+-- | 'CreateDBSecurityGroupResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbsgrDBSecurityGroup' @::@ 'Maybe' 'DBSecurityGroup'
+--
+createDBSecurityGroupResponse :: CreateDBSecurityGroupResponse
+createDBSecurityGroupResponse = CreateDBSecurityGroupResponse
+    { _cdbsgrDBSecurityGroup = Nothing
+    }
+
+cdbsgrDBSecurityGroup :: Lens' CreateDBSecurityGroupResponse (Maybe DBSecurityGroup)
+cdbsgrDBSecurityGroup =
+    lens _cdbsgrDBSecurityGroup (\s a -> s { _cdbsgrDBSecurityGroup = a })
+
+instance ToPath CreateDBSecurityGroup where
+    toPath = const "/"
+
+instance ToQuery CreateDBSecurityGroup where
+    toQuery CreateDBSecurityGroup{..} = mconcat
+        [ "DBSecurityGroupDescription" =? _cdbsgDBSecurityGroupDescription
+        , "DBSecurityGroupName"        =? _cdbsgDBSecurityGroupName
+        , "Tags"                       =? _cdbsgTags
+        ]
+
+instance ToHeaders CreateDBSecurityGroup
+
+instance AWSRequest CreateDBSecurityGroup where
+    type Sv CreateDBSecurityGroup = RDS
+    type Rs CreateDBSecurityGroup = CreateDBSecurityGroupResponse
+
+    request  = post "CreateDBSecurityGroup"
+    response = xmlResponse
+
+instance FromXML CreateDBSecurityGroupResponse where
+    parseXML = withElement "CreateDBSecurityGroupResult" $ \x -> CreateDBSecurityGroupResponse
+        <$> x .@? "DBSecurityGroup"
diff --git a/gen/Network/AWS/RDS/CreateDBSnapshot.hs b/gen/Network/AWS/RDS/CreateDBSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CreateDBSnapshot.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CreateDBSnapshot
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Creates a DBSnapshot. The source DBInstance must be in "available" state.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBSnapshot.html>
+module Network.AWS.RDS.CreateDBSnapshot
+    (
+    -- * Request
+      CreateDBSnapshot
+    -- ** Request constructor
+    , createDBSnapshot
+    -- ** Request lenses
+    , cdbs1DBInstanceIdentifier
+    , cdbs1DBSnapshotIdentifier
+    , cdbs1Tags
+
+    -- * Response
+    , CreateDBSnapshotResponse
+    -- ** Response constructor
+    , createDBSnapshotResponse
+    -- ** Response lenses
+    , cdbsr1DBSnapshot
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CreateDBSnapshot = CreateDBSnapshot
+    { _cdbs1DBInstanceIdentifier :: Text
+    , _cdbs1DBSnapshotIdentifier :: Text
+    , _cdbs1Tags                 :: List "Tag" Tag
+    } deriving (Eq, Show)
+
+-- | 'CreateDBSnapshot' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbs1DBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'cdbs1DBSnapshotIdentifier' @::@ 'Text'
+--
+-- * 'cdbs1Tags' @::@ ['Tag']
+--
+createDBSnapshot :: Text -- ^ 'cdbs1DBSnapshotIdentifier'
+                 -> Text -- ^ 'cdbs1DBInstanceIdentifier'
+                 -> CreateDBSnapshot
+createDBSnapshot p1 p2 = CreateDBSnapshot
+    { _cdbs1DBSnapshotIdentifier = p1
+    , _cdbs1DBInstanceIdentifier = p2
+    , _cdbs1Tags                 = mempty
+    }
+
+-- | The DB instance identifier. This is the unique key that identifies a DB
+-- instance. 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.
+cdbs1DBInstanceIdentifier :: Lens' CreateDBSnapshot Text
+cdbs1DBInstanceIdentifier =
+    lens _cdbs1DBInstanceIdentifier
+        (\s a -> s { _cdbs1DBInstanceIdentifier = a })
+
+-- | The identifier for the DB snapshot. Constraints: Cannot be null, empty,
+-- or blank Must contain from 1 to 255 alphanumeric characters or hyphens
+-- First character must be a letter Cannot end with a hyphen or contain two
+-- consecutive hyphens Example: my-snapshot-id.
+cdbs1DBSnapshotIdentifier :: Lens' CreateDBSnapshot Text
+cdbs1DBSnapshotIdentifier =
+    lens _cdbs1DBSnapshotIdentifier
+        (\s a -> s { _cdbs1DBSnapshotIdentifier = a })
+
+cdbs1Tags :: Lens' CreateDBSnapshot [Tag]
+cdbs1Tags = lens _cdbs1Tags (\s a -> s { _cdbs1Tags = a }) . _List
+
+newtype CreateDBSnapshotResponse = CreateDBSnapshotResponse
+    { _cdbsr1DBSnapshot :: Maybe DBSnapshot
+    } deriving (Eq, Show)
+
+-- | 'CreateDBSnapshotResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbsr1DBSnapshot' @::@ 'Maybe' 'DBSnapshot'
+--
+createDBSnapshotResponse :: CreateDBSnapshotResponse
+createDBSnapshotResponse = CreateDBSnapshotResponse
+    { _cdbsr1DBSnapshot = Nothing
+    }
+
+cdbsr1DBSnapshot :: Lens' CreateDBSnapshotResponse (Maybe DBSnapshot)
+cdbsr1DBSnapshot = lens _cdbsr1DBSnapshot (\s a -> s { _cdbsr1DBSnapshot = a })
+
+instance ToPath CreateDBSnapshot where
+    toPath = const "/"
+
+instance ToQuery CreateDBSnapshot where
+    toQuery CreateDBSnapshot{..} = mconcat
+        [ "DBInstanceIdentifier" =? _cdbs1DBInstanceIdentifier
+        , "DBSnapshotIdentifier" =? _cdbs1DBSnapshotIdentifier
+        , "Tags"                 =? _cdbs1Tags
+        ]
+
+instance ToHeaders CreateDBSnapshot
+
+instance AWSRequest CreateDBSnapshot where
+    type Sv CreateDBSnapshot = RDS
+    type Rs CreateDBSnapshot = CreateDBSnapshotResponse
+
+    request  = post "CreateDBSnapshot"
+    response = xmlResponse
+
+instance FromXML CreateDBSnapshotResponse where
+    parseXML = withElement "CreateDBSnapshotResult" $ \x -> CreateDBSnapshotResponse
+        <$> x .@? "DBSnapshot"
diff --git a/gen/Network/AWS/RDS/CreateDBSubnetGroup.hs b/gen/Network/AWS/RDS/CreateDBSubnetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CreateDBSubnetGroup.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CreateDBSubnetGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Creates a new DB subnet group. DB subnet groups must contain at least one
+-- subnet in at least two AZs in the region.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateDBSubnetGroup.html>
+module Network.AWS.RDS.CreateDBSubnetGroup
+    (
+    -- * Request
+      CreateDBSubnetGroup
+    -- ** Request constructor
+    , createDBSubnetGroup
+    -- ** Request lenses
+    , cdbsg1DBSubnetGroupDescription
+    , cdbsg1DBSubnetGroupName
+    , cdbsg1SubnetIds
+    , cdbsg1Tags
+
+    -- * Response
+    , CreateDBSubnetGroupResponse
+    -- ** Response constructor
+    , createDBSubnetGroupResponse
+    -- ** Response lenses
+    , cdbsgrDBSubnetGroup
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CreateDBSubnetGroup = CreateDBSubnetGroup
+    { _cdbsg1DBSubnetGroupDescription :: Text
+    , _cdbsg1DBSubnetGroupName        :: Text
+    , _cdbsg1SubnetIds                :: List "SubnetIdentifier" Text
+    , _cdbsg1Tags                     :: List "Tag" Tag
+    } deriving (Eq, Show)
+
+-- | 'CreateDBSubnetGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbsg1DBSubnetGroupDescription' @::@ 'Text'
+--
+-- * 'cdbsg1DBSubnetGroupName' @::@ 'Text'
+--
+-- * 'cdbsg1SubnetIds' @::@ ['Text']
+--
+-- * 'cdbsg1Tags' @::@ ['Tag']
+--
+createDBSubnetGroup :: Text -- ^ 'cdbsg1DBSubnetGroupName'
+                    -> Text -- ^ 'cdbsg1DBSubnetGroupDescription'
+                    -> CreateDBSubnetGroup
+createDBSubnetGroup p1 p2 = CreateDBSubnetGroup
+    { _cdbsg1DBSubnetGroupName        = p1
+    , _cdbsg1DBSubnetGroupDescription = p2
+    , _cdbsg1SubnetIds                = mempty
+    , _cdbsg1Tags                     = mempty
+    }
+
+-- | The description for the DB subnet group.
+cdbsg1DBSubnetGroupDescription :: Lens' CreateDBSubnetGroup Text
+cdbsg1DBSubnetGroupDescription =
+    lens _cdbsg1DBSubnetGroupDescription
+        (\s a -> s { _cdbsg1DBSubnetGroupDescription = a })
+
+-- | The name for the DB subnet group. This value is stored as a lowercase
+-- string. Constraints: Must contain no more than 255 alphanumeric
+-- characters or hyphens. Must not be "Default". Example: mySubnetgroup.
+cdbsg1DBSubnetGroupName :: Lens' CreateDBSubnetGroup Text
+cdbsg1DBSubnetGroupName =
+    lens _cdbsg1DBSubnetGroupName (\s a -> s { _cdbsg1DBSubnetGroupName = a })
+
+-- | The EC2 Subnet IDs for the DB subnet group.
+cdbsg1SubnetIds :: Lens' CreateDBSubnetGroup [Text]
+cdbsg1SubnetIds = lens _cdbsg1SubnetIds (\s a -> s { _cdbsg1SubnetIds = a }) . _List
+
+cdbsg1Tags :: Lens' CreateDBSubnetGroup [Tag]
+cdbsg1Tags = lens _cdbsg1Tags (\s a -> s { _cdbsg1Tags = a }) . _List
+
+newtype CreateDBSubnetGroupResponse = CreateDBSubnetGroupResponse
+    { _cdbsgrDBSubnetGroup :: Maybe DBSubnetGroup
+    } deriving (Eq, Show)
+
+-- | 'CreateDBSubnetGroupResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cdbsgrDBSubnetGroup' @::@ 'Maybe' 'DBSubnetGroup'
+--
+createDBSubnetGroupResponse :: CreateDBSubnetGroupResponse
+createDBSubnetGroupResponse = CreateDBSubnetGroupResponse
+    { _cdbsgrDBSubnetGroup = Nothing
+    }
+
+cdbsgrDBSubnetGroup :: Lens' CreateDBSubnetGroupResponse (Maybe DBSubnetGroup)
+cdbsgrDBSubnetGroup =
+    lens _cdbsgrDBSubnetGroup (\s a -> s { _cdbsgrDBSubnetGroup = a })
+
+instance ToPath CreateDBSubnetGroup where
+    toPath = const "/"
+
+instance ToQuery CreateDBSubnetGroup where
+    toQuery CreateDBSubnetGroup{..} = mconcat
+        [ "DBSubnetGroupDescription" =? _cdbsg1DBSubnetGroupDescription
+        , "DBSubnetGroupName"        =? _cdbsg1DBSubnetGroupName
+        , "SubnetIds"                =? _cdbsg1SubnetIds
+        , "Tags"                     =? _cdbsg1Tags
+        ]
+
+instance ToHeaders CreateDBSubnetGroup
+
+instance AWSRequest CreateDBSubnetGroup where
+    type Sv CreateDBSubnetGroup = RDS
+    type Rs CreateDBSubnetGroup = CreateDBSubnetGroupResponse
+
+    request  = post "CreateDBSubnetGroup"
+    response = xmlResponse
+
+instance FromXML CreateDBSubnetGroupResponse where
+    parseXML = withElement "CreateDBSubnetGroupResult" $ \x -> CreateDBSubnetGroupResponse
+        <$> x .@? "DBSubnetGroup"
diff --git a/gen/Network/AWS/RDS/CreateEventSubscription.hs b/gen/Network/AWS/RDS/CreateEventSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CreateEventSubscription.hs
@@ -0,0 +1,206 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CreateEventSubscription
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Creates an RDS event notification subscription. This action requires a
+-- topic ARN (Amazon Resource Name) created by either the RDS console, the SNS
+-- console, or the SNS API. To obtain an ARN with SNS, you must create a topic
+-- in Amazon SNS and subscribe to the topic. The ARN is displayed in the SNS
+-- console. You can specify the type of source (SourceType) you want to be
+-- notified of, provide a list of RDS sources (SourceIds) that triggers the
+-- events, and provide a list of event categories (EventCategories) for events
+-- you want to be notified of. For example, you can specify SourceType =
+-- db-instance, SourceIds = mydbinstance1, mydbinstance2 and EventCategories =
+-- Availability, Backup. If you specify both the SourceType and SourceIds,
+-- such as SourceType = db-instance and SourceIdentifier = myDBInstance1, you
+-- will be notified of all the db-instance events for the specified source. If
+-- you specify a SourceType but do not specify a SourceIdentifier, you will
+-- receive notice of the events for that source type for all your RDS sources.
+-- If you do not specify either the SourceType nor the SourceIdentifier, you
+-- will be notified of events generated from all RDS sources belonging to your
+-- customer account.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateEventSubscription.html>
+module Network.AWS.RDS.CreateEventSubscription
+    (
+    -- * Request
+      CreateEventSubscription
+    -- ** Request constructor
+    , createEventSubscription
+    -- ** Request lenses
+    , cesEnabled
+    , cesEventCategories
+    , cesSnsTopicArn
+    , cesSourceIds
+    , cesSourceType
+    , cesSubscriptionName
+    , cesTags
+
+    -- * Response
+    , CreateEventSubscriptionResponse
+    -- ** Response constructor
+    , createEventSubscriptionResponse
+    -- ** Response lenses
+    , cesrEventSubscription
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CreateEventSubscription = CreateEventSubscription
+    { _cesEnabled          :: Maybe Bool
+    , _cesEventCategories  :: List "EventCategory" Text
+    , _cesSnsTopicArn      :: Text
+    , _cesSourceIds        :: List "SourceId" Text
+    , _cesSourceType       :: Maybe Text
+    , _cesSubscriptionName :: Text
+    , _cesTags             :: List "Tag" Tag
+    } deriving (Eq, Show)
+
+-- | 'CreateEventSubscription' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cesEnabled' @::@ 'Maybe' 'Bool'
+--
+-- * 'cesEventCategories' @::@ ['Text']
+--
+-- * 'cesSnsTopicArn' @::@ 'Text'
+--
+-- * 'cesSourceIds' @::@ ['Text']
+--
+-- * 'cesSourceType' @::@ 'Maybe' 'Text'
+--
+-- * 'cesSubscriptionName' @::@ 'Text'
+--
+-- * 'cesTags' @::@ ['Tag']
+--
+createEventSubscription :: Text -- ^ 'cesSubscriptionName'
+                        -> Text -- ^ 'cesSnsTopicArn'
+                        -> CreateEventSubscription
+createEventSubscription p1 p2 = CreateEventSubscription
+    { _cesSubscriptionName = p1
+    , _cesSnsTopicArn      = p2
+    , _cesSourceType       = Nothing
+    , _cesEventCategories  = mempty
+    , _cesSourceIds        = mempty
+    , _cesEnabled          = Nothing
+    , _cesTags             = mempty
+    }
+
+-- | A Boolean value; set to true to activate the subscription, set to false
+-- to create the subscription but not active it.
+cesEnabled :: Lens' CreateEventSubscription (Maybe Bool)
+cesEnabled = lens _cesEnabled (\s a -> s { _cesEnabled = a })
+
+-- | A list of event categories for a SourceType that you want to subscribe
+-- to. You can see a list of the categories for a given SourceType in the
+-- Events topic in the Amazon RDS User Guide or by using the
+-- DescribeEventCategories action.
+cesEventCategories :: Lens' CreateEventSubscription [Text]
+cesEventCategories =
+    lens _cesEventCategories (\s a -> s { _cesEventCategories = a })
+        . _List
+
+-- | The Amazon Resource Name (ARN) of the SNS topic created for event
+-- notification. The ARN is created by Amazon SNS when you create a topic
+-- and subscribe to it.
+cesSnsTopicArn :: Lens' CreateEventSubscription Text
+cesSnsTopicArn = lens _cesSnsTopicArn (\s a -> s { _cesSnsTopicArn = a })
+
+-- | The list of identifiers of the event sources for which events will be
+-- returned. If not specified, then all sources are included in the
+-- response. An identifier must begin with a letter and must contain only
+-- ASCII letters, digits, and hyphens; it cannot end with a hyphen or
+-- contain two consecutive hyphens. Constraints: If SourceIds are supplied,
+-- SourceType must also be provided. If the source type is a DB instance,
+-- then a DBInstanceIdentifier must be supplied. If the source type is a DB
+-- security group, a DBSecurityGroupName must be supplied. If the source
+-- type is a DB parameter group, a DBParameterGroupName must be supplied. If
+-- the source type is a DB snapshot, a DBSnapshotIdentifier must be
+-- supplied.
+cesSourceIds :: Lens' CreateEventSubscription [Text]
+cesSourceIds = lens _cesSourceIds (\s a -> s { _cesSourceIds = a }) . _List
+
+-- | The type of source that will be generating the events. For example, if
+-- you want to be notified of events generated by a DB instance, you would
+-- set this parameter to db-instance. if this value is not specified, all
+-- events are returned. Valid values: db-instance | db-parameter-group |
+-- db-security-group | db-snapshot.
+cesSourceType :: Lens' CreateEventSubscription (Maybe Text)
+cesSourceType = lens _cesSourceType (\s a -> s { _cesSourceType = a })
+
+-- | The name of the subscription. Constraints: The name must be less than 255
+-- characters.
+cesSubscriptionName :: Lens' CreateEventSubscription Text
+cesSubscriptionName =
+    lens _cesSubscriptionName (\s a -> s { _cesSubscriptionName = a })
+
+cesTags :: Lens' CreateEventSubscription [Tag]
+cesTags = lens _cesTags (\s a -> s { _cesTags = a }) . _List
+
+newtype CreateEventSubscriptionResponse = CreateEventSubscriptionResponse
+    { _cesrEventSubscription :: Maybe EventSubscription
+    } deriving (Eq, Show)
+
+-- | 'CreateEventSubscriptionResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cesrEventSubscription' @::@ 'Maybe' 'EventSubscription'
+--
+createEventSubscriptionResponse :: CreateEventSubscriptionResponse
+createEventSubscriptionResponse = CreateEventSubscriptionResponse
+    { _cesrEventSubscription = Nothing
+    }
+
+cesrEventSubscription :: Lens' CreateEventSubscriptionResponse (Maybe EventSubscription)
+cesrEventSubscription =
+    lens _cesrEventSubscription (\s a -> s { _cesrEventSubscription = a })
+
+instance ToPath CreateEventSubscription where
+    toPath = const "/"
+
+instance ToQuery CreateEventSubscription where
+    toQuery CreateEventSubscription{..} = mconcat
+        [ "Enabled"          =? _cesEnabled
+        , "EventCategories"  =? _cesEventCategories
+        , "SnsTopicArn"      =? _cesSnsTopicArn
+        , "SourceIds"        =? _cesSourceIds
+        , "SourceType"       =? _cesSourceType
+        , "SubscriptionName" =? _cesSubscriptionName
+        , "Tags"             =? _cesTags
+        ]
+
+instance ToHeaders CreateEventSubscription
+
+instance AWSRequest CreateEventSubscription where
+    type Sv CreateEventSubscription = RDS
+    type Rs CreateEventSubscription = CreateEventSubscriptionResponse
+
+    request  = post "CreateEventSubscription"
+    response = xmlResponse
+
+instance FromXML CreateEventSubscriptionResponse where
+    parseXML = withElement "CreateEventSubscriptionResult" $ \x -> CreateEventSubscriptionResponse
+        <$> x .@? "EventSubscription"
diff --git a/gen/Network/AWS/RDS/CreateOptionGroup.hs b/gen/Network/AWS/RDS/CreateOptionGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/CreateOptionGroup.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.CreateOptionGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Creates a new option group. You can create up to 20 option groups.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_CreateOptionGroup.html>
+module Network.AWS.RDS.CreateOptionGroup
+    (
+    -- * Request
+      CreateOptionGroup
+    -- ** Request constructor
+    , createOptionGroup
+    -- ** Request lenses
+    , cogEngineName
+    , cogMajorEngineVersion
+    , cogOptionGroupDescription
+    , cogOptionGroupName
+    , cogTags
+
+    -- * Response
+    , CreateOptionGroupResponse
+    -- ** Response constructor
+    , createOptionGroupResponse
+    -- ** Response lenses
+    , cogr1OptionGroup
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data CreateOptionGroup = CreateOptionGroup
+    { _cogEngineName             :: Text
+    , _cogMajorEngineVersion     :: Text
+    , _cogOptionGroupDescription :: Text
+    , _cogOptionGroupName        :: Text
+    , _cogTags                   :: List "Tag" Tag
+    } deriving (Eq, Show)
+
+-- | 'CreateOptionGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cogEngineName' @::@ 'Text'
+--
+-- * 'cogMajorEngineVersion' @::@ 'Text'
+--
+-- * 'cogOptionGroupDescription' @::@ 'Text'
+--
+-- * 'cogOptionGroupName' @::@ 'Text'
+--
+-- * 'cogTags' @::@ ['Tag']
+--
+createOptionGroup :: Text -- ^ 'cogOptionGroupName'
+                  -> Text -- ^ 'cogEngineName'
+                  -> Text -- ^ 'cogMajorEngineVersion'
+                  -> Text -- ^ 'cogOptionGroupDescription'
+                  -> CreateOptionGroup
+createOptionGroup p1 p2 p3 p4 = CreateOptionGroup
+    { _cogOptionGroupName        = p1
+    , _cogEngineName             = p2
+    , _cogMajorEngineVersion     = p3
+    , _cogOptionGroupDescription = p4
+    , _cogTags                   = mempty
+    }
+
+-- | Specifies the name of the engine that this option group should be
+-- associated with.
+cogEngineName :: Lens' CreateOptionGroup Text
+cogEngineName = lens _cogEngineName (\s a -> s { _cogEngineName = a })
+
+-- | Specifies the major version of the engine that this option group should
+-- be associated with.
+cogMajorEngineVersion :: Lens' CreateOptionGroup Text
+cogMajorEngineVersion =
+    lens _cogMajorEngineVersion (\s a -> s { _cogMajorEngineVersion = a })
+
+-- | The description of the option group.
+cogOptionGroupDescription :: Lens' CreateOptionGroup Text
+cogOptionGroupDescription =
+    lens _cogOptionGroupDescription
+        (\s a -> s { _cogOptionGroupDescription = a })
+
+-- | Specifies the name of the option group to be created. Constraints: Must
+-- be 1 to 255 alphanumeric characters or hyphens First character must be a
+-- letter Cannot end with a hyphen or contain two consecutive hyphens
+-- Example: myoptiongroup.
+cogOptionGroupName :: Lens' CreateOptionGroup Text
+cogOptionGroupName =
+    lens _cogOptionGroupName (\s a -> s { _cogOptionGroupName = a })
+
+cogTags :: Lens' CreateOptionGroup [Tag]
+cogTags = lens _cogTags (\s a -> s { _cogTags = a }) . _List
+
+newtype CreateOptionGroupResponse = CreateOptionGroupResponse
+    { _cogr1OptionGroup :: Maybe OptionGroup
+    } deriving (Eq, Show)
+
+-- | 'CreateOptionGroupResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cogr1OptionGroup' @::@ 'Maybe' 'OptionGroup'
+--
+createOptionGroupResponse :: CreateOptionGroupResponse
+createOptionGroupResponse = CreateOptionGroupResponse
+    { _cogr1OptionGroup = Nothing
+    }
+
+cogr1OptionGroup :: Lens' CreateOptionGroupResponse (Maybe OptionGroup)
+cogr1OptionGroup = lens _cogr1OptionGroup (\s a -> s { _cogr1OptionGroup = a })
+
+instance ToPath CreateOptionGroup where
+    toPath = const "/"
+
+instance ToQuery CreateOptionGroup where
+    toQuery CreateOptionGroup{..} = mconcat
+        [ "EngineName"             =? _cogEngineName
+        , "MajorEngineVersion"     =? _cogMajorEngineVersion
+        , "OptionGroupDescription" =? _cogOptionGroupDescription
+        , "OptionGroupName"        =? _cogOptionGroupName
+        , "Tags"                   =? _cogTags
+        ]
+
+instance ToHeaders CreateOptionGroup
+
+instance AWSRequest CreateOptionGroup where
+    type Sv CreateOptionGroup = RDS
+    type Rs CreateOptionGroup = CreateOptionGroupResponse
+
+    request  = post "CreateOptionGroup"
+    response = xmlResponse
+
+instance FromXML CreateOptionGroupResponse where
+    parseXML = withElement "CreateOptionGroupResult" $ \x -> CreateOptionGroupResponse
+        <$> x .@? "OptionGroup"
diff --git a/gen/Network/AWS/RDS/DeleteDBInstance.hs b/gen/Network/AWS/RDS/DeleteDBInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DeleteDBInstance.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DeleteDBInstance
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | The DeleteDBInstance action deletes a previously provisioned DB instance. A
+-- successful response from the web service indicates the request was received
+-- correctly. When you delete a DB instance, all automated backups for that
+-- instance are deleted and cannot be recovered. Manual DB snapshots of the DB
+-- instance to be deleted are not deleted. If a final DB snapshot is requested
+-- the status of the RDS instance will be "deleting" until the DB snapshot is
+-- created. The API action DescribeDBInstance is used to monitor the status of
+-- this operation. The action cannot be canceled or reverted once submitted.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBInstance.html>
+module Network.AWS.RDS.DeleteDBInstance
+    (
+    -- * Request
+      DeleteDBInstance
+    -- ** Request constructor
+    , deleteDBInstance
+    -- ** Request lenses
+    , ddbiDBInstanceIdentifier
+    , ddbiFinalDBSnapshotIdentifier
+    , ddbiSkipFinalSnapshot
+
+    -- * Response
+    , DeleteDBInstanceResponse
+    -- ** Response constructor
+    , deleteDBInstanceResponse
+    -- ** Response lenses
+    , ddbirDBInstance
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DeleteDBInstance = DeleteDBInstance
+    { _ddbiDBInstanceIdentifier      :: Text
+    , _ddbiFinalDBSnapshotIdentifier :: Maybe Text
+    , _ddbiSkipFinalSnapshot         :: Maybe Bool
+    } deriving (Eq, Ord, Show)
+
+-- | 'DeleteDBInstance' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbiDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'ddbiFinalDBSnapshotIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbiSkipFinalSnapshot' @::@ 'Maybe' 'Bool'
+--
+deleteDBInstance :: Text -- ^ 'ddbiDBInstanceIdentifier'
+                 -> DeleteDBInstance
+deleteDBInstance p1 = DeleteDBInstance
+    { _ddbiDBInstanceIdentifier      = p1
+    , _ddbiSkipFinalSnapshot         = Nothing
+    , _ddbiFinalDBSnapshotIdentifier = Nothing
+    }
+
+-- | The DB instance identifier for the DB instance to be deleted. This
+-- parameter isn't case sensitive. 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.
+ddbiDBInstanceIdentifier :: Lens' DeleteDBInstance Text
+ddbiDBInstanceIdentifier =
+    lens _ddbiDBInstanceIdentifier
+        (\s a -> s { _ddbiDBInstanceIdentifier = a })
+
+-- | The DBSnapshotIdentifier of the new DBSnapshot created when
+-- SkipFinalSnapshot is set to false. Constraints: Must be 1 to 255
+-- alphanumeric characters First character must be a letter Cannot end with
+-- a hyphen or contain two consecutive hyphens Cannot be specified when
+-- deleting a read replica.
+ddbiFinalDBSnapshotIdentifier :: Lens' DeleteDBInstance (Maybe Text)
+ddbiFinalDBSnapshotIdentifier =
+    lens _ddbiFinalDBSnapshotIdentifier
+        (\s a -> s { _ddbiFinalDBSnapshotIdentifier = a })
+
+-- | Determines whether a final DB snapshot is created before the DB instance
+-- is deleted. If true is specified, no DBSnapshot is created. If false is
+-- specified, a DB snapshot is created before the DB instance is deleted.
+-- Specify true when deleting a read replica. Default: false.
+ddbiSkipFinalSnapshot :: Lens' DeleteDBInstance (Maybe Bool)
+ddbiSkipFinalSnapshot =
+    lens _ddbiSkipFinalSnapshot (\s a -> s { _ddbiSkipFinalSnapshot = a })
+
+newtype DeleteDBInstanceResponse = DeleteDBInstanceResponse
+    { _ddbirDBInstance :: Maybe DBInstance
+    } deriving (Eq, Show)
+
+-- | 'DeleteDBInstanceResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbirDBInstance' @::@ 'Maybe' 'DBInstance'
+--
+deleteDBInstanceResponse :: DeleteDBInstanceResponse
+deleteDBInstanceResponse = DeleteDBInstanceResponse
+    { _ddbirDBInstance = Nothing
+    }
+
+ddbirDBInstance :: Lens' DeleteDBInstanceResponse (Maybe DBInstance)
+ddbirDBInstance = lens _ddbirDBInstance (\s a -> s { _ddbirDBInstance = a })
+
+instance ToPath DeleteDBInstance where
+    toPath = const "/"
+
+instance ToQuery DeleteDBInstance where
+    toQuery DeleteDBInstance{..} = mconcat
+        [ "DBInstanceIdentifier"      =? _ddbiDBInstanceIdentifier
+        , "FinalDBSnapshotIdentifier" =? _ddbiFinalDBSnapshotIdentifier
+        , "SkipFinalSnapshot"         =? _ddbiSkipFinalSnapshot
+        ]
+
+instance ToHeaders DeleteDBInstance
+
+instance AWSRequest DeleteDBInstance where
+    type Sv DeleteDBInstance = RDS
+    type Rs DeleteDBInstance = DeleteDBInstanceResponse
+
+    request  = post "DeleteDBInstance"
+    response = xmlResponse
+
+instance FromXML DeleteDBInstanceResponse where
+    parseXML = withElement "DeleteDBInstanceResult" $ \x -> DeleteDBInstanceResponse
+        <$> x .@? "DBInstance"
diff --git a/gen/Network/AWS/RDS/DeleteDBParameterGroup.hs b/gen/Network/AWS/RDS/DeleteDBParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DeleteDBParameterGroup.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DeleteDBParameterGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Deletes a specified DBParameterGroup. The DBParameterGroup to be deleted
+-- cannot be associated with any DB instances.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBParameterGroup.html>
+module Network.AWS.RDS.DeleteDBParameterGroup
+    (
+    -- * Request
+      DeleteDBParameterGroup
+    -- ** Request constructor
+    , deleteDBParameterGroup
+    -- ** Request lenses
+    , ddbpg1DBParameterGroupName
+
+    -- * Response
+    , DeleteDBParameterGroupResponse
+    -- ** Response constructor
+    , deleteDBParameterGroupResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+newtype DeleteDBParameterGroup = DeleteDBParameterGroup
+    { _ddbpg1DBParameterGroupName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteDBParameterGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbpg1DBParameterGroupName' @::@ 'Text'
+--
+deleteDBParameterGroup :: Text -- ^ 'ddbpg1DBParameterGroupName'
+                       -> DeleteDBParameterGroup
+deleteDBParameterGroup p1 = DeleteDBParameterGroup
+    { _ddbpg1DBParameterGroupName = p1
+    }
+
+-- | The name of the DB parameter group. Constraints: Must be the name of an
+-- existing DB parameter group You cannot delete a default DB parameter
+-- group Cannot be associated with any DB instances.
+ddbpg1DBParameterGroupName :: Lens' DeleteDBParameterGroup Text
+ddbpg1DBParameterGroupName =
+    lens _ddbpg1DBParameterGroupName
+        (\s a -> s { _ddbpg1DBParameterGroupName = a })
+
+data DeleteDBParameterGroupResponse = DeleteDBParameterGroupResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'DeleteDBParameterGroupResponse' constructor.
+deleteDBParameterGroupResponse :: DeleteDBParameterGroupResponse
+deleteDBParameterGroupResponse = DeleteDBParameterGroupResponse
+
+instance ToPath DeleteDBParameterGroup where
+    toPath = const "/"
+
+instance ToQuery DeleteDBParameterGroup where
+    toQuery DeleteDBParameterGroup{..} = mconcat
+        [ "DBParameterGroupName" =? _ddbpg1DBParameterGroupName
+        ]
+
+instance ToHeaders DeleteDBParameterGroup
+
+instance AWSRequest DeleteDBParameterGroup where
+    type Sv DeleteDBParameterGroup = RDS
+    type Rs DeleteDBParameterGroup = DeleteDBParameterGroupResponse
+
+    request  = post "DeleteDBParameterGroup"
+    response = nullResponse DeleteDBParameterGroupResponse
diff --git a/gen/Network/AWS/RDS/DeleteDBSecurityGroup.hs b/gen/Network/AWS/RDS/DeleteDBSecurityGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DeleteDBSecurityGroup.hs
@@ -0,0 +1,93 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DeleteDBSecurityGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Deletes a DB security group.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBSecurityGroup.html>
+module Network.AWS.RDS.DeleteDBSecurityGroup
+    (
+    -- * Request
+      DeleteDBSecurityGroup
+    -- ** Request constructor
+    , deleteDBSecurityGroup
+    -- ** Request lenses
+    , ddbsgDBSecurityGroupName
+
+    -- * Response
+    , DeleteDBSecurityGroupResponse
+    -- ** Response constructor
+    , deleteDBSecurityGroupResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+newtype DeleteDBSecurityGroup = DeleteDBSecurityGroup
+    { _ddbsgDBSecurityGroupName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteDBSecurityGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbsgDBSecurityGroupName' @::@ 'Text'
+--
+deleteDBSecurityGroup :: Text -- ^ 'ddbsgDBSecurityGroupName'
+                      -> DeleteDBSecurityGroup
+deleteDBSecurityGroup p1 = DeleteDBSecurityGroup
+    { _ddbsgDBSecurityGroupName = p1
+    }
+
+-- | The name of the DB security group to delete. Constraints: Must be 1 to
+-- 255 alphanumeric characters First character must be a letter Cannot end
+-- with a hyphen or contain two consecutive hyphens Must not be "Default"
+-- May not contain spaces.
+ddbsgDBSecurityGroupName :: Lens' DeleteDBSecurityGroup Text
+ddbsgDBSecurityGroupName =
+    lens _ddbsgDBSecurityGroupName
+        (\s a -> s { _ddbsgDBSecurityGroupName = a })
+
+data DeleteDBSecurityGroupResponse = DeleteDBSecurityGroupResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'DeleteDBSecurityGroupResponse' constructor.
+deleteDBSecurityGroupResponse :: DeleteDBSecurityGroupResponse
+deleteDBSecurityGroupResponse = DeleteDBSecurityGroupResponse
+
+instance ToPath DeleteDBSecurityGroup where
+    toPath = const "/"
+
+instance ToQuery DeleteDBSecurityGroup where
+    toQuery DeleteDBSecurityGroup{..} = mconcat
+        [ "DBSecurityGroupName" =? _ddbsgDBSecurityGroupName
+        ]
+
+instance ToHeaders DeleteDBSecurityGroup
+
+instance AWSRequest DeleteDBSecurityGroup where
+    type Sv DeleteDBSecurityGroup = RDS
+    type Rs DeleteDBSecurityGroup = DeleteDBSecurityGroupResponse
+
+    request  = post "DeleteDBSecurityGroup"
+    response = nullResponse DeleteDBSecurityGroupResponse
diff --git a/gen/Network/AWS/RDS/DeleteDBSnapshot.hs b/gen/Network/AWS/RDS/DeleteDBSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DeleteDBSnapshot.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DeleteDBSnapshot
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Deletes a DBSnapshot. If the snapshot is being copied, the copy operation
+-- is terminated.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBSnapshot.html>
+module Network.AWS.RDS.DeleteDBSnapshot
+    (
+    -- * Request
+      DeleteDBSnapshot
+    -- ** Request constructor
+    , deleteDBSnapshot
+    -- ** Request lenses
+    , ddbs1DBSnapshotIdentifier
+
+    -- * Response
+    , DeleteDBSnapshotResponse
+    -- ** Response constructor
+    , deleteDBSnapshotResponse
+    -- ** Response lenses
+    , ddbsrDBSnapshot
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+newtype DeleteDBSnapshot = DeleteDBSnapshot
+    { _ddbs1DBSnapshotIdentifier :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteDBSnapshot' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbs1DBSnapshotIdentifier' @::@ 'Text'
+--
+deleteDBSnapshot :: Text -- ^ 'ddbs1DBSnapshotIdentifier'
+                 -> DeleteDBSnapshot
+deleteDBSnapshot p1 = DeleteDBSnapshot
+    { _ddbs1DBSnapshotIdentifier = p1
+    }
+
+-- | The DBSnapshot identifier. Constraints: Must be the name of an existing
+-- DB snapshot in the available state.
+ddbs1DBSnapshotIdentifier :: Lens' DeleteDBSnapshot Text
+ddbs1DBSnapshotIdentifier =
+    lens _ddbs1DBSnapshotIdentifier
+        (\s a -> s { _ddbs1DBSnapshotIdentifier = a })
+
+newtype DeleteDBSnapshotResponse = DeleteDBSnapshotResponse
+    { _ddbsrDBSnapshot :: Maybe DBSnapshot
+    } deriving (Eq, Show)
+
+-- | 'DeleteDBSnapshotResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbsrDBSnapshot' @::@ 'Maybe' 'DBSnapshot'
+--
+deleteDBSnapshotResponse :: DeleteDBSnapshotResponse
+deleteDBSnapshotResponse = DeleteDBSnapshotResponse
+    { _ddbsrDBSnapshot = Nothing
+    }
+
+ddbsrDBSnapshot :: Lens' DeleteDBSnapshotResponse (Maybe DBSnapshot)
+ddbsrDBSnapshot = lens _ddbsrDBSnapshot (\s a -> s { _ddbsrDBSnapshot = a })
+
+instance ToPath DeleteDBSnapshot where
+    toPath = const "/"
+
+instance ToQuery DeleteDBSnapshot where
+    toQuery DeleteDBSnapshot{..} = mconcat
+        [ "DBSnapshotIdentifier" =? _ddbs1DBSnapshotIdentifier
+        ]
+
+instance ToHeaders DeleteDBSnapshot
+
+instance AWSRequest DeleteDBSnapshot where
+    type Sv DeleteDBSnapshot = RDS
+    type Rs DeleteDBSnapshot = DeleteDBSnapshotResponse
+
+    request  = post "DeleteDBSnapshot"
+    response = xmlResponse
+
+instance FromXML DeleteDBSnapshotResponse where
+    parseXML = withElement "DeleteDBSnapshotResult" $ \x -> DeleteDBSnapshotResponse
+        <$> x .@? "DBSnapshot"
diff --git a/gen/Network/AWS/RDS/DeleteDBSubnetGroup.hs b/gen/Network/AWS/RDS/DeleteDBSubnetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DeleteDBSubnetGroup.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DeleteDBSubnetGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Deletes a DB subnet group.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteDBSubnetGroup.html>
+module Network.AWS.RDS.DeleteDBSubnetGroup
+    (
+    -- * Request
+      DeleteDBSubnetGroup
+    -- ** Request constructor
+    , deleteDBSubnetGroup
+    -- ** Request lenses
+    , ddbsg1DBSubnetGroupName
+
+    -- * Response
+    , DeleteDBSubnetGroupResponse
+    -- ** Response constructor
+    , deleteDBSubnetGroupResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+newtype DeleteDBSubnetGroup = DeleteDBSubnetGroup
+    { _ddbsg1DBSubnetGroupName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteDBSubnetGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbsg1DBSubnetGroupName' @::@ 'Text'
+--
+deleteDBSubnetGroup :: Text -- ^ 'ddbsg1DBSubnetGroupName'
+                    -> DeleteDBSubnetGroup
+deleteDBSubnetGroup p1 = DeleteDBSubnetGroup
+    { _ddbsg1DBSubnetGroupName = p1
+    }
+
+-- | The name of the database subnet group to delete. Constraints: Must be 1
+-- to 255 alphanumeric characters First character must be a letter Cannot
+-- end with a hyphen or contain two consecutive hyphens.
+ddbsg1DBSubnetGroupName :: Lens' DeleteDBSubnetGroup Text
+ddbsg1DBSubnetGroupName =
+    lens _ddbsg1DBSubnetGroupName (\s a -> s { _ddbsg1DBSubnetGroupName = a })
+
+data DeleteDBSubnetGroupResponse = DeleteDBSubnetGroupResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'DeleteDBSubnetGroupResponse' constructor.
+deleteDBSubnetGroupResponse :: DeleteDBSubnetGroupResponse
+deleteDBSubnetGroupResponse = DeleteDBSubnetGroupResponse
+
+instance ToPath DeleteDBSubnetGroup where
+    toPath = const "/"
+
+instance ToQuery DeleteDBSubnetGroup where
+    toQuery DeleteDBSubnetGroup{..} = mconcat
+        [ "DBSubnetGroupName" =? _ddbsg1DBSubnetGroupName
+        ]
+
+instance ToHeaders DeleteDBSubnetGroup
+
+instance AWSRequest DeleteDBSubnetGroup where
+    type Sv DeleteDBSubnetGroup = RDS
+    type Rs DeleteDBSubnetGroup = DeleteDBSubnetGroupResponse
+
+    request  = post "DeleteDBSubnetGroup"
+    response = nullResponse DeleteDBSubnetGroupResponse
diff --git a/gen/Network/AWS/RDS/DeleteEventSubscription.hs b/gen/Network/AWS/RDS/DeleteEventSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DeleteEventSubscription.hs
@@ -0,0 +1,107 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DeleteEventSubscription
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Deletes an RDS event notification subscription.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteEventSubscription.html>
+module Network.AWS.RDS.DeleteEventSubscription
+    (
+    -- * Request
+      DeleteEventSubscription
+    -- ** Request constructor
+    , deleteEventSubscription
+    -- ** Request lenses
+    , desSubscriptionName
+
+    -- * Response
+    , DeleteEventSubscriptionResponse
+    -- ** Response constructor
+    , deleteEventSubscriptionResponse
+    -- ** Response lenses
+    , desrEventSubscription
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+newtype DeleteEventSubscription = DeleteEventSubscription
+    { _desSubscriptionName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteEventSubscription' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'desSubscriptionName' @::@ 'Text'
+--
+deleteEventSubscription :: Text -- ^ 'desSubscriptionName'
+                        -> DeleteEventSubscription
+deleteEventSubscription p1 = DeleteEventSubscription
+    { _desSubscriptionName = p1
+    }
+
+-- | The name of the RDS event notification subscription you want to delete.
+desSubscriptionName :: Lens' DeleteEventSubscription Text
+desSubscriptionName =
+    lens _desSubscriptionName (\s a -> s { _desSubscriptionName = a })
+
+newtype DeleteEventSubscriptionResponse = DeleteEventSubscriptionResponse
+    { _desrEventSubscription :: Maybe EventSubscription
+    } deriving (Eq, Show)
+
+-- | 'DeleteEventSubscriptionResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'desrEventSubscription' @::@ 'Maybe' 'EventSubscription'
+--
+deleteEventSubscriptionResponse :: DeleteEventSubscriptionResponse
+deleteEventSubscriptionResponse = DeleteEventSubscriptionResponse
+    { _desrEventSubscription = Nothing
+    }
+
+desrEventSubscription :: Lens' DeleteEventSubscriptionResponse (Maybe EventSubscription)
+desrEventSubscription =
+    lens _desrEventSubscription (\s a -> s { _desrEventSubscription = a })
+
+instance ToPath DeleteEventSubscription where
+    toPath = const "/"
+
+instance ToQuery DeleteEventSubscription where
+    toQuery DeleteEventSubscription{..} = mconcat
+        [ "SubscriptionName" =? _desSubscriptionName
+        ]
+
+instance ToHeaders DeleteEventSubscription
+
+instance AWSRequest DeleteEventSubscription where
+    type Sv DeleteEventSubscription = RDS
+    type Rs DeleteEventSubscription = DeleteEventSubscriptionResponse
+
+    request  = post "DeleteEventSubscription"
+    response = xmlResponse
+
+instance FromXML DeleteEventSubscriptionResponse where
+    parseXML = withElement "DeleteEventSubscriptionResult" $ \x -> DeleteEventSubscriptionResponse
+        <$> x .@? "EventSubscription"
diff --git a/gen/Network/AWS/RDS/DeleteOptionGroup.hs b/gen/Network/AWS/RDS/DeleteOptionGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DeleteOptionGroup.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DeleteOptionGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Deletes an existing option group.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DeleteOptionGroup.html>
+module Network.AWS.RDS.DeleteOptionGroup
+    (
+    -- * Request
+      DeleteOptionGroup
+    -- ** Request constructor
+    , deleteOptionGroup
+    -- ** Request lenses
+    , dog1OptionGroupName
+
+    -- * Response
+    , DeleteOptionGroupResponse
+    -- ** Response constructor
+    , deleteOptionGroupResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+newtype DeleteOptionGroup = DeleteOptionGroup
+    { _dog1OptionGroupName :: Text
+    } deriving (Eq, Ord, Show, Monoid, IsString)
+
+-- | 'DeleteOptionGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dog1OptionGroupName' @::@ 'Text'
+--
+deleteOptionGroup :: Text -- ^ 'dog1OptionGroupName'
+                  -> DeleteOptionGroup
+deleteOptionGroup p1 = DeleteOptionGroup
+    { _dog1OptionGroupName = p1
+    }
+
+-- | The name of the option group to be deleted.
+dog1OptionGroupName :: Lens' DeleteOptionGroup Text
+dog1OptionGroupName =
+    lens _dog1OptionGroupName (\s a -> s { _dog1OptionGroupName = a })
+
+data DeleteOptionGroupResponse = DeleteOptionGroupResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'DeleteOptionGroupResponse' constructor.
+deleteOptionGroupResponse :: DeleteOptionGroupResponse
+deleteOptionGroupResponse = DeleteOptionGroupResponse
+
+instance ToPath DeleteOptionGroup where
+    toPath = const "/"
+
+instance ToQuery DeleteOptionGroup where
+    toQuery DeleteOptionGroup{..} = mconcat
+        [ "OptionGroupName" =? _dog1OptionGroupName
+        ]
+
+instance ToHeaders DeleteOptionGroup
+
+instance AWSRequest DeleteOptionGroup where
+    type Sv DeleteOptionGroup = RDS
+    type Rs DeleteOptionGroup = DeleteOptionGroupResponse
+
+    request  = post "DeleteOptionGroup"
+    response = nullResponse DeleteOptionGroupResponse
diff --git a/gen/Network/AWS/RDS/DescribeDBEngineVersions.hs b/gen/Network/AWS/RDS/DescribeDBEngineVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeDBEngineVersions.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeDBEngineVersions
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns a list of the available DB engines.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBEngineVersions.html>
+module Network.AWS.RDS.DescribeDBEngineVersions
+    (
+    -- * Request
+      DescribeDBEngineVersions
+    -- ** Request constructor
+    , describeDBEngineVersions
+    -- ** Request lenses
+    , ddbevDBParameterGroupFamily
+    , ddbevDefaultOnly
+    , ddbevEngine
+    , ddbevEngineVersion
+    , ddbevFilters
+    , ddbevListSupportedCharacterSets
+    , ddbevMarker
+    , ddbevMaxRecords
+
+    -- * Response
+    , DescribeDBEngineVersionsResponse
+    -- ** Response constructor
+    , describeDBEngineVersionsResponse
+    -- ** Response lenses
+    , ddbevrDBEngineVersions
+    , ddbevrMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeDBEngineVersions = DescribeDBEngineVersions
+    { _ddbevDBParameterGroupFamily     :: Maybe Text
+    , _ddbevDefaultOnly                :: Maybe Bool
+    , _ddbevEngine                     :: Maybe Text
+    , _ddbevEngineVersion              :: Maybe Text
+    , _ddbevFilters                    :: List "Filter" Filter
+    , _ddbevListSupportedCharacterSets :: Maybe Bool
+    , _ddbevMarker                     :: Maybe Text
+    , _ddbevMaxRecords                 :: Maybe Int
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBEngineVersions' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbevDBParameterGroupFamily' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbevDefaultOnly' @::@ 'Maybe' 'Bool'
+--
+-- * 'ddbevEngine' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbevEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbevFilters' @::@ ['Filter']
+--
+-- * 'ddbevListSupportedCharacterSets' @::@ 'Maybe' 'Bool'
+--
+-- * 'ddbevMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbevMaxRecords' @::@ 'Maybe' 'Int'
+--
+describeDBEngineVersions :: DescribeDBEngineVersions
+describeDBEngineVersions = DescribeDBEngineVersions
+    { _ddbevEngine                     = Nothing
+    , _ddbevEngineVersion              = Nothing
+    , _ddbevDBParameterGroupFamily     = Nothing
+    , _ddbevFilters                    = mempty
+    , _ddbevMaxRecords                 = Nothing
+    , _ddbevMarker                     = Nothing
+    , _ddbevDefaultOnly                = Nothing
+    , _ddbevListSupportedCharacterSets = Nothing
+    }
+
+-- | The name of a specific DB parameter group family to return details for.
+-- Constraints: Must be 1 to 255 alphanumeric characters First character
+-- must be a letter Cannot end with a hyphen or contain two consecutive
+-- hyphens.
+ddbevDBParameterGroupFamily :: Lens' DescribeDBEngineVersions (Maybe Text)
+ddbevDBParameterGroupFamily =
+    lens _ddbevDBParameterGroupFamily
+        (\s a -> s { _ddbevDBParameterGroupFamily = a })
+
+-- | Indicates that only the default version of the specified engine or engine
+-- and major version combination is returned.
+ddbevDefaultOnly :: Lens' DescribeDBEngineVersions (Maybe Bool)
+ddbevDefaultOnly = lens _ddbevDefaultOnly (\s a -> s { _ddbevDefaultOnly = a })
+
+-- | The database engine to return.
+ddbevEngine :: Lens' DescribeDBEngineVersions (Maybe Text)
+ddbevEngine = lens _ddbevEngine (\s a -> s { _ddbevEngine = a })
+
+-- | The database engine version to return. Example: 5.1.49.
+ddbevEngineVersion :: Lens' DescribeDBEngineVersions (Maybe Text)
+ddbevEngineVersion =
+    lens _ddbevEngineVersion (\s a -> s { _ddbevEngineVersion = a })
+
+-- | Not currently supported.
+ddbevFilters :: Lens' DescribeDBEngineVersions [Filter]
+ddbevFilters = lens _ddbevFilters (\s a -> s { _ddbevFilters = a }) . _List
+
+-- | If this parameter is specified, and if the requested engine supports the
+-- CharacterSetName parameter for CreateDBInstance, the response includes a
+-- list of supported character sets for each engine version.
+ddbevListSupportedCharacterSets :: Lens' DescribeDBEngineVersions (Maybe Bool)
+ddbevListSupportedCharacterSets =
+    lens _ddbevListSupportedCharacterSets
+        (\s a -> s { _ddbevListSupportedCharacterSets = 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.
+ddbevMarker :: Lens' DescribeDBEngineVersions (Maybe Text)
+ddbevMarker = lens _ddbevMarker (\s a -> s { _ddbevMarker = a })
+
+-- | The maximum number of records to include in the response. If more than
+-- the MaxRecords value is available, a pagination token called a marker is
+-- included in the response so that the following results can be retrieved.
+-- Default: 100 Constraints: minimum 20, maximum 100.
+ddbevMaxRecords :: Lens' DescribeDBEngineVersions (Maybe Int)
+ddbevMaxRecords = lens _ddbevMaxRecords (\s a -> s { _ddbevMaxRecords = a })
+
+data DescribeDBEngineVersionsResponse = DescribeDBEngineVersionsResponse
+    { _ddbevrDBEngineVersions :: List "DBEngineVersion" DBEngineVersion
+    , _ddbevrMarker           :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBEngineVersionsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbevrDBEngineVersions' @::@ ['DBEngineVersion']
+--
+-- * 'ddbevrMarker' @::@ 'Maybe' 'Text'
+--
+describeDBEngineVersionsResponse :: DescribeDBEngineVersionsResponse
+describeDBEngineVersionsResponse = DescribeDBEngineVersionsResponse
+    { _ddbevrMarker           = Nothing
+    , _ddbevrDBEngineVersions = mempty
+    }
+
+-- | A list of DBEngineVersion elements.
+ddbevrDBEngineVersions :: Lens' DescribeDBEngineVersionsResponse [DBEngineVersion]
+ddbevrDBEngineVersions =
+    lens _ddbevrDBEngineVersions (\s a -> s { _ddbevrDBEngineVersions = a })
+        . _List
+
+-- | 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.
+ddbevrMarker :: Lens' DescribeDBEngineVersionsResponse (Maybe Text)
+ddbevrMarker = lens _ddbevrMarker (\s a -> s { _ddbevrMarker = a })
+
+instance ToPath DescribeDBEngineVersions where
+    toPath = const "/"
+
+instance ToQuery DescribeDBEngineVersions where
+    toQuery DescribeDBEngineVersions{..} = mconcat
+        [ "DBParameterGroupFamily"     =? _ddbevDBParameterGroupFamily
+        , "DefaultOnly"                =? _ddbevDefaultOnly
+        , "Engine"                     =? _ddbevEngine
+        , "EngineVersion"              =? _ddbevEngineVersion
+        , "Filters"                    =? _ddbevFilters
+        , "ListSupportedCharacterSets" =? _ddbevListSupportedCharacterSets
+        , "Marker"                     =? _ddbevMarker
+        , "MaxRecords"                 =? _ddbevMaxRecords
+        ]
+
+instance ToHeaders DescribeDBEngineVersions
+
+instance AWSRequest DescribeDBEngineVersions where
+    type Sv DescribeDBEngineVersions = RDS
+    type Rs DescribeDBEngineVersions = DescribeDBEngineVersionsResponse
+
+    request  = post "DescribeDBEngineVersions"
+    response = xmlResponse
+
+instance FromXML DescribeDBEngineVersionsResponse where
+    parseXML = withElement "DescribeDBEngineVersionsResult" $ \x -> DescribeDBEngineVersionsResponse
+        <$> x .@  "DBEngineVersions"
+        <*> x .@? "Marker"
+
+instance AWSPager DescribeDBEngineVersions where
+    page rq rs
+        | stop (rq ^. ddbevMarker) = Nothing
+        | otherwise = (\x -> rq & ddbevMarker ?~ x)
+            <$> (rs ^. ddbevrMarker)
diff --git a/gen/Network/AWS/RDS/DescribeDBInstances.hs b/gen/Network/AWS/RDS/DescribeDBInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeDBInstances.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeDBInstances
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns information about provisioned RDS instances. This API supports
+-- pagination.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html>
+module Network.AWS.RDS.DescribeDBInstances
+    (
+    -- * Request
+      DescribeDBInstances
+    -- ** Request constructor
+    , describeDBInstances
+    -- ** Request lenses
+    , ddbi1DBInstanceIdentifier
+    , ddbi1Filters
+    , ddbi1Marker
+    , ddbi1MaxRecords
+
+    -- * Response
+    , DescribeDBInstancesResponse
+    -- ** Response constructor
+    , describeDBInstancesResponse
+    -- ** Response lenses
+    , ddbirDBInstances
+    , ddbirMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeDBInstances = DescribeDBInstances
+    { _ddbi1DBInstanceIdentifier :: Maybe Text
+    , _ddbi1Filters              :: List "Filter" Filter
+    , _ddbi1Marker               :: Maybe Text
+    , _ddbi1MaxRecords           :: Maybe Int
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBInstances' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbi1DBInstanceIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbi1Filters' @::@ ['Filter']
+--
+-- * 'ddbi1Marker' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbi1MaxRecords' @::@ 'Maybe' 'Int'
+--
+describeDBInstances :: DescribeDBInstances
+describeDBInstances = DescribeDBInstances
+    { _ddbi1DBInstanceIdentifier = Nothing
+    , _ddbi1Filters              = mempty
+    , _ddbi1MaxRecords           = Nothing
+    , _ddbi1Marker               = Nothing
+    }
+
+-- | The user-supplied instance identifier. If this parameter is specified,
+-- information from only the specific DB instance is returned. This
+-- parameter isn't case sensitive. 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.
+ddbi1DBInstanceIdentifier :: Lens' DescribeDBInstances (Maybe Text)
+ddbi1DBInstanceIdentifier =
+    lens _ddbi1DBInstanceIdentifier
+        (\s a -> s { _ddbi1DBInstanceIdentifier = a })
+
+-- | This parameter is not currently supported.
+ddbi1Filters :: Lens' DescribeDBInstances [Filter]
+ddbi1Filters = lens _ddbi1Filters (\s a -> s { _ddbi1Filters = a }) . _List
+
+-- | An optional pagination token provided by a previous DescribeDBInstances
+-- request. If this parameter is specified, the response includes only
+-- records beyond the marker, up to the value specified by MaxRecords .
+ddbi1Marker :: Lens' DescribeDBInstances (Maybe Text)
+ddbi1Marker = lens _ddbi1Marker (\s a -> s { _ddbi1Marker = 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 may be
+-- retrieved. Default: 100 Constraints: minimum 20, maximum 100.
+ddbi1MaxRecords :: Lens' DescribeDBInstances (Maybe Int)
+ddbi1MaxRecords = lens _ddbi1MaxRecords (\s a -> s { _ddbi1MaxRecords = a })
+
+data DescribeDBInstancesResponse = DescribeDBInstancesResponse
+    { _ddbirDBInstances :: List "DBInstance" DBInstance
+    , _ddbirMarker      :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBInstancesResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbirDBInstances' @::@ ['DBInstance']
+--
+-- * 'ddbirMarker' @::@ 'Maybe' 'Text'
+--
+describeDBInstancesResponse :: DescribeDBInstancesResponse
+describeDBInstancesResponse = DescribeDBInstancesResponse
+    { _ddbirMarker      = Nothing
+    , _ddbirDBInstances = mempty
+    }
+
+-- | A list of DBInstance instances.
+ddbirDBInstances :: Lens' DescribeDBInstancesResponse [DBInstance]
+ddbirDBInstances = lens _ddbirDBInstances (\s a -> s { _ddbirDBInstances = a }) . _List
+
+-- | 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 .
+ddbirMarker :: Lens' DescribeDBInstancesResponse (Maybe Text)
+ddbirMarker = lens _ddbirMarker (\s a -> s { _ddbirMarker = a })
+
+instance ToPath DescribeDBInstances where
+    toPath = const "/"
+
+instance ToQuery DescribeDBInstances where
+    toQuery DescribeDBInstances{..} = mconcat
+        [ "DBInstanceIdentifier" =? _ddbi1DBInstanceIdentifier
+        , "Filters"              =? _ddbi1Filters
+        , "Marker"               =? _ddbi1Marker
+        , "MaxRecords"           =? _ddbi1MaxRecords
+        ]
+
+instance ToHeaders DescribeDBInstances
+
+instance AWSRequest DescribeDBInstances where
+    type Sv DescribeDBInstances = RDS
+    type Rs DescribeDBInstances = DescribeDBInstancesResponse
+
+    request  = post "DescribeDBInstances"
+    response = xmlResponse
+
+instance FromXML DescribeDBInstancesResponse where
+    parseXML = withElement "DescribeDBInstancesResult" $ \x -> DescribeDBInstancesResponse
+        <$> x .@  "DBInstances"
+        <*> x .@? "Marker"
+
+instance AWSPager DescribeDBInstances where
+    page rq rs
+        | stop (rq ^. ddbi1Marker) = Nothing
+        | otherwise = (\x -> rq & ddbi1Marker ?~ x)
+            <$> (rs ^. ddbirMarker)
diff --git a/gen/Network/AWS/RDS/DescribeDBLogFiles.hs b/gen/Network/AWS/RDS/DescribeDBLogFiles.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeDBLogFiles.hs
@@ -0,0 +1,200 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeDBLogFiles
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns a list of DB log files for the DB instance.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBLogFiles.html>
+module Network.AWS.RDS.DescribeDBLogFiles
+    (
+    -- * Request
+      DescribeDBLogFiles
+    -- ** Request constructor
+    , describeDBLogFiles
+    -- ** Request lenses
+    , ddblfDBInstanceIdentifier
+    , ddblfFileLastWritten
+    , ddblfFileSize
+    , ddblfFilenameContains
+    , ddblfFilters
+    , ddblfMarker
+    , ddblfMaxRecords
+
+    -- * Response
+    , DescribeDBLogFilesResponse
+    -- ** Response constructor
+    , describeDBLogFilesResponse
+    -- ** Response lenses
+    , ddblfrDescribeDBLogFiles
+    , ddblfrMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeDBLogFiles = DescribeDBLogFiles
+    { _ddblfDBInstanceIdentifier :: Text
+    , _ddblfFileLastWritten      :: Maybe Integer
+    , _ddblfFileSize             :: Maybe Integer
+    , _ddblfFilenameContains     :: Maybe Text
+    , _ddblfFilters              :: List "Filter" Filter
+    , _ddblfMarker               :: Maybe Text
+    , _ddblfMaxRecords           :: Maybe Int
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBLogFiles' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddblfDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'ddblfFileLastWritten' @::@ 'Maybe' 'Integer'
+--
+-- * 'ddblfFileSize' @::@ 'Maybe' 'Integer'
+--
+-- * 'ddblfFilenameContains' @::@ 'Maybe' 'Text'
+--
+-- * 'ddblfFilters' @::@ ['Filter']
+--
+-- * 'ddblfMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'ddblfMaxRecords' @::@ 'Maybe' 'Int'
+--
+describeDBLogFiles :: Text -- ^ 'ddblfDBInstanceIdentifier'
+                   -> DescribeDBLogFiles
+describeDBLogFiles p1 = DescribeDBLogFiles
+    { _ddblfDBInstanceIdentifier = p1
+    , _ddblfFilenameContains     = Nothing
+    , _ddblfFileLastWritten      = Nothing
+    , _ddblfFileSize             = Nothing
+    , _ddblfFilters              = mempty
+    , _ddblfMaxRecords           = Nothing
+    , _ddblfMarker               = Nothing
+    }
+
+-- | The customer-assigned name of the DB instance that contains the log files
+-- you want to list. 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.
+ddblfDBInstanceIdentifier :: Lens' DescribeDBLogFiles Text
+ddblfDBInstanceIdentifier =
+    lens _ddblfDBInstanceIdentifier
+        (\s a -> s { _ddblfDBInstanceIdentifier = a })
+
+-- | Filters the available log files for files written since the specified
+-- date, in POSIX timestamp format.
+ddblfFileLastWritten :: Lens' DescribeDBLogFiles (Maybe Integer)
+ddblfFileLastWritten =
+    lens _ddblfFileLastWritten (\s a -> s { _ddblfFileLastWritten = a })
+
+-- | Filters the available log files for files larger than the specified size.
+ddblfFileSize :: Lens' DescribeDBLogFiles (Maybe Integer)
+ddblfFileSize = lens _ddblfFileSize (\s a -> s { _ddblfFileSize = a })
+
+-- | Filters the available log files for log file names that contain the
+-- specified string.
+ddblfFilenameContains :: Lens' DescribeDBLogFiles (Maybe Text)
+ddblfFilenameContains =
+    lens _ddblfFilenameContains (\s a -> s { _ddblfFilenameContains = a })
+
+-- | This parameter is not currently supported.
+ddblfFilters :: Lens' DescribeDBLogFiles [Filter]
+ddblfFilters = lens _ddblfFilters (\s a -> s { _ddblfFilters = a }) . _List
+
+-- | The pagination token provided in the previous request. If this parameter
+-- is specified the response includes only records beyond the marker, up to
+-- MaxRecords.
+ddblfMarker :: Lens' DescribeDBLogFiles (Maybe Text)
+ddblfMarker = lens _ddblfMarker (\s a -> s { _ddblfMarker = 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.
+ddblfMaxRecords :: Lens' DescribeDBLogFiles (Maybe Int)
+ddblfMaxRecords = lens _ddblfMaxRecords (\s a -> s { _ddblfMaxRecords = a })
+
+data DescribeDBLogFilesResponse = DescribeDBLogFilesResponse
+    { _ddblfrDescribeDBLogFiles :: List "DescribeDBLogFilesDetails" DescribeDBLogFilesDetails
+    , _ddblfrMarker             :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBLogFilesResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddblfrDescribeDBLogFiles' @::@ ['DescribeDBLogFilesDetails']
+--
+-- * 'ddblfrMarker' @::@ 'Maybe' 'Text'
+--
+describeDBLogFilesResponse :: DescribeDBLogFilesResponse
+describeDBLogFilesResponse = DescribeDBLogFilesResponse
+    { _ddblfrDescribeDBLogFiles = mempty
+    , _ddblfrMarker             = Nothing
+    }
+
+-- | The DB log files returned.
+ddblfrDescribeDBLogFiles :: Lens' DescribeDBLogFilesResponse [DescribeDBLogFilesDetails]
+ddblfrDescribeDBLogFiles =
+    lens _ddblfrDescribeDBLogFiles
+        (\s a -> s { _ddblfrDescribeDBLogFiles = a })
+            . _List
+
+-- | A pagination token that can be used in a subsequent DescribeDBLogFiles
+-- request.
+ddblfrMarker :: Lens' DescribeDBLogFilesResponse (Maybe Text)
+ddblfrMarker = lens _ddblfrMarker (\s a -> s { _ddblfrMarker = a })
+
+instance ToPath DescribeDBLogFiles where
+    toPath = const "/"
+
+instance ToQuery DescribeDBLogFiles where
+    toQuery DescribeDBLogFiles{..} = mconcat
+        [ "DBInstanceIdentifier" =? _ddblfDBInstanceIdentifier
+        , "FileLastWritten"      =? _ddblfFileLastWritten
+        , "FileSize"             =? _ddblfFileSize
+        , "FilenameContains"     =? _ddblfFilenameContains
+        , "Filters"              =? _ddblfFilters
+        , "Marker"               =? _ddblfMarker
+        , "MaxRecords"           =? _ddblfMaxRecords
+        ]
+
+instance ToHeaders DescribeDBLogFiles
+
+instance AWSRequest DescribeDBLogFiles where
+    type Sv DescribeDBLogFiles = RDS
+    type Rs DescribeDBLogFiles = DescribeDBLogFilesResponse
+
+    request  = post "DescribeDBLogFiles"
+    response = xmlResponse
+
+instance FromXML DescribeDBLogFilesResponse where
+    parseXML = withElement "DescribeDBLogFilesResult" $ \x -> DescribeDBLogFilesResponse
+        <$> x .@  "DescribeDBLogFiles"
+        <*> x .@? "Marker"
+
+instance AWSPager DescribeDBLogFiles where
+    page rq rs
+        | stop (rq ^. ddblfMarker) = Nothing
+        | otherwise = (\x -> rq & ddblfMarker ?~ x)
+            <$> (rs ^. ddblfrMarker)
diff --git a/gen/Network/AWS/RDS/DescribeDBParameterGroups.hs b/gen/Network/AWS/RDS/DescribeDBParameterGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeDBParameterGroups.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeDBParameterGroups
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns a list of DBParameterGroup descriptions. If a DBParameterGroupName
+-- is specified, the list will contain only the description of the specified
+-- DB parameter group.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBParameterGroups.html>
+module Network.AWS.RDS.DescribeDBParameterGroups
+    (
+    -- * Request
+      DescribeDBParameterGroups
+    -- ** Request constructor
+    , describeDBParameterGroups
+    -- ** Request lenses
+    , ddbpgDBParameterGroupName
+    , ddbpgFilters
+    , ddbpgMarker
+    , ddbpgMaxRecords
+
+    -- * Response
+    , DescribeDBParameterGroupsResponse
+    -- ** Response constructor
+    , describeDBParameterGroupsResponse
+    -- ** Response lenses
+    , ddbpgrDBParameterGroups
+    , ddbpgrMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeDBParameterGroups = DescribeDBParameterGroups
+    { _ddbpgDBParameterGroupName :: Maybe Text
+    , _ddbpgFilters              :: List "Filter" Filter
+    , _ddbpgMarker               :: Maybe Text
+    , _ddbpgMaxRecords           :: Maybe Int
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBParameterGroups' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbpgDBParameterGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbpgFilters' @::@ ['Filter']
+--
+-- * 'ddbpgMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbpgMaxRecords' @::@ 'Maybe' 'Int'
+--
+describeDBParameterGroups :: DescribeDBParameterGroups
+describeDBParameterGroups = DescribeDBParameterGroups
+    { _ddbpgDBParameterGroupName = Nothing
+    , _ddbpgFilters              = mempty
+    , _ddbpgMaxRecords           = Nothing
+    , _ddbpgMarker               = Nothing
+    }
+
+-- | The name of a specific DB parameter group to return details for.
+-- Constraints: Must be 1 to 255 alphanumeric characters First character
+-- must be a letter Cannot end with a hyphen or contain two consecutive
+-- hyphens.
+ddbpgDBParameterGroupName :: Lens' DescribeDBParameterGroups (Maybe Text)
+ddbpgDBParameterGroupName =
+    lens _ddbpgDBParameterGroupName
+        (\s a -> s { _ddbpgDBParameterGroupName = a })
+
+-- | This parameter is not currently supported.
+ddbpgFilters :: Lens' DescribeDBParameterGroups [Filter]
+ddbpgFilters = lens _ddbpgFilters (\s a -> s { _ddbpgFilters = a }) . _List
+
+-- | An optional pagination token provided by a previous
+-- DescribeDBParameterGroups request. If this parameter is specified, the
+-- response includes only records beyond the marker, up to the value
+-- specified by MaxRecords.
+ddbpgMarker :: Lens' DescribeDBParameterGroups (Maybe Text)
+ddbpgMarker = lens _ddbpgMarker (\s a -> s { _ddbpgMarker = 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 may be
+-- retrieved. Default: 100 Constraints: minimum 20, maximum 100.
+ddbpgMaxRecords :: Lens' DescribeDBParameterGroups (Maybe Int)
+ddbpgMaxRecords = lens _ddbpgMaxRecords (\s a -> s { _ddbpgMaxRecords = a })
+
+data DescribeDBParameterGroupsResponse = DescribeDBParameterGroupsResponse
+    { _ddbpgrDBParameterGroups :: List "DBParameterGroup" DBParameterGroup
+    , _ddbpgrMarker            :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBParameterGroupsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbpgrDBParameterGroups' @::@ ['DBParameterGroup']
+--
+-- * 'ddbpgrMarker' @::@ 'Maybe' 'Text'
+--
+describeDBParameterGroupsResponse :: DescribeDBParameterGroupsResponse
+describeDBParameterGroupsResponse = DescribeDBParameterGroupsResponse
+    { _ddbpgrMarker            = Nothing
+    , _ddbpgrDBParameterGroups = mempty
+    }
+
+-- | A list of DBParameterGroup instances.
+ddbpgrDBParameterGroups :: Lens' DescribeDBParameterGroupsResponse [DBParameterGroup]
+ddbpgrDBParameterGroups =
+    lens _ddbpgrDBParameterGroups (\s a -> s { _ddbpgrDBParameterGroups = a })
+        . _List
+
+-- | 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.
+ddbpgrMarker :: Lens' DescribeDBParameterGroupsResponse (Maybe Text)
+ddbpgrMarker = lens _ddbpgrMarker (\s a -> s { _ddbpgrMarker = a })
+
+instance ToPath DescribeDBParameterGroups where
+    toPath = const "/"
+
+instance ToQuery DescribeDBParameterGroups where
+    toQuery DescribeDBParameterGroups{..} = mconcat
+        [ "DBParameterGroupName" =? _ddbpgDBParameterGroupName
+        , "Filters"              =? _ddbpgFilters
+        , "Marker"               =? _ddbpgMarker
+        , "MaxRecords"           =? _ddbpgMaxRecords
+        ]
+
+instance ToHeaders DescribeDBParameterGroups
+
+instance AWSRequest DescribeDBParameterGroups where
+    type Sv DescribeDBParameterGroups = RDS
+    type Rs DescribeDBParameterGroups = DescribeDBParameterGroupsResponse
+
+    request  = post "DescribeDBParameterGroups"
+    response = xmlResponse
+
+instance FromXML DescribeDBParameterGroupsResponse where
+    parseXML = withElement "DescribeDBParameterGroupsResult" $ \x -> DescribeDBParameterGroupsResponse
+        <$> x .@  "DBParameterGroups"
+        <*> x .@? "Marker"
+
+instance AWSPager DescribeDBParameterGroups where
+    page rq rs
+        | stop (rq ^. ddbpgMarker) = Nothing
+        | otherwise = (\x -> rq & ddbpgMarker ?~ x)
+            <$> (rs ^. ddbpgrMarker)
diff --git a/gen/Network/AWS/RDS/DescribeDBParameters.hs b/gen/Network/AWS/RDS/DescribeDBParameters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeDBParameters.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeDBParameters
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns the detailed parameter list for a particular DB parameter group.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBParameters.html>
+module Network.AWS.RDS.DescribeDBParameters
+    (
+    -- * Request
+      DescribeDBParameters
+    -- ** Request constructor
+    , describeDBParameters
+    -- ** Request lenses
+    , ddbpDBParameterGroupName
+    , ddbpFilters
+    , ddbpMarker
+    , ddbpMaxRecords
+    , ddbpSource
+
+    -- * Response
+    , DescribeDBParametersResponse
+    -- ** Response constructor
+    , describeDBParametersResponse
+    -- ** Response lenses
+    , ddbprMarker
+    , ddbprParameters
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeDBParameters = DescribeDBParameters
+    { _ddbpDBParameterGroupName :: Text
+    , _ddbpFilters              :: List "Filter" Filter
+    , _ddbpMarker               :: Maybe Text
+    , _ddbpMaxRecords           :: Maybe Int
+    , _ddbpSource               :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBParameters' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbpDBParameterGroupName' @::@ 'Text'
+--
+-- * 'ddbpFilters' @::@ ['Filter']
+--
+-- * 'ddbpMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbpMaxRecords' @::@ 'Maybe' 'Int'
+--
+-- * 'ddbpSource' @::@ 'Maybe' 'Text'
+--
+describeDBParameters :: Text -- ^ 'ddbpDBParameterGroupName'
+                     -> DescribeDBParameters
+describeDBParameters p1 = DescribeDBParameters
+    { _ddbpDBParameterGroupName = p1
+    , _ddbpSource               = Nothing
+    , _ddbpFilters              = mempty
+    , _ddbpMaxRecords           = Nothing
+    , _ddbpMarker               = Nothing
+    }
+
+-- | The name of a specific DB parameter group to return details for.
+-- Constraints: Must be 1 to 255 alphanumeric characters First character
+-- must be a letter Cannot end with a hyphen or contain two consecutive
+-- hyphens.
+ddbpDBParameterGroupName :: Lens' DescribeDBParameters Text
+ddbpDBParameterGroupName =
+    lens _ddbpDBParameterGroupName
+        (\s a -> s { _ddbpDBParameterGroupName = a })
+
+-- | This parameter is not currently supported.
+ddbpFilters :: Lens' DescribeDBParameters [Filter]
+ddbpFilters = lens _ddbpFilters (\s a -> s { _ddbpFilters = a }) . _List
+
+-- | An optional pagination token provided by a previous DescribeDBParameters
+-- request. If this parameter is specified, the response includes only
+-- records beyond the marker, up to the value specified by MaxRecords.
+ddbpMarker :: Lens' DescribeDBParameters (Maybe Text)
+ddbpMarker = lens _ddbpMarker (\s a -> s { _ddbpMarker = 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 may be
+-- retrieved. Default: 100 Constraints: minimum 20, maximum 100.
+ddbpMaxRecords :: Lens' DescribeDBParameters (Maybe Int)
+ddbpMaxRecords = lens _ddbpMaxRecords (\s a -> s { _ddbpMaxRecords = a })
+
+-- | The parameter types to return. Default: All parameter types returned
+-- Valid Values: user | system | engine-default.
+ddbpSource :: Lens' DescribeDBParameters (Maybe Text)
+ddbpSource = lens _ddbpSource (\s a -> s { _ddbpSource = a })
+
+data DescribeDBParametersResponse = DescribeDBParametersResponse
+    { _ddbprMarker     :: Maybe Text
+    , _ddbprParameters :: List "Parameter" Parameter
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBParametersResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbprMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbprParameters' @::@ ['Parameter']
+--
+describeDBParametersResponse :: DescribeDBParametersResponse
+describeDBParametersResponse = DescribeDBParametersResponse
+    { _ddbprParameters = mempty
+    , _ddbprMarker     = 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.
+ddbprMarker :: Lens' DescribeDBParametersResponse (Maybe Text)
+ddbprMarker = lens _ddbprMarker (\s a -> s { _ddbprMarker = a })
+
+-- | A list of Parameter values.
+ddbprParameters :: Lens' DescribeDBParametersResponse [Parameter]
+ddbprParameters = lens _ddbprParameters (\s a -> s { _ddbprParameters = a }) . _List
+
+instance ToPath DescribeDBParameters where
+    toPath = const "/"
+
+instance ToQuery DescribeDBParameters where
+    toQuery DescribeDBParameters{..} = mconcat
+        [ "DBParameterGroupName" =? _ddbpDBParameterGroupName
+        , "Filters"              =? _ddbpFilters
+        , "Marker"               =? _ddbpMarker
+        , "MaxRecords"           =? _ddbpMaxRecords
+        , "Source"               =? _ddbpSource
+        ]
+
+instance ToHeaders DescribeDBParameters
+
+instance AWSRequest DescribeDBParameters where
+    type Sv DescribeDBParameters = RDS
+    type Rs DescribeDBParameters = DescribeDBParametersResponse
+
+    request  = post "DescribeDBParameters"
+    response = xmlResponse
+
+instance FromXML DescribeDBParametersResponse where
+    parseXML = withElement "DescribeDBParametersResult" $ \x -> DescribeDBParametersResponse
+        <$> x .@? "Marker"
+        <*> x .@  "Parameters"
+
+instance AWSPager DescribeDBParameters where
+    page rq rs
+        | stop (rq ^. ddbpMarker) = Nothing
+        | otherwise = (\x -> rq & ddbpMarker ?~ x)
+            <$> (rs ^. ddbprMarker)
diff --git a/gen/Network/AWS/RDS/DescribeDBSecurityGroups.hs b/gen/Network/AWS/RDS/DescribeDBSecurityGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeDBSecurityGroups.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeDBSecurityGroups
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns a list of DBSecurityGroup descriptions. If a DBSecurityGroupName is
+-- specified, the list will contain only the descriptions of the specified DB
+-- security group.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBSecurityGroups.html>
+module Network.AWS.RDS.DescribeDBSecurityGroups
+    (
+    -- * Request
+      DescribeDBSecurityGroups
+    -- ** Request constructor
+    , describeDBSecurityGroups
+    -- ** Request lenses
+    , ddbsg1DBSecurityGroupName
+    , ddbsg1Filters
+    , ddbsg1Marker
+    , ddbsg1MaxRecords
+
+    -- * Response
+    , DescribeDBSecurityGroupsResponse
+    -- ** Response constructor
+    , describeDBSecurityGroupsResponse
+    -- ** Response lenses
+    , ddbsgr1DBSecurityGroups
+    , ddbsgr1Marker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeDBSecurityGroups = DescribeDBSecurityGroups
+    { _ddbsg1DBSecurityGroupName :: Maybe Text
+    , _ddbsg1Filters             :: List "Filter" Filter
+    , _ddbsg1Marker              :: Maybe Text
+    , _ddbsg1MaxRecords          :: Maybe Int
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBSecurityGroups' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbsg1DBSecurityGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbsg1Filters' @::@ ['Filter']
+--
+-- * 'ddbsg1Marker' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbsg1MaxRecords' @::@ 'Maybe' 'Int'
+--
+describeDBSecurityGroups :: DescribeDBSecurityGroups
+describeDBSecurityGroups = DescribeDBSecurityGroups
+    { _ddbsg1DBSecurityGroupName = Nothing
+    , _ddbsg1Filters             = mempty
+    , _ddbsg1MaxRecords          = Nothing
+    , _ddbsg1Marker              = Nothing
+    }
+
+-- | The name of the DB security group to return details for.
+ddbsg1DBSecurityGroupName :: Lens' DescribeDBSecurityGroups (Maybe Text)
+ddbsg1DBSecurityGroupName =
+    lens _ddbsg1DBSecurityGroupName
+        (\s a -> s { _ddbsg1DBSecurityGroupName = a })
+
+-- | This parameter is not currently supported.
+ddbsg1Filters :: Lens' DescribeDBSecurityGroups [Filter]
+ddbsg1Filters = lens _ddbsg1Filters (\s a -> s { _ddbsg1Filters = a }) . _List
+
+-- | An optional pagination token provided by a previous
+-- DescribeDBSecurityGroups request. If this parameter is specified, the
+-- response includes only records beyond the marker, up to the value
+-- specified by MaxRecords.
+ddbsg1Marker :: Lens' DescribeDBSecurityGroups (Maybe Text)
+ddbsg1Marker = lens _ddbsg1Marker (\s a -> s { _ddbsg1Marker = 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 may be
+-- retrieved. Default: 100 Constraints: minimum 20, maximum 100.
+ddbsg1MaxRecords :: Lens' DescribeDBSecurityGroups (Maybe Int)
+ddbsg1MaxRecords = lens _ddbsg1MaxRecords (\s a -> s { _ddbsg1MaxRecords = a })
+
+data DescribeDBSecurityGroupsResponse = DescribeDBSecurityGroupsResponse
+    { _ddbsgr1DBSecurityGroups :: List "DBSecurityGroup" DBSecurityGroup
+    , _ddbsgr1Marker           :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBSecurityGroupsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbsgr1DBSecurityGroups' @::@ ['DBSecurityGroup']
+--
+-- * 'ddbsgr1Marker' @::@ 'Maybe' 'Text'
+--
+describeDBSecurityGroupsResponse :: DescribeDBSecurityGroupsResponse
+describeDBSecurityGroupsResponse = DescribeDBSecurityGroupsResponse
+    { _ddbsgr1Marker           = Nothing
+    , _ddbsgr1DBSecurityGroups = mempty
+    }
+
+-- | A list of DBSecurityGroup instances.
+ddbsgr1DBSecurityGroups :: Lens' DescribeDBSecurityGroupsResponse [DBSecurityGroup]
+ddbsgr1DBSecurityGroups =
+    lens _ddbsgr1DBSecurityGroups (\s a -> s { _ddbsgr1DBSecurityGroups = a })
+        . _List
+
+-- | 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.
+ddbsgr1Marker :: Lens' DescribeDBSecurityGroupsResponse (Maybe Text)
+ddbsgr1Marker = lens _ddbsgr1Marker (\s a -> s { _ddbsgr1Marker = a })
+
+instance ToPath DescribeDBSecurityGroups where
+    toPath = const "/"
+
+instance ToQuery DescribeDBSecurityGroups where
+    toQuery DescribeDBSecurityGroups{..} = mconcat
+        [ "DBSecurityGroupName" =? _ddbsg1DBSecurityGroupName
+        , "Filters"             =? _ddbsg1Filters
+        , "Marker"              =? _ddbsg1Marker
+        , "MaxRecords"          =? _ddbsg1MaxRecords
+        ]
+
+instance ToHeaders DescribeDBSecurityGroups
+
+instance AWSRequest DescribeDBSecurityGroups where
+    type Sv DescribeDBSecurityGroups = RDS
+    type Rs DescribeDBSecurityGroups = DescribeDBSecurityGroupsResponse
+
+    request  = post "DescribeDBSecurityGroups"
+    response = xmlResponse
+
+instance FromXML DescribeDBSecurityGroupsResponse where
+    parseXML = withElement "DescribeDBSecurityGroupsResult" $ \x -> DescribeDBSecurityGroupsResponse
+        <$> x .@  "DBSecurityGroups"
+        <*> x .@? "Marker"
+
+instance AWSPager DescribeDBSecurityGroups where
+    page rq rs
+        | stop (rq ^. ddbsg1Marker) = Nothing
+        | otherwise = (\x -> rq & ddbsg1Marker ?~ x)
+            <$> (rs ^. ddbsgr1Marker)
diff --git a/gen/Network/AWS/RDS/DescribeDBSnapshots.hs b/gen/Network/AWS/RDS/DescribeDBSnapshots.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeDBSnapshots.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeDBSnapshots
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns information about DB snapshots. This API supports pagination.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBSnapshots.html>
+module Network.AWS.RDS.DescribeDBSnapshots
+    (
+    -- * Request
+      DescribeDBSnapshots
+    -- ** Request constructor
+    , describeDBSnapshots
+    -- ** Request lenses
+    , ddbsDBInstanceIdentifier
+    , ddbsDBSnapshotIdentifier
+    , ddbsFilters
+    , ddbsMarker
+    , ddbsMaxRecords
+    , ddbsSnapshotType
+
+    -- * Response
+    , DescribeDBSnapshotsResponse
+    -- ** Response constructor
+    , describeDBSnapshotsResponse
+    -- ** Response lenses
+    , ddbsrDBSnapshots
+    , ddbsrMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeDBSnapshots = DescribeDBSnapshots
+    { _ddbsDBInstanceIdentifier :: Maybe Text
+    , _ddbsDBSnapshotIdentifier :: Maybe Text
+    , _ddbsFilters              :: List "Filter" Filter
+    , _ddbsMarker               :: Maybe Text
+    , _ddbsMaxRecords           :: Maybe Int
+    , _ddbsSnapshotType         :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBSnapshots' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbsDBInstanceIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbsDBSnapshotIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbsFilters' @::@ ['Filter']
+--
+-- * 'ddbsMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbsMaxRecords' @::@ 'Maybe' 'Int'
+--
+-- * 'ddbsSnapshotType' @::@ 'Maybe' 'Text'
+--
+describeDBSnapshots :: DescribeDBSnapshots
+describeDBSnapshots = DescribeDBSnapshots
+    { _ddbsDBInstanceIdentifier = Nothing
+    , _ddbsDBSnapshotIdentifier = Nothing
+    , _ddbsSnapshotType         = Nothing
+    , _ddbsFilters              = mempty
+    , _ddbsMaxRecords           = Nothing
+    , _ddbsMarker               = Nothing
+    }
+
+-- | A DB instance identifier to retrieve the list of DB snapshots for. Cannot
+-- be used in conjunction with DBSnapshotIdentifier. This parameter is not
+-- case sensitive. 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.
+ddbsDBInstanceIdentifier :: Lens' DescribeDBSnapshots (Maybe Text)
+ddbsDBInstanceIdentifier =
+    lens _ddbsDBInstanceIdentifier
+        (\s a -> s { _ddbsDBInstanceIdentifier = a })
+
+-- | A specific DB snapshot identifier to describe. Cannot be used in
+-- conjunction with DBInstanceIdentifier. This value is stored as a
+-- lowercase string. Constraints: Must be 1 to 255 alphanumeric characters
+-- First character must be a letter Cannot end with a hyphen or contain two
+-- consecutive hyphens If this is the identifier of an automated snapshot,
+-- the SnapshotType parameter must also be specified.
+ddbsDBSnapshotIdentifier :: Lens' DescribeDBSnapshots (Maybe Text)
+ddbsDBSnapshotIdentifier =
+    lens _ddbsDBSnapshotIdentifier
+        (\s a -> s { _ddbsDBSnapshotIdentifier = a })
+
+-- | This parameter is not currently supported.
+ddbsFilters :: Lens' DescribeDBSnapshots [Filter]
+ddbsFilters = lens _ddbsFilters (\s a -> s { _ddbsFilters = a }) . _List
+
+-- | An optional pagination token provided by a previous DescribeDBSnapshots
+-- request. If this parameter is specified, the response includes only
+-- records beyond the marker, up to the value specified by MaxRecords.
+ddbsMarker :: Lens' DescribeDBSnapshots (Maybe Text)
+ddbsMarker = lens _ddbsMarker (\s a -> s { _ddbsMarker = 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 may be
+-- retrieved. Default: 100 Constraints: minimum 20, maximum 100.
+ddbsMaxRecords :: Lens' DescribeDBSnapshots (Maybe Int)
+ddbsMaxRecords = lens _ddbsMaxRecords (\s a -> s { _ddbsMaxRecords = a })
+
+-- | The type of snapshots that will be returned. Values can be "automated" or
+-- "manual." If not specified, the returned results will include all
+-- snapshots types.
+ddbsSnapshotType :: Lens' DescribeDBSnapshots (Maybe Text)
+ddbsSnapshotType = lens _ddbsSnapshotType (\s a -> s { _ddbsSnapshotType = a })
+
+data DescribeDBSnapshotsResponse = DescribeDBSnapshotsResponse
+    { _ddbsrDBSnapshots :: List "DBSnapshot" DBSnapshot
+    , _ddbsrMarker      :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBSnapshotsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbsrDBSnapshots' @::@ ['DBSnapshot']
+--
+-- * 'ddbsrMarker' @::@ 'Maybe' 'Text'
+--
+describeDBSnapshotsResponse :: DescribeDBSnapshotsResponse
+describeDBSnapshotsResponse = DescribeDBSnapshotsResponse
+    { _ddbsrMarker      = Nothing
+    , _ddbsrDBSnapshots = mempty
+    }
+
+-- | A list of DBSnapshot instances.
+ddbsrDBSnapshots :: Lens' DescribeDBSnapshotsResponse [DBSnapshot]
+ddbsrDBSnapshots = lens _ddbsrDBSnapshots (\s a -> s { _ddbsrDBSnapshots = a }) . _List
+
+-- | 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.
+ddbsrMarker :: Lens' DescribeDBSnapshotsResponse (Maybe Text)
+ddbsrMarker = lens _ddbsrMarker (\s a -> s { _ddbsrMarker = a })
+
+instance ToPath DescribeDBSnapshots where
+    toPath = const "/"
+
+instance ToQuery DescribeDBSnapshots where
+    toQuery DescribeDBSnapshots{..} = mconcat
+        [ "DBInstanceIdentifier" =? _ddbsDBInstanceIdentifier
+        , "DBSnapshotIdentifier" =? _ddbsDBSnapshotIdentifier
+        , "Filters"              =? _ddbsFilters
+        , "Marker"               =? _ddbsMarker
+        , "MaxRecords"           =? _ddbsMaxRecords
+        , "SnapshotType"         =? _ddbsSnapshotType
+        ]
+
+instance ToHeaders DescribeDBSnapshots
+
+instance AWSRequest DescribeDBSnapshots where
+    type Sv DescribeDBSnapshots = RDS
+    type Rs DescribeDBSnapshots = DescribeDBSnapshotsResponse
+
+    request  = post "DescribeDBSnapshots"
+    response = xmlResponse
+
+instance FromXML DescribeDBSnapshotsResponse where
+    parseXML = withElement "DescribeDBSnapshotsResult" $ \x -> DescribeDBSnapshotsResponse
+        <$> x .@  "DBSnapshots"
+        <*> x .@? "Marker"
+
+instance AWSPager DescribeDBSnapshots where
+    page rq rs
+        | stop (rq ^. ddbsMarker) = Nothing
+        | otherwise = (\x -> rq & ddbsMarker ?~ x)
+            <$> (rs ^. ddbsrMarker)
diff --git a/gen/Network/AWS/RDS/DescribeDBSubnetGroups.hs b/gen/Network/AWS/RDS/DescribeDBSubnetGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeDBSubnetGroups.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeDBSubnetGroups
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns a list of DBSubnetGroup descriptions. If a DBSubnetGroupName is
+-- specified, the list will contain only the descriptions of the specified
+-- DBSubnetGroup. For an overview of CIDR ranges, go to the Wikipedia
+-- Tutorial.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBSubnetGroups.html>
+module Network.AWS.RDS.DescribeDBSubnetGroups
+    (
+    -- * Request
+      DescribeDBSubnetGroups
+    -- ** Request constructor
+    , describeDBSubnetGroups
+    -- ** Request lenses
+    , ddbsgDBSubnetGroupName
+    , ddbsgFilters
+    , ddbsgMarker
+    , ddbsgMaxRecords
+
+    -- * Response
+    , DescribeDBSubnetGroupsResponse
+    -- ** Response constructor
+    , describeDBSubnetGroupsResponse
+    -- ** Response lenses
+    , ddbsgrDBSubnetGroups
+    , ddbsgrMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeDBSubnetGroups = DescribeDBSubnetGroups
+    { _ddbsgDBSubnetGroupName :: Maybe Text
+    , _ddbsgFilters           :: List "Filter" Filter
+    , _ddbsgMarker            :: Maybe Text
+    , _ddbsgMaxRecords        :: Maybe Int
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBSubnetGroups' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbsgDBSubnetGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbsgFilters' @::@ ['Filter']
+--
+-- * 'ddbsgMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'ddbsgMaxRecords' @::@ 'Maybe' 'Int'
+--
+describeDBSubnetGroups :: DescribeDBSubnetGroups
+describeDBSubnetGroups = DescribeDBSubnetGroups
+    { _ddbsgDBSubnetGroupName = Nothing
+    , _ddbsgFilters           = mempty
+    , _ddbsgMaxRecords        = Nothing
+    , _ddbsgMarker            = Nothing
+    }
+
+-- | The name of the DB subnet group to return details for.
+ddbsgDBSubnetGroupName :: Lens' DescribeDBSubnetGroups (Maybe Text)
+ddbsgDBSubnetGroupName =
+    lens _ddbsgDBSubnetGroupName (\s a -> s { _ddbsgDBSubnetGroupName = a })
+
+-- | This parameter is not currently supported.
+ddbsgFilters :: Lens' DescribeDBSubnetGroups [Filter]
+ddbsgFilters = lens _ddbsgFilters (\s a -> s { _ddbsgFilters = a }) . _List
+
+-- | An optional pagination token provided by a previous
+-- DescribeDBSubnetGroups request. If this parameter is specified, the
+-- response includes only records beyond the marker, up to the value
+-- specified by MaxRecords.
+ddbsgMarker :: Lens' DescribeDBSubnetGroups (Maybe Text)
+ddbsgMarker = lens _ddbsgMarker (\s a -> s { _ddbsgMarker = 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 may be
+-- retrieved. Default: 100 Constraints: minimum 20, maximum 100.
+ddbsgMaxRecords :: Lens' DescribeDBSubnetGroups (Maybe Int)
+ddbsgMaxRecords = lens _ddbsgMaxRecords (\s a -> s { _ddbsgMaxRecords = a })
+
+data DescribeDBSubnetGroupsResponse = DescribeDBSubnetGroupsResponse
+    { _ddbsgrDBSubnetGroups :: List "DBSubnetGroup" DBSubnetGroup
+    , _ddbsgrMarker         :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeDBSubnetGroupsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddbsgrDBSubnetGroups' @::@ ['DBSubnetGroup']
+--
+-- * 'ddbsgrMarker' @::@ 'Maybe' 'Text'
+--
+describeDBSubnetGroupsResponse :: DescribeDBSubnetGroupsResponse
+describeDBSubnetGroupsResponse = DescribeDBSubnetGroupsResponse
+    { _ddbsgrMarker         = Nothing
+    , _ddbsgrDBSubnetGroups = mempty
+    }
+
+-- | A list of DBSubnetGroup instances.
+ddbsgrDBSubnetGroups :: Lens' DescribeDBSubnetGroupsResponse [DBSubnetGroup]
+ddbsgrDBSubnetGroups =
+    lens _ddbsgrDBSubnetGroups (\s a -> s { _ddbsgrDBSubnetGroups = a })
+        . _List
+
+-- | 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.
+ddbsgrMarker :: Lens' DescribeDBSubnetGroupsResponse (Maybe Text)
+ddbsgrMarker = lens _ddbsgrMarker (\s a -> s { _ddbsgrMarker = a })
+
+instance ToPath DescribeDBSubnetGroups where
+    toPath = const "/"
+
+instance ToQuery DescribeDBSubnetGroups where
+    toQuery DescribeDBSubnetGroups{..} = mconcat
+        [ "DBSubnetGroupName" =? _ddbsgDBSubnetGroupName
+        , "Filters"           =? _ddbsgFilters
+        , "Marker"            =? _ddbsgMarker
+        , "MaxRecords"        =? _ddbsgMaxRecords
+        ]
+
+instance ToHeaders DescribeDBSubnetGroups
+
+instance AWSRequest DescribeDBSubnetGroups where
+    type Sv DescribeDBSubnetGroups = RDS
+    type Rs DescribeDBSubnetGroups = DescribeDBSubnetGroupsResponse
+
+    request  = post "DescribeDBSubnetGroups"
+    response = xmlResponse
+
+instance FromXML DescribeDBSubnetGroupsResponse where
+    parseXML = withElement "DescribeDBSubnetGroupsResult" $ \x -> DescribeDBSubnetGroupsResponse
+        <$> x .@  "DBSubnetGroups"
+        <*> x .@? "Marker"
+
+instance AWSPager DescribeDBSubnetGroups where
+    page rq rs
+        | stop (rq ^. ddbsgMarker) = Nothing
+        | otherwise = (\x -> rq & ddbsgMarker ?~ x)
+            <$> (rs ^. ddbsgrMarker)
diff --git a/gen/Network/AWS/RDS/DescribeEngineDefaultParameters.hs b/gen/Network/AWS/RDS/DescribeEngineDefaultParameters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeEngineDefaultParameters.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeEngineDefaultParameters
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns the default engine and system parameter information for the
+-- specified database engine.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeEngineDefaultParameters.html>
+module Network.AWS.RDS.DescribeEngineDefaultParameters
+    (
+    -- * Request
+      DescribeEngineDefaultParameters
+    -- ** Request constructor
+    , describeEngineDefaultParameters
+    -- ** Request lenses
+    , dedpDBParameterGroupFamily
+    , dedpFilters
+    , dedpMarker
+    , dedpMaxRecords
+
+    -- * Response
+    , DescribeEngineDefaultParametersResponse
+    -- ** Response constructor
+    , describeEngineDefaultParametersResponse
+    -- ** Response lenses
+    , dedprEngineDefaults
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeEngineDefaultParameters = DescribeEngineDefaultParameters
+    { _dedpDBParameterGroupFamily :: Text
+    , _dedpFilters                :: List "Filter" Filter
+    , _dedpMarker                 :: Maybe Text
+    , _dedpMaxRecords             :: Maybe Int
+    } deriving (Eq, Show)
+
+-- | 'DescribeEngineDefaultParameters' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dedpDBParameterGroupFamily' @::@ 'Text'
+--
+-- * 'dedpFilters' @::@ ['Filter']
+--
+-- * 'dedpMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'dedpMaxRecords' @::@ 'Maybe' 'Int'
+--
+describeEngineDefaultParameters :: Text -- ^ 'dedpDBParameterGroupFamily'
+                                -> DescribeEngineDefaultParameters
+describeEngineDefaultParameters p1 = DescribeEngineDefaultParameters
+    { _dedpDBParameterGroupFamily = p1
+    , _dedpFilters                = mempty
+    , _dedpMaxRecords             = Nothing
+    , _dedpMarker                 = Nothing
+    }
+
+-- | The name of the DB parameter group family.
+dedpDBParameterGroupFamily :: Lens' DescribeEngineDefaultParameters Text
+dedpDBParameterGroupFamily =
+    lens _dedpDBParameterGroupFamily
+        (\s a -> s { _dedpDBParameterGroupFamily = a })
+
+-- | Not currently supported.
+dedpFilters :: Lens' DescribeEngineDefaultParameters [Filter]
+dedpFilters = lens _dedpFilters (\s a -> s { _dedpFilters = a }) . _List
+
+-- | An optional pagination token provided by a previous
+-- DescribeEngineDefaultParameters request. If this parameter is specified,
+-- the response includes only records beyond the marker, up to the value
+-- specified by MaxRecords.
+dedpMarker :: Lens' DescribeEngineDefaultParameters (Maybe Text)
+dedpMarker = lens _dedpMarker (\s a -> s { _dedpMarker = 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 may be
+-- retrieved. Default: 100 Constraints: minimum 20, maximum 100.
+dedpMaxRecords :: Lens' DescribeEngineDefaultParameters (Maybe Int)
+dedpMaxRecords = lens _dedpMaxRecords (\s a -> s { _dedpMaxRecords = a })
+
+newtype DescribeEngineDefaultParametersResponse = DescribeEngineDefaultParametersResponse
+    { _dedprEngineDefaults :: EngineDefaults
+    } deriving (Eq, Show)
+
+-- | 'DescribeEngineDefaultParametersResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dedprEngineDefaults' @::@ 'EngineDefaults'
+--
+describeEngineDefaultParametersResponse :: EngineDefaults -- ^ 'dedprEngineDefaults'
+                                        -> DescribeEngineDefaultParametersResponse
+describeEngineDefaultParametersResponse p1 = DescribeEngineDefaultParametersResponse
+    { _dedprEngineDefaults = p1
+    }
+
+dedprEngineDefaults :: Lens' DescribeEngineDefaultParametersResponse EngineDefaults
+dedprEngineDefaults =
+    lens _dedprEngineDefaults (\s a -> s { _dedprEngineDefaults = a })
+
+instance ToPath DescribeEngineDefaultParameters where
+    toPath = const "/"
+
+instance ToQuery DescribeEngineDefaultParameters where
+    toQuery DescribeEngineDefaultParameters{..} = mconcat
+        [ "DBParameterGroupFamily" =? _dedpDBParameterGroupFamily
+        , "Filters"                =? _dedpFilters
+        , "Marker"                 =? _dedpMarker
+        , "MaxRecords"             =? _dedpMaxRecords
+        ]
+
+instance ToHeaders DescribeEngineDefaultParameters
+
+instance AWSRequest DescribeEngineDefaultParameters where
+    type Sv DescribeEngineDefaultParameters = RDS
+    type Rs DescribeEngineDefaultParameters = DescribeEngineDefaultParametersResponse
+
+    request  = post "DescribeEngineDefaultParameters"
+    response = xmlResponse
+
+instance FromXML DescribeEngineDefaultParametersResponse where
+    parseXML = withElement "DescribeEngineDefaultParametersResult" $ \x -> DescribeEngineDefaultParametersResponse
+        <$> x .@  "EngineDefaults"
+
+instance AWSPager DescribeEngineDefaultParameters where
+    page rq rs
+        | stop (rq ^. dedpMarker) = Nothing
+        | otherwise = (\x -> rq & dedpMarker ?~ x)
+            <$> (rs ^. dedprEngineDefaults . edMarker)
diff --git a/gen/Network/AWS/RDS/DescribeEventCategories.hs b/gen/Network/AWS/RDS/DescribeEventCategories.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeEventCategories.hs
@@ -0,0 +1,127 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeEventCategories
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Displays a list of categories for all event source types, or, if specified,
+-- for a specified source type. You can see a list of the event categories and
+-- source types in the Events topic in the Amazon RDS User Guide.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeEventCategories.html>
+module Network.AWS.RDS.DescribeEventCategories
+    (
+    -- * Request
+      DescribeEventCategories
+    -- ** Request constructor
+    , describeEventCategories
+    -- ** Request lenses
+    , decFilters
+    , decSourceType
+
+    -- * Response
+    , DescribeEventCategoriesResponse
+    -- ** Response constructor
+    , describeEventCategoriesResponse
+    -- ** Response lenses
+    , decrEventCategoriesMapList
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeEventCategories = DescribeEventCategories
+    { _decFilters    :: List "Filter" Filter
+    , _decSourceType :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeEventCategories' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'decFilters' @::@ ['Filter']
+--
+-- * 'decSourceType' @::@ 'Maybe' 'Text'
+--
+describeEventCategories :: DescribeEventCategories
+describeEventCategories = DescribeEventCategories
+    { _decSourceType = Nothing
+    , _decFilters    = mempty
+    }
+
+-- | This parameter is not currently supported.
+decFilters :: Lens' DescribeEventCategories [Filter]
+decFilters = lens _decFilters (\s a -> s { _decFilters = a }) . _List
+
+-- | The type of source that will be generating the events. Valid values:
+-- db-instance | db-parameter-group | db-security-group | db-snapshot.
+decSourceType :: Lens' DescribeEventCategories (Maybe Text)
+decSourceType = lens _decSourceType (\s a -> s { _decSourceType = a })
+
+newtype DescribeEventCategoriesResponse = DescribeEventCategoriesResponse
+    { _decrEventCategoriesMapList :: List "EventCategoriesMap" EventCategoriesMap
+    } deriving (Eq, Show, Monoid, Semigroup)
+
+instance GHC.Exts.IsList DescribeEventCategoriesResponse where
+    type Item DescribeEventCategoriesResponse = EventCategoriesMap
+
+    fromList = DescribeEventCategoriesResponse . GHC.Exts.fromList
+    toList   = GHC.Exts.toList . _decrEventCategoriesMapList
+
+-- | 'DescribeEventCategoriesResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'decrEventCategoriesMapList' @::@ ['EventCategoriesMap']
+--
+describeEventCategoriesResponse :: DescribeEventCategoriesResponse
+describeEventCategoriesResponse = DescribeEventCategoriesResponse
+    { _decrEventCategoriesMapList = mempty
+    }
+
+-- | A list of EventCategoriesMap data types.
+decrEventCategoriesMapList :: Lens' DescribeEventCategoriesResponse [EventCategoriesMap]
+decrEventCategoriesMapList =
+    lens _decrEventCategoriesMapList
+        (\s a -> s { _decrEventCategoriesMapList = a })
+            . _List
+
+instance ToPath DescribeEventCategories where
+    toPath = const "/"
+
+instance ToQuery DescribeEventCategories where
+    toQuery DescribeEventCategories{..} = mconcat
+        [ "Filters"    =? _decFilters
+        , "SourceType" =? _decSourceType
+        ]
+
+instance ToHeaders DescribeEventCategories
+
+instance AWSRequest DescribeEventCategories where
+    type Sv DescribeEventCategories = RDS
+    type Rs DescribeEventCategories = DescribeEventCategoriesResponse
+
+    request  = post "DescribeEventCategories"
+    response = xmlResponse
+
+instance FromXML DescribeEventCategoriesResponse where
+    parseXML = withElement "DescribeEventCategoriesResult" $ \x -> DescribeEventCategoriesResponse
+        <$> x .@  "EventCategoriesMapList"
diff --git a/gen/Network/AWS/RDS/DescribeEventSubscriptions.hs b/gen/Network/AWS/RDS/DescribeEventSubscriptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeEventSubscriptions.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeEventSubscriptions
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Lists all the subscription descriptions for a customer account. The
+-- description for a subscription includes SubscriptionName, SNSTopicARN,
+-- CustomerID, SourceType, SourceID, CreationTime, and Status. If you specify
+-- a SubscriptionName, lists the description for that subscription.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeEventSubscriptions.html>
+module Network.AWS.RDS.DescribeEventSubscriptions
+    (
+    -- * Request
+      DescribeEventSubscriptions
+    -- ** Request constructor
+    , describeEventSubscriptions
+    -- ** Request lenses
+    , des1Filters
+    , des1Marker
+    , des1MaxRecords
+    , des1SubscriptionName
+
+    -- * Response
+    , DescribeEventSubscriptionsResponse
+    -- ** Response constructor
+    , describeEventSubscriptionsResponse
+    -- ** Response lenses
+    , desrEventSubscriptionsList
+    , desrMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeEventSubscriptions = DescribeEventSubscriptions
+    { _des1Filters          :: List "Filter" Filter
+    , _des1Marker           :: Maybe Text
+    , _des1MaxRecords       :: Maybe Int
+    , _des1SubscriptionName :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeEventSubscriptions' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'des1Filters' @::@ ['Filter']
+--
+-- * 'des1Marker' @::@ 'Maybe' 'Text'
+--
+-- * 'des1MaxRecords' @::@ 'Maybe' 'Int'
+--
+-- * 'des1SubscriptionName' @::@ 'Maybe' 'Text'
+--
+describeEventSubscriptions :: DescribeEventSubscriptions
+describeEventSubscriptions = DescribeEventSubscriptions
+    { _des1SubscriptionName = Nothing
+    , _des1Filters          = mempty
+    , _des1MaxRecords       = Nothing
+    , _des1Marker           = Nothing
+    }
+
+-- | This parameter is not currently supported.
+des1Filters :: Lens' DescribeEventSubscriptions [Filter]
+des1Filters = lens _des1Filters (\s a -> s { _des1Filters = a }) . _List
+
+-- | An optional pagination token provided by a previous
+-- DescribeOrderableDBInstanceOptions request. If this parameter is
+-- specified, the response includes only records beyond the marker, up to
+-- the value specified by MaxRecords .
+des1Marker :: Lens' DescribeEventSubscriptions (Maybe Text)
+des1Marker = lens _des1Marker (\s a -> s { _des1Marker = 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.
+des1MaxRecords :: Lens' DescribeEventSubscriptions (Maybe Int)
+des1MaxRecords = lens _des1MaxRecords (\s a -> s { _des1MaxRecords = a })
+
+-- | The name of the RDS event notification subscription you want to describe.
+des1SubscriptionName :: Lens' DescribeEventSubscriptions (Maybe Text)
+des1SubscriptionName =
+    lens _des1SubscriptionName (\s a -> s { _des1SubscriptionName = a })
+
+data DescribeEventSubscriptionsResponse = DescribeEventSubscriptionsResponse
+    { _desrEventSubscriptionsList :: List "EventSubscription" EventSubscription
+    , _desrMarker                 :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeEventSubscriptionsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'desrEventSubscriptionsList' @::@ ['EventSubscription']
+--
+-- * 'desrMarker' @::@ 'Maybe' 'Text'
+--
+describeEventSubscriptionsResponse :: DescribeEventSubscriptionsResponse
+describeEventSubscriptionsResponse = DescribeEventSubscriptionsResponse
+    { _desrMarker                 = Nothing
+    , _desrEventSubscriptionsList = mempty
+    }
+
+-- | A list of EventSubscriptions data types.
+desrEventSubscriptionsList :: Lens' DescribeEventSubscriptionsResponse [EventSubscription]
+desrEventSubscriptionsList =
+    lens _desrEventSubscriptionsList
+        (\s a -> s { _desrEventSubscriptionsList = a })
+            . _List
+
+-- | An optional pagination token provided by a previous
+-- DescribeOrderableDBInstanceOptions request. If this parameter is
+-- specified, the response includes only records beyond the marker, up to
+-- the value specified by MaxRecords.
+desrMarker :: Lens' DescribeEventSubscriptionsResponse (Maybe Text)
+desrMarker = lens _desrMarker (\s a -> s { _desrMarker = a })
+
+instance ToPath DescribeEventSubscriptions where
+    toPath = const "/"
+
+instance ToQuery DescribeEventSubscriptions where
+    toQuery DescribeEventSubscriptions{..} = mconcat
+        [ "Filters"          =? _des1Filters
+        , "Marker"           =? _des1Marker
+        , "MaxRecords"       =? _des1MaxRecords
+        , "SubscriptionName" =? _des1SubscriptionName
+        ]
+
+instance ToHeaders DescribeEventSubscriptions
+
+instance AWSRequest DescribeEventSubscriptions where
+    type Sv DescribeEventSubscriptions = RDS
+    type Rs DescribeEventSubscriptions = DescribeEventSubscriptionsResponse
+
+    request  = post "DescribeEventSubscriptions"
+    response = xmlResponse
+
+instance FromXML DescribeEventSubscriptionsResponse where
+    parseXML = withElement "DescribeEventSubscriptionsResult" $ \x -> DescribeEventSubscriptionsResponse
+        <$> x .@  "EventSubscriptionsList"
+        <*> x .@? "Marker"
+
+instance AWSPager DescribeEventSubscriptions where
+    page rq rs
+        | stop (rq ^. des1Marker) = Nothing
+        | otherwise = (\x -> rq & des1Marker ?~ x)
+            <$> (rs ^. desrMarker)
diff --git a/gen/Network/AWS/RDS/DescribeEvents.hs b/gen/Network/AWS/RDS/DescribeEvents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeEvents.hs
@@ -0,0 +1,229 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeEvents
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns events related to DB instances, DB security groups, DB snapshots,
+-- and DB parameter groups for the past 14 days. Events specific to a
+-- particular DB instance, DB security group, database snapshot, or DB
+-- parameter group can be obtained by providing the name as a parameter. By
+-- default, the past hour of events are returned.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeEvents.html>
+module Network.AWS.RDS.DescribeEvents
+    (
+    -- * Request
+      DescribeEvents
+    -- ** Request constructor
+    , describeEvents
+    -- ** Request lenses
+    , deDuration
+    , deEndTime
+    , deEventCategories
+    , deFilters
+    , deMarker
+    , deMaxRecords
+    , deSourceIdentifier
+    , deSourceType
+    , deStartTime
+
+    -- * Response
+    , DescribeEventsResponse
+    -- ** Response constructor
+    , describeEventsResponse
+    -- ** Response lenses
+    , derEvents
+    , derMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeEvents = DescribeEvents
+    { _deDuration         :: Maybe Int
+    , _deEndTime          :: Maybe RFC822
+    , _deEventCategories  :: List "EventCategory" Text
+    , _deFilters          :: List "Filter" Filter
+    , _deMarker           :: Maybe Text
+    , _deMaxRecords       :: Maybe Int
+    , _deSourceIdentifier :: Maybe Text
+    , _deSourceType       :: Maybe Text
+    , _deStartTime        :: Maybe RFC822
+    } deriving (Eq, Show)
+
+-- | 'DescribeEvents' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'deDuration' @::@ 'Maybe' 'Int'
+--
+-- * 'deEndTime' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'deEventCategories' @::@ ['Text']
+--
+-- * 'deFilters' @::@ ['Filter']
+--
+-- * 'deMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'deMaxRecords' @::@ 'Maybe' 'Int'
+--
+-- * 'deSourceIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'deSourceType' @::@ 'Maybe' 'Text'
+--
+-- * 'deStartTime' @::@ 'Maybe' 'UTCTime'
+--
+describeEvents :: DescribeEvents
+describeEvents = DescribeEvents
+    { _deSourceIdentifier = Nothing
+    , _deSourceType       = Nothing
+    , _deStartTime        = Nothing
+    , _deEndTime          = Nothing
+    , _deDuration         = Nothing
+    , _deEventCategories  = mempty
+    , _deFilters          = mempty
+    , _deMaxRecords       = Nothing
+    , _deMarker           = Nothing
+    }
+
+-- | The number of minutes to retrieve events for. Default: 60.
+deDuration :: Lens' DescribeEvents (Maybe Int)
+deDuration = lens _deDuration (\s a -> s { _deDuration = a })
+
+-- | The end of the time interval for which to retrieve events, specified in
+-- ISO 8601 format. For more information about ISO 8601, go to the ISO8601
+-- Wikipedia page. Example: 2009-07-08T18:00Z.
+deEndTime :: Lens' DescribeEvents (Maybe UTCTime)
+deEndTime = lens _deEndTime (\s a -> s { _deEndTime = a }) . mapping _Time
+
+-- | A list of event categories that trigger notifications for a event
+-- notification subscription.
+deEventCategories :: Lens' DescribeEvents [Text]
+deEventCategories =
+    lens _deEventCategories (\s a -> s { _deEventCategories = a })
+        . _List
+
+-- | This parameter is not currently supported.
+deFilters :: Lens' DescribeEvents [Filter]
+deFilters = lens _deFilters (\s a -> s { _deFilters = a }) . _List
+
+-- | An optional pagination token provided by a previous DescribeEvents
+-- request. If this parameter is specified, the response includes only
+-- records beyond the marker, up to the value specified by MaxRecords.
+deMarker :: Lens' DescribeEvents (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 may be
+-- retrieved. Default: 100 Constraints: minimum 20, maximum 100.
+deMaxRecords :: Lens' DescribeEvents (Maybe Int)
+deMaxRecords = lens _deMaxRecords (\s a -> s { _deMaxRecords = a })
+
+-- | The identifier of the event source for which events will be returned. If
+-- not specified, then all sources are included in the response.
+-- Constraints: If SourceIdentifier is supplied, SourceType must also be
+-- provided. If the source type is DBInstance, then a DBInstanceIdentifier
+-- must be supplied. If the source type is DBSecurityGroup, a
+-- DBSecurityGroupName must be supplied. If the source type is
+-- DBParameterGroup, a DBParameterGroupName must be supplied. If the source
+-- type is DBSnapshot, a DBSnapshotIdentifier must be supplied. Cannot end
+-- with a hyphen or contain two consecutive hyphens.
+deSourceIdentifier :: Lens' DescribeEvents (Maybe Text)
+deSourceIdentifier =
+    lens _deSourceIdentifier (\s a -> s { _deSourceIdentifier = a })
+
+-- | The event source to retrieve events for. If no value is specified, all
+-- events are returned.
+deSourceType :: Lens' DescribeEvents (Maybe Text)
+deSourceType = lens _deSourceType (\s a -> s { _deSourceType = a })
+
+-- | The beginning of the time interval to retrieve events for, specified in
+-- ISO 8601 format. For more information about ISO 8601, go to the ISO8601
+-- Wikipedia page. Example: 2009-07-08T18:00Z.
+deStartTime :: Lens' DescribeEvents (Maybe UTCTime)
+deStartTime = lens _deStartTime (\s a -> s { _deStartTime = a }) . mapping _Time
+
+data DescribeEventsResponse = DescribeEventsResponse
+    { _derEvents :: List "Event" Event
+    , _derMarker :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeEventsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'derEvents' @::@ ['Event']
+--
+-- * 'derMarker' @::@ 'Maybe' 'Text'
+--
+describeEventsResponse :: DescribeEventsResponse
+describeEventsResponse = DescribeEventsResponse
+    { _derMarker = Nothing
+    , _derEvents = mempty
+    }
+
+-- | A list of Event instances.
+derEvents :: Lens' DescribeEventsResponse [Event]
+derEvents = lens _derEvents (\s a -> s { _derEvents = a }) . _List
+
+-- | An optional pagination token provided by a previous Events request. If
+-- this parameter is specified, the response includes only records beyond
+-- the marker, up to the value specified by MaxRecords .
+derMarker :: Lens' DescribeEventsResponse (Maybe Text)
+derMarker = lens _derMarker (\s a -> s { _derMarker = a })
+
+instance ToPath DescribeEvents where
+    toPath = const "/"
+
+instance ToQuery DescribeEvents where
+    toQuery DescribeEvents{..} = mconcat
+        [ "Duration"         =? _deDuration
+        , "EndTime"          =? _deEndTime
+        , "EventCategories"  =? _deEventCategories
+        , "Filters"          =? _deFilters
+        , "Marker"           =? _deMarker
+        , "MaxRecords"       =? _deMaxRecords
+        , "SourceIdentifier" =? _deSourceIdentifier
+        , "SourceType"       =? _deSourceType
+        , "StartTime"        =? _deStartTime
+        ]
+
+instance ToHeaders DescribeEvents
+
+instance AWSRequest DescribeEvents where
+    type Sv DescribeEvents = RDS
+    type Rs DescribeEvents = DescribeEventsResponse
+
+    request  = post "DescribeEvents"
+    response = xmlResponse
+
+instance FromXML DescribeEventsResponse where
+    parseXML = withElement "DescribeEventsResult" $ \x -> DescribeEventsResponse
+        <$> x .@  "Events"
+        <*> x .@? "Marker"
+
+instance AWSPager DescribeEvents where
+    page rq rs
+        | stop (rq ^. deMarker) = Nothing
+        | otherwise = (\x -> rq & deMarker ?~ x)
+            <$> (rs ^. derMarker)
diff --git a/gen/Network/AWS/RDS/DescribeOptionGroupOptions.hs b/gen/Network/AWS/RDS/DescribeOptionGroupOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeOptionGroupOptions.hs
@@ -0,0 +1,173 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeOptionGroupOptions
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Describes all available options.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeOptionGroupOptions.html>
+module Network.AWS.RDS.DescribeOptionGroupOptions
+    (
+    -- * Request
+      DescribeOptionGroupOptions
+    -- ** Request constructor
+    , describeOptionGroupOptions
+    -- ** Request lenses
+    , dogoEngineName
+    , dogoFilters
+    , dogoMajorEngineVersion
+    , dogoMarker
+    , dogoMaxRecords
+
+    -- * Response
+    , DescribeOptionGroupOptionsResponse
+    -- ** Response constructor
+    , describeOptionGroupOptionsResponse
+    -- ** Response lenses
+    , dogorMarker
+    , dogorOptionGroupOptions
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeOptionGroupOptions = DescribeOptionGroupOptions
+    { _dogoEngineName         :: Text
+    , _dogoFilters            :: List "Filter" Filter
+    , _dogoMajorEngineVersion :: Maybe Text
+    , _dogoMarker             :: Maybe Text
+    , _dogoMaxRecords         :: Maybe Int
+    } deriving (Eq, Show)
+
+-- | 'DescribeOptionGroupOptions' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dogoEngineName' @::@ 'Text'
+--
+-- * 'dogoFilters' @::@ ['Filter']
+--
+-- * 'dogoMajorEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'dogoMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'dogoMaxRecords' @::@ 'Maybe' 'Int'
+--
+describeOptionGroupOptions :: Text -- ^ 'dogoEngineName'
+                           -> DescribeOptionGroupOptions
+describeOptionGroupOptions p1 = DescribeOptionGroupOptions
+    { _dogoEngineName         = p1
+    , _dogoMajorEngineVersion = Nothing
+    , _dogoFilters            = mempty
+    , _dogoMaxRecords         = Nothing
+    , _dogoMarker             = Nothing
+    }
+
+-- | A required parameter. Options available for the given Engine name will be
+-- described.
+dogoEngineName :: Lens' DescribeOptionGroupOptions Text
+dogoEngineName = lens _dogoEngineName (\s a -> s { _dogoEngineName = a })
+
+-- | This parameter is not currently supported.
+dogoFilters :: Lens' DescribeOptionGroupOptions [Filter]
+dogoFilters = lens _dogoFilters (\s a -> s { _dogoFilters = a }) . _List
+
+-- | If specified, filters the results to include only options for the
+-- specified major engine version.
+dogoMajorEngineVersion :: Lens' DescribeOptionGroupOptions (Maybe Text)
+dogoMajorEngineVersion =
+    lens _dogoMajorEngineVersion (\s a -> s { _dogoMajorEngineVersion = 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.
+dogoMarker :: Lens' DescribeOptionGroupOptions (Maybe Text)
+dogoMarker = lens _dogoMarker (\s a -> s { _dogoMarker = 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.
+dogoMaxRecords :: Lens' DescribeOptionGroupOptions (Maybe Int)
+dogoMaxRecords = lens _dogoMaxRecords (\s a -> s { _dogoMaxRecords = a })
+
+data DescribeOptionGroupOptionsResponse = DescribeOptionGroupOptionsResponse
+    { _dogorMarker             :: Maybe Text
+    , _dogorOptionGroupOptions :: List "OptionGroupOption" OptionGroupOption
+    } deriving (Eq, Show)
+
+-- | 'DescribeOptionGroupOptionsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dogorMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'dogorOptionGroupOptions' @::@ ['OptionGroupOption']
+--
+describeOptionGroupOptionsResponse :: DescribeOptionGroupOptionsResponse
+describeOptionGroupOptionsResponse = DescribeOptionGroupOptionsResponse
+    { _dogorOptionGroupOptions = mempty
+    , _dogorMarker             = 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.
+dogorMarker :: Lens' DescribeOptionGroupOptionsResponse (Maybe Text)
+dogorMarker = lens _dogorMarker (\s a -> s { _dogorMarker = a })
+
+dogorOptionGroupOptions :: Lens' DescribeOptionGroupOptionsResponse [OptionGroupOption]
+dogorOptionGroupOptions =
+    lens _dogorOptionGroupOptions (\s a -> s { _dogorOptionGroupOptions = a })
+        . _List
+
+instance ToPath DescribeOptionGroupOptions where
+    toPath = const "/"
+
+instance ToQuery DescribeOptionGroupOptions where
+    toQuery DescribeOptionGroupOptions{..} = mconcat
+        [ "EngineName"         =? _dogoEngineName
+        , "Filters"            =? _dogoFilters
+        , "MajorEngineVersion" =? _dogoMajorEngineVersion
+        , "Marker"             =? _dogoMarker
+        , "MaxRecords"         =? _dogoMaxRecords
+        ]
+
+instance ToHeaders DescribeOptionGroupOptions
+
+instance AWSRequest DescribeOptionGroupOptions where
+    type Sv DescribeOptionGroupOptions = RDS
+    type Rs DescribeOptionGroupOptions = DescribeOptionGroupOptionsResponse
+
+    request  = post "DescribeOptionGroupOptions"
+    response = xmlResponse
+
+instance FromXML DescribeOptionGroupOptionsResponse where
+    parseXML = withElement "DescribeOptionGroupOptionsResult" $ \x -> DescribeOptionGroupOptionsResponse
+        <$> x .@? "Marker"
+        <*> x .@  "OptionGroupOptions"
+
+instance AWSPager DescribeOptionGroupOptions where
+    page rq rs
+        | stop (rq ^. dogoMarker) = Nothing
+        | otherwise = (\x -> rq & dogoMarker ?~ x)
+            <$> (rs ^. dogorMarker)
diff --git a/gen/Network/AWS/RDS/DescribeOptionGroups.hs b/gen/Network/AWS/RDS/DescribeOptionGroups.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeOptionGroups.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeOptionGroups
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Describes the available option groups.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeOptionGroups.html>
+module Network.AWS.RDS.DescribeOptionGroups
+    (
+    -- * Request
+      DescribeOptionGroups
+    -- ** Request constructor
+    , describeOptionGroups
+    -- ** Request lenses
+    , dogEngineName
+    , dogFilters
+    , dogMajorEngineVersion
+    , dogMarker
+    , dogMaxRecords
+    , dogOptionGroupName
+
+    -- * Response
+    , DescribeOptionGroupsResponse
+    -- ** Response constructor
+    , describeOptionGroupsResponse
+    -- ** Response lenses
+    , dogrMarker
+    , dogrOptionGroupsList
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeOptionGroups = DescribeOptionGroups
+    { _dogEngineName         :: Maybe Text
+    , _dogFilters            :: List "Filter" Filter
+    , _dogMajorEngineVersion :: Maybe Text
+    , _dogMarker             :: Maybe Text
+    , _dogMaxRecords         :: Maybe Int
+    , _dogOptionGroupName    :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeOptionGroups' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dogEngineName' @::@ 'Maybe' 'Text'
+--
+-- * 'dogFilters' @::@ ['Filter']
+--
+-- * 'dogMajorEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'dogMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'dogMaxRecords' @::@ 'Maybe' 'Int'
+--
+-- * 'dogOptionGroupName' @::@ 'Maybe' 'Text'
+--
+describeOptionGroups :: DescribeOptionGroups
+describeOptionGroups = DescribeOptionGroups
+    { _dogOptionGroupName    = Nothing
+    , _dogFilters            = mempty
+    , _dogMarker             = Nothing
+    , _dogMaxRecords         = Nothing
+    , _dogEngineName         = Nothing
+    , _dogMajorEngineVersion = Nothing
+    }
+
+-- | Filters the list of option groups to only include groups associated with
+-- a specific database engine.
+dogEngineName :: Lens' DescribeOptionGroups (Maybe Text)
+dogEngineName = lens _dogEngineName (\s a -> s { _dogEngineName = a })
+
+-- | This parameter is not currently supported.
+dogFilters :: Lens' DescribeOptionGroups [Filter]
+dogFilters = lens _dogFilters (\s a -> s { _dogFilters = a }) . _List
+
+-- | Filters the list of option groups to only include groups associated with
+-- a specific database engine version. If specified, then EngineName must
+-- also be specified.
+dogMajorEngineVersion :: Lens' DescribeOptionGroups (Maybe Text)
+dogMajorEngineVersion =
+    lens _dogMajorEngineVersion (\s a -> s { _dogMajorEngineVersion = a })
+
+-- | An optional pagination token provided by a previous DescribeOptionGroups
+-- request. If this parameter is specified, the response includes only
+-- records beyond the marker, up to the value specified by MaxRecords.
+dogMarker :: Lens' DescribeOptionGroups (Maybe Text)
+dogMarker = lens _dogMarker (\s a -> s { _dogMarker = 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.
+dogMaxRecords :: Lens' DescribeOptionGroups (Maybe Int)
+dogMaxRecords = lens _dogMaxRecords (\s a -> s { _dogMaxRecords = a })
+
+-- | The name of the option group to describe. Cannot be supplied together
+-- with EngineName or MajorEngineVersion.
+dogOptionGroupName :: Lens' DescribeOptionGroups (Maybe Text)
+dogOptionGroupName =
+    lens _dogOptionGroupName (\s a -> s { _dogOptionGroupName = a })
+
+data DescribeOptionGroupsResponse = DescribeOptionGroupsResponse
+    { _dogrMarker           :: Maybe Text
+    , _dogrOptionGroupsList :: List "OptionGroup" OptionGroup
+    } deriving (Eq, Show)
+
+-- | 'DescribeOptionGroupsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dogrMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'dogrOptionGroupsList' @::@ ['OptionGroup']
+--
+describeOptionGroupsResponse :: DescribeOptionGroupsResponse
+describeOptionGroupsResponse = DescribeOptionGroupsResponse
+    { _dogrOptionGroupsList = mempty
+    , _dogrMarker           = 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.
+dogrMarker :: Lens' DescribeOptionGroupsResponse (Maybe Text)
+dogrMarker = lens _dogrMarker (\s a -> s { _dogrMarker = a })
+
+-- | List of option groups.
+dogrOptionGroupsList :: Lens' DescribeOptionGroupsResponse [OptionGroup]
+dogrOptionGroupsList =
+    lens _dogrOptionGroupsList (\s a -> s { _dogrOptionGroupsList = a })
+        . _List
+
+instance ToPath DescribeOptionGroups where
+    toPath = const "/"
+
+instance ToQuery DescribeOptionGroups where
+    toQuery DescribeOptionGroups{..} = mconcat
+        [ "EngineName"         =? _dogEngineName
+        , "Filters"            =? _dogFilters
+        , "MajorEngineVersion" =? _dogMajorEngineVersion
+        , "Marker"             =? _dogMarker
+        , "MaxRecords"         =? _dogMaxRecords
+        , "OptionGroupName"    =? _dogOptionGroupName
+        ]
+
+instance ToHeaders DescribeOptionGroups
+
+instance AWSRequest DescribeOptionGroups where
+    type Sv DescribeOptionGroups = RDS
+    type Rs DescribeOptionGroups = DescribeOptionGroupsResponse
+
+    request  = post "DescribeOptionGroups"
+    response = xmlResponse
+
+instance FromXML DescribeOptionGroupsResponse where
+    parseXML = withElement "DescribeOptionGroupsResult" $ \x -> DescribeOptionGroupsResponse
+        <$> x .@? "Marker"
+        <*> x .@  "OptionGroupsList"
+
+instance AWSPager DescribeOptionGroups where
+    page rq rs
+        | stop (rq ^. dogMarker) = Nothing
+        | otherwise = (\x -> rq & dogMarker ?~ x)
+            <$> (rs ^. dogrMarker)
diff --git a/gen/Network/AWS/RDS/DescribeOrderableDBInstanceOptions.hs b/gen/Network/AWS/RDS/DescribeOrderableDBInstanceOptions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeOrderableDBInstanceOptions.hs
@@ -0,0 +1,212 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeOrderableDBInstanceOptions
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns a list of orderable DB instance options for the specified engine.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeOrderableDBInstanceOptions.html>
+module Network.AWS.RDS.DescribeOrderableDBInstanceOptions
+    (
+    -- * Request
+      DescribeOrderableDBInstanceOptions
+    -- ** Request constructor
+    , describeOrderableDBInstanceOptions
+    -- ** Request lenses
+    , dodbioDBInstanceClass
+    , dodbioEngine
+    , dodbioEngineVersion
+    , dodbioFilters
+    , dodbioLicenseModel
+    , dodbioMarker
+    , dodbioMaxRecords
+    , dodbioVpc
+
+    -- * Response
+    , DescribeOrderableDBInstanceOptionsResponse
+    -- ** Response constructor
+    , describeOrderableDBInstanceOptionsResponse
+    -- ** Response lenses
+    , dodbiorMarker
+    , dodbiorOrderableDBInstanceOptions
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeOrderableDBInstanceOptions = DescribeOrderableDBInstanceOptions
+    { _dodbioDBInstanceClass :: Maybe Text
+    , _dodbioEngine          :: Text
+    , _dodbioEngineVersion   :: Maybe Text
+    , _dodbioFilters         :: List "Filter" Filter
+    , _dodbioLicenseModel    :: Maybe Text
+    , _dodbioMarker          :: Maybe Text
+    , _dodbioMaxRecords      :: Maybe Int
+    , _dodbioVpc             :: Maybe Bool
+    } deriving (Eq, Show)
+
+-- | 'DescribeOrderableDBInstanceOptions' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dodbioDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'dodbioEngine' @::@ 'Text'
+--
+-- * 'dodbioEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'dodbioFilters' @::@ ['Filter']
+--
+-- * 'dodbioLicenseModel' @::@ 'Maybe' 'Text'
+--
+-- * 'dodbioMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'dodbioMaxRecords' @::@ 'Maybe' 'Int'
+--
+-- * 'dodbioVpc' @::@ 'Maybe' 'Bool'
+--
+describeOrderableDBInstanceOptions :: Text -- ^ 'dodbioEngine'
+                                   -> DescribeOrderableDBInstanceOptions
+describeOrderableDBInstanceOptions p1 = DescribeOrderableDBInstanceOptions
+    { _dodbioEngine          = p1
+    , _dodbioEngineVersion   = Nothing
+    , _dodbioDBInstanceClass = Nothing
+    , _dodbioLicenseModel    = Nothing
+    , _dodbioVpc             = Nothing
+    , _dodbioFilters         = mempty
+    , _dodbioMaxRecords      = Nothing
+    , _dodbioMarker          = Nothing
+    }
+
+-- | The DB instance class filter value. Specify this parameter to show only
+-- the available offerings matching the specified DB instance class.
+dodbioDBInstanceClass :: Lens' DescribeOrderableDBInstanceOptions (Maybe Text)
+dodbioDBInstanceClass =
+    lens _dodbioDBInstanceClass (\s a -> s { _dodbioDBInstanceClass = a })
+
+-- | The name of the engine to retrieve DB instance options for.
+dodbioEngine :: Lens' DescribeOrderableDBInstanceOptions Text
+dodbioEngine = lens _dodbioEngine (\s a -> s { _dodbioEngine = a })
+
+-- | The engine version filter value. Specify this parameter to show only the
+-- available offerings matching the specified engine version.
+dodbioEngineVersion :: Lens' DescribeOrderableDBInstanceOptions (Maybe Text)
+dodbioEngineVersion =
+    lens _dodbioEngineVersion (\s a -> s { _dodbioEngineVersion = a })
+
+-- | This parameter is not currently supported.
+dodbioFilters :: Lens' DescribeOrderableDBInstanceOptions [Filter]
+dodbioFilters = lens _dodbioFilters (\s a -> s { _dodbioFilters = a }) . _List
+
+-- | The license model filter value. Specify this parameter to show only the
+-- available offerings matching the specified license model.
+dodbioLicenseModel :: Lens' DescribeOrderableDBInstanceOptions (Maybe Text)
+dodbioLicenseModel =
+    lens _dodbioLicenseModel (\s a -> s { _dodbioLicenseModel = a })
+
+-- | An optional pagination token provided by a previous
+-- DescribeOrderableDBInstanceOptions request. If this parameter is
+-- specified, the response includes only records beyond the marker, up to
+-- the value specified by MaxRecords .
+dodbioMarker :: Lens' DescribeOrderableDBInstanceOptions (Maybe Text)
+dodbioMarker = lens _dodbioMarker (\s a -> s { _dodbioMarker = 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.
+dodbioMaxRecords :: Lens' DescribeOrderableDBInstanceOptions (Maybe Int)
+dodbioMaxRecords = lens _dodbioMaxRecords (\s a -> s { _dodbioMaxRecords = a })
+
+-- | The VPC filter value. Specify this parameter to show only the available
+-- VPC or non-VPC offerings.
+dodbioVpc :: Lens' DescribeOrderableDBInstanceOptions (Maybe Bool)
+dodbioVpc = lens _dodbioVpc (\s a -> s { _dodbioVpc = a })
+
+data DescribeOrderableDBInstanceOptionsResponse = DescribeOrderableDBInstanceOptionsResponse
+    { _dodbiorMarker                     :: Maybe Text
+    , _dodbiorOrderableDBInstanceOptions :: List "OrderableDBInstanceOption" OrderableDBInstanceOption
+    } deriving (Eq, Show)
+
+-- | 'DescribeOrderableDBInstanceOptionsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dodbiorMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'dodbiorOrderableDBInstanceOptions' @::@ ['OrderableDBInstanceOption']
+--
+describeOrderableDBInstanceOptionsResponse :: DescribeOrderableDBInstanceOptionsResponse
+describeOrderableDBInstanceOptionsResponse = DescribeOrderableDBInstanceOptionsResponse
+    { _dodbiorOrderableDBInstanceOptions = mempty
+    , _dodbiorMarker                     = Nothing
+    }
+
+-- | An optional pagination token provided by a previous
+-- OrderableDBInstanceOptions request. If this parameter is specified, the
+-- response includes only records beyond the marker, up to the value
+-- specified by MaxRecords .
+dodbiorMarker :: Lens' DescribeOrderableDBInstanceOptionsResponse (Maybe Text)
+dodbiorMarker = lens _dodbiorMarker (\s a -> s { _dodbiorMarker = a })
+
+-- | An OrderableDBInstanceOption structure containing information about
+-- orderable options for the DB instance.
+dodbiorOrderableDBInstanceOptions :: Lens' DescribeOrderableDBInstanceOptionsResponse [OrderableDBInstanceOption]
+dodbiorOrderableDBInstanceOptions =
+    lens _dodbiorOrderableDBInstanceOptions
+        (\s a -> s { _dodbiorOrderableDBInstanceOptions = a })
+            . _List
+
+instance ToPath DescribeOrderableDBInstanceOptions where
+    toPath = const "/"
+
+instance ToQuery DescribeOrderableDBInstanceOptions where
+    toQuery DescribeOrderableDBInstanceOptions{..} = mconcat
+        [ "DBInstanceClass" =? _dodbioDBInstanceClass
+        , "Engine"          =? _dodbioEngine
+        , "EngineVersion"   =? _dodbioEngineVersion
+        , "Filters"         =? _dodbioFilters
+        , "LicenseModel"    =? _dodbioLicenseModel
+        , "Marker"          =? _dodbioMarker
+        , "MaxRecords"      =? _dodbioMaxRecords
+        , "Vpc"             =? _dodbioVpc
+        ]
+
+instance ToHeaders DescribeOrderableDBInstanceOptions
+
+instance AWSRequest DescribeOrderableDBInstanceOptions where
+    type Sv DescribeOrderableDBInstanceOptions = RDS
+    type Rs DescribeOrderableDBInstanceOptions = DescribeOrderableDBInstanceOptionsResponse
+
+    request  = post "DescribeOrderableDBInstanceOptions"
+    response = xmlResponse
+
+instance FromXML DescribeOrderableDBInstanceOptionsResponse where
+    parseXML = withElement "DescribeOrderableDBInstanceOptionsResult" $ \x -> DescribeOrderableDBInstanceOptionsResponse
+        <$> x .@? "Marker"
+        <*> x .@  "OrderableDBInstanceOptions"
+
+instance AWSPager DescribeOrderableDBInstanceOptions where
+    page rq rs
+        | stop (rq ^. dodbioMarker) = Nothing
+        | otherwise = (\x -> rq & dodbioMarker ?~ x)
+            <$> (rs ^. dodbiorMarker)
diff --git a/gen/Network/AWS/RDS/DescribeReservedDBInstances.hs b/gen/Network/AWS/RDS/DescribeReservedDBInstances.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeReservedDBInstances.hs
@@ -0,0 +1,238 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeReservedDBInstances
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Returns information about reserved DB instances for this account, or about
+-- a specified reserved DB instance.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeReservedDBInstances.html>
+module Network.AWS.RDS.DescribeReservedDBInstances
+    (
+    -- * Request
+      DescribeReservedDBInstances
+    -- ** Request constructor
+    , describeReservedDBInstances
+    -- ** Request lenses
+    , drdbiDBInstanceClass
+    , drdbiDuration
+    , drdbiFilters
+    , drdbiMarker
+    , drdbiMaxRecords
+    , drdbiMultiAZ
+    , drdbiOfferingType
+    , drdbiProductDescription
+    , drdbiReservedDBInstanceId
+    , drdbiReservedDBInstancesOfferingId
+
+    -- * Response
+    , DescribeReservedDBInstancesResponse
+    -- ** Response constructor
+    , describeReservedDBInstancesResponse
+    -- ** Response lenses
+    , drdbirMarker
+    , drdbirReservedDBInstances
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeReservedDBInstances = DescribeReservedDBInstances
+    { _drdbiDBInstanceClass               :: Maybe Text
+    , _drdbiDuration                      :: Maybe Text
+    , _drdbiFilters                       :: List "Filter" Filter
+    , _drdbiMarker                        :: Maybe Text
+    , _drdbiMaxRecords                    :: Maybe Int
+    , _drdbiMultiAZ                       :: Maybe Bool
+    , _drdbiOfferingType                  :: Maybe Text
+    , _drdbiProductDescription            :: Maybe Text
+    , _drdbiReservedDBInstanceId          :: Maybe Text
+    , _drdbiReservedDBInstancesOfferingId :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeReservedDBInstances' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'drdbiDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbiDuration' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbiFilters' @::@ ['Filter']
+--
+-- * 'drdbiMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbiMaxRecords' @::@ 'Maybe' 'Int'
+--
+-- * 'drdbiMultiAZ' @::@ 'Maybe' 'Bool'
+--
+-- * 'drdbiOfferingType' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbiProductDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbiReservedDBInstanceId' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbiReservedDBInstancesOfferingId' @::@ 'Maybe' 'Text'
+--
+describeReservedDBInstances :: DescribeReservedDBInstances
+describeReservedDBInstances = DescribeReservedDBInstances
+    { _drdbiReservedDBInstanceId          = Nothing
+    , _drdbiReservedDBInstancesOfferingId = Nothing
+    , _drdbiDBInstanceClass               = Nothing
+    , _drdbiDuration                      = Nothing
+    , _drdbiProductDescription            = Nothing
+    , _drdbiOfferingType                  = Nothing
+    , _drdbiMultiAZ                       = Nothing
+    , _drdbiFilters                       = mempty
+    , _drdbiMaxRecords                    = Nothing
+    , _drdbiMarker                        = Nothing
+    }
+
+-- | The DB instance class filter value. Specify this parameter to show only
+-- those reservations matching the specified DB instances class.
+drdbiDBInstanceClass :: Lens' DescribeReservedDBInstances (Maybe Text)
+drdbiDBInstanceClass =
+    lens _drdbiDBInstanceClass (\s a -> s { _drdbiDBInstanceClass = a })
+
+-- | The duration filter value, specified in years or seconds. Specify this
+-- parameter to show only reservations for this duration. Valid Values: 1 |
+-- 3 | 31536000 | 94608000.
+drdbiDuration :: Lens' DescribeReservedDBInstances (Maybe Text)
+drdbiDuration = lens _drdbiDuration (\s a -> s { _drdbiDuration = a })
+
+-- | This parameter is not currently supported.
+drdbiFilters :: Lens' DescribeReservedDBInstances [Filter]
+drdbiFilters = lens _drdbiFilters (\s a -> s { _drdbiFilters = a }) . _List
+
+-- | 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.
+drdbiMarker :: Lens' DescribeReservedDBInstances (Maybe Text)
+drdbiMarker = lens _drdbiMarker (\s a -> s { _drdbiMarker = a })
+
+-- | The maximum number of records to include in the response. If more than
+-- the MaxRecords value is available, a pagination token called a marker is
+-- included in the response so that the following results can be retrieved.
+-- Default: 100 Constraints: minimum 20, maximum 100.
+drdbiMaxRecords :: Lens' DescribeReservedDBInstances (Maybe Int)
+drdbiMaxRecords = lens _drdbiMaxRecords (\s a -> s { _drdbiMaxRecords = a })
+
+-- | The Multi-AZ filter value. Specify this parameter to show only those
+-- reservations matching the specified Multi-AZ parameter.
+drdbiMultiAZ :: Lens' DescribeReservedDBInstances (Maybe Bool)
+drdbiMultiAZ = lens _drdbiMultiAZ (\s a -> s { _drdbiMultiAZ = a })
+
+-- | The offering type filter value. Specify this parameter to show only the
+-- available offerings matching the specified offering type. Valid Values:
+-- "Light Utilization" | "Medium Utilization" | "Heavy Utilization".
+drdbiOfferingType :: Lens' DescribeReservedDBInstances (Maybe Text)
+drdbiOfferingType =
+    lens _drdbiOfferingType (\s a -> s { _drdbiOfferingType = a })
+
+-- | The product description filter value. Specify this parameter to show only
+-- those reservations matching the specified product description.
+drdbiProductDescription :: Lens' DescribeReservedDBInstances (Maybe Text)
+drdbiProductDescription =
+    lens _drdbiProductDescription (\s a -> s { _drdbiProductDescription = a })
+
+-- | The reserved DB instance identifier filter value. Specify this parameter
+-- to show only the reservation that matches the specified reservation ID.
+drdbiReservedDBInstanceId :: Lens' DescribeReservedDBInstances (Maybe Text)
+drdbiReservedDBInstanceId =
+    lens _drdbiReservedDBInstanceId
+        (\s a -> s { _drdbiReservedDBInstanceId = a })
+
+-- | The offering identifier filter value. Specify this parameter to show only
+-- purchased reservations matching the specified offering identifier.
+drdbiReservedDBInstancesOfferingId :: Lens' DescribeReservedDBInstances (Maybe Text)
+drdbiReservedDBInstancesOfferingId =
+    lens _drdbiReservedDBInstancesOfferingId
+        (\s a -> s { _drdbiReservedDBInstancesOfferingId = a })
+
+data DescribeReservedDBInstancesResponse = DescribeReservedDBInstancesResponse
+    { _drdbirMarker              :: Maybe Text
+    , _drdbirReservedDBInstances :: List "ReservedDBInstance" ReservedDBInstance
+    } deriving (Eq, Show)
+
+-- | 'DescribeReservedDBInstancesResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'drdbirMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbirReservedDBInstances' @::@ ['ReservedDBInstance']
+--
+describeReservedDBInstancesResponse :: DescribeReservedDBInstancesResponse
+describeReservedDBInstancesResponse = DescribeReservedDBInstancesResponse
+    { _drdbirMarker              = Nothing
+    , _drdbirReservedDBInstances = mempty
+    }
+
+-- | 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.
+drdbirMarker :: Lens' DescribeReservedDBInstancesResponse (Maybe Text)
+drdbirMarker = lens _drdbirMarker (\s a -> s { _drdbirMarker = a })
+
+-- | A list of reserved DB instances.
+drdbirReservedDBInstances :: Lens' DescribeReservedDBInstancesResponse [ReservedDBInstance]
+drdbirReservedDBInstances =
+    lens _drdbirReservedDBInstances
+        (\s a -> s { _drdbirReservedDBInstances = a })
+            . _List
+
+instance ToPath DescribeReservedDBInstances where
+    toPath = const "/"
+
+instance ToQuery DescribeReservedDBInstances where
+    toQuery DescribeReservedDBInstances{..} = mconcat
+        [ "DBInstanceClass"               =? _drdbiDBInstanceClass
+        , "Duration"                      =? _drdbiDuration
+        , "Filters"                       =? _drdbiFilters
+        , "Marker"                        =? _drdbiMarker
+        , "MaxRecords"                    =? _drdbiMaxRecords
+        , "MultiAZ"                       =? _drdbiMultiAZ
+        , "OfferingType"                  =? _drdbiOfferingType
+        , "ProductDescription"            =? _drdbiProductDescription
+        , "ReservedDBInstanceId"          =? _drdbiReservedDBInstanceId
+        , "ReservedDBInstancesOfferingId" =? _drdbiReservedDBInstancesOfferingId
+        ]
+
+instance ToHeaders DescribeReservedDBInstances
+
+instance AWSRequest DescribeReservedDBInstances where
+    type Sv DescribeReservedDBInstances = RDS
+    type Rs DescribeReservedDBInstances = DescribeReservedDBInstancesResponse
+
+    request  = post "DescribeReservedDBInstances"
+    response = xmlResponse
+
+instance FromXML DescribeReservedDBInstancesResponse where
+    parseXML = withElement "DescribeReservedDBInstancesResult" $ \x -> DescribeReservedDBInstancesResponse
+        <$> x .@? "Marker"
+        <*> x .@  "ReservedDBInstances"
+
+instance AWSPager DescribeReservedDBInstances where
+    page rq rs
+        | stop (rq ^. drdbiMarker) = Nothing
+        | otherwise = (\x -> rq & drdbiMarker ?~ x)
+            <$> (rs ^. drdbirMarker)
diff --git a/gen/Network/AWS/RDS/DescribeReservedDBInstancesOfferings.hs b/gen/Network/AWS/RDS/DescribeReservedDBInstancesOfferings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DescribeReservedDBInstancesOfferings.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DescribeReservedDBInstancesOfferings
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Lists available reserved DB instance offerings.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeReservedDBInstancesOfferings.html>
+module Network.AWS.RDS.DescribeReservedDBInstancesOfferings
+    (
+    -- * Request
+      DescribeReservedDBInstancesOfferings
+    -- ** Request constructor
+    , describeReservedDBInstancesOfferings
+    -- ** Request lenses
+    , drdbioDBInstanceClass
+    , drdbioDuration
+    , drdbioFilters
+    , drdbioMarker
+    , drdbioMaxRecords
+    , drdbioMultiAZ
+    , drdbioOfferingType
+    , drdbioProductDescription
+    , drdbioReservedDBInstancesOfferingId
+
+    -- * Response
+    , DescribeReservedDBInstancesOfferingsResponse
+    -- ** Response constructor
+    , describeReservedDBInstancesOfferingsResponse
+    -- ** Response lenses
+    , drdbiorMarker
+    , drdbiorReservedDBInstancesOfferings
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DescribeReservedDBInstancesOfferings = DescribeReservedDBInstancesOfferings
+    { _drdbioDBInstanceClass               :: Maybe Text
+    , _drdbioDuration                      :: Maybe Text
+    , _drdbioFilters                       :: List "Filter" Filter
+    , _drdbioMarker                        :: Maybe Text
+    , _drdbioMaxRecords                    :: Maybe Int
+    , _drdbioMultiAZ                       :: Maybe Bool
+    , _drdbioOfferingType                  :: Maybe Text
+    , _drdbioProductDescription            :: Maybe Text
+    , _drdbioReservedDBInstancesOfferingId :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DescribeReservedDBInstancesOfferings' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'drdbioDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbioDuration' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbioFilters' @::@ ['Filter']
+--
+-- * 'drdbioMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbioMaxRecords' @::@ 'Maybe' 'Int'
+--
+-- * 'drdbioMultiAZ' @::@ 'Maybe' 'Bool'
+--
+-- * 'drdbioOfferingType' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbioProductDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbioReservedDBInstancesOfferingId' @::@ 'Maybe' 'Text'
+--
+describeReservedDBInstancesOfferings :: DescribeReservedDBInstancesOfferings
+describeReservedDBInstancesOfferings = DescribeReservedDBInstancesOfferings
+    { _drdbioReservedDBInstancesOfferingId = Nothing
+    , _drdbioDBInstanceClass               = Nothing
+    , _drdbioDuration                      = Nothing
+    , _drdbioProductDescription            = Nothing
+    , _drdbioOfferingType                  = Nothing
+    , _drdbioMultiAZ                       = Nothing
+    , _drdbioFilters                       = mempty
+    , _drdbioMaxRecords                    = Nothing
+    , _drdbioMarker                        = Nothing
+    }
+
+-- | The DB instance class filter value. Specify this parameter to show only
+-- the available offerings matching the specified DB instance class.
+drdbioDBInstanceClass :: Lens' DescribeReservedDBInstancesOfferings (Maybe Text)
+drdbioDBInstanceClass =
+    lens _drdbioDBInstanceClass (\s a -> s { _drdbioDBInstanceClass = a })
+
+-- | Duration filter value, specified in years or seconds. Specify this
+-- parameter to show only reservations for this duration. Valid Values: 1 |
+-- 3 | 31536000 | 94608000.
+drdbioDuration :: Lens' DescribeReservedDBInstancesOfferings (Maybe Text)
+drdbioDuration = lens _drdbioDuration (\s a -> s { _drdbioDuration = a })
+
+-- | This parameter is not currently supported.
+drdbioFilters :: Lens' DescribeReservedDBInstancesOfferings [Filter]
+drdbioFilters = lens _drdbioFilters (\s a -> s { _drdbioFilters = a }) . _List
+
+-- | 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.
+drdbioMarker :: Lens' DescribeReservedDBInstancesOfferings (Maybe Text)
+drdbioMarker = lens _drdbioMarker (\s a -> s { _drdbioMarker = a })
+
+-- | The maximum number of records to include in the response. If more than
+-- the MaxRecords value is available, a pagination token called a marker is
+-- included in the response so that the following results can be retrieved.
+-- Default: 100 Constraints: minimum 20, maximum 100.
+drdbioMaxRecords :: Lens' DescribeReservedDBInstancesOfferings (Maybe Int)
+drdbioMaxRecords = lens _drdbioMaxRecords (\s a -> s { _drdbioMaxRecords = a })
+
+-- | The Multi-AZ filter value. Specify this parameter to show only the
+-- available offerings matching the specified Multi-AZ parameter.
+drdbioMultiAZ :: Lens' DescribeReservedDBInstancesOfferings (Maybe Bool)
+drdbioMultiAZ = lens _drdbioMultiAZ (\s a -> s { _drdbioMultiAZ = a })
+
+-- | The offering type filter value. Specify this parameter to show only the
+-- available offerings matching the specified offering type. Valid Values:
+-- "Light Utilization" | "Medium Utilization" | "Heavy Utilization".
+drdbioOfferingType :: Lens' DescribeReservedDBInstancesOfferings (Maybe Text)
+drdbioOfferingType =
+    lens _drdbioOfferingType (\s a -> s { _drdbioOfferingType = a })
+
+-- | Product description filter value. Specify this parameter to show only the
+-- available offerings matching the specified product description.
+drdbioProductDescription :: Lens' DescribeReservedDBInstancesOfferings (Maybe Text)
+drdbioProductDescription =
+    lens _drdbioProductDescription
+        (\s a -> s { _drdbioProductDescription = a })
+
+-- | The offering identifier filter value. Specify this parameter to show only
+-- the available offering that matches the specified reservation identifier.
+-- Example: 438012d3-4052-4cc7-b2e3-8d3372e0e706.
+drdbioReservedDBInstancesOfferingId :: Lens' DescribeReservedDBInstancesOfferings (Maybe Text)
+drdbioReservedDBInstancesOfferingId =
+    lens _drdbioReservedDBInstancesOfferingId
+        (\s a -> s { _drdbioReservedDBInstancesOfferingId = a })
+
+data DescribeReservedDBInstancesOfferingsResponse = DescribeReservedDBInstancesOfferingsResponse
+    { _drdbiorMarker                       :: Maybe Text
+    , _drdbiorReservedDBInstancesOfferings :: List "ReservedDBInstancesOffering" ReservedDBInstancesOffering
+    } deriving (Eq, Show)
+
+-- | 'DescribeReservedDBInstancesOfferingsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'drdbiorMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'drdbiorReservedDBInstancesOfferings' @::@ ['ReservedDBInstancesOffering']
+--
+describeReservedDBInstancesOfferingsResponse :: DescribeReservedDBInstancesOfferingsResponse
+describeReservedDBInstancesOfferingsResponse = DescribeReservedDBInstancesOfferingsResponse
+    { _drdbiorMarker                       = Nothing
+    , _drdbiorReservedDBInstancesOfferings = mempty
+    }
+
+-- | 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.
+drdbiorMarker :: Lens' DescribeReservedDBInstancesOfferingsResponse (Maybe Text)
+drdbiorMarker = lens _drdbiorMarker (\s a -> s { _drdbiorMarker = a })
+
+-- | A list of reserved DB instance offerings.
+drdbiorReservedDBInstancesOfferings :: Lens' DescribeReservedDBInstancesOfferingsResponse [ReservedDBInstancesOffering]
+drdbiorReservedDBInstancesOfferings =
+    lens _drdbiorReservedDBInstancesOfferings
+        (\s a -> s { _drdbiorReservedDBInstancesOfferings = a })
+            . _List
+
+instance ToPath DescribeReservedDBInstancesOfferings where
+    toPath = const "/"
+
+instance ToQuery DescribeReservedDBInstancesOfferings where
+    toQuery DescribeReservedDBInstancesOfferings{..} = mconcat
+        [ "DBInstanceClass"               =? _drdbioDBInstanceClass
+        , "Duration"                      =? _drdbioDuration
+        , "Filters"                       =? _drdbioFilters
+        , "Marker"                        =? _drdbioMarker
+        , "MaxRecords"                    =? _drdbioMaxRecords
+        , "MultiAZ"                       =? _drdbioMultiAZ
+        , "OfferingType"                  =? _drdbioOfferingType
+        , "ProductDescription"            =? _drdbioProductDescription
+        , "ReservedDBInstancesOfferingId" =? _drdbioReservedDBInstancesOfferingId
+        ]
+
+instance ToHeaders DescribeReservedDBInstancesOfferings
+
+instance AWSRequest DescribeReservedDBInstancesOfferings where
+    type Sv DescribeReservedDBInstancesOfferings = RDS
+    type Rs DescribeReservedDBInstancesOfferings = DescribeReservedDBInstancesOfferingsResponse
+
+    request  = post "DescribeReservedDBInstancesOfferings"
+    response = xmlResponse
+
+instance FromXML DescribeReservedDBInstancesOfferingsResponse where
+    parseXML = withElement "DescribeReservedDBInstancesOfferingsResult" $ \x -> DescribeReservedDBInstancesOfferingsResponse
+        <$> x .@? "Marker"
+        <*> x .@  "ReservedDBInstancesOfferings"
+
+instance AWSPager DescribeReservedDBInstancesOfferings where
+    page rq rs
+        | stop (rq ^. drdbioMarker) = Nothing
+        | otherwise = (\x -> rq & drdbioMarker ?~ x)
+            <$> (rs ^. drdbiorMarker)
diff --git a/gen/Network/AWS/RDS/DownloadDBLogFilePortion.hs b/gen/Network/AWS/RDS/DownloadDBLogFilePortion.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/DownloadDBLogFilePortion.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.DownloadDBLogFilePortion
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Downloads all or a portion of the specified log file.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DownloadDBLogFilePortion.html>
+module Network.AWS.RDS.DownloadDBLogFilePortion
+    (
+    -- * Request
+      DownloadDBLogFilePortion
+    -- ** Request constructor
+    , downloadDBLogFilePortion
+    -- ** Request lenses
+    , ddblfpDBInstanceIdentifier
+    , ddblfpLogFileName
+    , ddblfpMarker
+    , ddblfpNumberOfLines
+
+    -- * Response
+    , DownloadDBLogFilePortionResponse
+    -- ** Response constructor
+    , downloadDBLogFilePortionResponse
+    -- ** Response lenses
+    , ddblfprAdditionalDataPending
+    , ddblfprLogFileData
+    , ddblfprMarker
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data DownloadDBLogFilePortion = DownloadDBLogFilePortion
+    { _ddblfpDBInstanceIdentifier :: Text
+    , _ddblfpLogFileName          :: Text
+    , _ddblfpMarker               :: Maybe Text
+    , _ddblfpNumberOfLines        :: Maybe Int
+    } deriving (Eq, Ord, Show)
+
+-- | 'DownloadDBLogFilePortion' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddblfpDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'ddblfpLogFileName' @::@ 'Text'
+--
+-- * 'ddblfpMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'ddblfpNumberOfLines' @::@ 'Maybe' 'Int'
+--
+downloadDBLogFilePortion :: Text -- ^ 'ddblfpDBInstanceIdentifier'
+                         -> Text -- ^ 'ddblfpLogFileName'
+                         -> DownloadDBLogFilePortion
+downloadDBLogFilePortion p1 p2 = DownloadDBLogFilePortion
+    { _ddblfpDBInstanceIdentifier = p1
+    , _ddblfpLogFileName          = p2
+    , _ddblfpMarker               = Nothing
+    , _ddblfpNumberOfLines        = Nothing
+    }
+
+-- | The customer-assigned name of the DB instance that contains the log files
+-- you want to list. 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.
+ddblfpDBInstanceIdentifier :: Lens' DownloadDBLogFilePortion Text
+ddblfpDBInstanceIdentifier =
+    lens _ddblfpDBInstanceIdentifier
+        (\s a -> s { _ddblfpDBInstanceIdentifier = a })
+
+-- | The name of the log file to be downloaded.
+ddblfpLogFileName :: Lens' DownloadDBLogFilePortion Text
+ddblfpLogFileName =
+    lens _ddblfpLogFileName (\s a -> s { _ddblfpLogFileName = a })
+
+-- | The pagination token provided in the previous request or "0". If the
+-- Marker parameter is specified the response includes only records beyond
+-- the marker until the end of the file or up to NumberOfLines.
+ddblfpMarker :: Lens' DownloadDBLogFilePortion (Maybe Text)
+ddblfpMarker = lens _ddblfpMarker (\s a -> s { _ddblfpMarker = a })
+
+-- | The number of lines to download. If the NumberOfLines parameter is
+-- specified, then the block of lines returned can be from the beginning or
+-- the end of the log file, depending on the value of the Marker parameter.
+-- If neither Marker or NumberOfLines are specified, the entire log file is
+-- returned. If NumberOfLines is specified and Marker is not specified, then
+-- the most recent lines from the end of the log file are returned. If
+-- Marker is specified as "0", then the specified number of lines from the
+-- beginning of the log file are returned. You can download the log file in
+-- blocks of lines by specifying the size of the block using the
+-- NumberOfLines parameter, and by specifying a value of "0" for the Marker
+-- parameter in your first request. Include the Marker value returned in the
+-- response as the Marker value for the next request, continuing until the
+-- AdditionalDataPending response element returns false.
+ddblfpNumberOfLines :: Lens' DownloadDBLogFilePortion (Maybe Int)
+ddblfpNumberOfLines =
+    lens _ddblfpNumberOfLines (\s a -> s { _ddblfpNumberOfLines = a })
+
+data DownloadDBLogFilePortionResponse = DownloadDBLogFilePortionResponse
+    { _ddblfprAdditionalDataPending :: Maybe Bool
+    , _ddblfprLogFileData           :: Maybe Text
+    , _ddblfprMarker                :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'DownloadDBLogFilePortionResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddblfprAdditionalDataPending' @::@ 'Maybe' 'Bool'
+--
+-- * 'ddblfprLogFileData' @::@ 'Maybe' 'Text'
+--
+-- * 'ddblfprMarker' @::@ 'Maybe' 'Text'
+--
+downloadDBLogFilePortionResponse :: DownloadDBLogFilePortionResponse
+downloadDBLogFilePortionResponse = DownloadDBLogFilePortionResponse
+    { _ddblfprLogFileData           = Nothing
+    , _ddblfprMarker                = Nothing
+    , _ddblfprAdditionalDataPending = Nothing
+    }
+
+-- | Boolean value that if true, indicates there is more data to be
+-- downloaded.
+ddblfprAdditionalDataPending :: Lens' DownloadDBLogFilePortionResponse (Maybe Bool)
+ddblfprAdditionalDataPending =
+    lens _ddblfprAdditionalDataPending
+        (\s a -> s { _ddblfprAdditionalDataPending = a })
+
+-- | Entries from the specified log file.
+ddblfprLogFileData :: Lens' DownloadDBLogFilePortionResponse (Maybe Text)
+ddblfprLogFileData =
+    lens _ddblfprLogFileData (\s a -> s { _ddblfprLogFileData = a })
+
+-- | A pagination token that can be used in a subsequent
+-- DownloadDBLogFilePortion request.
+ddblfprMarker :: Lens' DownloadDBLogFilePortionResponse (Maybe Text)
+ddblfprMarker = lens _ddblfprMarker (\s a -> s { _ddblfprMarker = a })
+
+instance ToPath DownloadDBLogFilePortion where
+    toPath = const "/"
+
+instance ToQuery DownloadDBLogFilePortion where
+    toQuery DownloadDBLogFilePortion{..} = mconcat
+        [ "DBInstanceIdentifier" =? _ddblfpDBInstanceIdentifier
+        , "LogFileName"          =? _ddblfpLogFileName
+        , "Marker"               =? _ddblfpMarker
+        , "NumberOfLines"        =? _ddblfpNumberOfLines
+        ]
+
+instance ToHeaders DownloadDBLogFilePortion
+
+instance AWSRequest DownloadDBLogFilePortion where
+    type Sv DownloadDBLogFilePortion = RDS
+    type Rs DownloadDBLogFilePortion = DownloadDBLogFilePortionResponse
+
+    request  = post "DownloadDBLogFilePortion"
+    response = xmlResponse
+
+instance FromXML DownloadDBLogFilePortionResponse where
+    parseXML = withElement "DownloadDBLogFilePortionResult" $ \x -> DownloadDBLogFilePortionResponse
+        <$> x .@? "AdditionalDataPending"
+        <*> x .@? "LogFileData"
+        <*> x .@? "Marker"
+
+instance AWSPager DownloadDBLogFilePortion where
+    page rq rs
+        | stop (rs ^. ddblfprAdditionalDataPending) = Nothing
+        | otherwise = Just $ rq
+            & ddblfpMarker .~ rs ^. ddblfprMarker
diff --git a/gen/Network/AWS/RDS/ListTagsForResource.hs b/gen/Network/AWS/RDS/ListTagsForResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/ListTagsForResource.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.ListTagsForResource
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Lists all tags on an Amazon RDS resource. For an overview on tagging an
+-- Amazon RDS resource, see Tagging Amazon RDS Resources.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ListTagsForResource.html>
+module Network.AWS.RDS.ListTagsForResource
+    (
+    -- * Request
+      ListTagsForResource
+    -- ** Request constructor
+    , listTagsForResource
+    -- ** Request lenses
+    , ltfrFilters
+    , ltfrResourceName
+
+    -- * Response
+    , ListTagsForResourceResponse
+    -- ** Response constructor
+    , listTagsForResourceResponse
+    -- ** Response lenses
+    , ltfrrTagList
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data ListTagsForResource = ListTagsForResource
+    { _ltfrFilters      :: List "Filter" Filter
+    , _ltfrResourceName :: Text
+    } deriving (Eq, Show)
+
+-- | 'ListTagsForResource' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ltfrFilters' @::@ ['Filter']
+--
+-- * 'ltfrResourceName' @::@ 'Text'
+--
+listTagsForResource :: Text -- ^ 'ltfrResourceName'
+                    -> ListTagsForResource
+listTagsForResource p1 = ListTagsForResource
+    { _ltfrResourceName = p1
+    , _ltfrFilters      = mempty
+    }
+
+-- | This parameter is not currently supported.
+ltfrFilters :: Lens' ListTagsForResource [Filter]
+ltfrFilters = lens _ltfrFilters (\s a -> s { _ltfrFilters = a }) . _List
+
+-- | The Amazon RDS resource with tags to be listed. This value is an Amazon
+-- Resource Name (ARN). For information about creating an ARN, see
+-- Constructing an RDS Amazon Resource Name (ARN).
+ltfrResourceName :: Lens' ListTagsForResource Text
+ltfrResourceName = lens _ltfrResourceName (\s a -> s { _ltfrResourceName = a })
+
+newtype ListTagsForResourceResponse = ListTagsForResourceResponse
+    { _ltfrrTagList :: List "Tag" Tag
+    } deriving (Eq, Show, Monoid, Semigroup)
+
+instance GHC.Exts.IsList ListTagsForResourceResponse where
+    type Item ListTagsForResourceResponse = Tag
+
+    fromList = ListTagsForResourceResponse . GHC.Exts.fromList
+    toList   = GHC.Exts.toList . _ltfrrTagList
+
+-- | 'ListTagsForResourceResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ltfrrTagList' @::@ ['Tag']
+--
+listTagsForResourceResponse :: ListTagsForResourceResponse
+listTagsForResourceResponse = ListTagsForResourceResponse
+    { _ltfrrTagList = mempty
+    }
+
+-- | List of tags returned by the ListTagsForResource operation.
+ltfrrTagList :: Lens' ListTagsForResourceResponse [Tag]
+ltfrrTagList = lens _ltfrrTagList (\s a -> s { _ltfrrTagList = a }) . _List
+
+instance ToPath ListTagsForResource where
+    toPath = const "/"
+
+instance ToQuery ListTagsForResource where
+    toQuery ListTagsForResource{..} = mconcat
+        [ "Filters"      =? _ltfrFilters
+        , "ResourceName" =? _ltfrResourceName
+        ]
+
+instance ToHeaders ListTagsForResource
+
+instance AWSRequest ListTagsForResource where
+    type Sv ListTagsForResource = RDS
+    type Rs ListTagsForResource = ListTagsForResourceResponse
+
+    request  = post "ListTagsForResource"
+    response = xmlResponse
+
+instance FromXML ListTagsForResourceResponse where
+    parseXML = withElement "ListTagsForResourceResult" $ \x -> ListTagsForResourceResponse
+        <$> x .@  "TagList"
diff --git a/gen/Network/AWS/RDS/ModifyDBInstance.hs b/gen/Network/AWS/RDS/ModifyDBInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/ModifyDBInstance.hs
@@ -0,0 +1,499 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.ModifyDBInstance
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Modify settings for a DB instance. You can change one or more database
+-- configuration parameters by specifying these parameters and the new values
+-- in the request.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBInstance.html>
+module Network.AWS.RDS.ModifyDBInstance
+    (
+    -- * Request
+      ModifyDBInstance
+    -- ** Request constructor
+    , modifyDBInstance
+    -- ** Request lenses
+    , mdbiAllocatedStorage
+    , mdbiAllowMajorVersionUpgrade
+    , mdbiApplyImmediately
+    , mdbiAutoMinorVersionUpgrade
+    , mdbiBackupRetentionPeriod
+    , mdbiDBInstanceClass
+    , mdbiDBInstanceIdentifier
+    , mdbiDBParameterGroupName
+    , mdbiDBSecurityGroups
+    , mdbiEngineVersion
+    , mdbiIops
+    , mdbiMasterUserPassword
+    , mdbiMultiAZ
+    , mdbiNewDBInstanceIdentifier
+    , mdbiOptionGroupName
+    , mdbiPreferredBackupWindow
+    , mdbiPreferredMaintenanceWindow
+    , mdbiStorageType
+    , mdbiTdeCredentialArn
+    , mdbiTdeCredentialPassword
+    , mdbiVpcSecurityGroupIds
+
+    -- * Response
+    , ModifyDBInstanceResponse
+    -- ** Response constructor
+    , modifyDBInstanceResponse
+    -- ** Response lenses
+    , mdbirDBInstance
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data ModifyDBInstance = ModifyDBInstance
+    { _mdbiAllocatedStorage           :: Maybe Int
+    , _mdbiAllowMajorVersionUpgrade   :: Maybe Bool
+    , _mdbiApplyImmediately           :: Maybe Bool
+    , _mdbiAutoMinorVersionUpgrade    :: Maybe Bool
+    , _mdbiBackupRetentionPeriod      :: Maybe Int
+    , _mdbiDBInstanceClass            :: Maybe Text
+    , _mdbiDBInstanceIdentifier       :: Text
+    , _mdbiDBParameterGroupName       :: Maybe Text
+    , _mdbiDBSecurityGroups           :: List "DBSecurityGroupName" Text
+    , _mdbiEngineVersion              :: Maybe Text
+    , _mdbiIops                       :: Maybe Int
+    , _mdbiMasterUserPassword         :: Maybe Text
+    , _mdbiMultiAZ                    :: Maybe Bool
+    , _mdbiNewDBInstanceIdentifier    :: Maybe Text
+    , _mdbiOptionGroupName            :: Maybe Text
+    , _mdbiPreferredBackupWindow      :: Maybe Text
+    , _mdbiPreferredMaintenanceWindow :: Maybe Text
+    , _mdbiStorageType                :: Maybe Text
+    , _mdbiTdeCredentialArn           :: Maybe Text
+    , _mdbiTdeCredentialPassword      :: Maybe Text
+    , _mdbiVpcSecurityGroupIds        :: List "VpcSecurityGroupId" Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ModifyDBInstance' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mdbiAllocatedStorage' @::@ 'Maybe' 'Int'
+--
+-- * 'mdbiAllowMajorVersionUpgrade' @::@ 'Maybe' 'Bool'
+--
+-- * 'mdbiApplyImmediately' @::@ 'Maybe' 'Bool'
+--
+-- * 'mdbiAutoMinorVersionUpgrade' @::@ 'Maybe' 'Bool'
+--
+-- * 'mdbiBackupRetentionPeriod' @::@ 'Maybe' 'Int'
+--
+-- * 'mdbiDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'mdbiDBParameterGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiDBSecurityGroups' @::@ ['Text']
+--
+-- * 'mdbiEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiIops' @::@ 'Maybe' 'Int'
+--
+-- * 'mdbiMasterUserPassword' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiMultiAZ' @::@ 'Maybe' 'Bool'
+--
+-- * 'mdbiNewDBInstanceIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiOptionGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiPreferredBackupWindow' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiPreferredMaintenanceWindow' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiStorageType' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiTdeCredentialArn' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiTdeCredentialPassword' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbiVpcSecurityGroupIds' @::@ ['Text']
+--
+modifyDBInstance :: Text -- ^ 'mdbiDBInstanceIdentifier'
+                 -> ModifyDBInstance
+modifyDBInstance p1 = ModifyDBInstance
+    { _mdbiDBInstanceIdentifier       = p1
+    , _mdbiAllocatedStorage           = Nothing
+    , _mdbiDBInstanceClass            = Nothing
+    , _mdbiDBSecurityGroups           = mempty
+    , _mdbiVpcSecurityGroupIds        = mempty
+    , _mdbiApplyImmediately           = Nothing
+    , _mdbiMasterUserPassword         = Nothing
+    , _mdbiDBParameterGroupName       = Nothing
+    , _mdbiBackupRetentionPeriod      = Nothing
+    , _mdbiPreferredBackupWindow      = Nothing
+    , _mdbiPreferredMaintenanceWindow = Nothing
+    , _mdbiMultiAZ                    = Nothing
+    , _mdbiEngineVersion              = Nothing
+    , _mdbiAllowMajorVersionUpgrade   = Nothing
+    , _mdbiAutoMinorVersionUpgrade    = Nothing
+    , _mdbiIops                       = Nothing
+    , _mdbiOptionGroupName            = Nothing
+    , _mdbiNewDBInstanceIdentifier    = Nothing
+    , _mdbiStorageType                = Nothing
+    , _mdbiTdeCredentialArn           = Nothing
+    , _mdbiTdeCredentialPassword      = Nothing
+    }
+
+-- | The new storage capacity of the RDS instance. Changing this setting does
+-- not result in an outage and the change is applied during the next
+-- maintenance window unless ApplyImmediately is set to true for this
+-- request. MySQL Default: Uses existing setting Valid Values: 5-3072
+-- Constraints: Value supplied must be at least 10% greater than the current
+-- value. Values that are not at least 10% greater than the existing value
+-- are rounded up so that they are 10% greater than the current value. Type:
+-- Integer PostgreSQL Default: Uses existing setting Valid Values: 5-3072
+-- Constraints: Value supplied must be at least 10% greater than the current
+-- value. Values that are not at least 10% greater than the existing value
+-- are rounded up so that they are 10% greater than the current value. Type:
+-- Integer Oracle Default: Uses existing setting Valid Values: 10-3072
+-- Constraints: Value supplied must be at least 10% greater than the current
+-- value. Values that are not at least 10% greater than the existing value
+-- are rounded up so that they are 10% greater than the current value. SQL
+-- Server Cannot be modified. If you choose to migrate your DB instance from
+-- using standard storage to using Provisioned IOPS, or from using
+-- Provisioned IOPS to using standard storage, the process can take time.
+-- The duration of the migration depends on several factors such as database
+-- load, storage size, storage type (standard or Provisioned IOPS), amount
+-- of IOPS provisioned (if any), and the number of prior scale storage
+-- operations. Typical migration times are under 24 hours, but the process
+-- can take up to several days in some cases. During the migration, the DB
+-- instance will be available for use, but may experience performance
+-- degradation. While the migration takes place, nightly backups for the
+-- instance will be suspended. No other Amazon RDS operations can take place
+-- for the instance, including modifying the instance, rebooting the
+-- instance, deleting the instance, creating a read replica for the
+-- instance, and creating a DB snapshot of the instance.
+mdbiAllocatedStorage :: Lens' ModifyDBInstance (Maybe Int)
+mdbiAllocatedStorage =
+    lens _mdbiAllocatedStorage (\s a -> s { _mdbiAllocatedStorage = 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 DB instance's current version.
+mdbiAllowMajorVersionUpgrade :: Lens' ModifyDBInstance (Maybe Bool)
+mdbiAllowMajorVersionUpgrade =
+    lens _mdbiAllowMajorVersionUpgrade
+        (\s a -> s { _mdbiAllowMajorVersionUpgrade = a })
+
+-- | Specifies whether the modifications in this request and any pending
+-- modifications are asynchronously applied as soon as possible, regardless
+-- of the PreferredMaintenanceWindow setting for the DB instance. If this
+-- parameter is set to false, changes to the DB instance are applied during
+-- the next maintenance window. Some parameter changes can cause an outage
+-- and will be applied on the next call to RebootDBInstance, or the next
+-- failure reboot. Review the table of parameters in Modifying a DB Instance
+-- and Using the Apply Immediately Parameter to see the impact that setting
+-- ApplyImmediately to true or false has for each modified parameter and to
+-- determine when the changes will be applied. Default: false.
+mdbiApplyImmediately :: Lens' ModifyDBInstance (Maybe Bool)
+mdbiApplyImmediately =
+    lens _mdbiApplyImmediately (\s a -> s { _mdbiApplyImmediately = a })
+
+-- | Indicates that minor version upgrades will be applied automatically to
+-- the DB 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 RDS has enabled auto patching for that
+-- engine version.
+mdbiAutoMinorVersionUpgrade :: Lens' ModifyDBInstance (Maybe Bool)
+mdbiAutoMinorVersionUpgrade =
+    lens _mdbiAutoMinorVersionUpgrade
+        (\s a -> s { _mdbiAutoMinorVersionUpgrade = a })
+
+-- | The number of days to retain automated backups. Setting this parameter to
+-- a positive number enables backups. Setting this parameter to 0 disables
+-- automated backups. Changing this parameter can result in an outage if you
+-- change from 0 to a non-zero value or from a non-zero value to 0. These
+-- changes are applied during the next maintenance window unless the
+-- ApplyImmediately parameter is set to true for this request. If you change
+-- the parameter from one non-zero value to another non-zero value, the
+-- change is asynchronously applied as soon as possible. Default: Uses
+-- existing setting Constraints: Must be a value from 0 to 35 Can be
+-- specified for a read replica only if the source is running MySQL 5.6
+-- Cannot be set to 0 if the DB instance is a source to read replicas.
+mdbiBackupRetentionPeriod :: Lens' ModifyDBInstance (Maybe Int)
+mdbiBackupRetentionPeriod =
+    lens _mdbiBackupRetentionPeriod
+        (\s a -> s { _mdbiBackupRetentionPeriod = a })
+
+-- | The new compute and memory capacity of the DB instance. To determine the
+-- instance classes that are available for a particular DB engine, use the
+-- DescribeOrderableDBInstanceOptions action. Passing a value for this
+-- setting causes an outage during the change and is applied during the next
+-- maintenance window, unless ApplyImmediately is specified as true for this
+-- request. Default: Uses existing setting Valid Values: db.t1.micro |
+-- db.m1.small | db.m1.medium | db.m1.large | db.m1.xlarge | db.m2.xlarge |
+-- db.m2.2xlarge | db.m2.4xlarge | db.m3.medium | db.m3.large | db.m3.xlarge
+-- | db.m3.2xlarge | db.r3.large | db.r3.xlarge | db.r3.2xlarge |
+-- db.r3.4xlarge | db.r3.8xlarge | db.t2.micro | db.t2.small | db.t2.medium.
+mdbiDBInstanceClass :: Lens' ModifyDBInstance (Maybe Text)
+mdbiDBInstanceClass =
+    lens _mdbiDBInstanceClass (\s a -> s { _mdbiDBInstanceClass = a })
+
+-- | The DB instance identifier. This value is stored as a lowercase string.
+-- Constraints: Must be the identifier for an existing DB instance 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.
+mdbiDBInstanceIdentifier :: Lens' ModifyDBInstance Text
+mdbiDBInstanceIdentifier =
+    lens _mdbiDBInstanceIdentifier
+        (\s a -> s { _mdbiDBInstanceIdentifier = a })
+
+-- | The name of the DB parameter group to apply to the DB instance. Changing
+-- this setting does not result in an outage. The parameter group name
+-- itself is changed immediately, but the actual parameter changes are not
+-- applied until you reboot the instance without failover. The db instance
+-- will NOT be rebooted automatically and the parameter changes will NOT be
+-- applied during the next maintenance window. Default: Uses existing
+-- setting Constraints: The DB parameter group must be in the same DB
+-- parameter group family as this DB instance.
+mdbiDBParameterGroupName :: Lens' ModifyDBInstance (Maybe Text)
+mdbiDBParameterGroupName =
+    lens _mdbiDBParameterGroupName
+        (\s a -> s { _mdbiDBParameterGroupName = a })
+
+-- | A list of DB security groups to authorize on this DB instance. Changing
+-- this setting does not result in an outage and the change is
+-- asynchronously applied as soon as possible. Constraints: Must be 1 to 255
+-- alphanumeric characters First character must be a letter Cannot end with
+-- a hyphen or contain two consecutive hyphens.
+mdbiDBSecurityGroups :: Lens' ModifyDBInstance [Text]
+mdbiDBSecurityGroups =
+    lens _mdbiDBSecurityGroups (\s a -> s { _mdbiDBSecurityGroups = a })
+        . _List
+
+-- | The version number of the database engine to upgrade to. Changing this
+-- parameter results in an outage and the change is applied during the next
+-- maintenance window unless the ApplyImmediately parameter is set to true
+-- for this request. For major version upgrades, if a non-default DB
+-- parameter group is currently in use, a new DB parameter group in the DB
+-- parameter group family for the new engine version must be specified. The
+-- new DB parameter group can be the default for that DB parameter group
+-- family. Example: 5.1.42.
+mdbiEngineVersion :: Lens' ModifyDBInstance (Maybe Text)
+mdbiEngineVersion =
+    lens _mdbiEngineVersion (\s a -> s { _mdbiEngineVersion = a })
+
+-- | The new Provisioned IOPS (I/O operations per second) value for the RDS
+-- instance. Changing this setting does not result in an outage and the
+-- change is applied during the next maintenance window unless the
+-- ApplyImmediately parameter is set to true for this request. Default: Uses
+-- existing setting Constraints: Value supplied must be at least 10% greater
+-- than the current value. Values that are not at least 10% greater than the
+-- existing value are rounded up so that they are 10% greater than the
+-- current value. If you are migrating from Provisioned IOPS to standard
+-- storage, set this value to 0. The DB instance will require a reboot for
+-- the change in storage type to take effect. SQL Server Setting the IOPS
+-- value for the SQL Server database engine is not supported. Type: Integer
+-- If you choose to migrate your DB instance from using standard storage to
+-- using Provisioned IOPS, or from using Provisioned IOPS to using standard
+-- storage, the process can take time. The duration of the migration depends
+-- on several factors such as database load, storage size, storage type
+-- (standard or Provisioned IOPS), amount of IOPS provisioned (if any), and
+-- the number of prior scale storage operations. Typical migration times are
+-- under 24 hours, but the process can take up to several days in some
+-- cases. During the migration, the DB instance will be available for use,
+-- but may experience performance degradation. While the migration takes
+-- place, nightly backups for the instance will be suspended. No other
+-- Amazon RDS operations can take place for the instance, including
+-- modifying the instance, rebooting the instance, deleting the instance,
+-- creating a read replica for the instance, and creating a DB snapshot of
+-- the instance.
+mdbiIops :: Lens' ModifyDBInstance (Maybe Int)
+mdbiIops = lens _mdbiIops (\s a -> s { _mdbiIops = a })
+
+-- | The new password for the DB instance master user. Can be any printable
+-- ASCII character except "/", """, or "@". Changing this parameter does not
+-- result in an outage and the change is asynchronously applied as soon as
+-- possible. Between the time of the request and the completion of the
+-- request, the MasterUserPassword element exists in the
+-- PendingModifiedValues element of the operation response. Default: Uses
+-- existing setting Constraints: Must be 8 to 41 alphanumeric characters
+-- (MySQL), 8 to 30 alphanumeric characters (Oracle), or 8 to 128
+-- alphanumeric characters (SQL Server).
+mdbiMasterUserPassword :: Lens' ModifyDBInstance (Maybe Text)
+mdbiMasterUserPassword =
+    lens _mdbiMasterUserPassword (\s a -> s { _mdbiMasterUserPassword = a })
+
+-- | Specifies if the DB instance is a Multi-AZ deployment. Changing this
+-- parameter does not result in an outage and the change is applied during
+-- the next maintenance window unless the ApplyImmediately parameter is set
+-- to true for this request. Constraints: Cannot be specified if the DB
+-- instance is a read replica.
+mdbiMultiAZ :: Lens' ModifyDBInstance (Maybe Bool)
+mdbiMultiAZ = lens _mdbiMultiAZ (\s a -> s { _mdbiMultiAZ = a })
+
+-- | The new DB instance identifier for the DB instance when renaming a DB
+-- instance. When you change the DB instance identifier, an instance reboot
+-- will occur immediately if you set Apply Immediately to true, or will
+-- occur during the next maintenance window if Apply Immediately to false.
+-- This value 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.
+mdbiNewDBInstanceIdentifier :: Lens' ModifyDBInstance (Maybe Text)
+mdbiNewDBInstanceIdentifier =
+    lens _mdbiNewDBInstanceIdentifier
+        (\s a -> s { _mdbiNewDBInstanceIdentifier = a })
+
+-- | Indicates that the DB instance should be associated with the specified
+-- option group. Changing this parameter does not result in an outage except
+-- in the following case and the change is applied during the next
+-- maintenance window unless the ApplyImmediately parameter is set to true
+-- for this request. If the parameter change results in an option group that
+-- enables OEM, this change can cause a brief (sub-second) period during
+-- which new connections are rejected but existing connections are not
+-- interrupted. Permanent options, such as the TDE option for Oracle
+-- Advanced Security TDE, cannot be removed from an option group, and that
+-- option group cannot be removed from a DB instance once it is associated
+-- with a DB instance.
+mdbiOptionGroupName :: Lens' ModifyDBInstance (Maybe Text)
+mdbiOptionGroupName =
+    lens _mdbiOptionGroupName (\s a -> s { _mdbiOptionGroupName = a })
+
+-- | The daily time range during which automated backups are created if
+-- automated backups are enabled, as determined by the
+-- BackupRetentionPeriod. Changing this parameter does not result in an
+-- outage and the change is asynchronously applied as soon as possible.
+-- Constraints: Must be in the format hh24:mi-hh24:mi Times should be
+-- Universal Time Coordinated (UTC) Must not conflict with the preferred
+-- maintenance window Must be at least 30 minutes.
+mdbiPreferredBackupWindow :: Lens' ModifyDBInstance (Maybe Text)
+mdbiPreferredBackupWindow =
+    lens _mdbiPreferredBackupWindow
+        (\s a -> s { _mdbiPreferredBackupWindow = a })
+
+-- | The weekly time range (in UTC) during which system maintenance can occur,
+-- which may 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 there are pending actions
+-- that cause a reboot, and the maintenance window is changed to include the
+-- current time, then changing this parameter will cause a reboot of the DB
+-- instance. 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.
+mdbiPreferredMaintenanceWindow :: Lens' ModifyDBInstance (Maybe Text)
+mdbiPreferredMaintenanceWindow =
+    lens _mdbiPreferredMaintenanceWindow
+        (\s a -> s { _mdbiPreferredMaintenanceWindow = a })
+
+-- | Specifies storage type to be associated with the DB Instance. Valid
+-- values: standard | gp2 | io1 If you specify io1, you must also include a
+-- value for the Iops parameter.
+mdbiStorageType :: Lens' ModifyDBInstance (Maybe Text)
+mdbiStorageType = lens _mdbiStorageType (\s a -> s { _mdbiStorageType = a })
+
+-- | The ARN from the Key Store with which to associate the instance for TDE
+-- encryption.
+mdbiTdeCredentialArn :: Lens' ModifyDBInstance (Maybe Text)
+mdbiTdeCredentialArn =
+    lens _mdbiTdeCredentialArn (\s a -> s { _mdbiTdeCredentialArn = a })
+
+-- | The password for the given ARN from the Key Store in order to access the
+-- device.
+mdbiTdeCredentialPassword :: Lens' ModifyDBInstance (Maybe Text)
+mdbiTdeCredentialPassword =
+    lens _mdbiTdeCredentialPassword
+        (\s a -> s { _mdbiTdeCredentialPassword = a })
+
+-- | A list of EC2 VPC security groups to authorize on this DB instance. This
+-- change is asynchronously applied as soon as possible. Constraints: Must
+-- be 1 to 255 alphanumeric characters First character must be a letter
+-- Cannot end with a hyphen or contain two consecutive hyphens.
+mdbiVpcSecurityGroupIds :: Lens' ModifyDBInstance [Text]
+mdbiVpcSecurityGroupIds =
+    lens _mdbiVpcSecurityGroupIds (\s a -> s { _mdbiVpcSecurityGroupIds = a })
+        . _List
+
+newtype ModifyDBInstanceResponse = ModifyDBInstanceResponse
+    { _mdbirDBInstance :: Maybe DBInstance
+    } deriving (Eq, Show)
+
+-- | 'ModifyDBInstanceResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mdbirDBInstance' @::@ 'Maybe' 'DBInstance'
+--
+modifyDBInstanceResponse :: ModifyDBInstanceResponse
+modifyDBInstanceResponse = ModifyDBInstanceResponse
+    { _mdbirDBInstance = Nothing
+    }
+
+mdbirDBInstance :: Lens' ModifyDBInstanceResponse (Maybe DBInstance)
+mdbirDBInstance = lens _mdbirDBInstance (\s a -> s { _mdbirDBInstance = a })
+
+instance ToPath ModifyDBInstance where
+    toPath = const "/"
+
+instance ToQuery ModifyDBInstance where
+    toQuery ModifyDBInstance{..} = mconcat
+        [ "AllocatedStorage"           =? _mdbiAllocatedStorage
+        , "AllowMajorVersionUpgrade"   =? _mdbiAllowMajorVersionUpgrade
+        , "ApplyImmediately"           =? _mdbiApplyImmediately
+        , "AutoMinorVersionUpgrade"    =? _mdbiAutoMinorVersionUpgrade
+        , "BackupRetentionPeriod"      =? _mdbiBackupRetentionPeriod
+        , "DBInstanceClass"            =? _mdbiDBInstanceClass
+        , "DBInstanceIdentifier"       =? _mdbiDBInstanceIdentifier
+        , "DBParameterGroupName"       =? _mdbiDBParameterGroupName
+        , "DBSecurityGroups"           =? _mdbiDBSecurityGroups
+        , "EngineVersion"              =? _mdbiEngineVersion
+        , "Iops"                       =? _mdbiIops
+        , "MasterUserPassword"         =? _mdbiMasterUserPassword
+        , "MultiAZ"                    =? _mdbiMultiAZ
+        , "NewDBInstanceIdentifier"    =? _mdbiNewDBInstanceIdentifier
+        , "OptionGroupName"            =? _mdbiOptionGroupName
+        , "PreferredBackupWindow"      =? _mdbiPreferredBackupWindow
+        , "PreferredMaintenanceWindow" =? _mdbiPreferredMaintenanceWindow
+        , "StorageType"                =? _mdbiStorageType
+        , "TdeCredentialArn"           =? _mdbiTdeCredentialArn
+        , "TdeCredentialPassword"      =? _mdbiTdeCredentialPassword
+        , "VpcSecurityGroupIds"        =? _mdbiVpcSecurityGroupIds
+        ]
+
+instance ToHeaders ModifyDBInstance
+
+instance AWSRequest ModifyDBInstance where
+    type Sv ModifyDBInstance = RDS
+    type Rs ModifyDBInstance = ModifyDBInstanceResponse
+
+    request  = post "ModifyDBInstance"
+    response = xmlResponse
+
+instance FromXML ModifyDBInstanceResponse where
+    parseXML = withElement "ModifyDBInstanceResult" $ \x -> ModifyDBInstanceResponse
+        <$> x .@? "DBInstance"
diff --git a/gen/Network/AWS/RDS/ModifyDBParameterGroup.hs b/gen/Network/AWS/RDS/ModifyDBParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/ModifyDBParameterGroup.hs
@@ -0,0 +1,139 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.ModifyDBParameterGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Modifies the parameters of a DB parameter group. To modify more than one
+-- parameter, submit a list of the following: ParameterName, ParameterValue,
+-- and ApplyMethod. A maximum of 20 parameters can be modified in a single
+-- request. After you modify a DB parameter group, you should wait at least 5
+-- minutes before creating your first DB instance that uses that DB parameter
+-- group as the default parameter group. This allows Amazon RDS to fully
+-- complete the modify action before the parameter group is used as the
+-- default for a new DB instance. This is especially important for parameters
+-- that are critical when creating the default database for a DB instance,
+-- such as the character set for the default database defined by the
+-- character_set_database parameter. You can use the Parameter Groups option
+-- of the Amazon RDS console or the DescribeDBParameters command to verify
+-- that your DB parameter group has been created or modified.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBParameterGroup.html>
+module Network.AWS.RDS.ModifyDBParameterGroup
+    (
+    -- * Request
+      ModifyDBParameterGroup
+    -- ** Request constructor
+    , modifyDBParameterGroup
+    -- ** Request lenses
+    , mdbpgDBParameterGroupName
+    , mdbpgParameters
+
+    -- * Response
+    , ModifyDBParameterGroupResponse
+    -- ** Response constructor
+    , modifyDBParameterGroupResponse
+    -- ** Response lenses
+    , mdbpgrDBParameterGroupName
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data ModifyDBParameterGroup = ModifyDBParameterGroup
+    { _mdbpgDBParameterGroupName :: Text
+    , _mdbpgParameters           :: List "Parameter" Parameter
+    } deriving (Eq, Show)
+
+-- | 'ModifyDBParameterGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mdbpgDBParameterGroupName' @::@ 'Text'
+--
+-- * 'mdbpgParameters' @::@ ['Parameter']
+--
+modifyDBParameterGroup :: Text -- ^ 'mdbpgDBParameterGroupName'
+                       -> ModifyDBParameterGroup
+modifyDBParameterGroup p1 = ModifyDBParameterGroup
+    { _mdbpgDBParameterGroupName = p1
+    , _mdbpgParameters           = mempty
+    }
+
+-- | The name of the DB parameter group. Constraints: Must be the name of an
+-- existing DB parameter group Must be 1 to 255 alphanumeric characters
+-- First character must be a letter Cannot end with a hyphen or contain two
+-- consecutive hyphens.
+mdbpgDBParameterGroupName :: Lens' ModifyDBParameterGroup Text
+mdbpgDBParameterGroupName =
+    lens _mdbpgDBParameterGroupName
+        (\s a -> s { _mdbpgDBParameterGroupName = a })
+
+-- | An array of parameter names, values, and the apply method for the
+-- parameter update. At least one parameter name, value, and apply method
+-- must be supplied; subsequent arguments are optional. A maximum of 20
+-- parameters may be modified in a single request. Valid Values (for the
+-- application method): immediate | pending-reboot.
+mdbpgParameters :: Lens' ModifyDBParameterGroup [Parameter]
+mdbpgParameters = lens _mdbpgParameters (\s a -> s { _mdbpgParameters = a }) . _List
+
+newtype ModifyDBParameterGroupResponse = ModifyDBParameterGroupResponse
+    { _mdbpgrDBParameterGroupName :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'ModifyDBParameterGroupResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mdbpgrDBParameterGroupName' @::@ 'Maybe' 'Text'
+--
+modifyDBParameterGroupResponse :: ModifyDBParameterGroupResponse
+modifyDBParameterGroupResponse = ModifyDBParameterGroupResponse
+    { _mdbpgrDBParameterGroupName = Nothing
+    }
+
+-- | The name of the DB parameter group.
+mdbpgrDBParameterGroupName :: Lens' ModifyDBParameterGroupResponse (Maybe Text)
+mdbpgrDBParameterGroupName =
+    lens _mdbpgrDBParameterGroupName
+        (\s a -> s { _mdbpgrDBParameterGroupName = a })
+
+instance ToPath ModifyDBParameterGroup where
+    toPath = const "/"
+
+instance ToQuery ModifyDBParameterGroup where
+    toQuery ModifyDBParameterGroup{..} = mconcat
+        [ "DBParameterGroupName" =? _mdbpgDBParameterGroupName
+        , "Parameters"           =? _mdbpgParameters
+        ]
+
+instance ToHeaders ModifyDBParameterGroup
+
+instance AWSRequest ModifyDBParameterGroup where
+    type Sv ModifyDBParameterGroup = RDS
+    type Rs ModifyDBParameterGroup = ModifyDBParameterGroupResponse
+
+    request  = post "ModifyDBParameterGroup"
+    response = xmlResponse
+
+instance FromXML ModifyDBParameterGroupResponse where
+    parseXML = withElement "ModifyDBParameterGroupResult" $ \x -> ModifyDBParameterGroupResponse
+        <$> x .@? "DBParameterGroupName"
diff --git a/gen/Network/AWS/RDS/ModifyDBSubnetGroup.hs b/gen/Network/AWS/RDS/ModifyDBSubnetGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/ModifyDBSubnetGroup.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.ModifyDBSubnetGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Modifies an existing DB subnet group. DB subnet groups must contain at
+-- least one subnet in at least two AZs in the region.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBSubnetGroup.html>
+module Network.AWS.RDS.ModifyDBSubnetGroup
+    (
+    -- * Request
+      ModifyDBSubnetGroup
+    -- ** Request constructor
+    , modifyDBSubnetGroup
+    -- ** Request lenses
+    , mdbsgDBSubnetGroupDescription
+    , mdbsgDBSubnetGroupName
+    , mdbsgSubnetIds
+
+    -- * Response
+    , ModifyDBSubnetGroupResponse
+    -- ** Response constructor
+    , modifyDBSubnetGroupResponse
+    -- ** Response lenses
+    , mdbsgrDBSubnetGroup
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data ModifyDBSubnetGroup = ModifyDBSubnetGroup
+    { _mdbsgDBSubnetGroupDescription :: Maybe Text
+    , _mdbsgDBSubnetGroupName        :: Text
+    , _mdbsgSubnetIds                :: List "SubnetIdentifier" Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ModifyDBSubnetGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mdbsgDBSubnetGroupDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'mdbsgDBSubnetGroupName' @::@ 'Text'
+--
+-- * 'mdbsgSubnetIds' @::@ ['Text']
+--
+modifyDBSubnetGroup :: Text -- ^ 'mdbsgDBSubnetGroupName'
+                    -> ModifyDBSubnetGroup
+modifyDBSubnetGroup p1 = ModifyDBSubnetGroup
+    { _mdbsgDBSubnetGroupName        = p1
+    , _mdbsgDBSubnetGroupDescription = Nothing
+    , _mdbsgSubnetIds                = mempty
+    }
+
+-- | The description for the DB subnet group.
+mdbsgDBSubnetGroupDescription :: Lens' ModifyDBSubnetGroup (Maybe Text)
+mdbsgDBSubnetGroupDescription =
+    lens _mdbsgDBSubnetGroupDescription
+        (\s a -> s { _mdbsgDBSubnetGroupDescription = a })
+
+-- | The name for the DB subnet group. This value is stored as a lowercase
+-- string. Constraints: Must contain no more than 255 alphanumeric
+-- characters or hyphens. Must not be "Default". Example: mySubnetgroup.
+mdbsgDBSubnetGroupName :: Lens' ModifyDBSubnetGroup Text
+mdbsgDBSubnetGroupName =
+    lens _mdbsgDBSubnetGroupName (\s a -> s { _mdbsgDBSubnetGroupName = a })
+
+-- | The EC2 subnet IDs for the DB subnet group.
+mdbsgSubnetIds :: Lens' ModifyDBSubnetGroup [Text]
+mdbsgSubnetIds = lens _mdbsgSubnetIds (\s a -> s { _mdbsgSubnetIds = a }) . _List
+
+newtype ModifyDBSubnetGroupResponse = ModifyDBSubnetGroupResponse
+    { _mdbsgrDBSubnetGroup :: Maybe DBSubnetGroup
+    } deriving (Eq, Show)
+
+-- | 'ModifyDBSubnetGroupResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mdbsgrDBSubnetGroup' @::@ 'Maybe' 'DBSubnetGroup'
+--
+modifyDBSubnetGroupResponse :: ModifyDBSubnetGroupResponse
+modifyDBSubnetGroupResponse = ModifyDBSubnetGroupResponse
+    { _mdbsgrDBSubnetGroup = Nothing
+    }
+
+mdbsgrDBSubnetGroup :: Lens' ModifyDBSubnetGroupResponse (Maybe DBSubnetGroup)
+mdbsgrDBSubnetGroup =
+    lens _mdbsgrDBSubnetGroup (\s a -> s { _mdbsgrDBSubnetGroup = a })
+
+instance ToPath ModifyDBSubnetGroup where
+    toPath = const "/"
+
+instance ToQuery ModifyDBSubnetGroup where
+    toQuery ModifyDBSubnetGroup{..} = mconcat
+        [ "DBSubnetGroupDescription" =? _mdbsgDBSubnetGroupDescription
+        , "DBSubnetGroupName"        =? _mdbsgDBSubnetGroupName
+        , "SubnetIds"                =? _mdbsgSubnetIds
+        ]
+
+instance ToHeaders ModifyDBSubnetGroup
+
+instance AWSRequest ModifyDBSubnetGroup where
+    type Sv ModifyDBSubnetGroup = RDS
+    type Rs ModifyDBSubnetGroup = ModifyDBSubnetGroupResponse
+
+    request  = post "ModifyDBSubnetGroup"
+    response = xmlResponse
+
+instance FromXML ModifyDBSubnetGroupResponse where
+    parseXML = withElement "ModifyDBSubnetGroupResult" $ \x -> ModifyDBSubnetGroupResponse
+        <$> x .@? "DBSubnetGroup"
diff --git a/gen/Network/AWS/RDS/ModifyEventSubscription.hs b/gen/Network/AWS/RDS/ModifyEventSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/ModifyEventSubscription.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.ModifyEventSubscription
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Modifies an existing RDS event notification subscription. Note that you
+-- cannot modify the source identifiers using this call; to change source
+-- identifiers for a subscription, use the AddSourceIdentifierToSubscription
+-- and RemoveSourceIdentifierFromSubscription calls. You can see a list of the
+-- event categories for a given SourceType in the Events topic in the Amazon
+-- RDS User Guide or by using the DescribeEventCategories action.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyEventSubscription.html>
+module Network.AWS.RDS.ModifyEventSubscription
+    (
+    -- * Request
+      ModifyEventSubscription
+    -- ** Request constructor
+    , modifyEventSubscription
+    -- ** Request lenses
+    , mesEnabled
+    , mesEventCategories
+    , mesSnsTopicArn
+    , mesSourceType
+    , mesSubscriptionName
+
+    -- * Response
+    , ModifyEventSubscriptionResponse
+    -- ** Response constructor
+    , modifyEventSubscriptionResponse
+    -- ** Response lenses
+    , mesrEventSubscription
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data ModifyEventSubscription = ModifyEventSubscription
+    { _mesEnabled          :: Maybe Bool
+    , _mesEventCategories  :: List "EventCategory" Text
+    , _mesSnsTopicArn      :: Maybe Text
+    , _mesSourceType       :: Maybe Text
+    , _mesSubscriptionName :: Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'ModifyEventSubscription' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mesEnabled' @::@ 'Maybe' 'Bool'
+--
+-- * 'mesEventCategories' @::@ ['Text']
+--
+-- * 'mesSnsTopicArn' @::@ 'Maybe' 'Text'
+--
+-- * 'mesSourceType' @::@ 'Maybe' 'Text'
+--
+-- * 'mesSubscriptionName' @::@ 'Text'
+--
+modifyEventSubscription :: Text -- ^ 'mesSubscriptionName'
+                        -> ModifyEventSubscription
+modifyEventSubscription p1 = ModifyEventSubscription
+    { _mesSubscriptionName = p1
+    , _mesSnsTopicArn      = Nothing
+    , _mesSourceType       = Nothing
+    , _mesEventCategories  = mempty
+    , _mesEnabled          = Nothing
+    }
+
+-- | A Boolean value; set to true to activate the subscription.
+mesEnabled :: Lens' ModifyEventSubscription (Maybe Bool)
+mesEnabled = lens _mesEnabled (\s a -> s { _mesEnabled = a })
+
+-- | A list of event categories for a SourceType that you want to subscribe
+-- to. You can see a list of the categories for a given SourceType in the
+-- Events topic in the Amazon RDS User Guide or by using the
+-- DescribeEventCategories action.
+mesEventCategories :: Lens' ModifyEventSubscription [Text]
+mesEventCategories =
+    lens _mesEventCategories (\s a -> s { _mesEventCategories = a })
+        . _List
+
+-- | The Amazon Resource Name (ARN) of the SNS topic created for event
+-- notification. The ARN is created by Amazon SNS when you create a topic
+-- and subscribe to it.
+mesSnsTopicArn :: Lens' ModifyEventSubscription (Maybe Text)
+mesSnsTopicArn = lens _mesSnsTopicArn (\s a -> s { _mesSnsTopicArn = a })
+
+-- | The type of source that will be generating the events. For example, if
+-- you want to be notified of events generated by a DB instance, you would
+-- set this parameter to db-instance. if this value is not specified, all
+-- events are returned. Valid values: db-instance | db-parameter-group |
+-- db-security-group | db-snapshot.
+mesSourceType :: Lens' ModifyEventSubscription (Maybe Text)
+mesSourceType = lens _mesSourceType (\s a -> s { _mesSourceType = a })
+
+-- | The name of the RDS event notification subscription.
+mesSubscriptionName :: Lens' ModifyEventSubscription Text
+mesSubscriptionName =
+    lens _mesSubscriptionName (\s a -> s { _mesSubscriptionName = a })
+
+newtype ModifyEventSubscriptionResponse = ModifyEventSubscriptionResponse
+    { _mesrEventSubscription :: Maybe EventSubscription
+    } deriving (Eq, Show)
+
+-- | 'ModifyEventSubscriptionResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mesrEventSubscription' @::@ 'Maybe' 'EventSubscription'
+--
+modifyEventSubscriptionResponse :: ModifyEventSubscriptionResponse
+modifyEventSubscriptionResponse = ModifyEventSubscriptionResponse
+    { _mesrEventSubscription = Nothing
+    }
+
+mesrEventSubscription :: Lens' ModifyEventSubscriptionResponse (Maybe EventSubscription)
+mesrEventSubscription =
+    lens _mesrEventSubscription (\s a -> s { _mesrEventSubscription = a })
+
+instance ToPath ModifyEventSubscription where
+    toPath = const "/"
+
+instance ToQuery ModifyEventSubscription where
+    toQuery ModifyEventSubscription{..} = mconcat
+        [ "Enabled"          =? _mesEnabled
+        , "EventCategories"  =? _mesEventCategories
+        , "SnsTopicArn"      =? _mesSnsTopicArn
+        , "SourceType"       =? _mesSourceType
+        , "SubscriptionName" =? _mesSubscriptionName
+        ]
+
+instance ToHeaders ModifyEventSubscription
+
+instance AWSRequest ModifyEventSubscription where
+    type Sv ModifyEventSubscription = RDS
+    type Rs ModifyEventSubscription = ModifyEventSubscriptionResponse
+
+    request  = post "ModifyEventSubscription"
+    response = xmlResponse
+
+instance FromXML ModifyEventSubscriptionResponse where
+    parseXML = withElement "ModifyEventSubscriptionResult" $ \x -> ModifyEventSubscriptionResponse
+        <$> x .@? "EventSubscription"
diff --git a/gen/Network/AWS/RDS/ModifyOptionGroup.hs b/gen/Network/AWS/RDS/ModifyOptionGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/ModifyOptionGroup.hs
@@ -0,0 +1,148 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.ModifyOptionGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Modifies an existing option group.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyOptionGroup.html>
+module Network.AWS.RDS.ModifyOptionGroup
+    (
+    -- * Request
+      ModifyOptionGroup
+    -- ** Request constructor
+    , modifyOptionGroup
+    -- ** Request lenses
+    , mogApplyImmediately
+    , mogOptionGroupName
+    , mogOptionsToInclude
+    , mogOptionsToRemove
+
+    -- * Response
+    , ModifyOptionGroupResponse
+    -- ** Response constructor
+    , modifyOptionGroupResponse
+    -- ** Response lenses
+    , mogrOptionGroup
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data ModifyOptionGroup = ModifyOptionGroup
+    { _mogApplyImmediately :: Maybe Bool
+    , _mogOptionGroupName  :: Text
+    , _mogOptionsToInclude :: List "OptionConfiguration" OptionConfiguration
+    , _mogOptionsToRemove  :: List "OptionsToRemove" Text
+    } deriving (Eq, Show)
+
+-- | 'ModifyOptionGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mogApplyImmediately' @::@ 'Maybe' 'Bool'
+--
+-- * 'mogOptionGroupName' @::@ 'Text'
+--
+-- * 'mogOptionsToInclude' @::@ ['OptionConfiguration']
+--
+-- * 'mogOptionsToRemove' @::@ ['Text']
+--
+modifyOptionGroup :: Text -- ^ 'mogOptionGroupName'
+                  -> ModifyOptionGroup
+modifyOptionGroup p1 = ModifyOptionGroup
+    { _mogOptionGroupName  = p1
+    , _mogOptionsToInclude = mempty
+    , _mogOptionsToRemove  = mempty
+    , _mogApplyImmediately = Nothing
+    }
+
+-- | Indicates whether the changes should be applied immediately, or during
+-- the next maintenance window for each instance associated with the option
+-- group.
+mogApplyImmediately :: Lens' ModifyOptionGroup (Maybe Bool)
+mogApplyImmediately =
+    lens _mogApplyImmediately (\s a -> s { _mogApplyImmediately = a })
+
+-- | The name of the option group to be modified. Permanent options, such as
+-- the TDE option for Oracle Advanced Security TDE, cannot be removed from
+-- an option group, and that option group cannot be removed from a DB
+-- instance once it is associated with a DB instance.
+mogOptionGroupName :: Lens' ModifyOptionGroup Text
+mogOptionGroupName =
+    lens _mogOptionGroupName (\s a -> s { _mogOptionGroupName = a })
+
+-- | Options in this list are added to the option group or, if already
+-- present, the specified configuration is used to update the existing
+-- configuration.
+mogOptionsToInclude :: Lens' ModifyOptionGroup [OptionConfiguration]
+mogOptionsToInclude =
+    lens _mogOptionsToInclude (\s a -> s { _mogOptionsToInclude = a })
+        . _List
+
+-- | Options in this list are removed from the option group.
+mogOptionsToRemove :: Lens' ModifyOptionGroup [Text]
+mogOptionsToRemove =
+    lens _mogOptionsToRemove (\s a -> s { _mogOptionsToRemove = a })
+        . _List
+
+newtype ModifyOptionGroupResponse = ModifyOptionGroupResponse
+    { _mogrOptionGroup :: Maybe OptionGroup
+    } deriving (Eq, Show)
+
+-- | 'ModifyOptionGroupResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'mogrOptionGroup' @::@ 'Maybe' 'OptionGroup'
+--
+modifyOptionGroupResponse :: ModifyOptionGroupResponse
+modifyOptionGroupResponse = ModifyOptionGroupResponse
+    { _mogrOptionGroup = Nothing
+    }
+
+mogrOptionGroup :: Lens' ModifyOptionGroupResponse (Maybe OptionGroup)
+mogrOptionGroup = lens _mogrOptionGroup (\s a -> s { _mogrOptionGroup = a })
+
+instance ToPath ModifyOptionGroup where
+    toPath = const "/"
+
+instance ToQuery ModifyOptionGroup where
+    toQuery ModifyOptionGroup{..} = mconcat
+        [ "ApplyImmediately" =? _mogApplyImmediately
+        , "OptionGroupName"  =? _mogOptionGroupName
+        , "OptionsToInclude" =? _mogOptionsToInclude
+        , "OptionsToRemove"  =? _mogOptionsToRemove
+        ]
+
+instance ToHeaders ModifyOptionGroup
+
+instance AWSRequest ModifyOptionGroup where
+    type Sv ModifyOptionGroup = RDS
+    type Rs ModifyOptionGroup = ModifyOptionGroupResponse
+
+    request  = post "ModifyOptionGroup"
+    response = xmlResponse
+
+instance FromXML ModifyOptionGroupResponse where
+    parseXML = withElement "ModifyOptionGroupResult" $ \x -> ModifyOptionGroupResponse
+        <$> x .@? "OptionGroup"
diff --git a/gen/Network/AWS/RDS/PromoteReadReplica.hs b/gen/Network/AWS/RDS/PromoteReadReplica.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/PromoteReadReplica.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.PromoteReadReplica
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Promotes a read replica DB instance to a standalone DB instance.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PromoteReadReplica.html>
+module Network.AWS.RDS.PromoteReadReplica
+    (
+    -- * Request
+      PromoteReadReplica
+    -- ** Request constructor
+    , promoteReadReplica
+    -- ** Request lenses
+    , prrBackupRetentionPeriod
+    , prrDBInstanceIdentifier
+    , prrPreferredBackupWindow
+
+    -- * Response
+    , PromoteReadReplicaResponse
+    -- ** Response constructor
+    , promoteReadReplicaResponse
+    -- ** Response lenses
+    , prrrDBInstance
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data PromoteReadReplica = PromoteReadReplica
+    { _prrBackupRetentionPeriod :: Maybe Int
+    , _prrDBInstanceIdentifier  :: Text
+    , _prrPreferredBackupWindow :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'PromoteReadReplica' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'prrBackupRetentionPeriod' @::@ 'Maybe' 'Int'
+--
+-- * 'prrDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'prrPreferredBackupWindow' @::@ 'Maybe' 'Text'
+--
+promoteReadReplica :: Text -- ^ 'prrDBInstanceIdentifier'
+                   -> PromoteReadReplica
+promoteReadReplica p1 = PromoteReadReplica
+    { _prrDBInstanceIdentifier  = p1
+    , _prrBackupRetentionPeriod = Nothing
+    , _prrPreferredBackupWindow = Nothing
+    }
+
+-- | The number of days to retain automated backups. Setting this parameter to
+-- a positive number enables backups. Setting this parameter to 0 disables
+-- automated backups. Default: 1 Constraints: Must be a value from 0 to 8.
+prrBackupRetentionPeriod :: Lens' PromoteReadReplica (Maybe Int)
+prrBackupRetentionPeriod =
+    lens _prrBackupRetentionPeriod
+        (\s a -> s { _prrBackupRetentionPeriod = a })
+
+-- | The DB instance identifier. This value is stored as a lowercase string.
+-- Constraints: Must be the identifier for an existing read replica DB
+-- instance 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: mydbinstance.
+prrDBInstanceIdentifier :: Lens' PromoteReadReplica Text
+prrDBInstanceIdentifier =
+    lens _prrDBInstanceIdentifier (\s a -> s { _prrDBInstanceIdentifier = a })
+
+-- | The daily time range during which automated backups are created if
+-- automated backups are enabled, using the BackupRetentionPeriod parameter.
+-- Default: A 30-minute window selected at random from an 8-hour block of
+-- time per region. See the Amazon RDS User Guide for the time blocks for
+-- each region from which the default backup windows are assigned.
+-- Constraints: Must be in the format hh24:mi-hh24:mi. Times should be
+-- Universal Time Coordinated (UTC). Must not conflict with the preferred
+-- maintenance window. Must be at least 30 minutes.
+prrPreferredBackupWindow :: Lens' PromoteReadReplica (Maybe Text)
+prrPreferredBackupWindow =
+    lens _prrPreferredBackupWindow
+        (\s a -> s { _prrPreferredBackupWindow = a })
+
+newtype PromoteReadReplicaResponse = PromoteReadReplicaResponse
+    { _prrrDBInstance :: Maybe DBInstance
+    } deriving (Eq, Show)
+
+-- | 'PromoteReadReplicaResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'prrrDBInstance' @::@ 'Maybe' 'DBInstance'
+--
+promoteReadReplicaResponse :: PromoteReadReplicaResponse
+promoteReadReplicaResponse = PromoteReadReplicaResponse
+    { _prrrDBInstance = Nothing
+    }
+
+prrrDBInstance :: Lens' PromoteReadReplicaResponse (Maybe DBInstance)
+prrrDBInstance = lens _prrrDBInstance (\s a -> s { _prrrDBInstance = a })
+
+instance ToPath PromoteReadReplica where
+    toPath = const "/"
+
+instance ToQuery PromoteReadReplica where
+    toQuery PromoteReadReplica{..} = mconcat
+        [ "BackupRetentionPeriod" =? _prrBackupRetentionPeriod
+        , "DBInstanceIdentifier"  =? _prrDBInstanceIdentifier
+        , "PreferredBackupWindow" =? _prrPreferredBackupWindow
+        ]
+
+instance ToHeaders PromoteReadReplica
+
+instance AWSRequest PromoteReadReplica where
+    type Sv PromoteReadReplica = RDS
+    type Rs PromoteReadReplica = PromoteReadReplicaResponse
+
+    request  = post "PromoteReadReplica"
+    response = xmlResponse
+
+instance FromXML PromoteReadReplicaResponse where
+    parseXML = withElement "PromoteReadReplicaResult" $ \x -> PromoteReadReplicaResponse
+        <$> x .@? "DBInstance"
diff --git a/gen/Network/AWS/RDS/PurchaseReservedDBInstancesOffering.hs b/gen/Network/AWS/RDS/PurchaseReservedDBInstancesOffering.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/PurchaseReservedDBInstancesOffering.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.PurchaseReservedDBInstancesOffering
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Purchases a reserved DB instance offering.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_PurchaseReservedDBInstancesOffering.html>
+module Network.AWS.RDS.PurchaseReservedDBInstancesOffering
+    (
+    -- * Request
+      PurchaseReservedDBInstancesOffering
+    -- ** Request constructor
+    , purchaseReservedDBInstancesOffering
+    -- ** Request lenses
+    , prdbioDBInstanceCount
+    , prdbioReservedDBInstanceId
+    , prdbioReservedDBInstancesOfferingId
+    , prdbioTags
+
+    -- * Response
+    , PurchaseReservedDBInstancesOfferingResponse
+    -- ** Response constructor
+    , purchaseReservedDBInstancesOfferingResponse
+    -- ** Response lenses
+    , prdbiorReservedDBInstance
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data PurchaseReservedDBInstancesOffering = PurchaseReservedDBInstancesOffering
+    { _prdbioDBInstanceCount               :: Maybe Int
+    , _prdbioReservedDBInstanceId          :: Maybe Text
+    , _prdbioReservedDBInstancesOfferingId :: Text
+    , _prdbioTags                          :: List "Tag" Tag
+    } deriving (Eq, Show)
+
+-- | 'PurchaseReservedDBInstancesOffering' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'prdbioDBInstanceCount' @::@ 'Maybe' 'Int'
+--
+-- * 'prdbioReservedDBInstanceId' @::@ 'Maybe' 'Text'
+--
+-- * 'prdbioReservedDBInstancesOfferingId' @::@ 'Text'
+--
+-- * 'prdbioTags' @::@ ['Tag']
+--
+purchaseReservedDBInstancesOffering :: Text -- ^ 'prdbioReservedDBInstancesOfferingId'
+                                    -> PurchaseReservedDBInstancesOffering
+purchaseReservedDBInstancesOffering p1 = PurchaseReservedDBInstancesOffering
+    { _prdbioReservedDBInstancesOfferingId = p1
+    , _prdbioReservedDBInstanceId          = Nothing
+    , _prdbioDBInstanceCount               = Nothing
+    , _prdbioTags                          = mempty
+    }
+
+-- | The number of instances to reserve. Default: 1.
+prdbioDBInstanceCount :: Lens' PurchaseReservedDBInstancesOffering (Maybe Int)
+prdbioDBInstanceCount =
+    lens _prdbioDBInstanceCount (\s a -> s { _prdbioDBInstanceCount = a })
+
+-- | Customer-specified identifier to track this reservation. Example:
+-- myreservationID.
+prdbioReservedDBInstanceId :: Lens' PurchaseReservedDBInstancesOffering (Maybe Text)
+prdbioReservedDBInstanceId =
+    lens _prdbioReservedDBInstanceId
+        (\s a -> s { _prdbioReservedDBInstanceId = a })
+
+-- | The ID of the Reserved DB instance offering to purchase. Example:
+-- 438012d3-4052-4cc7-b2e3-8d3372e0e706.
+prdbioReservedDBInstancesOfferingId :: Lens' PurchaseReservedDBInstancesOffering Text
+prdbioReservedDBInstancesOfferingId =
+    lens _prdbioReservedDBInstancesOfferingId
+        (\s a -> s { _prdbioReservedDBInstancesOfferingId = a })
+
+prdbioTags :: Lens' PurchaseReservedDBInstancesOffering [Tag]
+prdbioTags = lens _prdbioTags (\s a -> s { _prdbioTags = a }) . _List
+
+newtype PurchaseReservedDBInstancesOfferingResponse = PurchaseReservedDBInstancesOfferingResponse
+    { _prdbiorReservedDBInstance :: Maybe ReservedDBInstance
+    } deriving (Eq, Show)
+
+-- | 'PurchaseReservedDBInstancesOfferingResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'prdbiorReservedDBInstance' @::@ 'Maybe' 'ReservedDBInstance'
+--
+purchaseReservedDBInstancesOfferingResponse :: PurchaseReservedDBInstancesOfferingResponse
+purchaseReservedDBInstancesOfferingResponse = PurchaseReservedDBInstancesOfferingResponse
+    { _prdbiorReservedDBInstance = Nothing
+    }
+
+prdbiorReservedDBInstance :: Lens' PurchaseReservedDBInstancesOfferingResponse (Maybe ReservedDBInstance)
+prdbiorReservedDBInstance =
+    lens _prdbiorReservedDBInstance
+        (\s a -> s { _prdbiorReservedDBInstance = a })
+
+instance ToPath PurchaseReservedDBInstancesOffering where
+    toPath = const "/"
+
+instance ToQuery PurchaseReservedDBInstancesOffering where
+    toQuery PurchaseReservedDBInstancesOffering{..} = mconcat
+        [ "DBInstanceCount"               =? _prdbioDBInstanceCount
+        , "ReservedDBInstanceId"          =? _prdbioReservedDBInstanceId
+        , "ReservedDBInstancesOfferingId" =? _prdbioReservedDBInstancesOfferingId
+        , "Tags"                          =? _prdbioTags
+        ]
+
+instance ToHeaders PurchaseReservedDBInstancesOffering
+
+instance AWSRequest PurchaseReservedDBInstancesOffering where
+    type Sv PurchaseReservedDBInstancesOffering = RDS
+    type Rs PurchaseReservedDBInstancesOffering = PurchaseReservedDBInstancesOfferingResponse
+
+    request  = post "PurchaseReservedDBInstancesOffering"
+    response = xmlResponse
+
+instance FromXML PurchaseReservedDBInstancesOfferingResponse where
+    parseXML = withElement "PurchaseReservedDBInstancesOfferingResult" $ \x -> PurchaseReservedDBInstancesOfferingResponse
+        <$> x .@? "ReservedDBInstance"
diff --git a/gen/Network/AWS/RDS/RebootDBInstance.hs b/gen/Network/AWS/RDS/RebootDBInstance.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/RebootDBInstance.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.RebootDBInstance
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Rebooting a DB instance restarts the database engine service. A reboot also
+-- applies to the DB instance any modifications to the associated DB parameter
+-- group that were pending. Rebooting a DB instance results in a momentary
+-- outage of the instance, during which the DB instance status is set to
+-- rebooting. If the RDS instance is configured for MultiAZ, it is possible
+-- that the reboot will be conducted through a failover. An Amazon RDS event
+-- is created when the reboot is completed. If your DB instance is deployed in
+-- multiple Availability Zones, you can force a failover from one AZ to the
+-- other during the reboot. You might force a failover to test the
+-- availability of your DB instance deployment or to restore operations to the
+-- original AZ after a failover occurs. The time required to reboot is a
+-- function of the specific database engine's crash recovery process. To
+-- improve the reboot time, we recommend that you reduce database activities
+-- as much as possible during the reboot process to reduce rollback activity
+-- for in-transit transactions.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RebootDBInstance.html>
+module Network.AWS.RDS.RebootDBInstance
+    (
+    -- * Request
+      RebootDBInstance
+    -- ** Request constructor
+    , rebootDBInstance
+    -- ** Request lenses
+    , rdbiDBInstanceIdentifier
+    , rdbiForceFailover
+
+    -- * Response
+    , RebootDBInstanceResponse
+    -- ** Response constructor
+    , rebootDBInstanceResponse
+    -- ** Response lenses
+    , rdbirDBInstance
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data RebootDBInstance = RebootDBInstance
+    { _rdbiDBInstanceIdentifier :: Text
+    , _rdbiForceFailover        :: Maybe Bool
+    } deriving (Eq, Ord, Show)
+
+-- | 'RebootDBInstance' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbiDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'rdbiForceFailover' @::@ 'Maybe' 'Bool'
+--
+rebootDBInstance :: Text -- ^ 'rdbiDBInstanceIdentifier'
+                 -> RebootDBInstance
+rebootDBInstance p1 = RebootDBInstance
+    { _rdbiDBInstanceIdentifier = p1
+    , _rdbiForceFailover        = Nothing
+    }
+
+-- | The DB 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.
+rdbiDBInstanceIdentifier :: Lens' RebootDBInstance Text
+rdbiDBInstanceIdentifier =
+    lens _rdbiDBInstanceIdentifier
+        (\s a -> s { _rdbiDBInstanceIdentifier = a })
+
+-- | When true, the reboot will be conducted through a MultiAZ failover.
+-- Constraint: You cannot specify true if the instance is not configured for
+-- MultiAZ.
+rdbiForceFailover :: Lens' RebootDBInstance (Maybe Bool)
+rdbiForceFailover =
+    lens _rdbiForceFailover (\s a -> s { _rdbiForceFailover = a })
+
+newtype RebootDBInstanceResponse = RebootDBInstanceResponse
+    { _rdbirDBInstance :: Maybe DBInstance
+    } deriving (Eq, Show)
+
+-- | 'RebootDBInstanceResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbirDBInstance' @::@ 'Maybe' 'DBInstance'
+--
+rebootDBInstanceResponse :: RebootDBInstanceResponse
+rebootDBInstanceResponse = RebootDBInstanceResponse
+    { _rdbirDBInstance = Nothing
+    }
+
+rdbirDBInstance :: Lens' RebootDBInstanceResponse (Maybe DBInstance)
+rdbirDBInstance = lens _rdbirDBInstance (\s a -> s { _rdbirDBInstance = a })
+
+instance ToPath RebootDBInstance where
+    toPath = const "/"
+
+instance ToQuery RebootDBInstance where
+    toQuery RebootDBInstance{..} = mconcat
+        [ "DBInstanceIdentifier" =? _rdbiDBInstanceIdentifier
+        , "ForceFailover"        =? _rdbiForceFailover
+        ]
+
+instance ToHeaders RebootDBInstance
+
+instance AWSRequest RebootDBInstance where
+    type Sv RebootDBInstance = RDS
+    type Rs RebootDBInstance = RebootDBInstanceResponse
+
+    request  = post "RebootDBInstance"
+    response = xmlResponse
+
+instance FromXML RebootDBInstanceResponse where
+    parseXML = withElement "RebootDBInstanceResult" $ \x -> RebootDBInstanceResponse
+        <$> x .@? "DBInstance"
diff --git a/gen/Network/AWS/RDS/RemoveSourceIdentifierFromSubscription.hs b/gen/Network/AWS/RDS/RemoveSourceIdentifierFromSubscription.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/RemoveSourceIdentifierFromSubscription.hs
@@ -0,0 +1,122 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.RemoveSourceIdentifierFromSubscription
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Removes a source identifier from an existing RDS event notification
+-- subscription.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RemoveSourceIdentifierFromSubscription.html>
+module Network.AWS.RDS.RemoveSourceIdentifierFromSubscription
+    (
+    -- * Request
+      RemoveSourceIdentifierFromSubscription
+    -- ** Request constructor
+    , removeSourceIdentifierFromSubscription
+    -- ** Request lenses
+    , rsifsSourceIdentifier
+    , rsifsSubscriptionName
+
+    -- * Response
+    , RemoveSourceIdentifierFromSubscriptionResponse
+    -- ** Response constructor
+    , removeSourceIdentifierFromSubscriptionResponse
+    -- ** Response lenses
+    , rsifsrEventSubscription
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data RemoveSourceIdentifierFromSubscription = RemoveSourceIdentifierFromSubscription
+    { _rsifsSourceIdentifier :: Text
+    , _rsifsSubscriptionName :: Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'RemoveSourceIdentifierFromSubscription' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rsifsSourceIdentifier' @::@ 'Text'
+--
+-- * 'rsifsSubscriptionName' @::@ 'Text'
+--
+removeSourceIdentifierFromSubscription :: Text -- ^ 'rsifsSubscriptionName'
+                                       -> Text -- ^ 'rsifsSourceIdentifier'
+                                       -> RemoveSourceIdentifierFromSubscription
+removeSourceIdentifierFromSubscription p1 p2 = RemoveSourceIdentifierFromSubscription
+    { _rsifsSubscriptionName = p1
+    , _rsifsSourceIdentifier = p2
+    }
+
+-- | The source identifier to be removed from the subscription, such as the DB
+-- instance identifier for a DB instance or the name of a security group.
+rsifsSourceIdentifier :: Lens' RemoveSourceIdentifierFromSubscription Text
+rsifsSourceIdentifier =
+    lens _rsifsSourceIdentifier (\s a -> s { _rsifsSourceIdentifier = a })
+
+-- | The name of the RDS event notification subscription you want to remove a
+-- source identifier from.
+rsifsSubscriptionName :: Lens' RemoveSourceIdentifierFromSubscription Text
+rsifsSubscriptionName =
+    lens _rsifsSubscriptionName (\s a -> s { _rsifsSubscriptionName = a })
+
+newtype RemoveSourceIdentifierFromSubscriptionResponse = RemoveSourceIdentifierFromSubscriptionResponse
+    { _rsifsrEventSubscription :: Maybe EventSubscription
+    } deriving (Eq, Show)
+
+-- | 'RemoveSourceIdentifierFromSubscriptionResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rsifsrEventSubscription' @::@ 'Maybe' 'EventSubscription'
+--
+removeSourceIdentifierFromSubscriptionResponse :: RemoveSourceIdentifierFromSubscriptionResponse
+removeSourceIdentifierFromSubscriptionResponse = RemoveSourceIdentifierFromSubscriptionResponse
+    { _rsifsrEventSubscription = Nothing
+    }
+
+rsifsrEventSubscription :: Lens' RemoveSourceIdentifierFromSubscriptionResponse (Maybe EventSubscription)
+rsifsrEventSubscription =
+    lens _rsifsrEventSubscription (\s a -> s { _rsifsrEventSubscription = a })
+
+instance ToPath RemoveSourceIdentifierFromSubscription where
+    toPath = const "/"
+
+instance ToQuery RemoveSourceIdentifierFromSubscription where
+    toQuery RemoveSourceIdentifierFromSubscription{..} = mconcat
+        [ "SourceIdentifier" =? _rsifsSourceIdentifier
+        , "SubscriptionName" =? _rsifsSubscriptionName
+        ]
+
+instance ToHeaders RemoveSourceIdentifierFromSubscription
+
+instance AWSRequest RemoveSourceIdentifierFromSubscription where
+    type Sv RemoveSourceIdentifierFromSubscription = RDS
+    type Rs RemoveSourceIdentifierFromSubscription = RemoveSourceIdentifierFromSubscriptionResponse
+
+    request  = post "RemoveSourceIdentifierFromSubscription"
+    response = xmlResponse
+
+instance FromXML RemoveSourceIdentifierFromSubscriptionResponse where
+    parseXML = withElement "RemoveSourceIdentifierFromSubscriptionResult" $ \x -> RemoveSourceIdentifierFromSubscriptionResponse
+        <$> x .@? "EventSubscription"
diff --git a/gen/Network/AWS/RDS/RemoveTagsFromResource.hs b/gen/Network/AWS/RDS/RemoveTagsFromResource.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/RemoveTagsFromResource.hs
@@ -0,0 +1,101 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.RemoveTagsFromResource
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Removes metadata tags from an Amazon RDS resource. For an overview on
+-- tagging an Amazon RDS resource, see Tagging Amazon RDS Resources.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RemoveTagsFromResource.html>
+module Network.AWS.RDS.RemoveTagsFromResource
+    (
+    -- * Request
+      RemoveTagsFromResource
+    -- ** Request constructor
+    , removeTagsFromResource
+    -- ** Request lenses
+    , rtfrResourceName
+    , rtfrTagKeys
+
+    -- * Response
+    , RemoveTagsFromResourceResponse
+    -- ** Response constructor
+    , removeTagsFromResourceResponse
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data RemoveTagsFromResource = RemoveTagsFromResource
+    { _rtfrResourceName :: Text
+    , _rtfrTagKeys      :: List "TagKeys" Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'RemoveTagsFromResource' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rtfrResourceName' @::@ 'Text'
+--
+-- * 'rtfrTagKeys' @::@ ['Text']
+--
+removeTagsFromResource :: Text -- ^ 'rtfrResourceName'
+                       -> RemoveTagsFromResource
+removeTagsFromResource p1 = RemoveTagsFromResource
+    { _rtfrResourceName = p1
+    , _rtfrTagKeys      = mempty
+    }
+
+-- | The Amazon RDS resource the tags will be removed from. This value is an
+-- Amazon Resource Name (ARN). For information about creating an ARN, see
+-- Constructing an RDS Amazon Resource Name (ARN).
+rtfrResourceName :: Lens' RemoveTagsFromResource Text
+rtfrResourceName = lens _rtfrResourceName (\s a -> s { _rtfrResourceName = a })
+
+-- | The tag key (name) of the tag to be removed.
+rtfrTagKeys :: Lens' RemoveTagsFromResource [Text]
+rtfrTagKeys = lens _rtfrTagKeys (\s a -> s { _rtfrTagKeys = a }) . _List
+
+data RemoveTagsFromResourceResponse = RemoveTagsFromResourceResponse
+    deriving (Eq, Ord, Show, Generic)
+
+-- | 'RemoveTagsFromResourceResponse' constructor.
+removeTagsFromResourceResponse :: RemoveTagsFromResourceResponse
+removeTagsFromResourceResponse = RemoveTagsFromResourceResponse
+
+instance ToPath RemoveTagsFromResource where
+    toPath = const "/"
+
+instance ToQuery RemoveTagsFromResource where
+    toQuery RemoveTagsFromResource{..} = mconcat
+        [ "ResourceName" =? _rtfrResourceName
+        , "TagKeys"      =? _rtfrTagKeys
+        ]
+
+instance ToHeaders RemoveTagsFromResource
+
+instance AWSRequest RemoveTagsFromResource where
+    type Sv RemoveTagsFromResource = RDS
+    type Rs RemoveTagsFromResource = RemoveTagsFromResourceResponse
+
+    request  = post "RemoveTagsFromResource"
+    response = nullResponse RemoveTagsFromResourceResponse
diff --git a/gen/Network/AWS/RDS/ResetDBParameterGroup.hs b/gen/Network/AWS/RDS/ResetDBParameterGroup.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/ResetDBParameterGroup.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.ResetDBParameterGroup
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Modifies the parameters of a DB parameter group to the engine/system
+-- default value. To reset specific parameters submit a list of the following:
+-- ParameterName and ApplyMethod. To reset the entire DB parameter group,
+-- specify the DBParameterGroup name and ResetAllParameters parameters. When
+-- resetting the entire group, dynamic parameters are updated immediately and
+-- static parameters are set to pending-reboot to take effect on the next DB
+-- instance restart or RebootDBInstance request.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ResetDBParameterGroup.html>
+module Network.AWS.RDS.ResetDBParameterGroup
+    (
+    -- * Request
+      ResetDBParameterGroup
+    -- ** Request constructor
+    , resetDBParameterGroup
+    -- ** Request lenses
+    , rdbpgDBParameterGroupName
+    , rdbpgParameters
+    , rdbpgResetAllParameters
+
+    -- * Response
+    , ResetDBParameterGroupResponse
+    -- ** Response constructor
+    , resetDBParameterGroupResponse
+    -- ** Response lenses
+    , rdbpgrDBParameterGroupName
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data ResetDBParameterGroup = ResetDBParameterGroup
+    { _rdbpgDBParameterGroupName :: Text
+    , _rdbpgParameters           :: List "Parameter" Parameter
+    , _rdbpgResetAllParameters   :: Maybe Bool
+    } deriving (Eq, Show)
+
+-- | 'ResetDBParameterGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbpgDBParameterGroupName' @::@ 'Text'
+--
+-- * 'rdbpgParameters' @::@ ['Parameter']
+--
+-- * 'rdbpgResetAllParameters' @::@ 'Maybe' 'Bool'
+--
+resetDBParameterGroup :: Text -- ^ 'rdbpgDBParameterGroupName'
+                      -> ResetDBParameterGroup
+resetDBParameterGroup p1 = ResetDBParameterGroup
+    { _rdbpgDBParameterGroupName = p1
+    , _rdbpgResetAllParameters   = Nothing
+    , _rdbpgParameters           = mempty
+    }
+
+-- | The name of the DB parameter group. Constraints: Must be 1 to 255
+-- alphanumeric characters First character must be a letter Cannot end with
+-- a hyphen or contain two consecutive hyphens.
+rdbpgDBParameterGroupName :: Lens' ResetDBParameterGroup Text
+rdbpgDBParameterGroupName =
+    lens _rdbpgDBParameterGroupName
+        (\s a -> s { _rdbpgDBParameterGroupName = a })
+
+-- | An array of parameter names, values, and the apply method for the
+-- parameter update. At least one parameter name, value, and apply method
+-- must be supplied; subsequent arguments are optional. A maximum of 20
+-- parameters may be modified in a single request. MySQL Valid Values (for
+-- Apply method): immediate | pending-reboot You can use the immediate value
+-- with dynamic parameters only. You can use the pending-reboot value for
+-- both dynamic and static parameters, and changes are applied when DB
+-- instance reboots. Oracle Valid Values (for Apply method): pending-reboot.
+rdbpgParameters :: Lens' ResetDBParameterGroup [Parameter]
+rdbpgParameters = lens _rdbpgParameters (\s a -> s { _rdbpgParameters = a }) . _List
+
+-- | Specifies whether (true) or not (false) to reset all parameters in the DB
+-- parameter group to default values. Default: true.
+rdbpgResetAllParameters :: Lens' ResetDBParameterGroup (Maybe Bool)
+rdbpgResetAllParameters =
+    lens _rdbpgResetAllParameters (\s a -> s { _rdbpgResetAllParameters = a })
+
+newtype ResetDBParameterGroupResponse = ResetDBParameterGroupResponse
+    { _rdbpgrDBParameterGroupName :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'ResetDBParameterGroupResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbpgrDBParameterGroupName' @::@ 'Maybe' 'Text'
+--
+resetDBParameterGroupResponse :: ResetDBParameterGroupResponse
+resetDBParameterGroupResponse = ResetDBParameterGroupResponse
+    { _rdbpgrDBParameterGroupName = Nothing
+    }
+
+-- | The name of the DB parameter group.
+rdbpgrDBParameterGroupName :: Lens' ResetDBParameterGroupResponse (Maybe Text)
+rdbpgrDBParameterGroupName =
+    lens _rdbpgrDBParameterGroupName
+        (\s a -> s { _rdbpgrDBParameterGroupName = a })
+
+instance ToPath ResetDBParameterGroup where
+    toPath = const "/"
+
+instance ToQuery ResetDBParameterGroup where
+    toQuery ResetDBParameterGroup{..} = mconcat
+        [ "DBParameterGroupName" =? _rdbpgDBParameterGroupName
+        , "Parameters"           =? _rdbpgParameters
+        , "ResetAllParameters"   =? _rdbpgResetAllParameters
+        ]
+
+instance ToHeaders ResetDBParameterGroup
+
+instance AWSRequest ResetDBParameterGroup where
+    type Sv ResetDBParameterGroup = RDS
+    type Rs ResetDBParameterGroup = ResetDBParameterGroupResponse
+
+    request  = post "ResetDBParameterGroup"
+    response = xmlResponse
+
+instance FromXML ResetDBParameterGroupResponse where
+    parseXML = withElement "ResetDBParameterGroupResult" $ \x -> ResetDBParameterGroupResponse
+        <$> x .@? "DBParameterGroupName"
diff --git a/gen/Network/AWS/RDS/RestoreDBInstanceFromDBSnapshot.hs b/gen/Network/AWS/RDS/RestoreDBInstanceFromDBSnapshot.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/RestoreDBInstanceFromDBSnapshot.hs
@@ -0,0 +1,348 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.RestoreDBInstanceFromDBSnapshot
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Creates a new DB instance from a DB snapshot. The target database is
+-- created from the source database restore point with the same configuration
+-- as the original source database, except that the new RDS instance is
+-- created with the default security group.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceFromDBSnapshot.html>
+module Network.AWS.RDS.RestoreDBInstanceFromDBSnapshot
+    (
+    -- * Request
+      RestoreDBInstanceFromDBSnapshot
+    -- ** Request constructor
+    , restoreDBInstanceFromDBSnapshot
+    -- ** Request lenses
+    , rdbifdbsAutoMinorVersionUpgrade
+    , rdbifdbsAvailabilityZone
+    , rdbifdbsDBInstanceClass
+    , rdbifdbsDBInstanceIdentifier
+    , rdbifdbsDBName
+    , rdbifdbsDBSnapshotIdentifier
+    , rdbifdbsDBSubnetGroupName
+    , rdbifdbsEngine
+    , rdbifdbsIops
+    , rdbifdbsLicenseModel
+    , rdbifdbsMultiAZ
+    , rdbifdbsOptionGroupName
+    , rdbifdbsPort
+    , rdbifdbsPubliclyAccessible
+    , rdbifdbsStorageType
+    , rdbifdbsTags
+    , rdbifdbsTdeCredentialArn
+    , rdbifdbsTdeCredentialPassword
+
+    -- * Response
+    , RestoreDBInstanceFromDBSnapshotResponse
+    -- ** Response constructor
+    , restoreDBInstanceFromDBSnapshotResponse
+    -- ** Response lenses
+    , rdbifdbsrDBInstance
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data RestoreDBInstanceFromDBSnapshot = RestoreDBInstanceFromDBSnapshot
+    { _rdbifdbsAutoMinorVersionUpgrade :: Maybe Bool
+    , _rdbifdbsAvailabilityZone        :: Maybe Text
+    , _rdbifdbsDBInstanceClass         :: Maybe Text
+    , _rdbifdbsDBInstanceIdentifier    :: Text
+    , _rdbifdbsDBName                  :: Maybe Text
+    , _rdbifdbsDBSnapshotIdentifier    :: Text
+    , _rdbifdbsDBSubnetGroupName       :: Maybe Text
+    , _rdbifdbsEngine                  :: Maybe Text
+    , _rdbifdbsIops                    :: Maybe Int
+    , _rdbifdbsLicenseModel            :: Maybe Text
+    , _rdbifdbsMultiAZ                 :: Maybe Bool
+    , _rdbifdbsOptionGroupName         :: Maybe Text
+    , _rdbifdbsPort                    :: Maybe Int
+    , _rdbifdbsPubliclyAccessible      :: Maybe Bool
+    , _rdbifdbsStorageType             :: Maybe Text
+    , _rdbifdbsTags                    :: List "Tag" Tag
+    , _rdbifdbsTdeCredentialArn        :: Maybe Text
+    , _rdbifdbsTdeCredentialPassword   :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'RestoreDBInstanceFromDBSnapshot' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbifdbsAutoMinorVersionUpgrade' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdbifdbsAvailabilityZone' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbifdbsDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbifdbsDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'rdbifdbsDBName' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbifdbsDBSnapshotIdentifier' @::@ 'Text'
+--
+-- * 'rdbifdbsDBSubnetGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbifdbsEngine' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbifdbsIops' @::@ 'Maybe' 'Int'
+--
+-- * 'rdbifdbsLicenseModel' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbifdbsMultiAZ' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdbifdbsOptionGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbifdbsPort' @::@ 'Maybe' 'Int'
+--
+-- * 'rdbifdbsPubliclyAccessible' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdbifdbsStorageType' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbifdbsTags' @::@ ['Tag']
+--
+-- * 'rdbifdbsTdeCredentialArn' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbifdbsTdeCredentialPassword' @::@ 'Maybe' 'Text'
+--
+restoreDBInstanceFromDBSnapshot :: Text -- ^ 'rdbifdbsDBInstanceIdentifier'
+                                -> Text -- ^ 'rdbifdbsDBSnapshotIdentifier'
+                                -> RestoreDBInstanceFromDBSnapshot
+restoreDBInstanceFromDBSnapshot p1 p2 = RestoreDBInstanceFromDBSnapshot
+    { _rdbifdbsDBInstanceIdentifier    = p1
+    , _rdbifdbsDBSnapshotIdentifier    = p2
+    , _rdbifdbsDBInstanceClass         = Nothing
+    , _rdbifdbsPort                    = Nothing
+    , _rdbifdbsAvailabilityZone        = Nothing
+    , _rdbifdbsDBSubnetGroupName       = Nothing
+    , _rdbifdbsMultiAZ                 = Nothing
+    , _rdbifdbsPubliclyAccessible      = Nothing
+    , _rdbifdbsAutoMinorVersionUpgrade = Nothing
+    , _rdbifdbsLicenseModel            = Nothing
+    , _rdbifdbsDBName                  = Nothing
+    , _rdbifdbsEngine                  = Nothing
+    , _rdbifdbsIops                    = Nothing
+    , _rdbifdbsOptionGroupName         = Nothing
+    , _rdbifdbsTags                    = mempty
+    , _rdbifdbsStorageType             = Nothing
+    , _rdbifdbsTdeCredentialArn        = Nothing
+    , _rdbifdbsTdeCredentialPassword   = Nothing
+    }
+
+-- | Indicates that minor version upgrades will be applied automatically to
+-- the DB instance during the maintenance window.
+rdbifdbsAutoMinorVersionUpgrade :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Bool)
+rdbifdbsAutoMinorVersionUpgrade =
+    lens _rdbifdbsAutoMinorVersionUpgrade
+        (\s a -> s { _rdbifdbsAutoMinorVersionUpgrade = a })
+
+-- | The EC2 Availability Zone that the database instance will be created in.
+-- Default: A random, system-chosen Availability Zone. Constraint: You
+-- cannot specify the AvailabilityZone parameter if the MultiAZ parameter is
+-- set to true. Example: us-east-1a.
+rdbifdbsAvailabilityZone :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Text)
+rdbifdbsAvailabilityZone =
+    lens _rdbifdbsAvailabilityZone
+        (\s a -> s { _rdbifdbsAvailabilityZone = a })
+
+-- | The compute and memory capacity of the Amazon RDS DB instance. Valid
+-- Values: db.t1.micro | db.m1.small | db.m1.medium | db.m1.large |
+-- db.m1.xlarge | db.m2.2xlarge | db.m2.4xlarge | db.m3.medium | db.m3.large
+-- | db.m3.xlarge | db.m3.2xlarge | db.r3.large | db.r3.xlarge |
+-- db.r3.2xlarge | db.r3.4xlarge | db.r3.8xlarge | db.t2.micro | db.t2.small
+-- | db.t2.medium.
+rdbifdbsDBInstanceClass :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Text)
+rdbifdbsDBInstanceClass =
+    lens _rdbifdbsDBInstanceClass (\s a -> s { _rdbifdbsDBInstanceClass = a })
+
+-- | Name of the DB instance to create from the DB snapshot. This parameter
+-- isn't case sensitive. Constraints: Must contain from 1 to 255
+-- alphanumeric characters or hyphens First character must be a letter
+-- Cannot end with a hyphen or contain two consecutive hyphens Example:
+-- my-snapshot-id.
+rdbifdbsDBInstanceIdentifier :: Lens' RestoreDBInstanceFromDBSnapshot Text
+rdbifdbsDBInstanceIdentifier =
+    lens _rdbifdbsDBInstanceIdentifier
+        (\s a -> s { _rdbifdbsDBInstanceIdentifier = a })
+
+-- | The database name for the restored DB instance.
+rdbifdbsDBName :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Text)
+rdbifdbsDBName = lens _rdbifdbsDBName (\s a -> s { _rdbifdbsDBName = a })
+
+-- | The identifier for the DB snapshot to restore from. 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.
+rdbifdbsDBSnapshotIdentifier :: Lens' RestoreDBInstanceFromDBSnapshot Text
+rdbifdbsDBSnapshotIdentifier =
+    lens _rdbifdbsDBSnapshotIdentifier
+        (\s a -> s { _rdbifdbsDBSnapshotIdentifier = a })
+
+-- | The DB subnet group name to use for the new instance.
+rdbifdbsDBSubnetGroupName :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Text)
+rdbifdbsDBSubnetGroupName =
+    lens _rdbifdbsDBSubnetGroupName
+        (\s a -> s { _rdbifdbsDBSubnetGroupName = a })
+
+-- | The database engine to use for the new instance. Default: The same as
+-- source Constraint: Must be compatible with the engine of the source
+-- Example: oracle-ee.
+rdbifdbsEngine :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Text)
+rdbifdbsEngine = lens _rdbifdbsEngine (\s a -> s { _rdbifdbsEngine = a })
+
+-- | Specifies the amount of provisioned IOPS for the DB instance, expressed
+-- in I/O operations per second. If this parameter is not specified, the
+-- IOPS value will be taken from the backup. If this parameter is set to 0,
+-- the new instance will be converted to a non-PIOPS instance, which will
+-- take additional time, though your DB instance will be available for
+-- connections before the conversion starts. Constraints: Must be an integer
+-- greater than 1000. SQL Server Setting the IOPS value for the SQL Server
+-- database engine is not supported.
+rdbifdbsIops :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Int)
+rdbifdbsIops = lens _rdbifdbsIops (\s a -> s { _rdbifdbsIops = a })
+
+-- | License model information for the restored DB instance. Default: Same as
+-- source. Valid values: license-included | bring-your-own-license |
+-- general-public-license.
+rdbifdbsLicenseModel :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Text)
+rdbifdbsLicenseModel =
+    lens _rdbifdbsLicenseModel (\s a -> s { _rdbifdbsLicenseModel = a })
+
+-- | Specifies if the DB instance is a Multi-AZ deployment. Constraint: You
+-- cannot specify the AvailabilityZone parameter if the MultiAZ parameter is
+-- set to true.
+rdbifdbsMultiAZ :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Bool)
+rdbifdbsMultiAZ = lens _rdbifdbsMultiAZ (\s a -> s { _rdbifdbsMultiAZ = a })
+
+-- | The name of the option group to be used for the restored DB instance.
+-- Permanent options, such as the TDE option for Oracle Advanced Security
+-- TDE, cannot be removed from an option group, and that option group cannot
+-- be removed from a DB instance once it is associated with a DB instance.
+rdbifdbsOptionGroupName :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Text)
+rdbifdbsOptionGroupName =
+    lens _rdbifdbsOptionGroupName (\s a -> s { _rdbifdbsOptionGroupName = a })
+
+-- | The port number on which the database accepts connections. Default: The
+-- same port as the original DB instance Constraints: Value must be
+-- 1150-65535.
+rdbifdbsPort :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Int)
+rdbifdbsPort = lens _rdbifdbsPort (\s a -> s { _rdbifdbsPort = a })
+
+-- | Specifies the accessibility options for the DB instance. A value of true
+-- specifies an Internet-facing instance with a publicly resolvable DNS
+-- name, which resolves to a public IP address. A value of false specifies
+-- an internal instance with a DNS name that resolves to a private IP
+-- address. Default: The default behavior varies depending on whether a VPC
+-- has been requested or not. The following list shows the default behavior
+-- in each case. Default VPC:true VPC:false If no DB subnet group has been
+-- specified as part of the request and the PubliclyAccessible value has not
+-- been set, the DB instance will be publicly accessible. If a specific DB
+-- subnet group has been specified as part of the request and the
+-- PubliclyAccessible value has not been set, the DB instance will be
+-- private.
+rdbifdbsPubliclyAccessible :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Bool)
+rdbifdbsPubliclyAccessible =
+    lens _rdbifdbsPubliclyAccessible
+        (\s a -> s { _rdbifdbsPubliclyAccessible = a })
+
+-- | Specifies storage type to be associated with the DB Instance. Valid
+-- values: standard | gp2 | io1 If you specify io1, you must also include a
+-- value for the Iops parameter.
+rdbifdbsStorageType :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Text)
+rdbifdbsStorageType =
+    lens _rdbifdbsStorageType (\s a -> s { _rdbifdbsStorageType = a })
+
+rdbifdbsTags :: Lens' RestoreDBInstanceFromDBSnapshot [Tag]
+rdbifdbsTags = lens _rdbifdbsTags (\s a -> s { _rdbifdbsTags = a }) . _List
+
+-- | The ARN from the Key Store with which to associate the instance for TDE
+-- encryption.
+rdbifdbsTdeCredentialArn :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Text)
+rdbifdbsTdeCredentialArn =
+    lens _rdbifdbsTdeCredentialArn
+        (\s a -> s { _rdbifdbsTdeCredentialArn = a })
+
+-- | The password for the given ARN from the Key Store in order to access the
+-- device.
+rdbifdbsTdeCredentialPassword :: Lens' RestoreDBInstanceFromDBSnapshot (Maybe Text)
+rdbifdbsTdeCredentialPassword =
+    lens _rdbifdbsTdeCredentialPassword
+        (\s a -> s { _rdbifdbsTdeCredentialPassword = a })
+
+newtype RestoreDBInstanceFromDBSnapshotResponse = RestoreDBInstanceFromDBSnapshotResponse
+    { _rdbifdbsrDBInstance :: Maybe DBInstance
+    } deriving (Eq, Show)
+
+-- | 'RestoreDBInstanceFromDBSnapshotResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbifdbsrDBInstance' @::@ 'Maybe' 'DBInstance'
+--
+restoreDBInstanceFromDBSnapshotResponse :: RestoreDBInstanceFromDBSnapshotResponse
+restoreDBInstanceFromDBSnapshotResponse = RestoreDBInstanceFromDBSnapshotResponse
+    { _rdbifdbsrDBInstance = Nothing
+    }
+
+rdbifdbsrDBInstance :: Lens' RestoreDBInstanceFromDBSnapshotResponse (Maybe DBInstance)
+rdbifdbsrDBInstance =
+    lens _rdbifdbsrDBInstance (\s a -> s { _rdbifdbsrDBInstance = a })
+
+instance ToPath RestoreDBInstanceFromDBSnapshot where
+    toPath = const "/"
+
+instance ToQuery RestoreDBInstanceFromDBSnapshot where
+    toQuery RestoreDBInstanceFromDBSnapshot{..} = mconcat
+        [ "AutoMinorVersionUpgrade" =? _rdbifdbsAutoMinorVersionUpgrade
+        , "AvailabilityZone"        =? _rdbifdbsAvailabilityZone
+        , "DBInstanceClass"         =? _rdbifdbsDBInstanceClass
+        , "DBInstanceIdentifier"    =? _rdbifdbsDBInstanceIdentifier
+        , "DBName"                  =? _rdbifdbsDBName
+        , "DBSnapshotIdentifier"    =? _rdbifdbsDBSnapshotIdentifier
+        , "DBSubnetGroupName"       =? _rdbifdbsDBSubnetGroupName
+        , "Engine"                  =? _rdbifdbsEngine
+        , "Iops"                    =? _rdbifdbsIops
+        , "LicenseModel"            =? _rdbifdbsLicenseModel
+        , "MultiAZ"                 =? _rdbifdbsMultiAZ
+        , "OptionGroupName"         =? _rdbifdbsOptionGroupName
+        , "Port"                    =? _rdbifdbsPort
+        , "PubliclyAccessible"      =? _rdbifdbsPubliclyAccessible
+        , "StorageType"             =? _rdbifdbsStorageType
+        , "Tags"                    =? _rdbifdbsTags
+        , "TdeCredentialArn"        =? _rdbifdbsTdeCredentialArn
+        , "TdeCredentialPassword"   =? _rdbifdbsTdeCredentialPassword
+        ]
+
+instance ToHeaders RestoreDBInstanceFromDBSnapshot
+
+instance AWSRequest RestoreDBInstanceFromDBSnapshot where
+    type Sv RestoreDBInstanceFromDBSnapshot = RDS
+    type Rs RestoreDBInstanceFromDBSnapshot = RestoreDBInstanceFromDBSnapshotResponse
+
+    request  = post "RestoreDBInstanceFromDBSnapshot"
+    response = xmlResponse
+
+instance FromXML RestoreDBInstanceFromDBSnapshotResponse where
+    parseXML = withElement "RestoreDBInstanceFromDBSnapshotResult" $ \x -> RestoreDBInstanceFromDBSnapshotResponse
+        <$> x .@? "DBInstance"
diff --git a/gen/Network/AWS/RDS/RestoreDBInstanceToPointInTime.hs b/gen/Network/AWS/RDS/RestoreDBInstanceToPointInTime.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/RestoreDBInstanceToPointInTime.hs
@@ -0,0 +1,375 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.RestoreDBInstanceToPointInTime
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Restores a DB instance to an arbitrary point-in-time. Users can restore to
+-- any point in time before the latestRestorableTime for up to
+-- backupRetentionPeriod days. The target database is created from the source
+-- database with the same configuration as the original database except that
+-- the DB instance is created with the default DB security group.
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RestoreDBInstanceToPointInTime.html>
+module Network.AWS.RDS.RestoreDBInstanceToPointInTime
+    (
+    -- * Request
+      RestoreDBInstanceToPointInTime
+    -- ** Request constructor
+    , restoreDBInstanceToPointInTime
+    -- ** Request lenses
+    , rdbitpitAutoMinorVersionUpgrade
+    , rdbitpitAvailabilityZone
+    , rdbitpitDBInstanceClass
+    , rdbitpitDBName
+    , rdbitpitDBSubnetGroupName
+    , rdbitpitEngine
+    , rdbitpitIops
+    , rdbitpitLicenseModel
+    , rdbitpitMultiAZ
+    , rdbitpitOptionGroupName
+    , rdbitpitPort
+    , rdbitpitPubliclyAccessible
+    , rdbitpitRestoreTime
+    , rdbitpitSourceDBInstanceIdentifier
+    , rdbitpitStorageType
+    , rdbitpitTags
+    , rdbitpitTargetDBInstanceIdentifier
+    , rdbitpitTdeCredentialArn
+    , rdbitpitTdeCredentialPassword
+    , rdbitpitUseLatestRestorableTime
+
+    -- * Response
+    , RestoreDBInstanceToPointInTimeResponse
+    -- ** Response constructor
+    , restoreDBInstanceToPointInTimeResponse
+    -- ** Response lenses
+    , rdbitpitrDBInstance
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data RestoreDBInstanceToPointInTime = RestoreDBInstanceToPointInTime
+    { _rdbitpitAutoMinorVersionUpgrade    :: Maybe Bool
+    , _rdbitpitAvailabilityZone           :: Maybe Text
+    , _rdbitpitDBInstanceClass            :: Maybe Text
+    , _rdbitpitDBName                     :: Maybe Text
+    , _rdbitpitDBSubnetGroupName          :: Maybe Text
+    , _rdbitpitEngine                     :: Maybe Text
+    , _rdbitpitIops                       :: Maybe Int
+    , _rdbitpitLicenseModel               :: Maybe Text
+    , _rdbitpitMultiAZ                    :: Maybe Bool
+    , _rdbitpitOptionGroupName            :: Maybe Text
+    , _rdbitpitPort                       :: Maybe Int
+    , _rdbitpitPubliclyAccessible         :: Maybe Bool
+    , _rdbitpitRestoreTime                :: Maybe RFC822
+    , _rdbitpitSourceDBInstanceIdentifier :: Text
+    , _rdbitpitStorageType                :: Maybe Text
+    , _rdbitpitTags                       :: List "Tag" Tag
+    , _rdbitpitTargetDBInstanceIdentifier :: Text
+    , _rdbitpitTdeCredentialArn           :: Maybe Text
+    , _rdbitpitTdeCredentialPassword      :: Maybe Text
+    , _rdbitpitUseLatestRestorableTime    :: Maybe Bool
+    } deriving (Eq, Show)
+
+-- | 'RestoreDBInstanceToPointInTime' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbitpitAutoMinorVersionUpgrade' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdbitpitAvailabilityZone' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbitpitDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbitpitDBName' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbitpitDBSubnetGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbitpitEngine' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbitpitIops' @::@ 'Maybe' 'Int'
+--
+-- * 'rdbitpitLicenseModel' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbitpitMultiAZ' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdbitpitOptionGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbitpitPort' @::@ 'Maybe' 'Int'
+--
+-- * 'rdbitpitPubliclyAccessible' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdbitpitRestoreTime' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'rdbitpitSourceDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'rdbitpitStorageType' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbitpitTags' @::@ ['Tag']
+--
+-- * 'rdbitpitTargetDBInstanceIdentifier' @::@ 'Text'
+--
+-- * 'rdbitpitTdeCredentialArn' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbitpitTdeCredentialPassword' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbitpitUseLatestRestorableTime' @::@ 'Maybe' 'Bool'
+--
+restoreDBInstanceToPointInTime :: Text -- ^ 'rdbitpitSourceDBInstanceIdentifier'
+                               -> Text -- ^ 'rdbitpitTargetDBInstanceIdentifier'
+                               -> RestoreDBInstanceToPointInTime
+restoreDBInstanceToPointInTime p1 p2 = RestoreDBInstanceToPointInTime
+    { _rdbitpitSourceDBInstanceIdentifier = p1
+    , _rdbitpitTargetDBInstanceIdentifier = p2
+    , _rdbitpitRestoreTime                = Nothing
+    , _rdbitpitUseLatestRestorableTime    = Nothing
+    , _rdbitpitDBInstanceClass            = Nothing
+    , _rdbitpitPort                       = Nothing
+    , _rdbitpitAvailabilityZone           = Nothing
+    , _rdbitpitDBSubnetGroupName          = Nothing
+    , _rdbitpitMultiAZ                    = Nothing
+    , _rdbitpitPubliclyAccessible         = Nothing
+    , _rdbitpitAutoMinorVersionUpgrade    = Nothing
+    , _rdbitpitLicenseModel               = Nothing
+    , _rdbitpitDBName                     = Nothing
+    , _rdbitpitEngine                     = Nothing
+    , _rdbitpitIops                       = Nothing
+    , _rdbitpitOptionGroupName            = Nothing
+    , _rdbitpitTags                       = mempty
+    , _rdbitpitStorageType                = Nothing
+    , _rdbitpitTdeCredentialArn           = Nothing
+    , _rdbitpitTdeCredentialPassword      = Nothing
+    }
+
+-- | Indicates that minor version upgrades will be applied automatically to
+-- the DB instance during the maintenance window.
+rdbitpitAutoMinorVersionUpgrade :: Lens' RestoreDBInstanceToPointInTime (Maybe Bool)
+rdbitpitAutoMinorVersionUpgrade =
+    lens _rdbitpitAutoMinorVersionUpgrade
+        (\s a -> s { _rdbitpitAutoMinorVersionUpgrade = a })
+
+-- | The EC2 Availability Zone that the database instance will be created in.
+-- Default: A random, system-chosen Availability Zone. Constraint: You
+-- cannot specify the AvailabilityZone parameter if the MultiAZ parameter is
+-- set to true. Example: us-east-1a.
+rdbitpitAvailabilityZone :: Lens' RestoreDBInstanceToPointInTime (Maybe Text)
+rdbitpitAvailabilityZone =
+    lens _rdbitpitAvailabilityZone
+        (\s a -> s { _rdbitpitAvailabilityZone = a })
+
+-- | The compute and memory capacity of the Amazon RDS DB instance. Valid
+-- Values: db.t1.micro | db.m1.small | db.m1.medium | db.m1.large |
+-- db.m1.xlarge | db.m2.2xlarge | db.m2.4xlarge | db.m3.medium | db.m3.large
+-- | db.m3.xlarge | db.m3.2xlarge | db.r3.large | db.r3.xlarge |
+-- db.r3.2xlarge | db.r3.4xlarge | db.r3.8xlarge | db.t2.micro | db.t2.small
+-- | db.t2.medium Default: The same DBInstanceClass as the original DB
+-- instance.
+rdbitpitDBInstanceClass :: Lens' RestoreDBInstanceToPointInTime (Maybe Text)
+rdbitpitDBInstanceClass =
+    lens _rdbitpitDBInstanceClass (\s a -> s { _rdbitpitDBInstanceClass = a })
+
+-- | The database name for the restored DB instance.
+rdbitpitDBName :: Lens' RestoreDBInstanceToPointInTime (Maybe Text)
+rdbitpitDBName = lens _rdbitpitDBName (\s a -> s { _rdbitpitDBName = a })
+
+-- | The DB subnet group name to use for the new instance.
+rdbitpitDBSubnetGroupName :: Lens' RestoreDBInstanceToPointInTime (Maybe Text)
+rdbitpitDBSubnetGroupName =
+    lens _rdbitpitDBSubnetGroupName
+        (\s a -> s { _rdbitpitDBSubnetGroupName = a })
+
+-- | The database engine to use for the new instance. Default: The same as
+-- source Constraint: Must be compatible with the engine of the source
+-- Example: oracle-ee.
+rdbitpitEngine :: Lens' RestoreDBInstanceToPointInTime (Maybe Text)
+rdbitpitEngine = lens _rdbitpitEngine (\s a -> s { _rdbitpitEngine = a })
+
+-- | The amount of Provisioned IOPS (input/output operations per second) to be
+-- initially allocated for the DB instance. Constraints: Must be an integer
+-- greater than 1000. SQL Server Setting the IOPS value for the SQL Server
+-- database engine is not supported.
+rdbitpitIops :: Lens' RestoreDBInstanceToPointInTime (Maybe Int)
+rdbitpitIops = lens _rdbitpitIops (\s a -> s { _rdbitpitIops = a })
+
+-- | License model information for the restored DB instance. Default: Same as
+-- source. Valid values: license-included | bring-your-own-license |
+-- general-public-license.
+rdbitpitLicenseModel :: Lens' RestoreDBInstanceToPointInTime (Maybe Text)
+rdbitpitLicenseModel =
+    lens _rdbitpitLicenseModel (\s a -> s { _rdbitpitLicenseModel = a })
+
+-- | Specifies if the DB instance is a Multi-AZ deployment. Constraint: You
+-- cannot specify the AvailabilityZone parameter if the MultiAZ parameter is
+-- set to true.
+rdbitpitMultiAZ :: Lens' RestoreDBInstanceToPointInTime (Maybe Bool)
+rdbitpitMultiAZ = lens _rdbitpitMultiAZ (\s a -> s { _rdbitpitMultiAZ = a })
+
+-- | The name of the option group to be used for the restored DB instance.
+-- Permanent options, such as the TDE option for Oracle Advanced Security
+-- TDE, cannot be removed from an option group, and that option group cannot
+-- be removed from a DB instance once it is associated with a DB instance.
+rdbitpitOptionGroupName :: Lens' RestoreDBInstanceToPointInTime (Maybe Text)
+rdbitpitOptionGroupName =
+    lens _rdbitpitOptionGroupName (\s a -> s { _rdbitpitOptionGroupName = a })
+
+-- | The port number on which the database accepts connections. Constraints:
+-- Value must be 1150-65535 Default: The same port as the original DB
+-- instance.
+rdbitpitPort :: Lens' RestoreDBInstanceToPointInTime (Maybe Int)
+rdbitpitPort = lens _rdbitpitPort (\s a -> s { _rdbitpitPort = a })
+
+-- | Specifies the accessibility options for the DB instance. A value of true
+-- specifies an Internet-facing instance with a publicly resolvable DNS
+-- name, which resolves to a public IP address. A value of false specifies
+-- an internal instance with a DNS name that resolves to a private IP
+-- address. Default: The default behavior varies depending on whether a VPC
+-- has been requested or not. The following list shows the default behavior
+-- in each case. Default VPC:true VPC:false If no DB subnet group has been
+-- specified as part of the request and the PubliclyAccessible value has not
+-- been set, the DB instance will be publicly accessible. If a specific DB
+-- subnet group has been specified as part of the request and the
+-- PubliclyAccessible value has not been set, the DB instance will be
+-- private.
+rdbitpitPubliclyAccessible :: Lens' RestoreDBInstanceToPointInTime (Maybe Bool)
+rdbitpitPubliclyAccessible =
+    lens _rdbitpitPubliclyAccessible
+        (\s a -> s { _rdbitpitPubliclyAccessible = a })
+
+-- | The date and time to restore from. Valid Values: Value must be a UTC time
+-- Constraints: Must be before the latest restorable time for the DB
+-- instance Cannot be specified if UseLatestRestorableTime parameter is true
+-- Example: 2009-09-07T23:45:00Z.
+rdbitpitRestoreTime :: Lens' RestoreDBInstanceToPointInTime (Maybe UTCTime)
+rdbitpitRestoreTime =
+    lens _rdbitpitRestoreTime (\s a -> s { _rdbitpitRestoreTime = a })
+        . mapping _Time
+
+-- | The identifier of the source DB instance from which to restore.
+-- Constraints: Must be the identifier of an existing database instance 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.
+rdbitpitSourceDBInstanceIdentifier :: Lens' RestoreDBInstanceToPointInTime Text
+rdbitpitSourceDBInstanceIdentifier =
+    lens _rdbitpitSourceDBInstanceIdentifier
+        (\s a -> s { _rdbitpitSourceDBInstanceIdentifier = a })
+
+-- | Specifies storage type to be associated with the DB Instance. Valid
+-- values: standard | gp2 | io1 If you specify io1, you must also include a
+-- value for the Iops parameter.
+rdbitpitStorageType :: Lens' RestoreDBInstanceToPointInTime (Maybe Text)
+rdbitpitStorageType =
+    lens _rdbitpitStorageType (\s a -> s { _rdbitpitStorageType = a })
+
+rdbitpitTags :: Lens' RestoreDBInstanceToPointInTime [Tag]
+rdbitpitTags = lens _rdbitpitTags (\s a -> s { _rdbitpitTags = a }) . _List
+
+-- | The name of the new database instance to be created. 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.
+rdbitpitTargetDBInstanceIdentifier :: Lens' RestoreDBInstanceToPointInTime Text
+rdbitpitTargetDBInstanceIdentifier =
+    lens _rdbitpitTargetDBInstanceIdentifier
+        (\s a -> s { _rdbitpitTargetDBInstanceIdentifier = a })
+
+-- | The ARN from the Key Store with which to associate the instance for TDE
+-- encryption.
+rdbitpitTdeCredentialArn :: Lens' RestoreDBInstanceToPointInTime (Maybe Text)
+rdbitpitTdeCredentialArn =
+    lens _rdbitpitTdeCredentialArn
+        (\s a -> s { _rdbitpitTdeCredentialArn = a })
+
+-- | The password for the given ARN from the Key Store in order to access the
+-- device.
+rdbitpitTdeCredentialPassword :: Lens' RestoreDBInstanceToPointInTime (Maybe Text)
+rdbitpitTdeCredentialPassword =
+    lens _rdbitpitTdeCredentialPassword
+        (\s a -> s { _rdbitpitTdeCredentialPassword = a })
+
+-- | Specifies whether (true) or not (false) the DB instance is restored from
+-- the latest backup time. Default: false Constraints: Cannot be specified
+-- if RestoreTime parameter is provided.
+rdbitpitUseLatestRestorableTime :: Lens' RestoreDBInstanceToPointInTime (Maybe Bool)
+rdbitpitUseLatestRestorableTime =
+    lens _rdbitpitUseLatestRestorableTime
+        (\s a -> s { _rdbitpitUseLatestRestorableTime = a })
+
+newtype RestoreDBInstanceToPointInTimeResponse = RestoreDBInstanceToPointInTimeResponse
+    { _rdbitpitrDBInstance :: Maybe DBInstance
+    } deriving (Eq, Show)
+
+-- | 'RestoreDBInstanceToPointInTimeResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbitpitrDBInstance' @::@ 'Maybe' 'DBInstance'
+--
+restoreDBInstanceToPointInTimeResponse :: RestoreDBInstanceToPointInTimeResponse
+restoreDBInstanceToPointInTimeResponse = RestoreDBInstanceToPointInTimeResponse
+    { _rdbitpitrDBInstance = Nothing
+    }
+
+rdbitpitrDBInstance :: Lens' RestoreDBInstanceToPointInTimeResponse (Maybe DBInstance)
+rdbitpitrDBInstance =
+    lens _rdbitpitrDBInstance (\s a -> s { _rdbitpitrDBInstance = a })
+
+instance ToPath RestoreDBInstanceToPointInTime where
+    toPath = const "/"
+
+instance ToQuery RestoreDBInstanceToPointInTime where
+    toQuery RestoreDBInstanceToPointInTime{..} = mconcat
+        [ "AutoMinorVersionUpgrade"    =? _rdbitpitAutoMinorVersionUpgrade
+        , "AvailabilityZone"           =? _rdbitpitAvailabilityZone
+        , "DBInstanceClass"            =? _rdbitpitDBInstanceClass
+        , "DBName"                     =? _rdbitpitDBName
+        , "DBSubnetGroupName"          =? _rdbitpitDBSubnetGroupName
+        , "Engine"                     =? _rdbitpitEngine
+        , "Iops"                       =? _rdbitpitIops
+        , "LicenseModel"               =? _rdbitpitLicenseModel
+        , "MultiAZ"                    =? _rdbitpitMultiAZ
+        , "OptionGroupName"            =? _rdbitpitOptionGroupName
+        , "Port"                       =? _rdbitpitPort
+        , "PubliclyAccessible"         =? _rdbitpitPubliclyAccessible
+        , "RestoreTime"                =? _rdbitpitRestoreTime
+        , "SourceDBInstanceIdentifier" =? _rdbitpitSourceDBInstanceIdentifier
+        , "StorageType"                =? _rdbitpitStorageType
+        , "Tags"                       =? _rdbitpitTags
+        , "TargetDBInstanceIdentifier" =? _rdbitpitTargetDBInstanceIdentifier
+        , "TdeCredentialArn"           =? _rdbitpitTdeCredentialArn
+        , "TdeCredentialPassword"      =? _rdbitpitTdeCredentialPassword
+        , "UseLatestRestorableTime"    =? _rdbitpitUseLatestRestorableTime
+        ]
+
+instance ToHeaders RestoreDBInstanceToPointInTime
+
+instance AWSRequest RestoreDBInstanceToPointInTime where
+    type Sv RestoreDBInstanceToPointInTime = RDS
+    type Rs RestoreDBInstanceToPointInTime = RestoreDBInstanceToPointInTimeResponse
+
+    request  = post "RestoreDBInstanceToPointInTime"
+    response = xmlResponse
+
+instance FromXML RestoreDBInstanceToPointInTimeResponse where
+    parseXML = withElement "RestoreDBInstanceToPointInTimeResult" $ \x -> RestoreDBInstanceToPointInTimeResponse
+        <$> x .@? "DBInstance"
diff --git a/gen/Network/AWS/RDS/RevokeDBSecurityGroupIngress.hs b/gen/Network/AWS/RDS/RevokeDBSecurityGroupIngress.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/RevokeDBSecurityGroupIngress.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.RevokeDBSecurityGroupIngress
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+-- | Revokes ingress from a DBSecurityGroup for previously authorized IP ranges
+-- or EC2 or VPC Security Groups. Required parameters for this API are one of
+-- CIDRIP, EC2SecurityGroupId for VPC, or (EC2SecurityGroupOwnerId and either
+-- EC2SecurityGroupName or EC2SecurityGroupId).
+--
+-- <http://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_RevokeDBSecurityGroupIngress.html>
+module Network.AWS.RDS.RevokeDBSecurityGroupIngress
+    (
+    -- * Request
+      RevokeDBSecurityGroupIngress
+    -- ** Request constructor
+    , revokeDBSecurityGroupIngress
+    -- ** Request lenses
+    , rdbsgiCIDRIP
+    , rdbsgiDBSecurityGroupName
+    , rdbsgiEC2SecurityGroupId
+    , rdbsgiEC2SecurityGroupName
+    , rdbsgiEC2SecurityGroupOwnerId
+
+    -- * Response
+    , RevokeDBSecurityGroupIngressResponse
+    -- ** Response constructor
+    , revokeDBSecurityGroupIngressResponse
+    -- ** Response lenses
+    , rdbsgirDBSecurityGroup
+    ) where
+
+import Network.AWS.Prelude
+import Network.AWS.Request.Query
+import Network.AWS.RDS.Types
+import qualified GHC.Exts
+
+data RevokeDBSecurityGroupIngress = RevokeDBSecurityGroupIngress
+    { _rdbsgiCIDRIP                  :: Maybe Text
+    , _rdbsgiDBSecurityGroupName     :: Text
+    , _rdbsgiEC2SecurityGroupId      :: Maybe Text
+    , _rdbsgiEC2SecurityGroupName    :: Maybe Text
+    , _rdbsgiEC2SecurityGroupOwnerId :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'RevokeDBSecurityGroupIngress' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbsgiCIDRIP' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbsgiDBSecurityGroupName' @::@ 'Text'
+--
+-- * 'rdbsgiEC2SecurityGroupId' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbsgiEC2SecurityGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbsgiEC2SecurityGroupOwnerId' @::@ 'Maybe' 'Text'
+--
+revokeDBSecurityGroupIngress :: Text -- ^ 'rdbsgiDBSecurityGroupName'
+                             -> RevokeDBSecurityGroupIngress
+revokeDBSecurityGroupIngress p1 = RevokeDBSecurityGroupIngress
+    { _rdbsgiDBSecurityGroupName     = p1
+    , _rdbsgiCIDRIP                  = Nothing
+    , _rdbsgiEC2SecurityGroupName    = Nothing
+    , _rdbsgiEC2SecurityGroupId      = Nothing
+    , _rdbsgiEC2SecurityGroupOwnerId = Nothing
+    }
+
+-- | The IP range to revoke access from. Must be a valid CIDR range. If CIDRIP
+-- is specified, EC2SecurityGroupName, EC2SecurityGroupId and
+-- EC2SecurityGroupOwnerId cannot be provided.
+rdbsgiCIDRIP :: Lens' RevokeDBSecurityGroupIngress (Maybe Text)
+rdbsgiCIDRIP = lens _rdbsgiCIDRIP (\s a -> s { _rdbsgiCIDRIP = a })
+
+-- | The name of the DB security group to revoke ingress from.
+rdbsgiDBSecurityGroupName :: Lens' RevokeDBSecurityGroupIngress Text
+rdbsgiDBSecurityGroupName =
+    lens _rdbsgiDBSecurityGroupName
+        (\s a -> s { _rdbsgiDBSecurityGroupName = a })
+
+-- | The id of the EC2 security group to revoke access from. For VPC DB
+-- security groups, EC2SecurityGroupId must be provided. Otherwise,
+-- EC2SecurityGroupOwnerId and either EC2SecurityGroupName or
+-- EC2SecurityGroupId must be provided.
+rdbsgiEC2SecurityGroupId :: Lens' RevokeDBSecurityGroupIngress (Maybe Text)
+rdbsgiEC2SecurityGroupId =
+    lens _rdbsgiEC2SecurityGroupId
+        (\s a -> s { _rdbsgiEC2SecurityGroupId = a })
+
+-- | The name of the EC2 security group to revoke access from. For VPC DB
+-- security groups, EC2SecurityGroupId must be provided. Otherwise,
+-- EC2SecurityGroupOwnerId and either EC2SecurityGroupName or
+-- EC2SecurityGroupId must be provided.
+rdbsgiEC2SecurityGroupName :: Lens' RevokeDBSecurityGroupIngress (Maybe Text)
+rdbsgiEC2SecurityGroupName =
+    lens _rdbsgiEC2SecurityGroupName
+        (\s a -> s { _rdbsgiEC2SecurityGroupName = a })
+
+-- | The AWS Account Number of the owner of the EC2 security group specified
+-- in the EC2SecurityGroupName parameter. The AWS Access Key ID is not an
+-- acceptable value. For VPC DB security groups, EC2SecurityGroupId must be
+-- provided. Otherwise, EC2SecurityGroupOwnerId and either
+-- EC2SecurityGroupName or EC2SecurityGroupId must be provided.
+rdbsgiEC2SecurityGroupOwnerId :: Lens' RevokeDBSecurityGroupIngress (Maybe Text)
+rdbsgiEC2SecurityGroupOwnerId =
+    lens _rdbsgiEC2SecurityGroupOwnerId
+        (\s a -> s { _rdbsgiEC2SecurityGroupOwnerId = a })
+
+newtype RevokeDBSecurityGroupIngressResponse = RevokeDBSecurityGroupIngressResponse
+    { _rdbsgirDBSecurityGroup :: Maybe DBSecurityGroup
+    } deriving (Eq, Show)
+
+-- | 'RevokeDBSecurityGroupIngressResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbsgirDBSecurityGroup' @::@ 'Maybe' 'DBSecurityGroup'
+--
+revokeDBSecurityGroupIngressResponse :: RevokeDBSecurityGroupIngressResponse
+revokeDBSecurityGroupIngressResponse = RevokeDBSecurityGroupIngressResponse
+    { _rdbsgirDBSecurityGroup = Nothing
+    }
+
+rdbsgirDBSecurityGroup :: Lens' RevokeDBSecurityGroupIngressResponse (Maybe DBSecurityGroup)
+rdbsgirDBSecurityGroup =
+    lens _rdbsgirDBSecurityGroup (\s a -> s { _rdbsgirDBSecurityGroup = a })
+
+instance ToPath RevokeDBSecurityGroupIngress where
+    toPath = const "/"
+
+instance ToQuery RevokeDBSecurityGroupIngress where
+    toQuery RevokeDBSecurityGroupIngress{..} = mconcat
+        [ "CIDRIP"                  =? _rdbsgiCIDRIP
+        , "DBSecurityGroupName"     =? _rdbsgiDBSecurityGroupName
+        , "EC2SecurityGroupId"      =? _rdbsgiEC2SecurityGroupId
+        , "EC2SecurityGroupName"    =? _rdbsgiEC2SecurityGroupName
+        , "EC2SecurityGroupOwnerId" =? _rdbsgiEC2SecurityGroupOwnerId
+        ]
+
+instance ToHeaders RevokeDBSecurityGroupIngress
+
+instance AWSRequest RevokeDBSecurityGroupIngress where
+    type Sv RevokeDBSecurityGroupIngress = RDS
+    type Rs RevokeDBSecurityGroupIngress = RevokeDBSecurityGroupIngressResponse
+
+    request  = post "RevokeDBSecurityGroupIngress"
+    response = xmlResponse
+
+instance FromXML RevokeDBSecurityGroupIngressResponse where
+    parseXML = withElement "RevokeDBSecurityGroupIngressResult" $ \x -> RevokeDBSecurityGroupIngressResponse
+        <$> x .@? "DBSecurityGroup"
diff --git a/gen/Network/AWS/RDS/Types.hs b/gen/Network/AWS/RDS/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/RDS/Types.hs
@@ -0,0 +1,3715 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.RDS.Types
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+
+module Network.AWS.RDS.Types
+    (
+    -- * Service
+      RDS
+    -- ** Error
+    , RESTError
+    -- ** XML
+    , ns
+
+    -- * OptionGroup
+    , OptionGroup
+    , optionGroup
+    , ogAllowsVpcAndNonVpcInstanceMemberships
+    , ogEngineName
+    , ogMajorEngineVersion
+    , ogOptionGroupDescription
+    , ogOptionGroupName
+    , ogOptions
+    , ogVpcId
+
+    -- * DBParameterGroupStatus
+    , DBParameterGroupStatus
+    , dbparameterGroupStatus
+    , dbpgsDBParameterGroupName
+    , dbpgsParameterApplyStatus
+
+    -- * Event
+    , Event
+    , event
+    , eDate
+    , eEventCategories
+    , eMessage
+    , eSourceIdentifier
+    , eSourceType
+
+    -- * DBSecurityGroup
+    , DBSecurityGroup
+    , dbsecurityGroup
+    , dbsgDBSecurityGroupDescription
+    , dbsgDBSecurityGroupName
+    , dbsgEC2SecurityGroups
+    , dbsgIPRanges
+    , dbsgOwnerId
+    , dbsgVpcId
+
+    -- * Tag
+    , Tag
+    , tag
+    , tagKey
+    , tagValue
+
+    -- * DBEngineVersion
+    , DBEngineVersion
+    , dbengineVersion
+    , dbevDBEngineDescription
+    , dbevDBEngineVersionDescription
+    , dbevDBParameterGroupFamily
+    , dbevDefaultCharacterSet
+    , dbevEngine
+    , dbevEngineVersion
+    , dbevSupportedCharacterSets
+
+    -- * DBSnapshot
+    , DBSnapshot
+    , dbsnapshot
+    , dbsAllocatedStorage
+    , dbsAvailabilityZone
+    , dbsDBInstanceIdentifier
+    , dbsDBSnapshotIdentifier
+    , dbsEngine
+    , dbsEngineVersion
+    , dbsInstanceCreateTime
+    , dbsIops
+    , dbsLicenseModel
+    , dbsMasterUsername
+    , dbsOptionGroupName
+    , dbsPercentProgress
+    , dbsPort
+    , dbsSnapshotCreateTime
+    , dbsSnapshotType
+    , dbsSourceRegion
+    , dbsStatus
+    , dbsStorageType
+    , dbsTdeCredentialArn
+    , dbsVpcId
+
+    -- * DBSecurityGroupMembership
+    , DBSecurityGroupMembership
+    , dbsecurityGroupMembership
+    , dbsgmDBSecurityGroupName
+    , dbsgmStatus
+
+    -- * EC2SecurityGroup
+    , EC2SecurityGroup
+    , ec2SecurityGroup
+    , ecsgEC2SecurityGroupId
+    , ecsgEC2SecurityGroupName
+    , ecsgEC2SecurityGroupOwnerId
+    , ecsgStatus
+
+    -- * SourceType
+    , SourceType (..)
+
+    -- * DBParameterGroup
+    , DBParameterGroup
+    , dbparameterGroup
+    , dbpgDBParameterGroupFamily
+    , dbpgDBParameterGroupName
+    , dbpgDescription
+
+    -- * ReservedDBInstancesOffering
+    , ReservedDBInstancesOffering
+    , reservedDBInstancesOffering
+    , rdbioCurrencyCode
+    , rdbioDBInstanceClass
+    , rdbioDuration
+    , rdbioFixedPrice
+    , rdbioMultiAZ
+    , rdbioOfferingType
+    , rdbioProductDescription
+    , rdbioRecurringCharges
+    , rdbioReservedDBInstancesOfferingId
+    , rdbioUsagePrice
+
+    -- * ApplyMethod
+    , ApplyMethod (..)
+
+    -- * CharacterSet
+    , CharacterSet
+    , characterSet
+    , csCharacterSetDescription
+    , csCharacterSetName
+
+    -- * Subnet
+    , Subnet
+    , subnet
+    , sSubnetAvailabilityZone
+    , sSubnetIdentifier
+    , sSubnetStatus
+
+    -- * ReservedDBInstance
+    , ReservedDBInstance
+    , reservedDBInstance
+    , rdbiCurrencyCode
+    , rdbiDBInstanceClass
+    , rdbiDBInstanceCount
+    , rdbiDuration
+    , rdbiFixedPrice
+    , rdbiMultiAZ
+    , rdbiOfferingType
+    , rdbiProductDescription
+    , rdbiRecurringCharges
+    , rdbiReservedDBInstanceId
+    , rdbiReservedDBInstancesOfferingId
+    , rdbiStartTime
+    , rdbiState
+    , rdbiUsagePrice
+
+    -- * EngineDefaults
+    , EngineDefaults
+    , engineDefaults
+    , edDBParameterGroupFamily
+    , edMarker
+    , edParameters
+
+    -- * DBParameterGroupNameMessage
+    , DBParameterGroupNameMessage
+    , dbparameterGroupNameMessage
+    , dbpgnmDBParameterGroupName
+
+    -- * OptionGroupOption
+    , OptionGroupOption
+    , optionGroupOption
+    , ogoDefaultPort
+    , ogoDescription
+    , ogoEngineName
+    , ogoMajorEngineVersion
+    , ogoMinimumRequiredMinorEngineVersion
+    , ogoName
+    , ogoOptionGroupOptionSettings
+    , ogoOptionsDependedOn
+    , ogoPermanent
+    , ogoPersistent
+    , ogoPortRequired
+
+    -- * DBInstance
+    , DBInstance
+    , dbinstance
+    , dbiAllocatedStorage
+    , dbiAutoMinorVersionUpgrade
+    , dbiAvailabilityZone
+    , dbiBackupRetentionPeriod
+    , dbiCharacterSetName
+    , dbiDBInstanceClass
+    , dbiDBInstanceIdentifier
+    , dbiDBInstanceStatus
+    , dbiDBName
+    , dbiDBParameterGroups
+    , dbiDBSecurityGroups
+    , dbiDBSubnetGroup
+    , dbiEndpoint
+    , dbiEngine
+    , dbiEngineVersion
+    , dbiInstanceCreateTime
+    , dbiIops
+    , dbiLatestRestorableTime
+    , dbiLicenseModel
+    , dbiMasterUsername
+    , dbiMultiAZ
+    , dbiOptionGroupMemberships
+    , dbiPendingModifiedValues
+    , dbiPreferredBackupWindow
+    , dbiPreferredMaintenanceWindow
+    , dbiPubliclyAccessible
+    , dbiReadReplicaDBInstanceIdentifiers
+    , dbiReadReplicaSourceDBInstanceIdentifier
+    , dbiSecondaryAvailabilityZone
+    , dbiStatusInfos
+    , dbiStorageType
+    , dbiTdeCredentialArn
+    , dbiVpcSecurityGroups
+
+    -- * AvailabilityZone
+    , AvailabilityZone
+    , availabilityZone
+    , azName
+
+    -- * EventSubscription
+    , EventSubscription
+    , eventSubscription
+    , esCustSubscriptionId
+    , esCustomerAwsId
+    , esEnabled
+    , esEventCategoriesList
+    , esSnsTopicArn
+    , esSourceIdsList
+    , esSourceType
+    , esStatus
+    , esSubscriptionCreationTime
+
+    -- * DBSubnetGroup
+    , DBSubnetGroup
+    , dbsubnetGroup
+    , dbsg1DBSubnetGroupDescription
+    , dbsg1DBSubnetGroupName
+    , dbsg1SubnetGroupStatus
+    , dbsg1Subnets
+    , dbsg1VpcId
+
+    -- * DBInstanceStatusInfo
+    , DBInstanceStatusInfo
+    , dbinstanceStatusInfo
+    , dbisiMessage
+    , dbisiNormal
+    , dbisiStatus
+    , dbisiStatusType
+
+    -- * OptionSetting
+    , OptionSetting
+    , optionSetting
+    , osAllowedValues
+    , osApplyType
+    , osDataType
+    , osDefaultValue
+    , osDescription
+    , osIsCollection
+    , osIsModifiable
+    , osName
+    , osValue
+
+    -- * DescribeDBLogFilesDetails
+    , DescribeDBLogFilesDetails
+    , describeDBLogFilesDetails
+    , ddblfdLastWritten
+    , ddblfdLogFileName
+    , ddblfdSize
+
+    -- * OrderableDBInstanceOption
+    , OrderableDBInstanceOption
+    , orderableDBInstanceOption
+    , odbioAvailabilityZones
+    , odbioDBInstanceClass
+    , odbioEngine
+    , odbioEngineVersion
+    , odbioLicenseModel
+    , odbioMultiAZCapable
+    , odbioReadReplicaCapable
+    , odbioStorageType
+    , odbioSupportsIops
+    , odbioVpc
+
+    -- * Filter
+    , Filter
+    , filter'
+    , fName
+    , fValues
+
+    -- * RecurringCharge
+    , RecurringCharge
+    , recurringCharge
+    , rcRecurringChargeAmount
+    , rcRecurringChargeFrequency
+
+    -- * Endpoint
+    , Endpoint
+    , endpoint
+    , eAddress
+    , ePort
+
+    -- * OptionConfiguration
+    , OptionConfiguration
+    , optionConfiguration
+    , ocDBSecurityGroupMemberships
+    , ocOptionName
+    , ocOptionSettings
+    , ocPort
+    , ocVpcSecurityGroupMemberships
+
+    -- * Option
+    , Option
+    , option
+    , oDBSecurityGroupMemberships
+    , oOptionDescription
+    , oOptionName
+    , oOptionSettings
+    , oPermanent
+    , oPersistent
+    , oPort
+    , oVpcSecurityGroupMemberships
+
+    -- * IPRange
+    , IPRange
+    , iprange
+    , iprCIDRIP
+    , iprStatus
+
+    -- * OptionGroupMembership
+    , OptionGroupMembership
+    , optionGroupMembership
+    , ogmOptionGroupName
+    , ogmStatus
+
+    -- * EventCategoriesMap
+    , EventCategoriesMap
+    , eventCategoriesMap
+    , ecmEventCategories
+    , ecmSourceType
+
+    -- * PendingModifiedValues
+    , PendingModifiedValues
+    , pendingModifiedValues
+    , pmvAllocatedStorage
+    , pmvBackupRetentionPeriod
+    , pmvDBInstanceClass
+    , pmvDBInstanceIdentifier
+    , pmvEngineVersion
+    , pmvIops
+    , pmvMasterUserPassword
+    , pmvMultiAZ
+    , pmvPort
+    , pmvStorageType
+
+    -- * VpcSecurityGroupMembership
+    , VpcSecurityGroupMembership
+    , vpcSecurityGroupMembership
+    , vsgmStatus
+    , vsgmVpcSecurityGroupId
+
+    -- * Parameter
+    , Parameter
+    , parameter
+    , pAllowedValues
+    , pApplyMethod
+    , pApplyType
+    , pDataType
+    , pDescription
+    , pIsModifiable
+    , pMinimumEngineVersion
+    , pParameterName
+    , pParameterValue
+    , pSource
+
+    -- * OptionGroupOptionSetting
+    , OptionGroupOptionSetting
+    , optionGroupOptionSetting
+    , ogosAllowedValues
+    , ogosApplyType
+    , ogosDefaultValue
+    , ogosIsModifiable
+    , ogosSettingDescription
+    , ogosSettingName
+    ) where
+
+import Network.AWS.Error
+import Network.AWS.Prelude
+import Network.AWS.Signing.V4
+import qualified GHC.Exts
+
+-- | Version @2014-09-01@ of the Amazon Relational Database Service service.
+data RDS
+
+instance AWSService RDS where
+    type Sg RDS = V4
+    type Er RDS = RESTError
+
+    service = Service
+        { _svcEndpoint     = regional
+        , _svcAbbrev       = "RDS"
+        , _svcPrefix       = "rds"
+        , _svcVersion      = "2014-09-01"
+        , _svcTargetPrefix = Nothing
+        , _svcJSONVersion  = Nothing
+        }
+
+    handle = restError statusSuccess
+
+ns :: Text
+ns = "http://rds.amazonaws.com/doc/2014-09-01/"
+
+data OptionGroup = OptionGroup
+    { _ogAllowsVpcAndNonVpcInstanceMemberships :: Maybe Bool
+    , _ogEngineName                            :: Maybe Text
+    , _ogMajorEngineVersion                    :: Maybe Text
+    , _ogOptionGroupDescription                :: Maybe Text
+    , _ogOptionGroupName                       :: Maybe Text
+    , _ogOptions                               :: List "Option" Option
+    , _ogVpcId                                 :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'OptionGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ogAllowsVpcAndNonVpcInstanceMemberships' @::@ 'Maybe' 'Bool'
+--
+-- * 'ogEngineName' @::@ 'Maybe' 'Text'
+--
+-- * 'ogMajorEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'ogOptionGroupDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'ogOptionGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'ogOptions' @::@ ['Option']
+--
+-- * 'ogVpcId' @::@ 'Maybe' 'Text'
+--
+optionGroup :: OptionGroup
+optionGroup = OptionGroup
+    { _ogOptionGroupName                       = Nothing
+    , _ogOptionGroupDescription                = Nothing
+    , _ogEngineName                            = Nothing
+    , _ogMajorEngineVersion                    = Nothing
+    , _ogOptions                               = mempty
+    , _ogAllowsVpcAndNonVpcInstanceMemberships = Nothing
+    , _ogVpcId                                 = Nothing
+    }
+
+-- | Indicates whether this option group can be applied to both VPC and
+-- non-VPC instances. The value 'true' indicates the option group can be
+-- applied to both VPC and non-VPC instances.
+ogAllowsVpcAndNonVpcInstanceMemberships :: Lens' OptionGroup (Maybe Bool)
+ogAllowsVpcAndNonVpcInstanceMemberships =
+    lens _ogAllowsVpcAndNonVpcInstanceMemberships
+        (\s a -> s { _ogAllowsVpcAndNonVpcInstanceMemberships = a })
+
+-- | Engine name that this option group can be applied to.
+ogEngineName :: Lens' OptionGroup (Maybe Text)
+ogEngineName = lens _ogEngineName (\s a -> s { _ogEngineName = a })
+
+-- | Indicates the major engine version associated with this option group.
+ogMajorEngineVersion :: Lens' OptionGroup (Maybe Text)
+ogMajorEngineVersion =
+    lens _ogMajorEngineVersion (\s a -> s { _ogMajorEngineVersion = a })
+
+-- | Provides the description of the option group.
+ogOptionGroupDescription :: Lens' OptionGroup (Maybe Text)
+ogOptionGroupDescription =
+    lens _ogOptionGroupDescription
+        (\s a -> s { _ogOptionGroupDescription = a })
+
+-- | Specifies the name of the option group.
+ogOptionGroupName :: Lens' OptionGroup (Maybe Text)
+ogOptionGroupName =
+    lens _ogOptionGroupName (\s a -> s { _ogOptionGroupName = a })
+
+-- | Indicates what options are available in the option group.
+ogOptions :: Lens' OptionGroup [Option]
+ogOptions = lens _ogOptions (\s a -> s { _ogOptions = a }) . _List
+
+-- | If AllowsVpcAndNonVpcInstanceMemberships is 'false', this field is blank.
+-- If AllowsVpcAndNonVpcInstanceMemberships is 'true' and this field is
+-- blank, then this option group can be applied to both VPC and non-VPC
+-- instances. If this field contains a value, then this option group can
+-- only be applied to instances that are in the VPC indicated by this field.
+ogVpcId :: Lens' OptionGroup (Maybe Text)
+ogVpcId = lens _ogVpcId (\s a -> s { _ogVpcId = a })
+
+instance FromXML OptionGroup where
+    parseXML x = OptionGroup
+        <$> x .@? "AllowsVpcAndNonVpcInstanceMemberships"
+        <*> x .@? "EngineName"
+        <*> x .@? "MajorEngineVersion"
+        <*> x .@? "OptionGroupDescription"
+        <*> x .@? "OptionGroupName"
+        <*> x .@  "Options"
+        <*> x .@? "VpcId"
+
+instance ToQuery OptionGroup where
+    toQuery OptionGroup{..} = mconcat
+        [ "AllowsVpcAndNonVpcInstanceMemberships" =? _ogAllowsVpcAndNonVpcInstanceMemberships
+        , "EngineName"                            =? _ogEngineName
+        , "MajorEngineVersion"                    =? _ogMajorEngineVersion
+        , "OptionGroupDescription"                =? _ogOptionGroupDescription
+        , "OptionGroupName"                       =? _ogOptionGroupName
+        , "Options"                               =? _ogOptions
+        , "VpcId"                                 =? _ogVpcId
+        ]
+
+data DBParameterGroupStatus = DBParameterGroupStatus
+    { _dbpgsDBParameterGroupName :: Maybe Text
+    , _dbpgsParameterApplyStatus :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'DBParameterGroupStatus' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dbpgsDBParameterGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'dbpgsParameterApplyStatus' @::@ 'Maybe' 'Text'
+--
+dbparameterGroupStatus :: DBParameterGroupStatus
+dbparameterGroupStatus = DBParameterGroupStatus
+    { _dbpgsDBParameterGroupName = Nothing
+    , _dbpgsParameterApplyStatus = Nothing
+    }
+
+-- | The name of the DP parameter group.
+dbpgsDBParameterGroupName :: Lens' DBParameterGroupStatus (Maybe Text)
+dbpgsDBParameterGroupName =
+    lens _dbpgsDBParameterGroupName
+        (\s a -> s { _dbpgsDBParameterGroupName = a })
+
+-- | The status of parameter updates.
+dbpgsParameterApplyStatus :: Lens' DBParameterGroupStatus (Maybe Text)
+dbpgsParameterApplyStatus =
+    lens _dbpgsParameterApplyStatus
+        (\s a -> s { _dbpgsParameterApplyStatus = a })
+
+instance FromXML DBParameterGroupStatus where
+    parseXML x = DBParameterGroupStatus
+        <$> x .@? "DBParameterGroupName"
+        <*> x .@? "ParameterApplyStatus"
+
+instance ToQuery DBParameterGroupStatus where
+    toQuery DBParameterGroupStatus{..} = mconcat
+        [ "DBParameterGroupName" =? _dbpgsDBParameterGroupName
+        , "ParameterApplyStatus" =? _dbpgsParameterApplyStatus
+        ]
+
+data Event = Event
+    { _eDate             :: Maybe RFC822
+    , _eEventCategories  :: List "EventCategory" Text
+    , _eMessage          :: Maybe Text
+    , _eSourceIdentifier :: Maybe Text
+    , _eSourceType       :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'Event' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'eDate' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'eEventCategories' @::@ ['Text']
+--
+-- * 'eMessage' @::@ 'Maybe' 'Text'
+--
+-- * 'eSourceIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'eSourceType' @::@ 'Maybe' 'Text'
+--
+event :: Event
+event = Event
+    { _eSourceIdentifier = Nothing
+    , _eSourceType       = Nothing
+    , _eMessage          = Nothing
+    , _eEventCategories  = mempty
+    , _eDate             = Nothing
+    }
+
+-- | Specifies the date and time of the event.
+eDate :: Lens' Event (Maybe UTCTime)
+eDate = lens _eDate (\s a -> s { _eDate = a }) . mapping _Time
+
+-- | Specifies the category for the event.
+eEventCategories :: Lens' Event [Text]
+eEventCategories = lens _eEventCategories (\s a -> s { _eEventCategories = a }) . _List
+
+-- | Provides the text of this event.
+eMessage :: Lens' Event (Maybe Text)
+eMessage = lens _eMessage (\s a -> s { _eMessage = a })
+
+-- | Provides the identifier for the source of the event.
+eSourceIdentifier :: Lens' Event (Maybe Text)
+eSourceIdentifier =
+    lens _eSourceIdentifier (\s a -> s { _eSourceIdentifier = a })
+
+-- | Specifies the source type for this event.
+eSourceType :: Lens' Event (Maybe Text)
+eSourceType = lens _eSourceType (\s a -> s { _eSourceType = a })
+
+instance FromXML Event where
+    parseXML x = Event
+        <$> x .@? "Date"
+        <*> x .@  "EventCategories"
+        <*> x .@? "Message"
+        <*> x .@? "SourceIdentifier"
+        <*> x .@? "SourceType"
+
+instance ToQuery Event where
+    toQuery Event{..} = mconcat
+        [ "Date"             =? _eDate
+        , "EventCategories"  =? _eEventCategories
+        , "Message"          =? _eMessage
+        , "SourceIdentifier" =? _eSourceIdentifier
+        , "SourceType"       =? _eSourceType
+        ]
+
+data DBSecurityGroup = DBSecurityGroup
+    { _dbsgDBSecurityGroupDescription :: Maybe Text
+    , _dbsgDBSecurityGroupName        :: Maybe Text
+    , _dbsgEC2SecurityGroups          :: List "EC2SecurityGroup" EC2SecurityGroup
+    , _dbsgIPRanges                   :: List "IPRange" IPRange
+    , _dbsgOwnerId                    :: Maybe Text
+    , _dbsgVpcId                      :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DBSecurityGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dbsgDBSecurityGroupDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsgDBSecurityGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsgEC2SecurityGroups' @::@ ['EC2SecurityGroup']
+--
+-- * 'dbsgIPRanges' @::@ ['IPRange']
+--
+-- * 'dbsgOwnerId' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsgVpcId' @::@ 'Maybe' 'Text'
+--
+dbsecurityGroup :: DBSecurityGroup
+dbsecurityGroup = DBSecurityGroup
+    { _dbsgOwnerId                    = Nothing
+    , _dbsgDBSecurityGroupName        = Nothing
+    , _dbsgDBSecurityGroupDescription = Nothing
+    , _dbsgVpcId                      = Nothing
+    , _dbsgEC2SecurityGroups          = mempty
+    , _dbsgIPRanges                   = mempty
+    }
+
+-- | Provides the description of the DB security group.
+dbsgDBSecurityGroupDescription :: Lens' DBSecurityGroup (Maybe Text)
+dbsgDBSecurityGroupDescription =
+    lens _dbsgDBSecurityGroupDescription
+        (\s a -> s { _dbsgDBSecurityGroupDescription = a })
+
+-- | Specifies the name of the DB security group.
+dbsgDBSecurityGroupName :: Lens' DBSecurityGroup (Maybe Text)
+dbsgDBSecurityGroupName =
+    lens _dbsgDBSecurityGroupName (\s a -> s { _dbsgDBSecurityGroupName = a })
+
+-- | Contains a list of EC2SecurityGroup elements.
+dbsgEC2SecurityGroups :: Lens' DBSecurityGroup [EC2SecurityGroup]
+dbsgEC2SecurityGroups =
+    lens _dbsgEC2SecurityGroups (\s a -> s { _dbsgEC2SecurityGroups = a })
+        . _List
+
+-- | Contains a list of IPRange elements.
+dbsgIPRanges :: Lens' DBSecurityGroup [IPRange]
+dbsgIPRanges = lens _dbsgIPRanges (\s a -> s { _dbsgIPRanges = a }) . _List
+
+-- | Provides the AWS ID of the owner of a specific DB security group.
+dbsgOwnerId :: Lens' DBSecurityGroup (Maybe Text)
+dbsgOwnerId = lens _dbsgOwnerId (\s a -> s { _dbsgOwnerId = a })
+
+-- | Provides the VpcId of the DB security group.
+dbsgVpcId :: Lens' DBSecurityGroup (Maybe Text)
+dbsgVpcId = lens _dbsgVpcId (\s a -> s { _dbsgVpcId = a })
+
+instance FromXML DBSecurityGroup where
+    parseXML x = DBSecurityGroup
+        <$> x .@? "DBSecurityGroupDescription"
+        <*> x .@? "DBSecurityGroupName"
+        <*> x .@  "EC2SecurityGroups"
+        <*> x .@  "IPRanges"
+        <*> x .@? "OwnerId"
+        <*> x .@? "VpcId"
+
+instance ToQuery DBSecurityGroup where
+    toQuery DBSecurityGroup{..} = mconcat
+        [ "DBSecurityGroupDescription" =? _dbsgDBSecurityGroupDescription
+        , "DBSecurityGroupName"        =? _dbsgDBSecurityGroupName
+        , "EC2SecurityGroups"          =? _dbsgEC2SecurityGroups
+        , "IPRanges"                   =? _dbsgIPRanges
+        , "OwnerId"                    =? _dbsgOwnerId
+        , "VpcId"                      =? _dbsgVpcId
+        ]
+
+data Tag = Tag
+    { _tagKey   :: Maybe Text
+    , _tagValue :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'Tag' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'tagKey' @::@ 'Maybe' 'Text'
+--
+-- * 'tagValue' @::@ 'Maybe' 'Text'
+--
+tag :: Tag
+tag = Tag
+    { _tagKey   = Nothing
+    , _tagValue = Nothing
+    }
+
+-- | 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
+-- "rds:". The string may 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 })
+
+-- | 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
+-- "rds:". The string may 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 })
+
+instance FromXML Tag where
+    parseXML x = Tag
+        <$> x .@? "Key"
+        <*> x .@? "Value"
+
+instance ToQuery Tag where
+    toQuery Tag{..} = mconcat
+        [ "Key"   =? _tagKey
+        , "Value" =? _tagValue
+        ]
+
+data DBEngineVersion = DBEngineVersion
+    { _dbevDBEngineDescription        :: Maybe Text
+    , _dbevDBEngineVersionDescription :: Maybe Text
+    , _dbevDBParameterGroupFamily     :: Maybe Text
+    , _dbevDefaultCharacterSet        :: Maybe CharacterSet
+    , _dbevEngine                     :: Maybe Text
+    , _dbevEngineVersion              :: Maybe Text
+    , _dbevSupportedCharacterSets     :: List "CharacterSet" CharacterSet
+    } deriving (Eq, Show)
+
+-- | 'DBEngineVersion' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dbevDBEngineDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'dbevDBEngineVersionDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'dbevDBParameterGroupFamily' @::@ 'Maybe' 'Text'
+--
+-- * 'dbevDefaultCharacterSet' @::@ 'Maybe' 'CharacterSet'
+--
+-- * 'dbevEngine' @::@ 'Maybe' 'Text'
+--
+-- * 'dbevEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'dbevSupportedCharacterSets' @::@ ['CharacterSet']
+--
+dbengineVersion :: DBEngineVersion
+dbengineVersion = DBEngineVersion
+    { _dbevEngine                     = Nothing
+    , _dbevEngineVersion              = Nothing
+    , _dbevDBParameterGroupFamily     = Nothing
+    , _dbevDBEngineDescription        = Nothing
+    , _dbevDBEngineVersionDescription = Nothing
+    , _dbevDefaultCharacterSet        = Nothing
+    , _dbevSupportedCharacterSets     = mempty
+    }
+
+-- | The description of the database engine.
+dbevDBEngineDescription :: Lens' DBEngineVersion (Maybe Text)
+dbevDBEngineDescription =
+    lens _dbevDBEngineDescription (\s a -> s { _dbevDBEngineDescription = a })
+
+-- | The description of the database engine version.
+dbevDBEngineVersionDescription :: Lens' DBEngineVersion (Maybe Text)
+dbevDBEngineVersionDescription =
+    lens _dbevDBEngineVersionDescription
+        (\s a -> s { _dbevDBEngineVersionDescription = a })
+
+-- | The name of the DB parameter group family for the database engine.
+dbevDBParameterGroupFamily :: Lens' DBEngineVersion (Maybe Text)
+dbevDBParameterGroupFamily =
+    lens _dbevDBParameterGroupFamily
+        (\s a -> s { _dbevDBParameterGroupFamily = a })
+
+-- | The default character set for new instances of this engine version, if
+-- the CharacterSetName parameter of the CreateDBInstance API is not
+-- specified.
+dbevDefaultCharacterSet :: Lens' DBEngineVersion (Maybe CharacterSet)
+dbevDefaultCharacterSet =
+    lens _dbevDefaultCharacterSet (\s a -> s { _dbevDefaultCharacterSet = a })
+
+-- | The name of the database engine.
+dbevEngine :: Lens' DBEngineVersion (Maybe Text)
+dbevEngine = lens _dbevEngine (\s a -> s { _dbevEngine = a })
+
+-- | The version number of the database engine.
+dbevEngineVersion :: Lens' DBEngineVersion (Maybe Text)
+dbevEngineVersion =
+    lens _dbevEngineVersion (\s a -> s { _dbevEngineVersion = a })
+
+-- | A list of the character sets supported by this engine for the
+-- CharacterSetName parameter of the CreateDBInstance API.
+dbevSupportedCharacterSets :: Lens' DBEngineVersion [CharacterSet]
+dbevSupportedCharacterSets =
+    lens _dbevSupportedCharacterSets
+        (\s a -> s { _dbevSupportedCharacterSets = a })
+            . _List
+
+instance FromXML DBEngineVersion where
+    parseXML x = DBEngineVersion
+        <$> x .@? "DBEngineDescription"
+        <*> x .@? "DBEngineVersionDescription"
+        <*> x .@? "DBParameterGroupFamily"
+        <*> x .@? "DefaultCharacterSet"
+        <*> x .@? "Engine"
+        <*> x .@? "EngineVersion"
+        <*> x .@  "SupportedCharacterSets"
+
+instance ToQuery DBEngineVersion where
+    toQuery DBEngineVersion{..} = mconcat
+        [ "DBEngineDescription"        =? _dbevDBEngineDescription
+        , "DBEngineVersionDescription" =? _dbevDBEngineVersionDescription
+        , "DBParameterGroupFamily"     =? _dbevDBParameterGroupFamily
+        , "DefaultCharacterSet"        =? _dbevDefaultCharacterSet
+        , "Engine"                     =? _dbevEngine
+        , "EngineVersion"              =? _dbevEngineVersion
+        , "SupportedCharacterSets"     =? _dbevSupportedCharacterSets
+        ]
+
+data DBSnapshot = DBSnapshot
+    { _dbsAllocatedStorage     :: Maybe Int
+    , _dbsAvailabilityZone     :: Maybe Text
+    , _dbsDBInstanceIdentifier :: Maybe Text
+    , _dbsDBSnapshotIdentifier :: Maybe Text
+    , _dbsEngine               :: Maybe Text
+    , _dbsEngineVersion        :: Maybe Text
+    , _dbsInstanceCreateTime   :: Maybe RFC822
+    , _dbsIops                 :: Maybe Int
+    , _dbsLicenseModel         :: Maybe Text
+    , _dbsMasterUsername       :: Maybe Text
+    , _dbsOptionGroupName      :: Maybe Text
+    , _dbsPercentProgress      :: Maybe Int
+    , _dbsPort                 :: Maybe Int
+    , _dbsSnapshotCreateTime   :: Maybe RFC822
+    , _dbsSnapshotType         :: Maybe Text
+    , _dbsSourceRegion         :: Maybe Text
+    , _dbsStatus               :: Maybe Text
+    , _dbsStorageType          :: Maybe Text
+    , _dbsTdeCredentialArn     :: Maybe Text
+    , _dbsVpcId                :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'DBSnapshot' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dbsAllocatedStorage' @::@ 'Maybe' 'Int'
+--
+-- * 'dbsAvailabilityZone' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsDBInstanceIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsDBSnapshotIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsEngine' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsInstanceCreateTime' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'dbsIops' @::@ 'Maybe' 'Int'
+--
+-- * 'dbsLicenseModel' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsMasterUsername' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsOptionGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsPercentProgress' @::@ 'Maybe' 'Int'
+--
+-- * 'dbsPort' @::@ 'Maybe' 'Int'
+--
+-- * 'dbsSnapshotCreateTime' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'dbsSnapshotType' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsSourceRegion' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsStatus' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsStorageType' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsTdeCredentialArn' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsVpcId' @::@ 'Maybe' 'Text'
+--
+dbsnapshot :: DBSnapshot
+dbsnapshot = DBSnapshot
+    { _dbsDBSnapshotIdentifier = Nothing
+    , _dbsDBInstanceIdentifier = Nothing
+    , _dbsSnapshotCreateTime   = Nothing
+    , _dbsEngine               = Nothing
+    , _dbsAllocatedStorage     = Nothing
+    , _dbsStatus               = Nothing
+    , _dbsPort                 = Nothing
+    , _dbsAvailabilityZone     = Nothing
+    , _dbsVpcId                = Nothing
+    , _dbsInstanceCreateTime   = Nothing
+    , _dbsMasterUsername       = Nothing
+    , _dbsEngineVersion        = Nothing
+    , _dbsLicenseModel         = Nothing
+    , _dbsSnapshotType         = Nothing
+    , _dbsIops                 = Nothing
+    , _dbsOptionGroupName      = Nothing
+    , _dbsPercentProgress      = Nothing
+    , _dbsSourceRegion         = Nothing
+    , _dbsStorageType          = Nothing
+    , _dbsTdeCredentialArn     = Nothing
+    }
+
+-- | Specifies the allocated storage size in gigabytes (GB).
+dbsAllocatedStorage :: Lens' DBSnapshot (Maybe Int)
+dbsAllocatedStorage =
+    lens _dbsAllocatedStorage (\s a -> s { _dbsAllocatedStorage = a })
+
+-- | Specifies the name of the Availability Zone the DB instance was located
+-- in at the time of the DB snapshot.
+dbsAvailabilityZone :: Lens' DBSnapshot (Maybe Text)
+dbsAvailabilityZone =
+    lens _dbsAvailabilityZone (\s a -> s { _dbsAvailabilityZone = a })
+
+-- | Specifies the DB instance identifier of the DB instance this DB snapshot
+-- was created from.
+dbsDBInstanceIdentifier :: Lens' DBSnapshot (Maybe Text)
+dbsDBInstanceIdentifier =
+    lens _dbsDBInstanceIdentifier (\s a -> s { _dbsDBInstanceIdentifier = a })
+
+-- | Specifies the identifier for the DB snapshot.
+dbsDBSnapshotIdentifier :: Lens' DBSnapshot (Maybe Text)
+dbsDBSnapshotIdentifier =
+    lens _dbsDBSnapshotIdentifier (\s a -> s { _dbsDBSnapshotIdentifier = a })
+
+-- | Specifies the name of the database engine.
+dbsEngine :: Lens' DBSnapshot (Maybe Text)
+dbsEngine = lens _dbsEngine (\s a -> s { _dbsEngine = a })
+
+-- | Specifies the version of the database engine.
+dbsEngineVersion :: Lens' DBSnapshot (Maybe Text)
+dbsEngineVersion = lens _dbsEngineVersion (\s a -> s { _dbsEngineVersion = a })
+
+-- | Specifies the time (UTC) when the snapshot was taken.
+dbsInstanceCreateTime :: Lens' DBSnapshot (Maybe UTCTime)
+dbsInstanceCreateTime =
+    lens _dbsInstanceCreateTime (\s a -> s { _dbsInstanceCreateTime = a })
+        . mapping _Time
+
+-- | Specifies the Provisioned IOPS (I/O operations per second) value of the
+-- DB instance at the time of the snapshot.
+dbsIops :: Lens' DBSnapshot (Maybe Int)
+dbsIops = lens _dbsIops (\s a -> s { _dbsIops = a })
+
+-- | License model information for the restored DB instance.
+dbsLicenseModel :: Lens' DBSnapshot (Maybe Text)
+dbsLicenseModel = lens _dbsLicenseModel (\s a -> s { _dbsLicenseModel = a })
+
+-- | Provides the master username for the DB snapshot.
+dbsMasterUsername :: Lens' DBSnapshot (Maybe Text)
+dbsMasterUsername =
+    lens _dbsMasterUsername (\s a -> s { _dbsMasterUsername = a })
+
+-- | Provides the option group name for the DB snapshot.
+dbsOptionGroupName :: Lens' DBSnapshot (Maybe Text)
+dbsOptionGroupName =
+    lens _dbsOptionGroupName (\s a -> s { _dbsOptionGroupName = a })
+
+-- | The percentage of the estimated data that has been transferred.
+dbsPercentProgress :: Lens' DBSnapshot (Maybe Int)
+dbsPercentProgress =
+    lens _dbsPercentProgress (\s a -> s { _dbsPercentProgress = a })
+
+-- | Specifies the port that the database engine was listening on at the time
+-- of the snapshot.
+dbsPort :: Lens' DBSnapshot (Maybe Int)
+dbsPort = lens _dbsPort (\s a -> s { _dbsPort = a })
+
+-- | Provides the time (UTC) when the snapshot was taken.
+dbsSnapshotCreateTime :: Lens' DBSnapshot (Maybe UTCTime)
+dbsSnapshotCreateTime =
+    lens _dbsSnapshotCreateTime (\s a -> s { _dbsSnapshotCreateTime = a })
+        . mapping _Time
+
+-- | Provides the type of the DB snapshot.
+dbsSnapshotType :: Lens' DBSnapshot (Maybe Text)
+dbsSnapshotType = lens _dbsSnapshotType (\s a -> s { _dbsSnapshotType = a })
+
+-- | The region that the DB snapshot was created in or copied from.
+dbsSourceRegion :: Lens' DBSnapshot (Maybe Text)
+dbsSourceRegion = lens _dbsSourceRegion (\s a -> s { _dbsSourceRegion = a })
+
+-- | Specifies the status of this DB snapshot.
+dbsStatus :: Lens' DBSnapshot (Maybe Text)
+dbsStatus = lens _dbsStatus (\s a -> s { _dbsStatus = a })
+
+-- | Specifies storage type associated with DB Snapshot.
+dbsStorageType :: Lens' DBSnapshot (Maybe Text)
+dbsStorageType = lens _dbsStorageType (\s a -> s { _dbsStorageType = a })
+
+-- | The ARN from the Key Store with which to associate the instance for TDE
+-- encryption.
+dbsTdeCredentialArn :: Lens' DBSnapshot (Maybe Text)
+dbsTdeCredentialArn =
+    lens _dbsTdeCredentialArn (\s a -> s { _dbsTdeCredentialArn = a })
+
+-- | Provides the Vpc Id associated with the DB snapshot.
+dbsVpcId :: Lens' DBSnapshot (Maybe Text)
+dbsVpcId = lens _dbsVpcId (\s a -> s { _dbsVpcId = a })
+
+instance FromXML DBSnapshot where
+    parseXML x = DBSnapshot
+        <$> x .@? "AllocatedStorage"
+        <*> x .@? "AvailabilityZone"
+        <*> x .@? "DBInstanceIdentifier"
+        <*> x .@? "DBSnapshotIdentifier"
+        <*> x .@? "Engine"
+        <*> x .@? "EngineVersion"
+        <*> x .@? "InstanceCreateTime"
+        <*> x .@? "Iops"
+        <*> x .@? "LicenseModel"
+        <*> x .@? "MasterUsername"
+        <*> x .@? "OptionGroupName"
+        <*> x .@? "PercentProgress"
+        <*> x .@? "Port"
+        <*> x .@? "SnapshotCreateTime"
+        <*> x .@? "SnapshotType"
+        <*> x .@? "SourceRegion"
+        <*> x .@? "Status"
+        <*> x .@? "StorageType"
+        <*> x .@? "TdeCredentialArn"
+        <*> x .@? "VpcId"
+
+instance ToQuery DBSnapshot where
+    toQuery DBSnapshot{..} = mconcat
+        [ "AllocatedStorage"     =? _dbsAllocatedStorage
+        , "AvailabilityZone"     =? _dbsAvailabilityZone
+        , "DBInstanceIdentifier" =? _dbsDBInstanceIdentifier
+        , "DBSnapshotIdentifier" =? _dbsDBSnapshotIdentifier
+        , "Engine"               =? _dbsEngine
+        , "EngineVersion"        =? _dbsEngineVersion
+        , "InstanceCreateTime"   =? _dbsInstanceCreateTime
+        , "Iops"                 =? _dbsIops
+        , "LicenseModel"         =? _dbsLicenseModel
+        , "MasterUsername"       =? _dbsMasterUsername
+        , "OptionGroupName"      =? _dbsOptionGroupName
+        , "PercentProgress"      =? _dbsPercentProgress
+        , "Port"                 =? _dbsPort
+        , "SnapshotCreateTime"   =? _dbsSnapshotCreateTime
+        , "SnapshotType"         =? _dbsSnapshotType
+        , "SourceRegion"         =? _dbsSourceRegion
+        , "Status"               =? _dbsStatus
+        , "StorageType"          =? _dbsStorageType
+        , "TdeCredentialArn"     =? _dbsTdeCredentialArn
+        , "VpcId"                =? _dbsVpcId
+        ]
+
+data DBSecurityGroupMembership = DBSecurityGroupMembership
+    { _dbsgmDBSecurityGroupName :: Maybe Text
+    , _dbsgmStatus              :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'DBSecurityGroupMembership' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dbsgmDBSecurityGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsgmStatus' @::@ 'Maybe' 'Text'
+--
+dbsecurityGroupMembership :: DBSecurityGroupMembership
+dbsecurityGroupMembership = DBSecurityGroupMembership
+    { _dbsgmDBSecurityGroupName = Nothing
+    , _dbsgmStatus              = Nothing
+    }
+
+-- | The name of the DB security group.
+dbsgmDBSecurityGroupName :: Lens' DBSecurityGroupMembership (Maybe Text)
+dbsgmDBSecurityGroupName =
+    lens _dbsgmDBSecurityGroupName
+        (\s a -> s { _dbsgmDBSecurityGroupName = a })
+
+-- | The status of the DB security group.
+dbsgmStatus :: Lens' DBSecurityGroupMembership (Maybe Text)
+dbsgmStatus = lens _dbsgmStatus (\s a -> s { _dbsgmStatus = a })
+
+instance FromXML DBSecurityGroupMembership where
+    parseXML x = DBSecurityGroupMembership
+        <$> x .@? "DBSecurityGroupName"
+        <*> x .@? "Status"
+
+instance ToQuery DBSecurityGroupMembership where
+    toQuery DBSecurityGroupMembership{..} = mconcat
+        [ "DBSecurityGroupName" =? _dbsgmDBSecurityGroupName
+        , "Status"              =? _dbsgmStatus
+        ]
+
+data EC2SecurityGroup = EC2SecurityGroup
+    { _ecsgEC2SecurityGroupId      :: Maybe Text
+    , _ecsgEC2SecurityGroupName    :: Maybe Text
+    , _ecsgEC2SecurityGroupOwnerId :: Maybe Text
+    , _ecsgStatus                  :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'EC2SecurityGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ecsgEC2SecurityGroupId' @::@ 'Maybe' 'Text'
+--
+-- * 'ecsgEC2SecurityGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'ecsgEC2SecurityGroupOwnerId' @::@ 'Maybe' 'Text'
+--
+-- * 'ecsgStatus' @::@ 'Maybe' 'Text'
+--
+ec2SecurityGroup :: EC2SecurityGroup
+ec2SecurityGroup = EC2SecurityGroup
+    { _ecsgStatus                  = Nothing
+    , _ecsgEC2SecurityGroupName    = Nothing
+    , _ecsgEC2SecurityGroupId      = Nothing
+    , _ecsgEC2SecurityGroupOwnerId = Nothing
+    }
+
+-- | Specifies the id of the EC2 security group.
+ecsgEC2SecurityGroupId :: Lens' EC2SecurityGroup (Maybe Text)
+ecsgEC2SecurityGroupId =
+    lens _ecsgEC2SecurityGroupId (\s a -> s { _ecsgEC2SecurityGroupId = a })
+
+-- | Specifies the name of the EC2 security group.
+ecsgEC2SecurityGroupName :: Lens' EC2SecurityGroup (Maybe Text)
+ecsgEC2SecurityGroupName =
+    lens _ecsgEC2SecurityGroupName
+        (\s a -> s { _ecsgEC2SecurityGroupName = a })
+
+-- | Specifies the AWS ID of the owner of the EC2 security group specified in
+-- the EC2SecurityGroupName field.
+ecsgEC2SecurityGroupOwnerId :: Lens' EC2SecurityGroup (Maybe Text)
+ecsgEC2SecurityGroupOwnerId =
+    lens _ecsgEC2SecurityGroupOwnerId
+        (\s a -> s { _ecsgEC2SecurityGroupOwnerId = a })
+
+-- | Provides the status of the EC2 security group. Status can be
+-- "authorizing", "authorized", "revoking", and "revoked".
+ecsgStatus :: Lens' EC2SecurityGroup (Maybe Text)
+ecsgStatus = lens _ecsgStatus (\s a -> s { _ecsgStatus = a })
+
+instance FromXML EC2SecurityGroup where
+    parseXML x = EC2SecurityGroup
+        <$> x .@? "EC2SecurityGroupId"
+        <*> x .@? "EC2SecurityGroupName"
+        <*> x .@? "EC2SecurityGroupOwnerId"
+        <*> x .@? "Status"
+
+instance ToQuery EC2SecurityGroup where
+    toQuery EC2SecurityGroup{..} = mconcat
+        [ "EC2SecurityGroupId"      =? _ecsgEC2SecurityGroupId
+        , "EC2SecurityGroupName"    =? _ecsgEC2SecurityGroupName
+        , "EC2SecurityGroupOwnerId" =? _ecsgEC2SecurityGroupOwnerId
+        , "Status"                  =? _ecsgStatus
+        ]
+
+data SourceType
+    = DbInstance       -- ^ db-instance
+    | DbParameterGroup -- ^ db-parameter-group
+    | DbSecurityGroup  -- ^ db-security-group
+    | DbSnapshot       -- ^ db-snapshot
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable SourceType
+
+instance FromText SourceType where
+    parser = match "db-instance"        DbInstance
+         <|> match "db-parameter-group" DbParameterGroup
+         <|> match "db-security-group"  DbSecurityGroup
+         <|> match "db-snapshot"        DbSnapshot
+
+instance ToText SourceType where
+    toText = \case
+        DbInstance       -> "db-instance"
+        DbParameterGroup -> "db-parameter-group"
+        DbSecurityGroup  -> "db-security-group"
+        DbSnapshot       -> "db-snapshot"
+
+instance FromXML SourceType where
+    parseXML = parseXMLText "SourceType"
+
+instance ToQuery SourceType where
+    toQuery = toQuery . toText
+
+data DBParameterGroup = DBParameterGroup
+    { _dbpgDBParameterGroupFamily :: Maybe Text
+    , _dbpgDBParameterGroupName   :: Maybe Text
+    , _dbpgDescription            :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'DBParameterGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dbpgDBParameterGroupFamily' @::@ 'Maybe' 'Text'
+--
+-- * 'dbpgDBParameterGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'dbpgDescription' @::@ 'Maybe' 'Text'
+--
+dbparameterGroup :: DBParameterGroup
+dbparameterGroup = DBParameterGroup
+    { _dbpgDBParameterGroupName   = Nothing
+    , _dbpgDBParameterGroupFamily = Nothing
+    , _dbpgDescription            = Nothing
+    }
+
+-- | Provides the name of the DB parameter group family that this DB parameter
+-- group is compatible with.
+dbpgDBParameterGroupFamily :: Lens' DBParameterGroup (Maybe Text)
+dbpgDBParameterGroupFamily =
+    lens _dbpgDBParameterGroupFamily
+        (\s a -> s { _dbpgDBParameterGroupFamily = a })
+
+-- | Provides the name of the DB parameter group.
+dbpgDBParameterGroupName :: Lens' DBParameterGroup (Maybe Text)
+dbpgDBParameterGroupName =
+    lens _dbpgDBParameterGroupName
+        (\s a -> s { _dbpgDBParameterGroupName = a })
+
+-- | Provides the customer-specified description for this DB parameter group.
+dbpgDescription :: Lens' DBParameterGroup (Maybe Text)
+dbpgDescription = lens _dbpgDescription (\s a -> s { _dbpgDescription = a })
+
+instance FromXML DBParameterGroup where
+    parseXML x = DBParameterGroup
+        <$> x .@? "DBParameterGroupFamily"
+        <*> x .@? "DBParameterGroupName"
+        <*> x .@? "Description"
+
+instance ToQuery DBParameterGroup where
+    toQuery DBParameterGroup{..} = mconcat
+        [ "DBParameterGroupFamily" =? _dbpgDBParameterGroupFamily
+        , "DBParameterGroupName"   =? _dbpgDBParameterGroupName
+        , "Description"            =? _dbpgDescription
+        ]
+
+data ReservedDBInstancesOffering = ReservedDBInstancesOffering
+    { _rdbioCurrencyCode                  :: Maybe Text
+    , _rdbioDBInstanceClass               :: Maybe Text
+    , _rdbioDuration                      :: Maybe Int
+    , _rdbioFixedPrice                    :: Maybe Double
+    , _rdbioMultiAZ                       :: Maybe Bool
+    , _rdbioOfferingType                  :: Maybe Text
+    , _rdbioProductDescription            :: Maybe Text
+    , _rdbioRecurringCharges              :: List "RecurringCharge" RecurringCharge
+    , _rdbioReservedDBInstancesOfferingId :: Maybe Text
+    , _rdbioUsagePrice                    :: Maybe Double
+    } deriving (Eq, Show)
+
+-- | 'ReservedDBInstancesOffering' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbioCurrencyCode' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbioDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbioDuration' @::@ 'Maybe' 'Int'
+--
+-- * 'rdbioFixedPrice' @::@ 'Maybe' 'Double'
+--
+-- * 'rdbioMultiAZ' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdbioOfferingType' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbioProductDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbioRecurringCharges' @::@ ['RecurringCharge']
+--
+-- * 'rdbioReservedDBInstancesOfferingId' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbioUsagePrice' @::@ 'Maybe' 'Double'
+--
+reservedDBInstancesOffering :: ReservedDBInstancesOffering
+reservedDBInstancesOffering = ReservedDBInstancesOffering
+    { _rdbioReservedDBInstancesOfferingId = Nothing
+    , _rdbioDBInstanceClass               = Nothing
+    , _rdbioDuration                      = Nothing
+    , _rdbioFixedPrice                    = Nothing
+    , _rdbioUsagePrice                    = Nothing
+    , _rdbioCurrencyCode                  = Nothing
+    , _rdbioProductDescription            = Nothing
+    , _rdbioOfferingType                  = Nothing
+    , _rdbioMultiAZ                       = Nothing
+    , _rdbioRecurringCharges              = mempty
+    }
+
+-- | The currency code for the reserved DB instance offering.
+rdbioCurrencyCode :: Lens' ReservedDBInstancesOffering (Maybe Text)
+rdbioCurrencyCode =
+    lens _rdbioCurrencyCode (\s a -> s { _rdbioCurrencyCode = a })
+
+-- | The DB instance class for the reserved DB instance.
+rdbioDBInstanceClass :: Lens' ReservedDBInstancesOffering (Maybe Text)
+rdbioDBInstanceClass =
+    lens _rdbioDBInstanceClass (\s a -> s { _rdbioDBInstanceClass = a })
+
+-- | The duration of the offering in seconds.
+rdbioDuration :: Lens' ReservedDBInstancesOffering (Maybe Int)
+rdbioDuration = lens _rdbioDuration (\s a -> s { _rdbioDuration = a })
+
+-- | The fixed price charged for this offering.
+rdbioFixedPrice :: Lens' ReservedDBInstancesOffering (Maybe Double)
+rdbioFixedPrice = lens _rdbioFixedPrice (\s a -> s { _rdbioFixedPrice = a })
+
+-- | Indicates if the offering applies to Multi-AZ deployments.
+rdbioMultiAZ :: Lens' ReservedDBInstancesOffering (Maybe Bool)
+rdbioMultiAZ = lens _rdbioMultiAZ (\s a -> s { _rdbioMultiAZ = a })
+
+-- | The offering type.
+rdbioOfferingType :: Lens' ReservedDBInstancesOffering (Maybe Text)
+rdbioOfferingType =
+    lens _rdbioOfferingType (\s a -> s { _rdbioOfferingType = a })
+
+-- | The database engine used by the offering.
+rdbioProductDescription :: Lens' ReservedDBInstancesOffering (Maybe Text)
+rdbioProductDescription =
+    lens _rdbioProductDescription (\s a -> s { _rdbioProductDescription = a })
+
+-- | The recurring price charged to run this reserved DB instance.
+rdbioRecurringCharges :: Lens' ReservedDBInstancesOffering [RecurringCharge]
+rdbioRecurringCharges =
+    lens _rdbioRecurringCharges (\s a -> s { _rdbioRecurringCharges = a })
+        . _List
+
+-- | The offering identifier.
+rdbioReservedDBInstancesOfferingId :: Lens' ReservedDBInstancesOffering (Maybe Text)
+rdbioReservedDBInstancesOfferingId =
+    lens _rdbioReservedDBInstancesOfferingId
+        (\s a -> s { _rdbioReservedDBInstancesOfferingId = a })
+
+-- | The hourly price charged for this offering.
+rdbioUsagePrice :: Lens' ReservedDBInstancesOffering (Maybe Double)
+rdbioUsagePrice = lens _rdbioUsagePrice (\s a -> s { _rdbioUsagePrice = a })
+
+instance FromXML ReservedDBInstancesOffering where
+    parseXML x = ReservedDBInstancesOffering
+        <$> x .@? "CurrencyCode"
+        <*> x .@? "DBInstanceClass"
+        <*> x .@? "Duration"
+        <*> x .@? "FixedPrice"
+        <*> x .@? "MultiAZ"
+        <*> x .@? "OfferingType"
+        <*> x .@? "ProductDescription"
+        <*> x .@  "RecurringCharges"
+        <*> x .@? "ReservedDBInstancesOfferingId"
+        <*> x .@? "UsagePrice"
+
+instance ToQuery ReservedDBInstancesOffering where
+    toQuery ReservedDBInstancesOffering{..} = mconcat
+        [ "CurrencyCode"                  =? _rdbioCurrencyCode
+        , "DBInstanceClass"               =? _rdbioDBInstanceClass
+        , "Duration"                      =? _rdbioDuration
+        , "FixedPrice"                    =? _rdbioFixedPrice
+        , "MultiAZ"                       =? _rdbioMultiAZ
+        , "OfferingType"                  =? _rdbioOfferingType
+        , "ProductDescription"            =? _rdbioProductDescription
+        , "RecurringCharges"              =? _rdbioRecurringCharges
+        , "ReservedDBInstancesOfferingId" =? _rdbioReservedDBInstancesOfferingId
+        , "UsagePrice"                    =? _rdbioUsagePrice
+        ]
+
+data ApplyMethod
+    = Immediate     -- ^ immediate
+    | PendingReboot -- ^ pending-reboot
+      deriving (Eq, Ord, Show, Generic, Enum)
+
+instance Hashable ApplyMethod
+
+instance FromText ApplyMethod where
+    parser = match "immediate"      Immediate
+         <|> match "pending-reboot" PendingReboot
+
+instance ToText ApplyMethod where
+    toText = \case
+        Immediate     -> "immediate"
+        PendingReboot -> "pending-reboot"
+
+instance FromXML ApplyMethod where
+    parseXML = parseXMLText "ApplyMethod"
+
+instance ToQuery ApplyMethod where
+    toQuery = toQuery . toText
+
+data CharacterSet = CharacterSet
+    { _csCharacterSetDescription :: Maybe Text
+    , _csCharacterSetName        :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'CharacterSet' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'csCharacterSetDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'csCharacterSetName' @::@ 'Maybe' 'Text'
+--
+characterSet :: CharacterSet
+characterSet = CharacterSet
+    { _csCharacterSetName        = Nothing
+    , _csCharacterSetDescription = Nothing
+    }
+
+-- | The description of the character set.
+csCharacterSetDescription :: Lens' CharacterSet (Maybe Text)
+csCharacterSetDescription =
+    lens _csCharacterSetDescription
+        (\s a -> s { _csCharacterSetDescription = a })
+
+-- | The name of the character set.
+csCharacterSetName :: Lens' CharacterSet (Maybe Text)
+csCharacterSetName =
+    lens _csCharacterSetName (\s a -> s { _csCharacterSetName = a })
+
+instance FromXML CharacterSet where
+    parseXML x = CharacterSet
+        <$> x .@? "CharacterSetDescription"
+        <*> x .@? "CharacterSetName"
+
+instance ToQuery CharacterSet where
+    toQuery CharacterSet{..} = mconcat
+        [ "CharacterSetDescription" =? _csCharacterSetDescription
+        , "CharacterSetName"        =? _csCharacterSetName
+        ]
+
+data Subnet = Subnet
+    { _sSubnetAvailabilityZone :: Maybe AvailabilityZone
+    , _sSubnetIdentifier       :: Maybe Text
+    , _sSubnetStatus           :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'Subnet' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'sSubnetAvailabilityZone' @::@ 'Maybe' 'AvailabilityZone'
+--
+-- * 'sSubnetIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'sSubnetStatus' @::@ 'Maybe' 'Text'
+--
+subnet :: Subnet
+subnet = Subnet
+    { _sSubnetIdentifier       = Nothing
+    , _sSubnetAvailabilityZone = Nothing
+    , _sSubnetStatus           = Nothing
+    }
+
+sSubnetAvailabilityZone :: Lens' Subnet (Maybe AvailabilityZone)
+sSubnetAvailabilityZone =
+    lens _sSubnetAvailabilityZone (\s a -> s { _sSubnetAvailabilityZone = a })
+
+-- | Specifies the identifier of the subnet.
+sSubnetIdentifier :: Lens' Subnet (Maybe Text)
+sSubnetIdentifier =
+    lens _sSubnetIdentifier (\s a -> s { _sSubnetIdentifier = a })
+
+-- | Specifies the status of the subnet.
+sSubnetStatus :: Lens' Subnet (Maybe Text)
+sSubnetStatus = lens _sSubnetStatus (\s a -> s { _sSubnetStatus = a })
+
+instance FromXML Subnet where
+    parseXML x = Subnet
+        <$> x .@? "SubnetAvailabilityZone"
+        <*> x .@? "SubnetIdentifier"
+        <*> x .@? "SubnetStatus"
+
+instance ToQuery Subnet where
+    toQuery Subnet{..} = mconcat
+        [ "SubnetAvailabilityZone" =? _sSubnetAvailabilityZone
+        , "SubnetIdentifier"       =? _sSubnetIdentifier
+        , "SubnetStatus"           =? _sSubnetStatus
+        ]
+
+data ReservedDBInstance = ReservedDBInstance
+    { _rdbiCurrencyCode                  :: Maybe Text
+    , _rdbiDBInstanceClass               :: Maybe Text
+    , _rdbiDBInstanceCount               :: Maybe Int
+    , _rdbiDuration                      :: Maybe Int
+    , _rdbiFixedPrice                    :: Maybe Double
+    , _rdbiMultiAZ                       :: Maybe Bool
+    , _rdbiOfferingType                  :: Maybe Text
+    , _rdbiProductDescription            :: Maybe Text
+    , _rdbiRecurringCharges              :: List "RecurringCharge" RecurringCharge
+    , _rdbiReservedDBInstanceId          :: Maybe Text
+    , _rdbiReservedDBInstancesOfferingId :: Maybe Text
+    , _rdbiStartTime                     :: Maybe RFC822
+    , _rdbiState                         :: Maybe Text
+    , _rdbiUsagePrice                    :: Maybe Double
+    } deriving (Eq, Show)
+
+-- | 'ReservedDBInstance' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rdbiCurrencyCode' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbiDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbiDBInstanceCount' @::@ 'Maybe' 'Int'
+--
+-- * 'rdbiDuration' @::@ 'Maybe' 'Int'
+--
+-- * 'rdbiFixedPrice' @::@ 'Maybe' 'Double'
+--
+-- * 'rdbiMultiAZ' @::@ 'Maybe' 'Bool'
+--
+-- * 'rdbiOfferingType' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbiProductDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbiRecurringCharges' @::@ ['RecurringCharge']
+--
+-- * 'rdbiReservedDBInstanceId' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbiReservedDBInstancesOfferingId' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbiStartTime' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'rdbiState' @::@ 'Maybe' 'Text'
+--
+-- * 'rdbiUsagePrice' @::@ 'Maybe' 'Double'
+--
+reservedDBInstance :: ReservedDBInstance
+reservedDBInstance = ReservedDBInstance
+    { _rdbiReservedDBInstanceId          = Nothing
+    , _rdbiReservedDBInstancesOfferingId = Nothing
+    , _rdbiDBInstanceClass               = Nothing
+    , _rdbiStartTime                     = Nothing
+    , _rdbiDuration                      = Nothing
+    , _rdbiFixedPrice                    = Nothing
+    , _rdbiUsagePrice                    = Nothing
+    , _rdbiCurrencyCode                  = Nothing
+    , _rdbiDBInstanceCount               = Nothing
+    , _rdbiProductDescription            = Nothing
+    , _rdbiOfferingType                  = Nothing
+    , _rdbiMultiAZ                       = Nothing
+    , _rdbiState                         = Nothing
+    , _rdbiRecurringCharges              = mempty
+    }
+
+-- | The currency code for the reserved DB instance.
+rdbiCurrencyCode :: Lens' ReservedDBInstance (Maybe Text)
+rdbiCurrencyCode = lens _rdbiCurrencyCode (\s a -> s { _rdbiCurrencyCode = a })
+
+-- | The DB instance class for the reserved DB instance.
+rdbiDBInstanceClass :: Lens' ReservedDBInstance (Maybe Text)
+rdbiDBInstanceClass =
+    lens _rdbiDBInstanceClass (\s a -> s { _rdbiDBInstanceClass = a })
+
+-- | The number of reserved DB instances.
+rdbiDBInstanceCount :: Lens' ReservedDBInstance (Maybe Int)
+rdbiDBInstanceCount =
+    lens _rdbiDBInstanceCount (\s a -> s { _rdbiDBInstanceCount = a })
+
+-- | The duration of the reservation in seconds.
+rdbiDuration :: Lens' ReservedDBInstance (Maybe Int)
+rdbiDuration = lens _rdbiDuration (\s a -> s { _rdbiDuration = a })
+
+-- | The fixed price charged for this reserved DB instance.
+rdbiFixedPrice :: Lens' ReservedDBInstance (Maybe Double)
+rdbiFixedPrice = lens _rdbiFixedPrice (\s a -> s { _rdbiFixedPrice = a })
+
+-- | Indicates if the reservation applies to Multi-AZ deployments.
+rdbiMultiAZ :: Lens' ReservedDBInstance (Maybe Bool)
+rdbiMultiAZ = lens _rdbiMultiAZ (\s a -> s { _rdbiMultiAZ = a })
+
+-- | The offering type of this reserved DB instance.
+rdbiOfferingType :: Lens' ReservedDBInstance (Maybe Text)
+rdbiOfferingType = lens _rdbiOfferingType (\s a -> s { _rdbiOfferingType = a })
+
+-- | The description of the reserved DB instance.
+rdbiProductDescription :: Lens' ReservedDBInstance (Maybe Text)
+rdbiProductDescription =
+    lens _rdbiProductDescription (\s a -> s { _rdbiProductDescription = a })
+
+-- | The recurring price charged to run this reserved DB instance.
+rdbiRecurringCharges :: Lens' ReservedDBInstance [RecurringCharge]
+rdbiRecurringCharges =
+    lens _rdbiRecurringCharges (\s a -> s { _rdbiRecurringCharges = a })
+        . _List
+
+-- | The unique identifier for the reservation.
+rdbiReservedDBInstanceId :: Lens' ReservedDBInstance (Maybe Text)
+rdbiReservedDBInstanceId =
+    lens _rdbiReservedDBInstanceId
+        (\s a -> s { _rdbiReservedDBInstanceId = a })
+
+-- | The offering identifier.
+rdbiReservedDBInstancesOfferingId :: Lens' ReservedDBInstance (Maybe Text)
+rdbiReservedDBInstancesOfferingId =
+    lens _rdbiReservedDBInstancesOfferingId
+        (\s a -> s { _rdbiReservedDBInstancesOfferingId = a })
+
+-- | The time the reservation started.
+rdbiStartTime :: Lens' ReservedDBInstance (Maybe UTCTime)
+rdbiStartTime = lens _rdbiStartTime (\s a -> s { _rdbiStartTime = a }) . mapping _Time
+
+-- | The state of the reserved DB instance.
+rdbiState :: Lens' ReservedDBInstance (Maybe Text)
+rdbiState = lens _rdbiState (\s a -> s { _rdbiState = a })
+
+-- | The hourly price charged for this reserved DB instance.
+rdbiUsagePrice :: Lens' ReservedDBInstance (Maybe Double)
+rdbiUsagePrice = lens _rdbiUsagePrice (\s a -> s { _rdbiUsagePrice = a })
+
+instance FromXML ReservedDBInstance where
+    parseXML x = ReservedDBInstance
+        <$> x .@? "CurrencyCode"
+        <*> x .@? "DBInstanceClass"
+        <*> x .@? "DBInstanceCount"
+        <*> x .@? "Duration"
+        <*> x .@? "FixedPrice"
+        <*> x .@? "MultiAZ"
+        <*> x .@? "OfferingType"
+        <*> x .@? "ProductDescription"
+        <*> x .@  "RecurringCharges"
+        <*> x .@? "ReservedDBInstanceId"
+        <*> x .@? "ReservedDBInstancesOfferingId"
+        <*> x .@? "StartTime"
+        <*> x .@? "State"
+        <*> x .@? "UsagePrice"
+
+instance ToQuery ReservedDBInstance where
+    toQuery ReservedDBInstance{..} = mconcat
+        [ "CurrencyCode"                  =? _rdbiCurrencyCode
+        , "DBInstanceClass"               =? _rdbiDBInstanceClass
+        , "DBInstanceCount"               =? _rdbiDBInstanceCount
+        , "Duration"                      =? _rdbiDuration
+        , "FixedPrice"                    =? _rdbiFixedPrice
+        , "MultiAZ"                       =? _rdbiMultiAZ
+        , "OfferingType"                  =? _rdbiOfferingType
+        , "ProductDescription"            =? _rdbiProductDescription
+        , "RecurringCharges"              =? _rdbiRecurringCharges
+        , "ReservedDBInstanceId"          =? _rdbiReservedDBInstanceId
+        , "ReservedDBInstancesOfferingId" =? _rdbiReservedDBInstancesOfferingId
+        , "StartTime"                     =? _rdbiStartTime
+        , "State"                         =? _rdbiState
+        , "UsagePrice"                    =? _rdbiUsagePrice
+        ]
+
+data EngineDefaults = EngineDefaults
+    { _edDBParameterGroupFamily :: Maybe Text
+    , _edMarker                 :: Maybe Text
+    , _edParameters             :: List "Parameter" Parameter
+    } deriving (Eq, Show)
+
+-- | 'EngineDefaults' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'edDBParameterGroupFamily' @::@ 'Maybe' 'Text'
+--
+-- * 'edMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'edParameters' @::@ ['Parameter']
+--
+engineDefaults :: EngineDefaults
+engineDefaults = EngineDefaults
+    { _edDBParameterGroupFamily = Nothing
+    , _edMarker                 = Nothing
+    , _edParameters             = mempty
+    }
+
+-- | Specifies the name of the DB parameter group family which the engine
+-- default parameters apply to.
+edDBParameterGroupFamily :: Lens' EngineDefaults (Maybe Text)
+edDBParameterGroupFamily =
+    lens _edDBParameterGroupFamily
+        (\s a -> s { _edDBParameterGroupFamily = a })
+
+-- | An optional pagination token provided by a previous EngineDefaults
+-- request. If this parameter is specified, the response includes only
+-- records beyond the marker, up to the value specified by MaxRecords .
+edMarker :: Lens' EngineDefaults (Maybe Text)
+edMarker = lens _edMarker (\s a -> s { _edMarker = a })
+
+-- | Contains a list of engine default parameters.
+edParameters :: Lens' EngineDefaults [Parameter]
+edParameters = lens _edParameters (\s a -> s { _edParameters = a }) . _List
+
+instance FromXML EngineDefaults where
+    parseXML x = EngineDefaults
+        <$> x .@? "DBParameterGroupFamily"
+        <*> x .@? "Marker"
+        <*> x .@  "Parameters"
+
+instance ToQuery EngineDefaults where
+    toQuery EngineDefaults{..} = mconcat
+        [ "DBParameterGroupFamily" =? _edDBParameterGroupFamily
+        , "Marker"                 =? _edMarker
+        , "Parameters"             =? _edParameters
+        ]
+
+newtype DBParameterGroupNameMessage = DBParameterGroupNameMessage
+    { _dbpgnmDBParameterGroupName :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'DBParameterGroupNameMessage' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dbpgnmDBParameterGroupName' @::@ 'Maybe' 'Text'
+--
+dbparameterGroupNameMessage :: DBParameterGroupNameMessage
+dbparameterGroupNameMessage = DBParameterGroupNameMessage
+    { _dbpgnmDBParameterGroupName = Nothing
+    }
+
+-- | The name of the DB parameter group.
+dbpgnmDBParameterGroupName :: Lens' DBParameterGroupNameMessage (Maybe Text)
+dbpgnmDBParameterGroupName =
+    lens _dbpgnmDBParameterGroupName
+        (\s a -> s { _dbpgnmDBParameterGroupName = a })
+
+instance FromXML DBParameterGroupNameMessage where
+    parseXML x = DBParameterGroupNameMessage
+        <$> x .@? "DBParameterGroupName"
+
+instance ToQuery DBParameterGroupNameMessage where
+    toQuery DBParameterGroupNameMessage{..} = mconcat
+        [ "DBParameterGroupName" =? _dbpgnmDBParameterGroupName
+        ]
+
+data OptionGroupOption = OptionGroupOption
+    { _ogoDefaultPort                       :: Maybe Int
+    , _ogoDescription                       :: Maybe Text
+    , _ogoEngineName                        :: Maybe Text
+    , _ogoMajorEngineVersion                :: Maybe Text
+    , _ogoMinimumRequiredMinorEngineVersion :: Maybe Text
+    , _ogoName                              :: Maybe Text
+    , _ogoOptionGroupOptionSettings         :: List "OptionGroupOptionSetting" OptionGroupOptionSetting
+    , _ogoOptionsDependedOn                 :: List "OptionName" Text
+    , _ogoPermanent                         :: Maybe Bool
+    , _ogoPersistent                        :: Maybe Bool
+    , _ogoPortRequired                      :: Maybe Bool
+    } deriving (Eq, Show)
+
+-- | 'OptionGroupOption' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ogoDefaultPort' @::@ 'Maybe' 'Int'
+--
+-- * 'ogoDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'ogoEngineName' @::@ 'Maybe' 'Text'
+--
+-- * 'ogoMajorEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'ogoMinimumRequiredMinorEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'ogoName' @::@ 'Maybe' 'Text'
+--
+-- * 'ogoOptionGroupOptionSettings' @::@ ['OptionGroupOptionSetting']
+--
+-- * 'ogoOptionsDependedOn' @::@ ['Text']
+--
+-- * 'ogoPermanent' @::@ 'Maybe' 'Bool'
+--
+-- * 'ogoPersistent' @::@ 'Maybe' 'Bool'
+--
+-- * 'ogoPortRequired' @::@ 'Maybe' 'Bool'
+--
+optionGroupOption :: OptionGroupOption
+optionGroupOption = OptionGroupOption
+    { _ogoName                              = Nothing
+    , _ogoDescription                       = Nothing
+    , _ogoEngineName                        = Nothing
+    , _ogoMajorEngineVersion                = Nothing
+    , _ogoMinimumRequiredMinorEngineVersion = Nothing
+    , _ogoPortRequired                      = Nothing
+    , _ogoDefaultPort                       = Nothing
+    , _ogoOptionsDependedOn                 = mempty
+    , _ogoPersistent                        = Nothing
+    , _ogoPermanent                         = Nothing
+    , _ogoOptionGroupOptionSettings         = mempty
+    }
+
+-- | If the option requires a port, specifies the default port for the option.
+ogoDefaultPort :: Lens' OptionGroupOption (Maybe Int)
+ogoDefaultPort = lens _ogoDefaultPort (\s a -> s { _ogoDefaultPort = a })
+
+-- | The description of the option.
+ogoDescription :: Lens' OptionGroupOption (Maybe Text)
+ogoDescription = lens _ogoDescription (\s a -> s { _ogoDescription = a })
+
+-- | Engine name that this option can be applied to.
+ogoEngineName :: Lens' OptionGroupOption (Maybe Text)
+ogoEngineName = lens _ogoEngineName (\s a -> s { _ogoEngineName = a })
+
+-- | Indicates the major engine version that the option is available for.
+ogoMajorEngineVersion :: Lens' OptionGroupOption (Maybe Text)
+ogoMajorEngineVersion =
+    lens _ogoMajorEngineVersion (\s a -> s { _ogoMajorEngineVersion = a })
+
+-- | The minimum required engine version for the option to be applied.
+ogoMinimumRequiredMinorEngineVersion :: Lens' OptionGroupOption (Maybe Text)
+ogoMinimumRequiredMinorEngineVersion =
+    lens _ogoMinimumRequiredMinorEngineVersion
+        (\s a -> s { _ogoMinimumRequiredMinorEngineVersion = a })
+
+-- | The name of the option.
+ogoName :: Lens' OptionGroupOption (Maybe Text)
+ogoName = lens _ogoName (\s a -> s { _ogoName = a })
+
+-- | Specifies the option settings that are available (and the default value)
+-- for each option in an option group.
+ogoOptionGroupOptionSettings :: Lens' OptionGroupOption [OptionGroupOptionSetting]
+ogoOptionGroupOptionSettings =
+    lens _ogoOptionGroupOptionSettings
+        (\s a -> s { _ogoOptionGroupOptionSettings = a })
+            . _List
+
+-- | List of all options that are prerequisites for this option.
+ogoOptionsDependedOn :: Lens' OptionGroupOption [Text]
+ogoOptionsDependedOn =
+    lens _ogoOptionsDependedOn (\s a -> s { _ogoOptionsDependedOn = a })
+        . _List
+
+-- | A permanent option cannot be removed from the option group once the
+-- option group is used, and it cannot be removed from the db instance after
+-- assigning an option group with this permanent option.
+ogoPermanent :: Lens' OptionGroupOption (Maybe Bool)
+ogoPermanent = lens _ogoPermanent (\s a -> s { _ogoPermanent = a })
+
+-- | A persistent option cannot be removed from the option group once the
+-- option group is used, but this option can be removed from the db instance
+-- while modifying the related data and assigning another option group
+-- without this option.
+ogoPersistent :: Lens' OptionGroupOption (Maybe Bool)
+ogoPersistent = lens _ogoPersistent (\s a -> s { _ogoPersistent = a })
+
+-- | Specifies whether the option requires a port.
+ogoPortRequired :: Lens' OptionGroupOption (Maybe Bool)
+ogoPortRequired = lens _ogoPortRequired (\s a -> s { _ogoPortRequired = a })
+
+instance FromXML OptionGroupOption where
+    parseXML x = OptionGroupOption
+        <$> x .@? "DefaultPort"
+        <*> x .@? "Description"
+        <*> x .@? "EngineName"
+        <*> x .@? "MajorEngineVersion"
+        <*> x .@? "MinimumRequiredMinorEngineVersion"
+        <*> x .@? "Name"
+        <*> x .@  "OptionGroupOptionSettings"
+        <*> x .@  "OptionsDependedOn"
+        <*> x .@? "Permanent"
+        <*> x .@? "Persistent"
+        <*> x .@? "PortRequired"
+
+instance ToQuery OptionGroupOption where
+    toQuery OptionGroupOption{..} = mconcat
+        [ "DefaultPort"                       =? _ogoDefaultPort
+        , "Description"                       =? _ogoDescription
+        , "EngineName"                        =? _ogoEngineName
+        , "MajorEngineVersion"                =? _ogoMajorEngineVersion
+        , "MinimumRequiredMinorEngineVersion" =? _ogoMinimumRequiredMinorEngineVersion
+        , "Name"                              =? _ogoName
+        , "OptionGroupOptionSettings"         =? _ogoOptionGroupOptionSettings
+        , "OptionsDependedOn"                 =? _ogoOptionsDependedOn
+        , "Permanent"                         =? _ogoPermanent
+        , "Persistent"                        =? _ogoPersistent
+        , "PortRequired"                      =? _ogoPortRequired
+        ]
+
+data DBInstance = DBInstance
+    { _dbiAllocatedStorage                      :: Maybe Int
+    , _dbiAutoMinorVersionUpgrade               :: Maybe Bool
+    , _dbiAvailabilityZone                      :: Maybe Text
+    , _dbiBackupRetentionPeriod                 :: Maybe Int
+    , _dbiCharacterSetName                      :: Maybe Text
+    , _dbiDBInstanceClass                       :: Maybe Text
+    , _dbiDBInstanceIdentifier                  :: Maybe Text
+    , _dbiDBInstanceStatus                      :: Maybe Text
+    , _dbiDBName                                :: Maybe Text
+    , _dbiDBParameterGroups                     :: List "DBParameterGroup" DBParameterGroupStatus
+    , _dbiDBSecurityGroups                      :: List "DBSecurityGroup" DBSecurityGroupMembership
+    , _dbiDBSubnetGroup                         :: Maybe DBSubnetGroup
+    , _dbiEndpoint                              :: Maybe Endpoint
+    , _dbiEngine                                :: Maybe Text
+    , _dbiEngineVersion                         :: Maybe Text
+    , _dbiInstanceCreateTime                    :: Maybe RFC822
+    , _dbiIops                                  :: Maybe Int
+    , _dbiLatestRestorableTime                  :: Maybe RFC822
+    , _dbiLicenseModel                          :: Maybe Text
+    , _dbiMasterUsername                        :: Maybe Text
+    , _dbiMultiAZ                               :: Maybe Bool
+    , _dbiOptionGroupMemberships                :: List "OptionGroupMembership" OptionGroupMembership
+    , _dbiPendingModifiedValues                 :: Maybe PendingModifiedValues
+    , _dbiPreferredBackupWindow                 :: Maybe Text
+    , _dbiPreferredMaintenanceWindow            :: Maybe Text
+    , _dbiPubliclyAccessible                    :: Maybe Bool
+    , _dbiReadReplicaDBInstanceIdentifiers      :: List "ReadReplicaDBInstanceIdentifier" Text
+    , _dbiReadReplicaSourceDBInstanceIdentifier :: Maybe Text
+    , _dbiSecondaryAvailabilityZone             :: Maybe Text
+    , _dbiStatusInfos                           :: List "DBInstanceStatusInfo" DBInstanceStatusInfo
+    , _dbiStorageType                           :: Maybe Text
+    , _dbiTdeCredentialArn                      :: Maybe Text
+    , _dbiVpcSecurityGroups                     :: List "VpcSecurityGroupMembership" VpcSecurityGroupMembership
+    } deriving (Eq, Show)
+
+-- | 'DBInstance' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dbiAllocatedStorage' @::@ 'Maybe' 'Int'
+--
+-- * 'dbiAutoMinorVersionUpgrade' @::@ 'Maybe' 'Bool'
+--
+-- * 'dbiAvailabilityZone' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiBackupRetentionPeriod' @::@ 'Maybe' 'Int'
+--
+-- * 'dbiCharacterSetName' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiDBInstanceIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiDBInstanceStatus' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiDBName' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiDBParameterGroups' @::@ ['DBParameterGroupStatus']
+--
+-- * 'dbiDBSecurityGroups' @::@ ['DBSecurityGroupMembership']
+--
+-- * 'dbiDBSubnetGroup' @::@ 'Maybe' 'DBSubnetGroup'
+--
+-- * 'dbiEndpoint' @::@ 'Maybe' 'Endpoint'
+--
+-- * 'dbiEngine' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiInstanceCreateTime' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'dbiIops' @::@ 'Maybe' 'Int'
+--
+-- * 'dbiLatestRestorableTime' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'dbiLicenseModel' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiMasterUsername' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiMultiAZ' @::@ 'Maybe' 'Bool'
+--
+-- * 'dbiOptionGroupMemberships' @::@ ['OptionGroupMembership']
+--
+-- * 'dbiPendingModifiedValues' @::@ 'Maybe' 'PendingModifiedValues'
+--
+-- * 'dbiPreferredBackupWindow' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiPreferredMaintenanceWindow' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiPubliclyAccessible' @::@ 'Maybe' 'Bool'
+--
+-- * 'dbiReadReplicaDBInstanceIdentifiers' @::@ ['Text']
+--
+-- * 'dbiReadReplicaSourceDBInstanceIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiSecondaryAvailabilityZone' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiStatusInfos' @::@ ['DBInstanceStatusInfo']
+--
+-- * 'dbiStorageType' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiTdeCredentialArn' @::@ 'Maybe' 'Text'
+--
+-- * 'dbiVpcSecurityGroups' @::@ ['VpcSecurityGroupMembership']
+--
+dbinstance :: DBInstance
+dbinstance = DBInstance
+    { _dbiDBInstanceIdentifier                  = Nothing
+    , _dbiDBInstanceClass                       = Nothing
+    , _dbiEngine                                = Nothing
+    , _dbiDBInstanceStatus                      = Nothing
+    , _dbiMasterUsername                        = Nothing
+    , _dbiDBName                                = Nothing
+    , _dbiEndpoint                              = Nothing
+    , _dbiAllocatedStorage                      = Nothing
+    , _dbiInstanceCreateTime                    = Nothing
+    , _dbiPreferredBackupWindow                 = Nothing
+    , _dbiBackupRetentionPeriod                 = Nothing
+    , _dbiDBSecurityGroups                      = mempty
+    , _dbiVpcSecurityGroups                     = mempty
+    , _dbiDBParameterGroups                     = mempty
+    , _dbiAvailabilityZone                      = Nothing
+    , _dbiDBSubnetGroup                         = Nothing
+    , _dbiPreferredMaintenanceWindow            = Nothing
+    , _dbiPendingModifiedValues                 = Nothing
+    , _dbiLatestRestorableTime                  = Nothing
+    , _dbiMultiAZ                               = Nothing
+    , _dbiEngineVersion                         = Nothing
+    , _dbiAutoMinorVersionUpgrade               = Nothing
+    , _dbiReadReplicaSourceDBInstanceIdentifier = Nothing
+    , _dbiReadReplicaDBInstanceIdentifiers      = mempty
+    , _dbiLicenseModel                          = Nothing
+    , _dbiIops                                  = Nothing
+    , _dbiOptionGroupMemberships                = mempty
+    , _dbiCharacterSetName                      = Nothing
+    , _dbiSecondaryAvailabilityZone             = Nothing
+    , _dbiPubliclyAccessible                    = Nothing
+    , _dbiStatusInfos                           = mempty
+    , _dbiStorageType                           = Nothing
+    , _dbiTdeCredentialArn                      = Nothing
+    }
+
+-- | Specifies the allocated storage size specified in gigabytes.
+dbiAllocatedStorage :: Lens' DBInstance (Maybe Int)
+dbiAllocatedStorage =
+    lens _dbiAllocatedStorage (\s a -> s { _dbiAllocatedStorage = a })
+
+-- | Indicates that minor version patches are applied automatically.
+dbiAutoMinorVersionUpgrade :: Lens' DBInstance (Maybe Bool)
+dbiAutoMinorVersionUpgrade =
+    lens _dbiAutoMinorVersionUpgrade
+        (\s a -> s { _dbiAutoMinorVersionUpgrade = a })
+
+-- | Specifies the name of the Availability Zone the DB instance is located
+-- in.
+dbiAvailabilityZone :: Lens' DBInstance (Maybe Text)
+dbiAvailabilityZone =
+    lens _dbiAvailabilityZone (\s a -> s { _dbiAvailabilityZone = a })
+
+-- | Specifies the number of days for which automatic DB snapshots are
+-- retained.
+dbiBackupRetentionPeriod :: Lens' DBInstance (Maybe Int)
+dbiBackupRetentionPeriod =
+    lens _dbiBackupRetentionPeriod
+        (\s a -> s { _dbiBackupRetentionPeriod = a })
+
+-- | If present, specifies the name of the character set that this instance is
+-- associated with.
+dbiCharacterSetName :: Lens' DBInstance (Maybe Text)
+dbiCharacterSetName =
+    lens _dbiCharacterSetName (\s a -> s { _dbiCharacterSetName = a })
+
+-- | Contains the name of the compute and memory capacity class of the DB
+-- instance.
+dbiDBInstanceClass :: Lens' DBInstance (Maybe Text)
+dbiDBInstanceClass =
+    lens _dbiDBInstanceClass (\s a -> s { _dbiDBInstanceClass = a })
+
+-- | Contains a user-supplied database identifier. This is the unique key that
+-- identifies a DB instance.
+dbiDBInstanceIdentifier :: Lens' DBInstance (Maybe Text)
+dbiDBInstanceIdentifier =
+    lens _dbiDBInstanceIdentifier (\s a -> s { _dbiDBInstanceIdentifier = a })
+
+-- | Specifies the current state of this database.
+dbiDBInstanceStatus :: Lens' DBInstance (Maybe Text)
+dbiDBInstanceStatus =
+    lens _dbiDBInstanceStatus (\s a -> s { _dbiDBInstanceStatus = a })
+
+-- | The meaning of this parameter differs according to the database engine
+-- you use. For example, this value returns only MySQL information when
+-- returning values from CreateDBInstanceReadReplica since read replicas are
+-- only supported for MySQL. MySQL Contains the name of the initial database
+-- of this instance that was provided at create time, if one was specified
+-- when the DB instance was created. This same name is returned for the life
+-- of the DB instance. Type: String Oracle Contains the Oracle System ID
+-- (SID) of the created DB instance. Not shown when the returned parameters
+-- do not apply to an Oracle DB instance.
+dbiDBName :: Lens' DBInstance (Maybe Text)
+dbiDBName = lens _dbiDBName (\s a -> s { _dbiDBName = a })
+
+-- | Provides the list of DB parameter groups applied to this DB instance.
+dbiDBParameterGroups :: Lens' DBInstance [DBParameterGroupStatus]
+dbiDBParameterGroups =
+    lens _dbiDBParameterGroups (\s a -> s { _dbiDBParameterGroups = a })
+        . _List
+
+-- | Provides List of DB security group elements containing only
+-- DBSecurityGroup.Name and DBSecurityGroup.Status subelements.
+dbiDBSecurityGroups :: Lens' DBInstance [DBSecurityGroupMembership]
+dbiDBSecurityGroups =
+    lens _dbiDBSecurityGroups (\s a -> s { _dbiDBSecurityGroups = a })
+        . _List
+
+-- | Specifies information on the subnet group associated with the DB
+-- instance, including the name, description, and subnets in the subnet
+-- group.
+dbiDBSubnetGroup :: Lens' DBInstance (Maybe DBSubnetGroup)
+dbiDBSubnetGroup = lens _dbiDBSubnetGroup (\s a -> s { _dbiDBSubnetGroup = a })
+
+-- | Specifies the connection endpoint.
+dbiEndpoint :: Lens' DBInstance (Maybe Endpoint)
+dbiEndpoint = lens _dbiEndpoint (\s a -> s { _dbiEndpoint = a })
+
+-- | Provides the name of the database engine to be used for this DB instance.
+dbiEngine :: Lens' DBInstance (Maybe Text)
+dbiEngine = lens _dbiEngine (\s a -> s { _dbiEngine = a })
+
+-- | Indicates the database engine version.
+dbiEngineVersion :: Lens' DBInstance (Maybe Text)
+dbiEngineVersion = lens _dbiEngineVersion (\s a -> s { _dbiEngineVersion = a })
+
+-- | Provides the date and time the DB instance was created.
+dbiInstanceCreateTime :: Lens' DBInstance (Maybe UTCTime)
+dbiInstanceCreateTime =
+    lens _dbiInstanceCreateTime (\s a -> s { _dbiInstanceCreateTime = a })
+        . mapping _Time
+
+-- | Specifies the Provisioned IOPS (I/O operations per second) value.
+dbiIops :: Lens' DBInstance (Maybe Int)
+dbiIops = lens _dbiIops (\s a -> s { _dbiIops = a })
+
+-- | Specifies the latest time to which a database can be restored with
+-- point-in-time restore.
+dbiLatestRestorableTime :: Lens' DBInstance (Maybe UTCTime)
+dbiLatestRestorableTime =
+    lens _dbiLatestRestorableTime (\s a -> s { _dbiLatestRestorableTime = a })
+        . mapping _Time
+
+-- | License model information for this DB instance.
+dbiLicenseModel :: Lens' DBInstance (Maybe Text)
+dbiLicenseModel = lens _dbiLicenseModel (\s a -> s { _dbiLicenseModel = a })
+
+-- | Contains the master username for the DB instance.
+dbiMasterUsername :: Lens' DBInstance (Maybe Text)
+dbiMasterUsername =
+    lens _dbiMasterUsername (\s a -> s { _dbiMasterUsername = a })
+
+-- | Specifies if the DB instance is a Multi-AZ deployment.
+dbiMultiAZ :: Lens' DBInstance (Maybe Bool)
+dbiMultiAZ = lens _dbiMultiAZ (\s a -> s { _dbiMultiAZ = a })
+
+-- | Provides the list of option group memberships for this DB instance.
+dbiOptionGroupMemberships :: Lens' DBInstance [OptionGroupMembership]
+dbiOptionGroupMemberships =
+    lens _dbiOptionGroupMemberships
+        (\s a -> s { _dbiOptionGroupMemberships = a })
+            . _List
+
+-- | Specifies that changes to the DB instance are pending. This element is
+-- only included when changes are pending. Specific changes are identified
+-- by subelements.
+dbiPendingModifiedValues :: Lens' DBInstance (Maybe PendingModifiedValues)
+dbiPendingModifiedValues =
+    lens _dbiPendingModifiedValues
+        (\s a -> s { _dbiPendingModifiedValues = a })
+
+-- | Specifies the daily time range during which automated backups are created
+-- if automated backups are enabled, as determined by the
+-- BackupRetentionPeriod.
+dbiPreferredBackupWindow :: Lens' DBInstance (Maybe Text)
+dbiPreferredBackupWindow =
+    lens _dbiPreferredBackupWindow
+        (\s a -> s { _dbiPreferredBackupWindow = a })
+
+-- | Specifies the weekly time range (in UTC) during which system maintenance
+-- can occur.
+dbiPreferredMaintenanceWindow :: Lens' DBInstance (Maybe Text)
+dbiPreferredMaintenanceWindow =
+    lens _dbiPreferredMaintenanceWindow
+        (\s a -> s { _dbiPreferredMaintenanceWindow = a })
+
+-- | Specifies the accessibility options for the DB instance. A value of true
+-- specifies an Internet-facing instance with a publicly resolvable DNS
+-- name, which resolves to a public IP address. A value of false specifies
+-- an internal instance with a DNS name that resolves to a private IP
+-- address. Default: The default behavior varies depending on whether a VPC
+-- has been requested or not. The following list shows the default behavior
+-- in each case. Default VPC:true VPC:false If no DB subnet group has been
+-- specified as part of the request and the PubliclyAccessible value has not
+-- been set, the DB instance will be publicly accessible. If a specific DB
+-- subnet group has been specified as part of the request and the
+-- PubliclyAccessible value has not been set, the DB instance will be
+-- private.
+dbiPubliclyAccessible :: Lens' DBInstance (Maybe Bool)
+dbiPubliclyAccessible =
+    lens _dbiPubliclyAccessible (\s a -> s { _dbiPubliclyAccessible = a })
+
+-- | Contains one or more identifiers of the read replicas associated with
+-- this DB instance.
+dbiReadReplicaDBInstanceIdentifiers :: Lens' DBInstance [Text]
+dbiReadReplicaDBInstanceIdentifiers =
+    lens _dbiReadReplicaDBInstanceIdentifiers
+        (\s a -> s { _dbiReadReplicaDBInstanceIdentifiers = a })
+            . _List
+
+-- | Contains the identifier of the source DB instance if this DB instance is
+-- a read replica.
+dbiReadReplicaSourceDBInstanceIdentifier :: Lens' DBInstance (Maybe Text)
+dbiReadReplicaSourceDBInstanceIdentifier =
+    lens _dbiReadReplicaSourceDBInstanceIdentifier
+        (\s a -> s { _dbiReadReplicaSourceDBInstanceIdentifier = a })
+
+-- | If present, specifies the name of the secondary Availability Zone for a
+-- DB instance with multi-AZ support.
+dbiSecondaryAvailabilityZone :: Lens' DBInstance (Maybe Text)
+dbiSecondaryAvailabilityZone =
+    lens _dbiSecondaryAvailabilityZone
+        (\s a -> s { _dbiSecondaryAvailabilityZone = a })
+
+-- | The status of a read replica. If the instance is not a read replica, this
+-- will be blank.
+dbiStatusInfos :: Lens' DBInstance [DBInstanceStatusInfo]
+dbiStatusInfos = lens _dbiStatusInfos (\s a -> s { _dbiStatusInfos = a }) . _List
+
+-- | Specifies storage type associated with DB Instance.
+dbiStorageType :: Lens' DBInstance (Maybe Text)
+dbiStorageType = lens _dbiStorageType (\s a -> s { _dbiStorageType = a })
+
+-- | The ARN from the Key Store with which the instance is associated for TDE
+-- encryption.
+dbiTdeCredentialArn :: Lens' DBInstance (Maybe Text)
+dbiTdeCredentialArn =
+    lens _dbiTdeCredentialArn (\s a -> s { _dbiTdeCredentialArn = a })
+
+-- | Provides List of VPC security group elements that the DB instance belongs
+-- to.
+dbiVpcSecurityGroups :: Lens' DBInstance [VpcSecurityGroupMembership]
+dbiVpcSecurityGroups =
+    lens _dbiVpcSecurityGroups (\s a -> s { _dbiVpcSecurityGroups = a })
+        . _List
+
+instance FromXML DBInstance where
+    parseXML x = DBInstance
+        <$> x .@? "AllocatedStorage"
+        <*> x .@? "AutoMinorVersionUpgrade"
+        <*> x .@? "AvailabilityZone"
+        <*> x .@? "BackupRetentionPeriod"
+        <*> x .@? "CharacterSetName"
+        <*> x .@? "DBInstanceClass"
+        <*> x .@? "DBInstanceIdentifier"
+        <*> x .@? "DBInstanceStatus"
+        <*> x .@? "DBName"
+        <*> x .@  "DBParameterGroups"
+        <*> x .@  "DBSecurityGroups"
+        <*> x .@? "DBSubnetGroup"
+        <*> x .@? "Endpoint"
+        <*> x .@? "Engine"
+        <*> x .@? "EngineVersion"
+        <*> x .@? "InstanceCreateTime"
+        <*> x .@? "Iops"
+        <*> x .@? "LatestRestorableTime"
+        <*> x .@? "LicenseModel"
+        <*> x .@? "MasterUsername"
+        <*> x .@? "MultiAZ"
+        <*> x .@  "OptionGroupMemberships"
+        <*> x .@? "PendingModifiedValues"
+        <*> x .@? "PreferredBackupWindow"
+        <*> x .@? "PreferredMaintenanceWindow"
+        <*> x .@? "PubliclyAccessible"
+        <*> x .@  "ReadReplicaDBInstanceIdentifiers"
+        <*> x .@? "ReadReplicaSourceDBInstanceIdentifier"
+        <*> x .@? "SecondaryAvailabilityZone"
+        <*> x .@  "StatusInfos"
+        <*> x .@? "StorageType"
+        <*> x .@? "TdeCredentialArn"
+        <*> x .@  "VpcSecurityGroups"
+
+instance ToQuery DBInstance where
+    toQuery DBInstance{..} = mconcat
+        [ "AllocatedStorage"                      =? _dbiAllocatedStorage
+        , "AutoMinorVersionUpgrade"               =? _dbiAutoMinorVersionUpgrade
+        , "AvailabilityZone"                      =? _dbiAvailabilityZone
+        , "BackupRetentionPeriod"                 =? _dbiBackupRetentionPeriod
+        , "CharacterSetName"                      =? _dbiCharacterSetName
+        , "DBInstanceClass"                       =? _dbiDBInstanceClass
+        , "DBInstanceIdentifier"                  =? _dbiDBInstanceIdentifier
+        , "DBInstanceStatus"                      =? _dbiDBInstanceStatus
+        , "DBName"                                =? _dbiDBName
+        , "DBParameterGroups"                     =? _dbiDBParameterGroups
+        , "DBSecurityGroups"                      =? _dbiDBSecurityGroups
+        , "DBSubnetGroup"                         =? _dbiDBSubnetGroup
+        , "Endpoint"                              =? _dbiEndpoint
+        , "Engine"                                =? _dbiEngine
+        , "EngineVersion"                         =? _dbiEngineVersion
+        , "InstanceCreateTime"                    =? _dbiInstanceCreateTime
+        , "Iops"                                  =? _dbiIops
+        , "LatestRestorableTime"                  =? _dbiLatestRestorableTime
+        , "LicenseModel"                          =? _dbiLicenseModel
+        , "MasterUsername"                        =? _dbiMasterUsername
+        , "MultiAZ"                               =? _dbiMultiAZ
+        , "OptionGroupMemberships"                =? _dbiOptionGroupMemberships
+        , "PendingModifiedValues"                 =? _dbiPendingModifiedValues
+        , "PreferredBackupWindow"                 =? _dbiPreferredBackupWindow
+        , "PreferredMaintenanceWindow"            =? _dbiPreferredMaintenanceWindow
+        , "PubliclyAccessible"                    =? _dbiPubliclyAccessible
+        , "ReadReplicaDBInstanceIdentifiers"      =? _dbiReadReplicaDBInstanceIdentifiers
+        , "ReadReplicaSourceDBInstanceIdentifier" =? _dbiReadReplicaSourceDBInstanceIdentifier
+        , "SecondaryAvailabilityZone"             =? _dbiSecondaryAvailabilityZone
+        , "StatusInfos"                           =? _dbiStatusInfos
+        , "StorageType"                           =? _dbiStorageType
+        , "TdeCredentialArn"                      =? _dbiTdeCredentialArn
+        , "VpcSecurityGroups"                     =? _dbiVpcSecurityGroups
+        ]
+
+newtype AvailabilityZone = AvailabilityZone
+    { _azName :: Maybe Text
+    } deriving (Eq, Ord, Show, Monoid)
+
+-- | 'AvailabilityZone' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'azName' @::@ 'Maybe' 'Text'
+--
+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 FromXML AvailabilityZone where
+    parseXML x = AvailabilityZone
+        <$> x .@? "Name"
+
+instance ToQuery AvailabilityZone where
+    toQuery AvailabilityZone{..} = mconcat
+        [ "Name" =? _azName
+        ]
+
+data EventSubscription = EventSubscription
+    { _esCustSubscriptionId       :: Maybe Text
+    , _esCustomerAwsId            :: Maybe Text
+    , _esEnabled                  :: Maybe Bool
+    , _esEventCategoriesList      :: List "EventCategory" Text
+    , _esSnsTopicArn              :: Maybe Text
+    , _esSourceIdsList            :: List "SourceId" Text
+    , _esSourceType               :: Maybe Text
+    , _esStatus                   :: Maybe Text
+    , _esSubscriptionCreationTime :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'EventSubscription' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'esCustSubscriptionId' @::@ 'Maybe' 'Text'
+--
+-- * 'esCustomerAwsId' @::@ 'Maybe' 'Text'
+--
+-- * 'esEnabled' @::@ 'Maybe' 'Bool'
+--
+-- * 'esEventCategoriesList' @::@ ['Text']
+--
+-- * 'esSnsTopicArn' @::@ 'Maybe' 'Text'
+--
+-- * 'esSourceIdsList' @::@ ['Text']
+--
+-- * 'esSourceType' @::@ 'Maybe' 'Text'
+--
+-- * 'esStatus' @::@ 'Maybe' 'Text'
+--
+-- * 'esSubscriptionCreationTime' @::@ 'Maybe' 'Text'
+--
+eventSubscription :: EventSubscription
+eventSubscription = EventSubscription
+    { _esCustomerAwsId            = Nothing
+    , _esCustSubscriptionId       = Nothing
+    , _esSnsTopicArn              = Nothing
+    , _esStatus                   = Nothing
+    , _esSubscriptionCreationTime = Nothing
+    , _esSourceType               = Nothing
+    , _esSourceIdsList            = mempty
+    , _esEventCategoriesList      = mempty
+    , _esEnabled                  = Nothing
+    }
+
+-- | The RDS event notification subscription Id.
+esCustSubscriptionId :: Lens' EventSubscription (Maybe Text)
+esCustSubscriptionId =
+    lens _esCustSubscriptionId (\s a -> s { _esCustSubscriptionId = a })
+
+-- | The AWS customer account associated with the RDS event notification
+-- subscription.
+esCustomerAwsId :: Lens' EventSubscription (Maybe Text)
+esCustomerAwsId = lens _esCustomerAwsId (\s a -> s { _esCustomerAwsId = a })
+
+-- | A Boolean value indicating if the subscription is enabled. True indicates
+-- the subscription is enabled.
+esEnabled :: Lens' EventSubscription (Maybe Bool)
+esEnabled = lens _esEnabled (\s a -> s { _esEnabled = a })
+
+-- | A list of event categories for the RDS event notification subscription.
+esEventCategoriesList :: Lens' EventSubscription [Text]
+esEventCategoriesList =
+    lens _esEventCategoriesList (\s a -> s { _esEventCategoriesList = a })
+        . _List
+
+-- | The topic ARN of the RDS event notification subscription.
+esSnsTopicArn :: Lens' EventSubscription (Maybe Text)
+esSnsTopicArn = lens _esSnsTopicArn (\s a -> s { _esSnsTopicArn = a })
+
+-- | A list of source IDs for the RDS event notification subscription.
+esSourceIdsList :: Lens' EventSubscription [Text]
+esSourceIdsList = lens _esSourceIdsList (\s a -> s { _esSourceIdsList = a }) . _List
+
+-- | The source type for the RDS event notification subscription.
+esSourceType :: Lens' EventSubscription (Maybe Text)
+esSourceType = lens _esSourceType (\s a -> s { _esSourceType = a })
+
+-- | The status of the RDS event notification subscription. Constraints: Can
+-- be one of the following: creating | modifying | deleting | active |
+-- no-permission | topic-not-exist The status "no-permission" indicates that
+-- RDS no longer has permission to post to the SNS topic. The status
+-- "topic-not-exist" indicates that the topic was deleted after the
+-- subscription was created.
+esStatus :: Lens' EventSubscription (Maybe Text)
+esStatus = lens _esStatus (\s a -> s { _esStatus = a })
+
+-- | The time the RDS event notification subscription was created.
+esSubscriptionCreationTime :: Lens' EventSubscription (Maybe Text)
+esSubscriptionCreationTime =
+    lens _esSubscriptionCreationTime
+        (\s a -> s { _esSubscriptionCreationTime = a })
+
+instance FromXML EventSubscription where
+    parseXML x = EventSubscription
+        <$> x .@? "CustSubscriptionId"
+        <*> x .@? "CustomerAwsId"
+        <*> x .@? "Enabled"
+        <*> x .@  "EventCategoriesList"
+        <*> x .@? "SnsTopicArn"
+        <*> x .@  "SourceIdsList"
+        <*> x .@? "SourceType"
+        <*> x .@? "Status"
+        <*> x .@? "SubscriptionCreationTime"
+
+instance ToQuery EventSubscription where
+    toQuery EventSubscription{..} = mconcat
+        [ "CustSubscriptionId"       =? _esCustSubscriptionId
+        , "CustomerAwsId"            =? _esCustomerAwsId
+        , "Enabled"                  =? _esEnabled
+        , "EventCategoriesList"      =? _esEventCategoriesList
+        , "SnsTopicArn"              =? _esSnsTopicArn
+        , "SourceIdsList"            =? _esSourceIdsList
+        , "SourceType"               =? _esSourceType
+        , "Status"                   =? _esStatus
+        , "SubscriptionCreationTime" =? _esSubscriptionCreationTime
+        ]
+
+data DBSubnetGroup = DBSubnetGroup
+    { _dbsg1DBSubnetGroupDescription :: Maybe Text
+    , _dbsg1DBSubnetGroupName        :: Maybe Text
+    , _dbsg1SubnetGroupStatus        :: Maybe Text
+    , _dbsg1Subnets                  :: List "Subnet" Subnet
+    , _dbsg1VpcId                    :: Maybe Text
+    } deriving (Eq, Show)
+
+-- | 'DBSubnetGroup' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dbsg1DBSubnetGroupDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsg1DBSubnetGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsg1SubnetGroupStatus' @::@ 'Maybe' 'Text'
+--
+-- * 'dbsg1Subnets' @::@ ['Subnet']
+--
+-- * 'dbsg1VpcId' @::@ 'Maybe' 'Text'
+--
+dbsubnetGroup :: DBSubnetGroup
+dbsubnetGroup = DBSubnetGroup
+    { _dbsg1DBSubnetGroupName        = Nothing
+    , _dbsg1DBSubnetGroupDescription = Nothing
+    , _dbsg1VpcId                    = Nothing
+    , _dbsg1SubnetGroupStatus        = Nothing
+    , _dbsg1Subnets                  = mempty
+    }
+
+-- | Provides the description of the DB subnet group.
+dbsg1DBSubnetGroupDescription :: Lens' DBSubnetGroup (Maybe Text)
+dbsg1DBSubnetGroupDescription =
+    lens _dbsg1DBSubnetGroupDescription
+        (\s a -> s { _dbsg1DBSubnetGroupDescription = a })
+
+-- | Specifies the name of the DB subnet group.
+dbsg1DBSubnetGroupName :: Lens' DBSubnetGroup (Maybe Text)
+dbsg1DBSubnetGroupName =
+    lens _dbsg1DBSubnetGroupName (\s a -> s { _dbsg1DBSubnetGroupName = a })
+
+-- | Provides the status of the DB subnet group.
+dbsg1SubnetGroupStatus :: Lens' DBSubnetGroup (Maybe Text)
+dbsg1SubnetGroupStatus =
+    lens _dbsg1SubnetGroupStatus (\s a -> s { _dbsg1SubnetGroupStatus = a })
+
+-- | Contains a list of Subnet elements.
+dbsg1Subnets :: Lens' DBSubnetGroup [Subnet]
+dbsg1Subnets = lens _dbsg1Subnets (\s a -> s { _dbsg1Subnets = a }) . _List
+
+-- | Provides the VpcId of the DB subnet group.
+dbsg1VpcId :: Lens' DBSubnetGroup (Maybe Text)
+dbsg1VpcId = lens _dbsg1VpcId (\s a -> s { _dbsg1VpcId = a })
+
+instance FromXML DBSubnetGroup where
+    parseXML x = DBSubnetGroup
+        <$> x .@? "DBSubnetGroupDescription"
+        <*> x .@? "DBSubnetGroupName"
+        <*> x .@? "SubnetGroupStatus"
+        <*> x .@  "Subnets"
+        <*> x .@? "VpcId"
+
+instance ToQuery DBSubnetGroup where
+    toQuery DBSubnetGroup{..} = mconcat
+        [ "DBSubnetGroupDescription" =? _dbsg1DBSubnetGroupDescription
+        , "DBSubnetGroupName"        =? _dbsg1DBSubnetGroupName
+        , "SubnetGroupStatus"        =? _dbsg1SubnetGroupStatus
+        , "Subnets"                  =? _dbsg1Subnets
+        , "VpcId"                    =? _dbsg1VpcId
+        ]
+
+data DBInstanceStatusInfo = DBInstanceStatusInfo
+    { _dbisiMessage    :: Maybe Text
+    , _dbisiNormal     :: Maybe Bool
+    , _dbisiStatus     :: Maybe Text
+    , _dbisiStatusType :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'DBInstanceStatusInfo' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'dbisiMessage' @::@ 'Maybe' 'Text'
+--
+-- * 'dbisiNormal' @::@ 'Maybe' 'Bool'
+--
+-- * 'dbisiStatus' @::@ 'Maybe' 'Text'
+--
+-- * 'dbisiStatusType' @::@ 'Maybe' 'Text'
+--
+dbinstanceStatusInfo :: DBInstanceStatusInfo
+dbinstanceStatusInfo = DBInstanceStatusInfo
+    { _dbisiStatusType = Nothing
+    , _dbisiNormal     = Nothing
+    , _dbisiStatus     = Nothing
+    , _dbisiMessage    = Nothing
+    }
+
+-- | Details of the error if there is an error for the instance. If the
+-- instance is not in an error state, this value is blank.
+dbisiMessage :: Lens' DBInstanceStatusInfo (Maybe Text)
+dbisiMessage = lens _dbisiMessage (\s a -> s { _dbisiMessage = a })
+
+-- | Boolean value that is true if the instance is operating normally, or
+-- false if the instance is in an error state.
+dbisiNormal :: Lens' DBInstanceStatusInfo (Maybe Bool)
+dbisiNormal = lens _dbisiNormal (\s a -> s { _dbisiNormal = a })
+
+-- | Status of the DB instance. For a StatusType of read replica, the values
+-- can be replicating, error, stopped, or terminated.
+dbisiStatus :: Lens' DBInstanceStatusInfo (Maybe Text)
+dbisiStatus = lens _dbisiStatus (\s a -> s { _dbisiStatus = a })
+
+-- | This value is currently "read replication.".
+dbisiStatusType :: Lens' DBInstanceStatusInfo (Maybe Text)
+dbisiStatusType = lens _dbisiStatusType (\s a -> s { _dbisiStatusType = a })
+
+instance FromXML DBInstanceStatusInfo where
+    parseXML x = DBInstanceStatusInfo
+        <$> x .@? "Message"
+        <*> x .@? "Normal"
+        <*> x .@? "Status"
+        <*> x .@? "StatusType"
+
+instance ToQuery DBInstanceStatusInfo where
+    toQuery DBInstanceStatusInfo{..} = mconcat
+        [ "Message"    =? _dbisiMessage
+        , "Normal"     =? _dbisiNormal
+        , "Status"     =? _dbisiStatus
+        , "StatusType" =? _dbisiStatusType
+        ]
+
+data OptionSetting = OptionSetting
+    { _osAllowedValues :: Maybe Text
+    , _osApplyType     :: Maybe Text
+    , _osDataType      :: Maybe Text
+    , _osDefaultValue  :: Maybe Text
+    , _osDescription   :: Maybe Text
+    , _osIsCollection  :: Maybe Bool
+    , _osIsModifiable  :: Maybe Bool
+    , _osName          :: Maybe Text
+    , _osValue         :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'OptionSetting' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'osAllowedValues' @::@ 'Maybe' 'Text'
+--
+-- * 'osApplyType' @::@ 'Maybe' 'Text'
+--
+-- * 'osDataType' @::@ 'Maybe' 'Text'
+--
+-- * 'osDefaultValue' @::@ 'Maybe' 'Text'
+--
+-- * 'osDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'osIsCollection' @::@ 'Maybe' 'Bool'
+--
+-- * 'osIsModifiable' @::@ 'Maybe' 'Bool'
+--
+-- * 'osName' @::@ 'Maybe' 'Text'
+--
+-- * 'osValue' @::@ 'Maybe' 'Text'
+--
+optionSetting :: OptionSetting
+optionSetting = OptionSetting
+    { _osName          = Nothing
+    , _osValue         = Nothing
+    , _osDefaultValue  = Nothing
+    , _osDescription   = Nothing
+    , _osApplyType     = Nothing
+    , _osDataType      = Nothing
+    , _osAllowedValues = Nothing
+    , _osIsModifiable  = Nothing
+    , _osIsCollection  = Nothing
+    }
+
+-- | The allowed values of the option setting.
+osAllowedValues :: Lens' OptionSetting (Maybe Text)
+osAllowedValues = lens _osAllowedValues (\s a -> s { _osAllowedValues = a })
+
+-- | The DB engine specific parameter type.
+osApplyType :: Lens' OptionSetting (Maybe Text)
+osApplyType = lens _osApplyType (\s a -> s { _osApplyType = a })
+
+-- | The data type of the option setting.
+osDataType :: Lens' OptionSetting (Maybe Text)
+osDataType = lens _osDataType (\s a -> s { _osDataType = a })
+
+-- | The default value of the option setting.
+osDefaultValue :: Lens' OptionSetting (Maybe Text)
+osDefaultValue = lens _osDefaultValue (\s a -> s { _osDefaultValue = a })
+
+-- | The description of the option setting.
+osDescription :: Lens' OptionSetting (Maybe Text)
+osDescription = lens _osDescription (\s a -> s { _osDescription = a })
+
+-- | Indicates if the option setting is part of a collection.
+osIsCollection :: Lens' OptionSetting (Maybe Bool)
+osIsCollection = lens _osIsCollection (\s a -> s { _osIsCollection = a })
+
+-- | A Boolean value that, when true, indicates the option setting can be
+-- modified from the default.
+osIsModifiable :: Lens' OptionSetting (Maybe Bool)
+osIsModifiable = lens _osIsModifiable (\s a -> s { _osIsModifiable = a })
+
+-- | The name of the option that has settings that you can set.
+osName :: Lens' OptionSetting (Maybe Text)
+osName = lens _osName (\s a -> s { _osName = a })
+
+-- | The current value of the option setting.
+osValue :: Lens' OptionSetting (Maybe Text)
+osValue = lens _osValue (\s a -> s { _osValue = a })
+
+instance FromXML OptionSetting where
+    parseXML x = OptionSetting
+        <$> x .@? "AllowedValues"
+        <*> x .@? "ApplyType"
+        <*> x .@? "DataType"
+        <*> x .@? "DefaultValue"
+        <*> x .@? "Description"
+        <*> x .@? "IsCollection"
+        <*> x .@? "IsModifiable"
+        <*> x .@? "Name"
+        <*> x .@? "Value"
+
+instance ToQuery OptionSetting where
+    toQuery OptionSetting{..} = mconcat
+        [ "AllowedValues" =? _osAllowedValues
+        , "ApplyType"     =? _osApplyType
+        , "DataType"      =? _osDataType
+        , "DefaultValue"  =? _osDefaultValue
+        , "Description"   =? _osDescription
+        , "IsCollection"  =? _osIsCollection
+        , "IsModifiable"  =? _osIsModifiable
+        , "Name"          =? _osName
+        , "Value"         =? _osValue
+        ]
+
+data DescribeDBLogFilesDetails = DescribeDBLogFilesDetails
+    { _ddblfdLastWritten :: Maybe Integer
+    , _ddblfdLogFileName :: Maybe Text
+    , _ddblfdSize        :: Maybe Integer
+    } deriving (Eq, Ord, Show)
+
+-- | 'DescribeDBLogFilesDetails' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ddblfdLastWritten' @::@ 'Maybe' 'Integer'
+--
+-- * 'ddblfdLogFileName' @::@ 'Maybe' 'Text'
+--
+-- * 'ddblfdSize' @::@ 'Maybe' 'Integer'
+--
+describeDBLogFilesDetails :: DescribeDBLogFilesDetails
+describeDBLogFilesDetails = DescribeDBLogFilesDetails
+    { _ddblfdLogFileName = Nothing
+    , _ddblfdLastWritten = Nothing
+    , _ddblfdSize        = Nothing
+    }
+
+-- | A POSIX timestamp when the last log entry was written.
+ddblfdLastWritten :: Lens' DescribeDBLogFilesDetails (Maybe Integer)
+ddblfdLastWritten =
+    lens _ddblfdLastWritten (\s a -> s { _ddblfdLastWritten = a })
+
+-- | The name of the log file for the specified DB instance.
+ddblfdLogFileName :: Lens' DescribeDBLogFilesDetails (Maybe Text)
+ddblfdLogFileName =
+    lens _ddblfdLogFileName (\s a -> s { _ddblfdLogFileName = a })
+
+-- | The size, in bytes, of the log file for the specified DB instance.
+ddblfdSize :: Lens' DescribeDBLogFilesDetails (Maybe Integer)
+ddblfdSize = lens _ddblfdSize (\s a -> s { _ddblfdSize = a })
+
+instance FromXML DescribeDBLogFilesDetails where
+    parseXML x = DescribeDBLogFilesDetails
+        <$> x .@? "LastWritten"
+        <*> x .@? "LogFileName"
+        <*> x .@? "Size"
+
+instance ToQuery DescribeDBLogFilesDetails where
+    toQuery DescribeDBLogFilesDetails{..} = mconcat
+        [ "LastWritten" =? _ddblfdLastWritten
+        , "LogFileName" =? _ddblfdLogFileName
+        , "Size"        =? _ddblfdSize
+        ]
+
+data OrderableDBInstanceOption = OrderableDBInstanceOption
+    { _odbioAvailabilityZones  :: List "AvailabilityZone" AvailabilityZone
+    , _odbioDBInstanceClass    :: Maybe Text
+    , _odbioEngine             :: Maybe Text
+    , _odbioEngineVersion      :: Maybe Text
+    , _odbioLicenseModel       :: Maybe Text
+    , _odbioMultiAZCapable     :: Maybe Bool
+    , _odbioReadReplicaCapable :: Maybe Bool
+    , _odbioStorageType        :: Maybe Text
+    , _odbioSupportsIops       :: Maybe Bool
+    , _odbioVpc                :: Maybe Bool
+    } deriving (Eq, Show)
+
+-- | 'OrderableDBInstanceOption' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'odbioAvailabilityZones' @::@ ['AvailabilityZone']
+--
+-- * 'odbioDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'odbioEngine' @::@ 'Maybe' 'Text'
+--
+-- * 'odbioEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'odbioLicenseModel' @::@ 'Maybe' 'Text'
+--
+-- * 'odbioMultiAZCapable' @::@ 'Maybe' 'Bool'
+--
+-- * 'odbioReadReplicaCapable' @::@ 'Maybe' 'Bool'
+--
+-- * 'odbioStorageType' @::@ 'Maybe' 'Text'
+--
+-- * 'odbioSupportsIops' @::@ 'Maybe' 'Bool'
+--
+-- * 'odbioVpc' @::@ 'Maybe' 'Bool'
+--
+orderableDBInstanceOption :: OrderableDBInstanceOption
+orderableDBInstanceOption = OrderableDBInstanceOption
+    { _odbioEngine             = Nothing
+    , _odbioEngineVersion      = Nothing
+    , _odbioDBInstanceClass    = Nothing
+    , _odbioLicenseModel       = Nothing
+    , _odbioAvailabilityZones  = mempty
+    , _odbioMultiAZCapable     = Nothing
+    , _odbioReadReplicaCapable = Nothing
+    , _odbioVpc                = Nothing
+    , _odbioStorageType        = Nothing
+    , _odbioSupportsIops       = Nothing
+    }
+
+-- | A list of availability zones for the orderable DB instance.
+odbioAvailabilityZones :: Lens' OrderableDBInstanceOption [AvailabilityZone]
+odbioAvailabilityZones =
+    lens _odbioAvailabilityZones (\s a -> s { _odbioAvailabilityZones = a })
+        . _List
+
+-- | The DB instance Class for the orderable DB instance.
+odbioDBInstanceClass :: Lens' OrderableDBInstanceOption (Maybe Text)
+odbioDBInstanceClass =
+    lens _odbioDBInstanceClass (\s a -> s { _odbioDBInstanceClass = a })
+
+-- | The engine type of the orderable DB instance.
+odbioEngine :: Lens' OrderableDBInstanceOption (Maybe Text)
+odbioEngine = lens _odbioEngine (\s a -> s { _odbioEngine = a })
+
+-- | The engine version of the orderable DB instance.
+odbioEngineVersion :: Lens' OrderableDBInstanceOption (Maybe Text)
+odbioEngineVersion =
+    lens _odbioEngineVersion (\s a -> s { _odbioEngineVersion = a })
+
+-- | The license model for the orderable DB instance.
+odbioLicenseModel :: Lens' OrderableDBInstanceOption (Maybe Text)
+odbioLicenseModel =
+    lens _odbioLicenseModel (\s a -> s { _odbioLicenseModel = a })
+
+-- | Indicates whether this orderable DB instance is multi-AZ capable.
+odbioMultiAZCapable :: Lens' OrderableDBInstanceOption (Maybe Bool)
+odbioMultiAZCapable =
+    lens _odbioMultiAZCapable (\s a -> s { _odbioMultiAZCapable = a })
+
+-- | Indicates whether this orderable DB instance can have a read replica.
+odbioReadReplicaCapable :: Lens' OrderableDBInstanceOption (Maybe Bool)
+odbioReadReplicaCapable =
+    lens _odbioReadReplicaCapable (\s a -> s { _odbioReadReplicaCapable = a })
+
+-- | The storage type for this orderable DB instance.
+odbioStorageType :: Lens' OrderableDBInstanceOption (Maybe Text)
+odbioStorageType = lens _odbioStorageType (\s a -> s { _odbioStorageType = a })
+
+-- | Indicates whether this orderable DB instance supports provisioned IOPS.
+odbioSupportsIops :: Lens' OrderableDBInstanceOption (Maybe Bool)
+odbioSupportsIops =
+    lens _odbioSupportsIops (\s a -> s { _odbioSupportsIops = a })
+
+-- | Indicates whether this is a VPC orderable DB instance.
+odbioVpc :: Lens' OrderableDBInstanceOption (Maybe Bool)
+odbioVpc = lens _odbioVpc (\s a -> s { _odbioVpc = a })
+
+instance FromXML OrderableDBInstanceOption where
+    parseXML x = OrderableDBInstanceOption
+        <$> x .@  "AvailabilityZones"
+        <*> x .@? "DBInstanceClass"
+        <*> x .@? "Engine"
+        <*> x .@? "EngineVersion"
+        <*> x .@? "LicenseModel"
+        <*> x .@? "MultiAZCapable"
+        <*> x .@? "ReadReplicaCapable"
+        <*> x .@? "StorageType"
+        <*> x .@? "SupportsIops"
+        <*> x .@? "Vpc"
+
+instance ToQuery OrderableDBInstanceOption where
+    toQuery OrderableDBInstanceOption{..} = mconcat
+        [ "AvailabilityZones"  =? _odbioAvailabilityZones
+        , "DBInstanceClass"    =? _odbioDBInstanceClass
+        , "Engine"             =? _odbioEngine
+        , "EngineVersion"      =? _odbioEngineVersion
+        , "LicenseModel"       =? _odbioLicenseModel
+        , "MultiAZCapable"     =? _odbioMultiAZCapable
+        , "ReadReplicaCapable" =? _odbioReadReplicaCapable
+        , "StorageType"        =? _odbioStorageType
+        , "SupportsIops"       =? _odbioSupportsIops
+        , "Vpc"                =? _odbioVpc
+        ]
+
+data Filter = Filter
+    { _fName   :: Text
+    , _fValues :: List "Value" Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'Filter' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'fName' @::@ 'Text'
+--
+-- * 'fValues' @::@ ['Text']
+--
+filter' :: Text -- ^ 'fName'
+        -> Filter
+filter' p1 = Filter
+    { _fName   = p1
+    , _fValues = mempty
+    }
+
+-- | This parameter is not currently supported.
+fName :: Lens' Filter Text
+fName = lens _fName (\s a -> s { _fName = a })
+
+-- | This parameter is not currently supported.
+fValues :: Lens' Filter [Text]
+fValues = lens _fValues (\s a -> s { _fValues = a }) . _List
+
+instance FromXML Filter where
+    parseXML x = Filter
+        <$> x .@  "Name"
+        <*> x .@  "Values"
+
+instance ToQuery Filter where
+    toQuery Filter{..} = mconcat
+        [ "Name"   =? _fName
+        , "Values" =? _fValues
+        ]
+
+data RecurringCharge = RecurringCharge
+    { _rcRecurringChargeAmount    :: Maybe Double
+    , _rcRecurringChargeFrequency :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'RecurringCharge' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rcRecurringChargeAmount' @::@ 'Maybe' 'Double'
+--
+-- * 'rcRecurringChargeFrequency' @::@ 'Maybe' 'Text'
+--
+recurringCharge :: RecurringCharge
+recurringCharge = RecurringCharge
+    { _rcRecurringChargeAmount    = Nothing
+    , _rcRecurringChargeFrequency = Nothing
+    }
+
+-- | The amount of the recurring charge.
+rcRecurringChargeAmount :: Lens' RecurringCharge (Maybe Double)
+rcRecurringChargeAmount =
+    lens _rcRecurringChargeAmount (\s a -> s { _rcRecurringChargeAmount = a })
+
+-- | The frequency of the recurring charge.
+rcRecurringChargeFrequency :: Lens' RecurringCharge (Maybe Text)
+rcRecurringChargeFrequency =
+    lens _rcRecurringChargeFrequency
+        (\s a -> s { _rcRecurringChargeFrequency = a })
+
+instance FromXML RecurringCharge where
+    parseXML x = RecurringCharge
+        <$> x .@? "RecurringChargeAmount"
+        <*> x .@? "RecurringChargeFrequency"
+
+instance ToQuery RecurringCharge where
+    toQuery RecurringCharge{..} = mconcat
+        [ "RecurringChargeAmount"    =? _rcRecurringChargeAmount
+        , "RecurringChargeFrequency" =? _rcRecurringChargeFrequency
+        ]
+
+data Endpoint = Endpoint
+    { _eAddress :: Maybe Text
+    , _ePort    :: Maybe Int
+    } deriving (Eq, Ord, Show)
+
+-- | 'Endpoint' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'eAddress' @::@ 'Maybe' 'Text'
+--
+-- * 'ePort' @::@ 'Maybe' 'Int'
+--
+endpoint :: Endpoint
+endpoint = Endpoint
+    { _eAddress = Nothing
+    , _ePort    = Nothing
+    }
+
+-- | Specifies the DNS address of the DB instance.
+eAddress :: Lens' Endpoint (Maybe Text)
+eAddress = lens _eAddress (\s a -> s { _eAddress = a })
+
+-- | Specifies the port that the database engine is listening on.
+ePort :: Lens' Endpoint (Maybe Int)
+ePort = lens _ePort (\s a -> s { _ePort = a })
+
+instance FromXML Endpoint where
+    parseXML x = Endpoint
+        <$> x .@? "Address"
+        <*> x .@? "Port"
+
+instance ToQuery Endpoint where
+    toQuery Endpoint{..} = mconcat
+        [ "Address" =? _eAddress
+        , "Port"    =? _ePort
+        ]
+
+data OptionConfiguration = OptionConfiguration
+    { _ocDBSecurityGroupMemberships  :: List "DBSecurityGroupName" Text
+    , _ocOptionName                  :: Text
+    , _ocOptionSettings              :: List "OptionSetting" OptionSetting
+    , _ocPort                        :: Maybe Int
+    , _ocVpcSecurityGroupMemberships :: List "VpcSecurityGroupId" Text
+    } deriving (Eq, Show)
+
+-- | 'OptionConfiguration' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ocDBSecurityGroupMemberships' @::@ ['Text']
+--
+-- * 'ocOptionName' @::@ 'Text'
+--
+-- * 'ocOptionSettings' @::@ ['OptionSetting']
+--
+-- * 'ocPort' @::@ 'Maybe' 'Int'
+--
+-- * 'ocVpcSecurityGroupMemberships' @::@ ['Text']
+--
+optionConfiguration :: Text -- ^ 'ocOptionName'
+                    -> OptionConfiguration
+optionConfiguration p1 = OptionConfiguration
+    { _ocOptionName                  = p1
+    , _ocPort                        = Nothing
+    , _ocDBSecurityGroupMemberships  = mempty
+    , _ocVpcSecurityGroupMemberships = mempty
+    , _ocOptionSettings              = mempty
+    }
+
+-- | A list of DBSecurityGroupMemebrship name strings used for this option.
+ocDBSecurityGroupMemberships :: Lens' OptionConfiguration [Text]
+ocDBSecurityGroupMemberships =
+    lens _ocDBSecurityGroupMemberships
+        (\s a -> s { _ocDBSecurityGroupMemberships = a })
+            . _List
+
+-- | The configuration of options to include in a group.
+ocOptionName :: Lens' OptionConfiguration Text
+ocOptionName = lens _ocOptionName (\s a -> s { _ocOptionName = a })
+
+-- | The option settings to include in an option group.
+ocOptionSettings :: Lens' OptionConfiguration [OptionSetting]
+ocOptionSettings = lens _ocOptionSettings (\s a -> s { _ocOptionSettings = a }) . _List
+
+-- | The optional port for the option.
+ocPort :: Lens' OptionConfiguration (Maybe Int)
+ocPort = lens _ocPort (\s a -> s { _ocPort = a })
+
+-- | A list of VpcSecurityGroupMemebrship name strings used for this option.
+ocVpcSecurityGroupMemberships :: Lens' OptionConfiguration [Text]
+ocVpcSecurityGroupMemberships =
+    lens _ocVpcSecurityGroupMemberships
+        (\s a -> s { _ocVpcSecurityGroupMemberships = a })
+            . _List
+
+instance FromXML OptionConfiguration where
+    parseXML x = OptionConfiguration
+        <$> x .@  "DBSecurityGroupMemberships"
+        <*> x .@  "OptionName"
+        <*> x .@  "OptionSettings"
+        <*> x .@? "Port"
+        <*> x .@  "VpcSecurityGroupMemberships"
+
+instance ToQuery OptionConfiguration where
+    toQuery OptionConfiguration{..} = mconcat
+        [ "DBSecurityGroupMemberships"  =? _ocDBSecurityGroupMemberships
+        , "OptionName"                  =? _ocOptionName
+        , "OptionSettings"              =? _ocOptionSettings
+        , "Port"                        =? _ocPort
+        , "VpcSecurityGroupMemberships" =? _ocVpcSecurityGroupMemberships
+        ]
+
+data Option = Option
+    { _oDBSecurityGroupMemberships  :: List "DBSecurityGroup" DBSecurityGroupMembership
+    , _oOptionDescription           :: Maybe Text
+    , _oOptionName                  :: Maybe Text
+    , _oOptionSettings              :: List "OptionSetting" OptionSetting
+    , _oPermanent                   :: Maybe Bool
+    , _oPersistent                  :: Maybe Bool
+    , _oPort                        :: Maybe Int
+    , _oVpcSecurityGroupMemberships :: List "VpcSecurityGroupMembership" VpcSecurityGroupMembership
+    } deriving (Eq, Show)
+
+-- | 'Option' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'oDBSecurityGroupMemberships' @::@ ['DBSecurityGroupMembership']
+--
+-- * 'oOptionDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'oOptionName' @::@ 'Maybe' 'Text'
+--
+-- * 'oOptionSettings' @::@ ['OptionSetting']
+--
+-- * 'oPermanent' @::@ 'Maybe' 'Bool'
+--
+-- * 'oPersistent' @::@ 'Maybe' 'Bool'
+--
+-- * 'oPort' @::@ 'Maybe' 'Int'
+--
+-- * 'oVpcSecurityGroupMemberships' @::@ ['VpcSecurityGroupMembership']
+--
+option :: Option
+option = Option
+    { _oOptionName                  = Nothing
+    , _oOptionDescription           = Nothing
+    , _oPersistent                  = Nothing
+    , _oPermanent                   = Nothing
+    , _oPort                        = Nothing
+    , _oOptionSettings              = mempty
+    , _oDBSecurityGroupMemberships  = mempty
+    , _oVpcSecurityGroupMemberships = mempty
+    }
+
+-- | If the option requires access to a port, then this DB security group
+-- allows access to the port.
+oDBSecurityGroupMemberships :: Lens' Option [DBSecurityGroupMembership]
+oDBSecurityGroupMemberships =
+    lens _oDBSecurityGroupMemberships
+        (\s a -> s { _oDBSecurityGroupMemberships = a })
+            . _List
+
+-- | The description of the option.
+oOptionDescription :: Lens' Option (Maybe Text)
+oOptionDescription =
+    lens _oOptionDescription (\s a -> s { _oOptionDescription = a })
+
+-- | The name of the option.
+oOptionName :: Lens' Option (Maybe Text)
+oOptionName = lens _oOptionName (\s a -> s { _oOptionName = a })
+
+-- | The option settings for this option.
+oOptionSettings :: Lens' Option [OptionSetting]
+oOptionSettings = lens _oOptionSettings (\s a -> s { _oOptionSettings = a }) . _List
+
+-- | Indicate if this option is permanent.
+oPermanent :: Lens' Option (Maybe Bool)
+oPermanent = lens _oPermanent (\s a -> s { _oPermanent = a })
+
+-- | Indicate if this option is persistent.
+oPersistent :: Lens' Option (Maybe Bool)
+oPersistent = lens _oPersistent (\s a -> s { _oPersistent = a })
+
+-- | If required, the port configured for this option to use.
+oPort :: Lens' Option (Maybe Int)
+oPort = lens _oPort (\s a -> s { _oPort = a })
+
+-- | If the option requires access to a port, then this VPC security group
+-- allows access to the port.
+oVpcSecurityGroupMemberships :: Lens' Option [VpcSecurityGroupMembership]
+oVpcSecurityGroupMemberships =
+    lens _oVpcSecurityGroupMemberships
+        (\s a -> s { _oVpcSecurityGroupMemberships = a })
+            . _List
+
+instance FromXML Option where
+    parseXML x = Option
+        <$> x .@  "DBSecurityGroupMemberships"
+        <*> x .@? "OptionDescription"
+        <*> x .@? "OptionName"
+        <*> x .@  "OptionSettings"
+        <*> x .@? "Permanent"
+        <*> x .@? "Persistent"
+        <*> x .@? "Port"
+        <*> x .@  "VpcSecurityGroupMemberships"
+
+instance ToQuery Option where
+    toQuery Option{..} = mconcat
+        [ "DBSecurityGroupMemberships"  =? _oDBSecurityGroupMemberships
+        , "OptionDescription"           =? _oOptionDescription
+        , "OptionName"                  =? _oOptionName
+        , "OptionSettings"              =? _oOptionSettings
+        , "Permanent"                   =? _oPermanent
+        , "Persistent"                  =? _oPersistent
+        , "Port"                        =? _oPort
+        , "VpcSecurityGroupMemberships" =? _oVpcSecurityGroupMemberships
+        ]
+
+data IPRange = IPRange
+    { _iprCIDRIP :: Maybe Text
+    , _iprStatus :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'IPRange' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'iprCIDRIP' @::@ 'Maybe' 'Text'
+--
+-- * 'iprStatus' @::@ 'Maybe' 'Text'
+--
+iprange :: IPRange
+iprange = IPRange
+    { _iprStatus = Nothing
+    , _iprCIDRIP = Nothing
+    }
+
+-- | Specifies the IP range.
+iprCIDRIP :: Lens' IPRange (Maybe Text)
+iprCIDRIP = lens _iprCIDRIP (\s a -> s { _iprCIDRIP = a })
+
+-- | Specifies the status of the IP range. Status can be "authorizing",
+-- "authorized", "revoking", and "revoked".
+iprStatus :: Lens' IPRange (Maybe Text)
+iprStatus = lens _iprStatus (\s a -> s { _iprStatus = a })
+
+instance FromXML IPRange where
+    parseXML x = IPRange
+        <$> x .@? "CIDRIP"
+        <*> x .@? "Status"
+
+instance ToQuery IPRange where
+    toQuery IPRange{..} = mconcat
+        [ "CIDRIP" =? _iprCIDRIP
+        , "Status" =? _iprStatus
+        ]
+
+data OptionGroupMembership = OptionGroupMembership
+    { _ogmOptionGroupName :: Maybe Text
+    , _ogmStatus          :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'OptionGroupMembership' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ogmOptionGroupName' @::@ 'Maybe' 'Text'
+--
+-- * 'ogmStatus' @::@ 'Maybe' 'Text'
+--
+optionGroupMembership :: OptionGroupMembership
+optionGroupMembership = OptionGroupMembership
+    { _ogmOptionGroupName = Nothing
+    , _ogmStatus          = Nothing
+    }
+
+-- | The name of the option group that the instance belongs to.
+ogmOptionGroupName :: Lens' OptionGroupMembership (Maybe Text)
+ogmOptionGroupName =
+    lens _ogmOptionGroupName (\s a -> s { _ogmOptionGroupName = a })
+
+-- | The status of the DB instance's option group membership (e.g. in-sync,
+-- pending, pending-maintenance, applying).
+ogmStatus :: Lens' OptionGroupMembership (Maybe Text)
+ogmStatus = lens _ogmStatus (\s a -> s { _ogmStatus = a })
+
+instance FromXML OptionGroupMembership where
+    parseXML x = OptionGroupMembership
+        <$> x .@? "OptionGroupName"
+        <*> x .@? "Status"
+
+instance ToQuery OptionGroupMembership where
+    toQuery OptionGroupMembership{..} = mconcat
+        [ "OptionGroupName" =? _ogmOptionGroupName
+        , "Status"          =? _ogmStatus
+        ]
+
+data EventCategoriesMap = EventCategoriesMap
+    { _ecmEventCategories :: List "EventCategory" Text
+    , _ecmSourceType      :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'EventCategoriesMap' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ecmEventCategories' @::@ ['Text']
+--
+-- * 'ecmSourceType' @::@ 'Maybe' 'Text'
+--
+eventCategoriesMap :: EventCategoriesMap
+eventCategoriesMap = EventCategoriesMap
+    { _ecmSourceType      = Nothing
+    , _ecmEventCategories = mempty
+    }
+
+-- | The event categories for the specified source type.
+ecmEventCategories :: Lens' EventCategoriesMap [Text]
+ecmEventCategories =
+    lens _ecmEventCategories (\s a -> s { _ecmEventCategories = a })
+        . _List
+
+-- | The source type that the returned categories belong to.
+ecmSourceType :: Lens' EventCategoriesMap (Maybe Text)
+ecmSourceType = lens _ecmSourceType (\s a -> s { _ecmSourceType = a })
+
+instance FromXML EventCategoriesMap where
+    parseXML x = EventCategoriesMap
+        <$> x .@  "EventCategories"
+        <*> x .@? "SourceType"
+
+instance ToQuery EventCategoriesMap where
+    toQuery EventCategoriesMap{..} = mconcat
+        [ "EventCategories" =? _ecmEventCategories
+        , "SourceType"      =? _ecmSourceType
+        ]
+
+data PendingModifiedValues = PendingModifiedValues
+    { _pmvAllocatedStorage      :: Maybe Int
+    , _pmvBackupRetentionPeriod :: Maybe Int
+    , _pmvDBInstanceClass       :: Maybe Text
+    , _pmvDBInstanceIdentifier  :: Maybe Text
+    , _pmvEngineVersion         :: Maybe Text
+    , _pmvIops                  :: Maybe Int
+    , _pmvMasterUserPassword    :: Maybe Text
+    , _pmvMultiAZ               :: Maybe Bool
+    , _pmvPort                  :: Maybe Int
+    , _pmvStorageType           :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'PendingModifiedValues' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'pmvAllocatedStorage' @::@ 'Maybe' 'Int'
+--
+-- * 'pmvBackupRetentionPeriod' @::@ 'Maybe' 'Int'
+--
+-- * 'pmvDBInstanceClass' @::@ 'Maybe' 'Text'
+--
+-- * 'pmvDBInstanceIdentifier' @::@ 'Maybe' 'Text'
+--
+-- * 'pmvEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'pmvIops' @::@ 'Maybe' 'Int'
+--
+-- * 'pmvMasterUserPassword' @::@ 'Maybe' 'Text'
+--
+-- * 'pmvMultiAZ' @::@ 'Maybe' 'Bool'
+--
+-- * 'pmvPort' @::@ 'Maybe' 'Int'
+--
+-- * 'pmvStorageType' @::@ 'Maybe' 'Text'
+--
+pendingModifiedValues :: PendingModifiedValues
+pendingModifiedValues = PendingModifiedValues
+    { _pmvDBInstanceClass       = Nothing
+    , _pmvAllocatedStorage      = Nothing
+    , _pmvMasterUserPassword    = Nothing
+    , _pmvPort                  = Nothing
+    , _pmvBackupRetentionPeriod = Nothing
+    , _pmvMultiAZ               = Nothing
+    , _pmvEngineVersion         = Nothing
+    , _pmvIops                  = Nothing
+    , _pmvDBInstanceIdentifier  = Nothing
+    , _pmvStorageType           = Nothing
+    }
+
+-- | Contains the new AllocatedStorage size for the DB instance that will be
+-- applied or is in progress.
+pmvAllocatedStorage :: Lens' PendingModifiedValues (Maybe Int)
+pmvAllocatedStorage =
+    lens _pmvAllocatedStorage (\s a -> s { _pmvAllocatedStorage = a })
+
+-- | Specifies the pending number of days for which automated backups are
+-- retained.
+pmvBackupRetentionPeriod :: Lens' PendingModifiedValues (Maybe Int)
+pmvBackupRetentionPeriod =
+    lens _pmvBackupRetentionPeriod
+        (\s a -> s { _pmvBackupRetentionPeriod = a })
+
+-- | Contains the new DBInstanceClass for the DB instance that will be applied
+-- or is in progress.
+pmvDBInstanceClass :: Lens' PendingModifiedValues (Maybe Text)
+pmvDBInstanceClass =
+    lens _pmvDBInstanceClass (\s a -> s { _pmvDBInstanceClass = a })
+
+-- | Contains the new DBInstanceIdentifier for the DB instance that will be
+-- applied or is in progress.
+pmvDBInstanceIdentifier :: Lens' PendingModifiedValues (Maybe Text)
+pmvDBInstanceIdentifier =
+    lens _pmvDBInstanceIdentifier (\s a -> s { _pmvDBInstanceIdentifier = a })
+
+-- | Indicates the database engine version.
+pmvEngineVersion :: Lens' PendingModifiedValues (Maybe Text)
+pmvEngineVersion = lens _pmvEngineVersion (\s a -> s { _pmvEngineVersion = a })
+
+-- | Specifies the new Provisioned IOPS value for the DB instance that will be
+-- applied or is being applied.
+pmvIops :: Lens' PendingModifiedValues (Maybe Int)
+pmvIops = lens _pmvIops (\s a -> s { _pmvIops = a })
+
+-- | Contains the pending or in-progress change of the master credentials for
+-- the DB instance.
+pmvMasterUserPassword :: Lens' PendingModifiedValues (Maybe Text)
+pmvMasterUserPassword =
+    lens _pmvMasterUserPassword (\s a -> s { _pmvMasterUserPassword = a })
+
+-- | Indicates that the Single-AZ DB instance is to change to a Multi-AZ
+-- deployment.
+pmvMultiAZ :: Lens' PendingModifiedValues (Maybe Bool)
+pmvMultiAZ = lens _pmvMultiAZ (\s a -> s { _pmvMultiAZ = a })
+
+-- | Specifies the pending port for the DB instance.
+pmvPort :: Lens' PendingModifiedValues (Maybe Int)
+pmvPort = lens _pmvPort (\s a -> s { _pmvPort = a })
+
+-- | Specifies storage type to be associated with the DB instance.
+pmvStorageType :: Lens' PendingModifiedValues (Maybe Text)
+pmvStorageType = lens _pmvStorageType (\s a -> s { _pmvStorageType = a })
+
+instance FromXML PendingModifiedValues where
+    parseXML x = PendingModifiedValues
+        <$> x .@? "AllocatedStorage"
+        <*> x .@? "BackupRetentionPeriod"
+        <*> x .@? "DBInstanceClass"
+        <*> x .@? "DBInstanceIdentifier"
+        <*> x .@? "EngineVersion"
+        <*> x .@? "Iops"
+        <*> x .@? "MasterUserPassword"
+        <*> x .@? "MultiAZ"
+        <*> x .@? "Port"
+        <*> x .@? "StorageType"
+
+instance ToQuery PendingModifiedValues where
+    toQuery PendingModifiedValues{..} = mconcat
+        [ "AllocatedStorage"      =? _pmvAllocatedStorage
+        , "BackupRetentionPeriod" =? _pmvBackupRetentionPeriod
+        , "DBInstanceClass"       =? _pmvDBInstanceClass
+        , "DBInstanceIdentifier"  =? _pmvDBInstanceIdentifier
+        , "EngineVersion"         =? _pmvEngineVersion
+        , "Iops"                  =? _pmvIops
+        , "MasterUserPassword"    =? _pmvMasterUserPassword
+        , "MultiAZ"               =? _pmvMultiAZ
+        , "Port"                  =? _pmvPort
+        , "StorageType"           =? _pmvStorageType
+        ]
+
+data VpcSecurityGroupMembership = VpcSecurityGroupMembership
+    { _vsgmStatus             :: Maybe Text
+    , _vsgmVpcSecurityGroupId :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'VpcSecurityGroupMembership' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'vsgmStatus' @::@ 'Maybe' 'Text'
+--
+-- * 'vsgmVpcSecurityGroupId' @::@ 'Maybe' 'Text'
+--
+vpcSecurityGroupMembership :: VpcSecurityGroupMembership
+vpcSecurityGroupMembership = VpcSecurityGroupMembership
+    { _vsgmVpcSecurityGroupId = Nothing
+    , _vsgmStatus             = Nothing
+    }
+
+-- | The status of the VPC security group.
+vsgmStatus :: Lens' VpcSecurityGroupMembership (Maybe Text)
+vsgmStatus = lens _vsgmStatus (\s a -> s { _vsgmStatus = a })
+
+-- | The name of the VPC security group.
+vsgmVpcSecurityGroupId :: Lens' VpcSecurityGroupMembership (Maybe Text)
+vsgmVpcSecurityGroupId =
+    lens _vsgmVpcSecurityGroupId (\s a -> s { _vsgmVpcSecurityGroupId = a })
+
+instance FromXML VpcSecurityGroupMembership where
+    parseXML x = VpcSecurityGroupMembership
+        <$> x .@? "Status"
+        <*> x .@? "VpcSecurityGroupId"
+
+instance ToQuery VpcSecurityGroupMembership where
+    toQuery VpcSecurityGroupMembership{..} = mconcat
+        [ "Status"             =? _vsgmStatus
+        , "VpcSecurityGroupId" =? _vsgmVpcSecurityGroupId
+        ]
+
+data Parameter = Parameter
+    { _pAllowedValues        :: Maybe Text
+    , _pApplyMethod          :: Maybe Text
+    , _pApplyType            :: Maybe Text
+    , _pDataType             :: Maybe Text
+    , _pDescription          :: Maybe Text
+    , _pIsModifiable         :: Maybe Bool
+    , _pMinimumEngineVersion :: Maybe Text
+    , _pParameterName        :: Maybe Text
+    , _pParameterValue       :: Maybe Text
+    , _pSource               :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'Parameter' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'pAllowedValues' @::@ 'Maybe' 'Text'
+--
+-- * 'pApplyMethod' @::@ 'Maybe' 'Text'
+--
+-- * 'pApplyType' @::@ 'Maybe' 'Text'
+--
+-- * 'pDataType' @::@ 'Maybe' 'Text'
+--
+-- * 'pDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'pIsModifiable' @::@ 'Maybe' 'Bool'
+--
+-- * 'pMinimumEngineVersion' @::@ 'Maybe' 'Text'
+--
+-- * 'pParameterName' @::@ 'Maybe' 'Text'
+--
+-- * 'pParameterValue' @::@ 'Maybe' 'Text'
+--
+-- * 'pSource' @::@ 'Maybe' 'Text'
+--
+parameter :: Parameter
+parameter = Parameter
+    { _pParameterName        = Nothing
+    , _pParameterValue       = Nothing
+    , _pDescription          = Nothing
+    , _pSource               = Nothing
+    , _pApplyType            = Nothing
+    , _pDataType             = Nothing
+    , _pAllowedValues        = Nothing
+    , _pIsModifiable         = Nothing
+    , _pMinimumEngineVersion = Nothing
+    , _pApplyMethod          = Nothing
+    }
+
+-- | Specifies the valid range of values for the parameter.
+pAllowedValues :: Lens' Parameter (Maybe Text)
+pAllowedValues = lens _pAllowedValues (\s a -> s { _pAllowedValues = a })
+
+-- | Indicates when to apply parameter updates.
+pApplyMethod :: Lens' Parameter (Maybe Text)
+pApplyMethod = lens _pApplyMethod (\s a -> s { _pApplyMethod = a })
+
+-- | Specifies the engine specific parameters type.
+pApplyType :: Lens' Parameter (Maybe Text)
+pApplyType = lens _pApplyType (\s a -> s { _pApplyType = a })
+
+-- | Specifies the valid data type for the parameter.
+pDataType :: Lens' Parameter (Maybe Text)
+pDataType = lens _pDataType (\s a -> s { _pDataType = a })
+
+-- | Provides a description of the parameter.
+pDescription :: Lens' Parameter (Maybe Text)
+pDescription = lens _pDescription (\s a -> s { _pDescription = a })
+
+-- | Indicates whether (true) or not (false) the parameter can be modified.
+-- Some parameters have security or operational implications that prevent
+-- them from being changed.
+pIsModifiable :: Lens' Parameter (Maybe Bool)
+pIsModifiable = lens _pIsModifiable (\s a -> s { _pIsModifiable = a })
+
+-- | The earliest engine version to which the parameter can apply.
+pMinimumEngineVersion :: Lens' Parameter (Maybe Text)
+pMinimumEngineVersion =
+    lens _pMinimumEngineVersion (\s a -> s { _pMinimumEngineVersion = a })
+
+-- | Specifies the name of the parameter.
+pParameterName :: Lens' Parameter (Maybe Text)
+pParameterName = lens _pParameterName (\s a -> s { _pParameterName = a })
+
+-- | Specifies the value of the parameter.
+pParameterValue :: Lens' Parameter (Maybe Text)
+pParameterValue = lens _pParameterValue (\s a -> s { _pParameterValue = a })
+
+-- | Indicates the source of the parameter value.
+pSource :: Lens' Parameter (Maybe Text)
+pSource = lens _pSource (\s a -> s { _pSource = a })
+
+instance FromXML Parameter where
+    parseXML x = Parameter
+        <$> x .@? "AllowedValues"
+        <*> x .@? "ApplyMethod"
+        <*> x .@? "ApplyType"
+        <*> x .@? "DataType"
+        <*> x .@? "Description"
+        <*> x .@? "IsModifiable"
+        <*> x .@? "MinimumEngineVersion"
+        <*> x .@? "ParameterName"
+        <*> x .@? "ParameterValue"
+        <*> x .@? "Source"
+
+instance ToQuery Parameter where
+    toQuery Parameter{..} = mconcat
+        [ "AllowedValues"        =? _pAllowedValues
+        , "ApplyMethod"          =? _pApplyMethod
+        , "ApplyType"            =? _pApplyType
+        , "DataType"             =? _pDataType
+        , "Description"          =? _pDescription
+        , "IsModifiable"         =? _pIsModifiable
+        , "MinimumEngineVersion" =? _pMinimumEngineVersion
+        , "ParameterName"        =? _pParameterName
+        , "ParameterValue"       =? _pParameterValue
+        , "Source"               =? _pSource
+        ]
+
+data OptionGroupOptionSetting = OptionGroupOptionSetting
+    { _ogosAllowedValues      :: Maybe Text
+    , _ogosApplyType          :: Maybe Text
+    , _ogosDefaultValue       :: Maybe Text
+    , _ogosIsModifiable       :: Maybe Bool
+    , _ogosSettingDescription :: Maybe Text
+    , _ogosSettingName        :: Maybe Text
+    } deriving (Eq, Ord, Show)
+
+-- | 'OptionGroupOptionSetting' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ogosAllowedValues' @::@ 'Maybe' 'Text'
+--
+-- * 'ogosApplyType' @::@ 'Maybe' 'Text'
+--
+-- * 'ogosDefaultValue' @::@ 'Maybe' 'Text'
+--
+-- * 'ogosIsModifiable' @::@ 'Maybe' 'Bool'
+--
+-- * 'ogosSettingDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'ogosSettingName' @::@ 'Maybe' 'Text'
+--
+optionGroupOptionSetting :: OptionGroupOptionSetting
+optionGroupOptionSetting = OptionGroupOptionSetting
+    { _ogosSettingName        = Nothing
+    , _ogosSettingDescription = Nothing
+    , _ogosDefaultValue       = Nothing
+    , _ogosApplyType          = Nothing
+    , _ogosAllowedValues      = Nothing
+    , _ogosIsModifiable       = Nothing
+    }
+
+-- | Indicates the acceptable values for the option group option.
+ogosAllowedValues :: Lens' OptionGroupOptionSetting (Maybe Text)
+ogosAllowedValues =
+    lens _ogosAllowedValues (\s a -> s { _ogosAllowedValues = a })
+
+-- | The DB engine specific parameter type for the option group option.
+ogosApplyType :: Lens' OptionGroupOptionSetting (Maybe Text)
+ogosApplyType = lens _ogosApplyType (\s a -> s { _ogosApplyType = a })
+
+-- | The default value for the option group option.
+ogosDefaultValue :: Lens' OptionGroupOptionSetting (Maybe Text)
+ogosDefaultValue = lens _ogosDefaultValue (\s a -> s { _ogosDefaultValue = a })
+
+-- | Boolean value where true indicates that this option group option can be
+-- changed from the default value.
+ogosIsModifiable :: Lens' OptionGroupOptionSetting (Maybe Bool)
+ogosIsModifiable = lens _ogosIsModifiable (\s a -> s { _ogosIsModifiable = a })
+
+-- | The description of the option group option.
+ogosSettingDescription :: Lens' OptionGroupOptionSetting (Maybe Text)
+ogosSettingDescription =
+    lens _ogosSettingDescription (\s a -> s { _ogosSettingDescription = a })
+
+-- | The name of the option group option.
+ogosSettingName :: Lens' OptionGroupOptionSetting (Maybe Text)
+ogosSettingName = lens _ogosSettingName (\s a -> s { _ogosSettingName = a })
+
+instance FromXML OptionGroupOptionSetting where
+    parseXML x = OptionGroupOptionSetting
+        <$> x .@? "AllowedValues"
+        <*> x .@? "ApplyType"
+        <*> x .@? "DefaultValue"
+        <*> x .@? "IsModifiable"
+        <*> x .@? "SettingDescription"
+        <*> x .@? "SettingName"
+
+instance ToQuery OptionGroupOptionSetting where
+    toQuery OptionGroupOptionSetting{..} = mconcat
+        [ "AllowedValues"      =? _ogosAllowedValues
+        , "ApplyType"          =? _ogosApplyType
+        , "DefaultValue"       =? _ogosDefaultValue
+        , "IsModifiable"       =? _ogosIsModifiable
+        , "SettingDescription" =? _ogosSettingDescription
+        , "SettingName"        =? _ogosSettingName
+        ]
