diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,367 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+    means each individual or legal entity that creates, contributes to
+    the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+    means the combination of the Contributions of others (if any) used
+    by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+    means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+    means Source Code Form to which the initial Contributor has attached
+    the notice in Exhibit A, the Executable Form of such Source Code
+    Form, and Modifications of such Source Code Form, in each case
+    including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+    means
+
+    (a) that the initial Contributor has attached the notice described
+        in Exhibit B to the Covered Software; or
+
+    (b) that the Covered Software was made available under the terms of
+        version 1.1 or earlier of the License, but not also under the
+        terms of a Secondary License.
+
+1.6. "Executable Form"
+    means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+    means a work that combines Covered Software with other material, in
+    a separate file or files, that is not Covered Software.
+
+1.8. "License"
+    means this document.
+
+1.9. "Licensable"
+    means having the right to grant, to the maximum extent possible,
+    whether at the time of the initial grant or subsequently, any and
+    all of the rights conveyed by this License.
+
+1.10. "Modifications"
+    means any of the following:
+
+    (a) any file in Source Code Form that results from an addition to,
+        deletion from, or modification of the contents of Covered
+        Software; or
+
+    (b) any new file in Source Code Form that contains any Covered
+        Software.
+
+1.11. "Patent Claims" of a Contributor
+    means any patent claim(s), including without limitation, method,
+    process, and apparatus claims, in any patent Licensable by such
+    Contributor that would be infringed, but for the grant of the
+    License, by the making, using, selling, offering for sale, having
+    made, import, or transfer of either its Contributions or its
+    Contributor Version.
+
+1.12. "Secondary License"
+    means either the GNU General Public License, Version 2.0, the GNU
+    Lesser General Public License, Version 2.1, the GNU Affero General
+    Public License, Version 3.0, or any later versions of those
+    licenses.
+
+1.13. "Source Code Form"
+    means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+    means an individual or a legal entity exercising rights under this
+    License. For legal entities, "You" includes any entity that
+    controls, is controlled by, or is under common control with You. For
+    purposes of this definition, "control" means (a) the power, direct
+    or indirect, to cause the direction or management of such entity,
+    whether by contract or otherwise, or (b) ownership of more than
+    fifty percent (50%) of the outstanding shares or beneficial
+    ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+    Licensable by such Contributor to use, reproduce, make available,
+    modify, display, perform, distribute, and otherwise exploit its
+    Contributions, either on an unmodified basis, with Modifications, or
+    as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+    for sale, have made, import, and otherwise transfer either its
+    Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+    or
+
+(b) for infringements caused by: (i) Your and any other third party's
+    modifications of Covered Software, or (ii) the combination of its
+    Contributions with other software (except as part of its Contributor
+    Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+    its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+    Form, as described in Section 3.1, and You must inform recipients of
+    the Executable Form how they can obtain a copy of such Source Code
+    Form by reasonable means in a timely manner, at a charge no more
+    than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+    License, or sublicense it under different terms, provided that the
+    license for the Executable Form does not attempt to limit or alter
+    the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+*                                                                      *
+*  6. Disclaimer of Warranty                                           *
+*  -------------------------                                           *
+*                                                                      *
+*  Covered Software is provided under this License on an "as is"       *
+*  basis, without warranty of any kind, either expressed, implied, or  *
+*  statutory, including, without limitation, warranties that the       *
+*  Covered Software is free of defects, merchantable, fit for a        *
+*  particular purpose or non-infringing. The entire risk as to the     *
+*  quality and performance of the Covered Software is with You.        *
+*  Should any Covered Software prove defective in any respect, You     *
+*  (not any Contributor) assume the cost of any necessary servicing,   *
+*  repair, or correction. This disclaimer of warranty constitutes an   *
+*  essential part of this License. No use of any Covered Software is   *
+*  authorized under this License except under this disclaimer.         *
+*                                                                      *
+************************************************************************
+
+************************************************************************
+*                                                                      *
+*  7. Limitation of Liability                                          *
+*  --------------------------                                          *
+*                                                                      *
+*  Under no circumstances and under no legal theory, whether tort      *
+*  (including negligence), contract, or otherwise, shall any           *
+*  Contributor, or anyone who distributes Covered Software as          *
+*  permitted above, be liable to You for any direct, indirect,         *
+*  special, incidental, or consequential damages of any character      *
+*  including, without limitation, damages for lost profits, loss of    *
+*  goodwill, work stoppage, computer failure or malfunction, or any    *
+*  and all other commercial damages or losses, even if such party      *
+*  shall have been informed of the possibility of such damages. This   *
+*  limitation of liability shall not apply to liability for death or   *
+*  personal injury resulting from such party's negligence to the       *
+*  extent applicable law prohibits such limitation. Some               *
+*  jurisdictions do not allow the exclusion or limitation of           *
+*  incidental or consequential damages, so this exclusion and          *
+*  limitation may not apply to You.                                    *
+*                                                                      *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+  This Source Code Form is subject to the terms of the Mozilla Public
+  License, v. 2.0. If a copy of the MPL was not distributed with this
+  file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,45 @@
+# Amazon Glue SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`1.5.0`
+
+
+## Description
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-glue)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information, sending requests,
+and receiving responses.
+
+Lenses are used for constructing and manipulating types,
+due to the depth of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+See [Network.AWS.Glue](http://hackage.haskell.org/package/amazonka-glue/docs/Network-AWS-Glue.html)
+or [the AWS documentation](https://aws.amazon.com/documentation/) to get started.
+
+
+## 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-glue` is released under the [Mozilla Public License Version 2.0](http://www.mozilla.org/MPL/).
+
+Parts of the code are derived from AWS service descriptions, licensed under Apache 2.0.
+Source files subject to this contain an additional licensing clause in their header.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import           Distribution.Simple
+main = defaultMain
diff --git a/amazonka-glue.cabal b/amazonka-glue.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-glue.cabal
@@ -0,0 +1,160 @@
+name:                  amazonka-glue
+version:               1.5.0
+synopsis:              Amazon Glue SDK.
+homepage:              https://github.com/brendanhay/amazonka
+bug-reports:           https://github.com/brendanhay/amazonka/issues
+license:               MPL-2.0
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+copyright:             Copyright (c) 2013-2017 Brendan Hay
+category:              Network, AWS, Cloud, Distributed Computing
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md fixture/*.yaml fixture/*.proto src/.gitkeep
+description:
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information, sending requests,
+    and receiving responses.
+    .
+    Lenses are used for constructing and manipulating types,
+    due to the depth of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.Glue" or <https://aws.amazon.com/documentation/ the AWS documentation>
+    to get started.
+
+source-repository head
+    type:              git
+    location:          git://github.com/brendanhay/amazonka.git
+    subdir:            amazonka-glue
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:
+        -Wall
+        -fwarn-incomplete-uni-patterns
+        -fwarn-incomplete-record-updates
+        -funbox-strict-fields
+
+    exposed-modules:
+          Network.AWS.Glue
+        , Network.AWS.Glue.BatchCreatePartition
+        , Network.AWS.Glue.BatchDeleteConnection
+        , Network.AWS.Glue.BatchDeletePartition
+        , Network.AWS.Glue.BatchDeleteTable
+        , Network.AWS.Glue.BatchGetPartition
+        , Network.AWS.Glue.BatchStopJobRun
+        , Network.AWS.Glue.CreateClassifier
+        , Network.AWS.Glue.CreateConnection
+        , Network.AWS.Glue.CreateCrawler
+        , Network.AWS.Glue.CreateDatabase
+        , Network.AWS.Glue.CreateDevEndpoint
+        , Network.AWS.Glue.CreateJob
+        , Network.AWS.Glue.CreatePartition
+        , Network.AWS.Glue.CreateScript
+        , Network.AWS.Glue.CreateTable
+        , Network.AWS.Glue.CreateTrigger
+        , Network.AWS.Glue.CreateUserDefinedFunction
+        , Network.AWS.Glue.DeleteClassifier
+        , Network.AWS.Glue.DeleteConnection
+        , Network.AWS.Glue.DeleteCrawler
+        , Network.AWS.Glue.DeleteDatabase
+        , Network.AWS.Glue.DeleteDevEndpoint
+        , Network.AWS.Glue.DeleteJob
+        , Network.AWS.Glue.DeletePartition
+        , Network.AWS.Glue.DeleteTable
+        , Network.AWS.Glue.DeleteTrigger
+        , Network.AWS.Glue.DeleteUserDefinedFunction
+        , Network.AWS.Glue.GetCatalogImportStatus
+        , Network.AWS.Glue.GetClassifier
+        , Network.AWS.Glue.GetClassifiers
+        , Network.AWS.Glue.GetConnection
+        , Network.AWS.Glue.GetConnections
+        , Network.AWS.Glue.GetCrawler
+        , Network.AWS.Glue.GetCrawlerMetrics
+        , Network.AWS.Glue.GetCrawlers
+        , Network.AWS.Glue.GetDatabase
+        , Network.AWS.Glue.GetDatabases
+        , Network.AWS.Glue.GetDataflowGraph
+        , Network.AWS.Glue.GetDevEndpoint
+        , Network.AWS.Glue.GetDevEndpoints
+        , Network.AWS.Glue.GetJob
+        , Network.AWS.Glue.GetJobRun
+        , Network.AWS.Glue.GetJobRuns
+        , Network.AWS.Glue.GetJobs
+        , Network.AWS.Glue.GetMapping
+        , Network.AWS.Glue.GetPartition
+        , Network.AWS.Glue.GetPartitions
+        , Network.AWS.Glue.GetPlan
+        , Network.AWS.Glue.GetTable
+        , Network.AWS.Glue.GetTableVersions
+        , Network.AWS.Glue.GetTables
+        , Network.AWS.Glue.GetTrigger
+        , Network.AWS.Glue.GetTriggers
+        , Network.AWS.Glue.GetUserDefinedFunction
+        , Network.AWS.Glue.GetUserDefinedFunctions
+        , Network.AWS.Glue.ImportCatalogToGlue
+        , Network.AWS.Glue.ResetJobBookmark
+        , Network.AWS.Glue.StartCrawler
+        , Network.AWS.Glue.StartCrawlerSchedule
+        , Network.AWS.Glue.StartJobRun
+        , Network.AWS.Glue.StartTrigger
+        , Network.AWS.Glue.StopCrawler
+        , Network.AWS.Glue.StopCrawlerSchedule
+        , Network.AWS.Glue.StopTrigger
+        , Network.AWS.Glue.Types
+        , Network.AWS.Glue.UpdateClassifier
+        , Network.AWS.Glue.UpdateConnection
+        , Network.AWS.Glue.UpdateCrawler
+        , Network.AWS.Glue.UpdateCrawlerSchedule
+        , Network.AWS.Glue.UpdateDatabase
+        , Network.AWS.Glue.UpdateDevEndpoint
+        , Network.AWS.Glue.UpdateJob
+        , Network.AWS.Glue.UpdatePartition
+        , Network.AWS.Glue.UpdateTable
+        , Network.AWS.Glue.UpdateTrigger
+        , Network.AWS.Glue.UpdateUserDefinedFunction
+        , Network.AWS.Glue.Waiters
+
+    other-modules:
+          Network.AWS.Glue.Types.Product
+        , Network.AWS.Glue.Types.Sum
+
+    build-depends:
+          amazonka-core == 1.5.0.*
+        , base          >= 4.7     && < 5
+
+test-suite amazonka-glue-test
+    type:              exitcode-stdio-1.0
+    default-language:  Haskell2010
+    hs-source-dirs:    test
+    main-is:           Main.hs
+
+    ghc-options:       -Wall -threaded
+
+    -- This section is encoded by the template and any modules added by
+    -- hand outside these namespaces will not correctly be added to the
+    -- distribution package.
+    other-modules:
+          Test.AWS.Glue
+        , Test.AWS.Gen.Glue
+        , Test.AWS.Glue.Internal
+
+    build-depends:
+          amazonka-core == 1.5.0.*
+        , amazonka-test == 1.5.0.*
+        , amazonka-glue
+        , base
+        , bytestring
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/fixture/BatchCreatePartition.yaml b/fixture/BatchCreatePartition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchCreatePartition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/BatchCreatePartitionResponse.proto b/fixture/BatchCreatePartitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchCreatePartitionResponse.proto
diff --git a/fixture/BatchDeleteConnection.yaml b/fixture/BatchDeleteConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/BatchDeleteConnectionResponse.proto b/fixture/BatchDeleteConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteConnectionResponse.proto
diff --git a/fixture/BatchDeletePartition.yaml b/fixture/BatchDeletePartition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeletePartition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/BatchDeletePartitionResponse.proto b/fixture/BatchDeletePartitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeletePartitionResponse.proto
diff --git a/fixture/BatchDeleteTable.yaml b/fixture/BatchDeleteTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/BatchDeleteTableResponse.proto b/fixture/BatchDeleteTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchDeleteTableResponse.proto
diff --git a/fixture/BatchGetPartition.yaml b/fixture/BatchGetPartition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetPartition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/BatchGetPartitionResponse.proto b/fixture/BatchGetPartitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchGetPartitionResponse.proto
diff --git a/fixture/BatchStopJobRun.yaml b/fixture/BatchStopJobRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/BatchStopJobRun.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/BatchStopJobRunResponse.proto b/fixture/BatchStopJobRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/BatchStopJobRunResponse.proto
diff --git a/fixture/CreateClassifier.yaml b/fixture/CreateClassifier.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateClassifier.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateClassifierResponse.proto b/fixture/CreateClassifierResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateClassifierResponse.proto
diff --git a/fixture/CreateConnection.yaml b/fixture/CreateConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateConnectionResponse.proto b/fixture/CreateConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateConnectionResponse.proto
diff --git a/fixture/CreateCrawler.yaml b/fixture/CreateCrawler.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCrawler.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateCrawlerResponse.proto b/fixture/CreateCrawlerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateCrawlerResponse.proto
diff --git a/fixture/CreateDatabase.yaml b/fixture/CreateDatabase.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDatabase.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDatabaseResponse.proto b/fixture/CreateDatabaseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDatabaseResponse.proto
diff --git a/fixture/CreateDevEndpoint.yaml b/fixture/CreateDevEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDevEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateDevEndpointResponse.proto b/fixture/CreateDevEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateDevEndpointResponse.proto
diff --git a/fixture/CreateJob.yaml b/fixture/CreateJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateJobResponse.proto b/fixture/CreateJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateJobResponse.proto
diff --git a/fixture/CreatePartition.yaml b/fixture/CreatePartition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePartition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreatePartitionResponse.proto b/fixture/CreatePartitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePartitionResponse.proto
diff --git a/fixture/CreateScript.yaml b/fixture/CreateScript.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateScript.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateScriptResponse.proto b/fixture/CreateScriptResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateScriptResponse.proto
diff --git a/fixture/CreateTable.yaml b/fixture/CreateTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTableResponse.proto b/fixture/CreateTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTableResponse.proto
diff --git a/fixture/CreateTrigger.yaml b/fixture/CreateTrigger.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTrigger.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateTriggerResponse.proto b/fixture/CreateTriggerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateTriggerResponse.proto
diff --git a/fixture/CreateUserDefinedFunction.yaml b/fixture/CreateUserDefinedFunction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUserDefinedFunction.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/CreateUserDefinedFunctionResponse.proto b/fixture/CreateUserDefinedFunctionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateUserDefinedFunctionResponse.proto
diff --git a/fixture/DeleteClassifier.yaml b/fixture/DeleteClassifier.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteClassifier.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteClassifierResponse.proto b/fixture/DeleteClassifierResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteClassifierResponse.proto
diff --git a/fixture/DeleteConnection.yaml b/fixture/DeleteConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteConnectionResponse.proto b/fixture/DeleteConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteConnectionResponse.proto
diff --git a/fixture/DeleteCrawler.yaml b/fixture/DeleteCrawler.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCrawler.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteCrawlerResponse.proto b/fixture/DeleteCrawlerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteCrawlerResponse.proto
diff --git a/fixture/DeleteDatabase.yaml b/fixture/DeleteDatabase.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDatabase.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDatabaseResponse.proto b/fixture/DeleteDatabaseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDatabaseResponse.proto
diff --git a/fixture/DeleteDevEndpoint.yaml b/fixture/DeleteDevEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDevEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteDevEndpointResponse.proto b/fixture/DeleteDevEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteDevEndpointResponse.proto
diff --git a/fixture/DeleteJob.yaml b/fixture/DeleteJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteJobResponse.proto b/fixture/DeleteJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteJobResponse.proto
diff --git a/fixture/DeletePartition.yaml b/fixture/DeletePartition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePartition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeletePartitionResponse.proto b/fixture/DeletePartitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeletePartitionResponse.proto
diff --git a/fixture/DeleteTable.yaml b/fixture/DeleteTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTableResponse.proto b/fixture/DeleteTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTableResponse.proto
diff --git a/fixture/DeleteTrigger.yaml b/fixture/DeleteTrigger.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTrigger.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteTriggerResponse.proto b/fixture/DeleteTriggerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteTriggerResponse.proto
diff --git a/fixture/DeleteUserDefinedFunction.yaml b/fixture/DeleteUserDefinedFunction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUserDefinedFunction.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/DeleteUserDefinedFunctionResponse.proto b/fixture/DeleteUserDefinedFunctionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteUserDefinedFunctionResponse.proto
diff --git a/fixture/GetCatalogImportStatus.yaml b/fixture/GetCatalogImportStatus.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCatalogImportStatus.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetCatalogImportStatusResponse.proto b/fixture/GetCatalogImportStatusResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCatalogImportStatusResponse.proto
diff --git a/fixture/GetClassifier.yaml b/fixture/GetClassifier.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetClassifier.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetClassifierResponse.proto b/fixture/GetClassifierResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetClassifierResponse.proto
diff --git a/fixture/GetClassifiers.yaml b/fixture/GetClassifiers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetClassifiers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetClassifiersResponse.proto b/fixture/GetClassifiersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetClassifiersResponse.proto
diff --git a/fixture/GetConnection.yaml b/fixture/GetConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetConnectionResponse.proto b/fixture/GetConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetConnectionResponse.proto
diff --git a/fixture/GetConnections.yaml b/fixture/GetConnections.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetConnections.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetConnectionsResponse.proto b/fixture/GetConnectionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetConnectionsResponse.proto
diff --git a/fixture/GetCrawler.yaml b/fixture/GetCrawler.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCrawler.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetCrawlerMetrics.yaml b/fixture/GetCrawlerMetrics.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCrawlerMetrics.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetCrawlerMetricsResponse.proto b/fixture/GetCrawlerMetricsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCrawlerMetricsResponse.proto
diff --git a/fixture/GetCrawlerResponse.proto b/fixture/GetCrawlerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCrawlerResponse.proto
diff --git a/fixture/GetCrawlers.yaml b/fixture/GetCrawlers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetCrawlers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetCrawlersResponse.proto b/fixture/GetCrawlersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetCrawlersResponse.proto
diff --git a/fixture/GetDatabase.yaml b/fixture/GetDatabase.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDatabase.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDatabaseResponse.proto b/fixture/GetDatabaseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDatabaseResponse.proto
diff --git a/fixture/GetDatabases.yaml b/fixture/GetDatabases.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDatabases.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDatabasesResponse.proto b/fixture/GetDatabasesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDatabasesResponse.proto
diff --git a/fixture/GetDataflowGraph.yaml b/fixture/GetDataflowGraph.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataflowGraph.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDataflowGraphResponse.proto b/fixture/GetDataflowGraphResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDataflowGraphResponse.proto
diff --git a/fixture/GetDevEndpoint.yaml b/fixture/GetDevEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDevEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDevEndpointResponse.proto b/fixture/GetDevEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDevEndpointResponse.proto
diff --git a/fixture/GetDevEndpoints.yaml b/fixture/GetDevEndpoints.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetDevEndpoints.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetDevEndpointsResponse.proto b/fixture/GetDevEndpointsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetDevEndpointsResponse.proto
diff --git a/fixture/GetJob.yaml b/fixture/GetJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetJobResponse.proto b/fixture/GetJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobResponse.proto
diff --git a/fixture/GetJobRun.yaml b/fixture/GetJobRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobRun.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetJobRunResponse.proto b/fixture/GetJobRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobRunResponse.proto
diff --git a/fixture/GetJobRuns.yaml b/fixture/GetJobRuns.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobRuns.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetJobRunsResponse.proto b/fixture/GetJobRunsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobRunsResponse.proto
diff --git a/fixture/GetJobs.yaml b/fixture/GetJobs.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobs.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetJobsResponse.proto b/fixture/GetJobsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetJobsResponse.proto
diff --git a/fixture/GetMapping.yaml b/fixture/GetMapping.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetMapping.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetMappingResponse.proto b/fixture/GetMappingResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetMappingResponse.proto
diff --git a/fixture/GetPartition.yaml b/fixture/GetPartition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPartition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetPartitionResponse.proto b/fixture/GetPartitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPartitionResponse.proto
diff --git a/fixture/GetPartitions.yaml b/fixture/GetPartitions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPartitions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetPartitionsResponse.proto b/fixture/GetPartitionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPartitionsResponse.proto
diff --git a/fixture/GetPlan.yaml b/fixture/GetPlan.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetPlan.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetPlanResponse.proto b/fixture/GetPlanResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetPlanResponse.proto
diff --git a/fixture/GetTable.yaml b/fixture/GetTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTableResponse.proto b/fixture/GetTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTableResponse.proto
diff --git a/fixture/GetTableVersions.yaml b/fixture/GetTableVersions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTableVersions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTableVersionsResponse.proto b/fixture/GetTableVersionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTableVersionsResponse.proto
diff --git a/fixture/GetTables.yaml b/fixture/GetTables.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTables.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTablesResponse.proto b/fixture/GetTablesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTablesResponse.proto
diff --git a/fixture/GetTrigger.yaml b/fixture/GetTrigger.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTrigger.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTriggerResponse.proto b/fixture/GetTriggerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTriggerResponse.proto
diff --git a/fixture/GetTriggers.yaml b/fixture/GetTriggers.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetTriggers.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetTriggersResponse.proto b/fixture/GetTriggersResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetTriggersResponse.proto
diff --git a/fixture/GetUserDefinedFunction.yaml b/fixture/GetUserDefinedFunction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetUserDefinedFunction.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetUserDefinedFunctionResponse.proto b/fixture/GetUserDefinedFunctionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetUserDefinedFunctionResponse.proto
diff --git a/fixture/GetUserDefinedFunctions.yaml b/fixture/GetUserDefinedFunctions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetUserDefinedFunctions.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/GetUserDefinedFunctionsResponse.proto b/fixture/GetUserDefinedFunctionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetUserDefinedFunctionsResponse.proto
diff --git a/fixture/ImportCatalogToGlue.yaml b/fixture/ImportCatalogToGlue.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ImportCatalogToGlue.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ImportCatalogToGlueResponse.proto b/fixture/ImportCatalogToGlueResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ImportCatalogToGlueResponse.proto
diff --git a/fixture/ResetJobBookmark.yaml b/fixture/ResetJobBookmark.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResetJobBookmark.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/ResetJobBookmarkResponse.proto b/fixture/ResetJobBookmarkResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResetJobBookmarkResponse.proto
diff --git a/fixture/StartCrawler.yaml b/fixture/StartCrawler.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartCrawler.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartCrawlerResponse.proto b/fixture/StartCrawlerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartCrawlerResponse.proto
diff --git a/fixture/StartCrawlerSchedule.yaml b/fixture/StartCrawlerSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartCrawlerSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartCrawlerScheduleResponse.proto b/fixture/StartCrawlerScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartCrawlerScheduleResponse.proto
diff --git a/fixture/StartJobRun.yaml b/fixture/StartJobRun.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartJobRun.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartJobRunResponse.proto b/fixture/StartJobRunResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartJobRunResponse.proto
diff --git a/fixture/StartTrigger.yaml b/fixture/StartTrigger.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StartTrigger.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StartTriggerResponse.proto b/fixture/StartTriggerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StartTriggerResponse.proto
diff --git a/fixture/StopCrawler.yaml b/fixture/StopCrawler.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopCrawler.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopCrawlerResponse.proto b/fixture/StopCrawlerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopCrawlerResponse.proto
diff --git a/fixture/StopCrawlerSchedule.yaml b/fixture/StopCrawlerSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopCrawlerSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopCrawlerScheduleResponse.proto b/fixture/StopCrawlerScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopCrawlerScheduleResponse.proto
diff --git a/fixture/StopTrigger.yaml b/fixture/StopTrigger.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/StopTrigger.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/StopTriggerResponse.proto b/fixture/StopTriggerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/StopTriggerResponse.proto
diff --git a/fixture/UpdateClassifier.yaml b/fixture/UpdateClassifier.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateClassifier.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateClassifierResponse.proto b/fixture/UpdateClassifierResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateClassifierResponse.proto
diff --git a/fixture/UpdateConnection.yaml b/fixture/UpdateConnection.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConnection.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateConnectionResponse.proto b/fixture/UpdateConnectionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateConnectionResponse.proto
diff --git a/fixture/UpdateCrawler.yaml b/fixture/UpdateCrawler.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCrawler.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateCrawlerResponse.proto b/fixture/UpdateCrawlerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCrawlerResponse.proto
diff --git a/fixture/UpdateCrawlerSchedule.yaml b/fixture/UpdateCrawlerSchedule.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCrawlerSchedule.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateCrawlerScheduleResponse.proto b/fixture/UpdateCrawlerScheduleResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateCrawlerScheduleResponse.proto
diff --git a/fixture/UpdateDatabase.yaml b/fixture/UpdateDatabase.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDatabase.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateDatabaseResponse.proto b/fixture/UpdateDatabaseResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDatabaseResponse.proto
diff --git a/fixture/UpdateDevEndpoint.yaml b/fixture/UpdateDevEndpoint.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDevEndpoint.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateDevEndpointResponse.proto b/fixture/UpdateDevEndpointResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateDevEndpointResponse.proto
diff --git a/fixture/UpdateJob.yaml b/fixture/UpdateJob.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateJob.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateJobResponse.proto b/fixture/UpdateJobResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateJobResponse.proto
diff --git a/fixture/UpdatePartition.yaml b/fixture/UpdatePartition.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePartition.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdatePartitionResponse.proto b/fixture/UpdatePartitionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdatePartitionResponse.proto
diff --git a/fixture/UpdateTable.yaml b/fixture/UpdateTable.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTable.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateTableResponse.proto b/fixture/UpdateTableResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTableResponse.proto
diff --git a/fixture/UpdateTrigger.yaml b/fixture/UpdateTrigger.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTrigger.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateTriggerResponse.proto b/fixture/UpdateTriggerResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateTriggerResponse.proto
diff --git a/fixture/UpdateUserDefinedFunction.yaml b/fixture/UpdateUserDefinedFunction.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateUserDefinedFunction.yaml
@@ -0,0 +1,10 @@
+---
+method: POST
+headers:
+  Authorization:         AWS4-HMAC-SHA256 Credential=access/20091028/us-east-1/glue/aws4_request, SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date, Signature=?
+  Host:                  glue.us-east-1.amazonaws.com
+  Content-Type:          application/x-www-form-urlencoded; charset=utf-8
+  X-Amz-Content-SHA256:  abcdef
+  X-Amz-Date:            20091028T223200Z
+body:
+  ''
diff --git a/fixture/UpdateUserDefinedFunctionResponse.proto b/fixture/UpdateUserDefinedFunctionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateUserDefinedFunctionResponse.proto
diff --git a/gen/Network/AWS/Glue.hs b/gen/Network/AWS/Glue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue.hs
@@ -0,0 +1,991 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports    #-}
+{-# OPTIONS_GHC -fno-warn-duplicate-exports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- __AWS Glue__
+--
+-- Defines the public endpoint for the AWS Glue service.
+--
+module Network.AWS.Glue
+    (
+    -- * Service Configuration
+      glue
+
+    -- * Errors
+    -- $errors
+
+    -- ** ValidationException
+    , _ValidationException
+
+    -- ** AccessDeniedException
+    , _AccessDeniedException
+
+    -- ** CrawlerRunningException
+    , _CrawlerRunningException
+
+    -- ** SchedulerTransitioningException
+    , _SchedulerTransitioningException
+
+    -- ** SchedulerRunningException
+    , _SchedulerRunningException
+
+    -- ** ConcurrentRunsExceededException
+    , _ConcurrentRunsExceededException
+
+    -- ** NoScheduleException
+    , _NoScheduleException
+
+    -- ** OperationTimeoutException
+    , _OperationTimeoutException
+
+    -- ** CrawlerNotRunningException
+    , _CrawlerNotRunningException
+
+    -- ** VersionMismatchException
+    , _VersionMismatchException
+
+    -- ** EntityNotFoundException
+    , _EntityNotFoundException
+
+    -- ** ConcurrentModificationException
+    , _ConcurrentModificationException
+
+    -- ** SchedulerNotRunningException
+    , _SchedulerNotRunningException
+
+    -- ** InternalServiceException
+    , _InternalServiceException
+
+    -- ** InvalidInputException
+    , _InvalidInputException
+
+    -- ** ResourceNumberLimitExceededException
+    , _ResourceNumberLimitExceededException
+
+    -- ** IdempotentParameterMismatchException
+    , _IdempotentParameterMismatchException
+
+    -- ** CrawlerStoppingException
+    , _CrawlerStoppingException
+
+    -- ** AlreadyExistsException
+    , _AlreadyExistsException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** StartCrawler
+    , module Network.AWS.Glue.StartCrawler
+
+    -- ** GetCatalogImportStatus
+    , module Network.AWS.Glue.GetCatalogImportStatus
+
+    -- ** GetPartition
+    , module Network.AWS.Glue.GetPartition
+
+    -- ** CreateTrigger
+    , module Network.AWS.Glue.CreateTrigger
+
+    -- ** DeleteTable
+    , module Network.AWS.Glue.DeleteTable
+
+    -- ** UpdateTable
+    , module Network.AWS.Glue.UpdateTable
+
+    -- ** DeleteConnection
+    , module Network.AWS.Glue.DeleteConnection
+
+    -- ** UpdateConnection
+    , module Network.AWS.Glue.UpdateConnection
+
+    -- ** GetUserDefinedFunctions
+    , module Network.AWS.Glue.GetUserDefinedFunctions
+
+    -- ** BatchCreatePartition
+    , module Network.AWS.Glue.BatchCreatePartition
+
+    -- ** GetMapping
+    , module Network.AWS.Glue.GetMapping
+
+    -- ** GetJobs
+    , module Network.AWS.Glue.GetJobs
+
+    -- ** GetClassifiers
+    , module Network.AWS.Glue.GetClassifiers
+
+    -- ** CreateConnection
+    , module Network.AWS.Glue.CreateConnection
+
+    -- ** DeleteDevEndpoint
+    , module Network.AWS.Glue.DeleteDevEndpoint
+
+    -- ** UpdateDevEndpoint
+    , module Network.AWS.Glue.UpdateDevEndpoint
+
+    -- ** DeleteCrawler
+    , module Network.AWS.Glue.DeleteCrawler
+
+    -- ** UpdateCrawler
+    , module Network.AWS.Glue.UpdateCrawler
+
+    -- ** GetConnection
+    , module Network.AWS.Glue.GetConnection
+
+    -- ** BatchGetPartition
+    , module Network.AWS.Glue.BatchGetPartition
+
+    -- ** StopTrigger
+    , module Network.AWS.Glue.StopTrigger
+
+    -- ** UpdateCrawlerSchedule
+    , module Network.AWS.Glue.UpdateCrawlerSchedule
+
+    -- ** DeleteUserDefinedFunction
+    , module Network.AWS.Glue.DeleteUserDefinedFunction
+
+    -- ** UpdateUserDefinedFunction
+    , module Network.AWS.Glue.UpdateUserDefinedFunction
+
+    -- ** BatchDeleteTable
+    , module Network.AWS.Glue.BatchDeleteTable
+
+    -- ** GetTables
+    , module Network.AWS.Glue.GetTables
+
+    -- ** CreateClassifier
+    , module Network.AWS.Glue.CreateClassifier
+
+    -- ** BatchDeleteConnection
+    , module Network.AWS.Glue.BatchDeleteConnection
+
+    -- ** CreateJob
+    , module Network.AWS.Glue.CreateJob
+
+    -- ** GetJobRuns
+    , module Network.AWS.Glue.GetJobRuns
+
+    -- ** CreateUserDefinedFunction
+    , module Network.AWS.Glue.CreateUserDefinedFunction
+
+    -- ** ResetJobBookmark
+    , module Network.AWS.Glue.ResetJobBookmark
+
+    -- ** DeleteJob
+    , module Network.AWS.Glue.DeleteJob
+
+    -- ** UpdateJob
+    , module Network.AWS.Glue.UpdateJob
+
+    -- ** GetCrawlers
+    , module Network.AWS.Glue.GetCrawlers
+
+    -- ** GetClassifier
+    , module Network.AWS.Glue.GetClassifier
+
+    -- ** GetJob
+    , module Network.AWS.Glue.GetJob
+
+    -- ** GetDevEndpoints
+    , module Network.AWS.Glue.GetDevEndpoints
+
+    -- ** StartCrawlerSchedule
+    , module Network.AWS.Glue.StartCrawlerSchedule
+
+    -- ** GetUserDefinedFunction
+    , module Network.AWS.Glue.GetUserDefinedFunction
+
+    -- ** DeleteDatabase
+    , module Network.AWS.Glue.DeleteDatabase
+
+    -- ** UpdateDatabase
+    , module Network.AWS.Glue.UpdateDatabase
+
+    -- ** StopCrawler
+    , module Network.AWS.Glue.StopCrawler
+
+    -- ** GetPartitions
+    , module Network.AWS.Glue.GetPartitions
+
+    -- ** BatchDeletePartition
+    , module Network.AWS.Glue.BatchDeletePartition
+
+    -- ** GetCrawler
+    , module Network.AWS.Glue.GetCrawler
+
+    -- ** BatchStopJobRun
+    , module Network.AWS.Glue.BatchStopJobRun
+
+    -- ** GetDevEndpoint
+    , module Network.AWS.Glue.GetDevEndpoint
+
+    -- ** CreateTable
+    , module Network.AWS.Glue.CreateTable
+
+    -- ** GetCrawlerMetrics
+    , module Network.AWS.Glue.GetCrawlerMetrics
+
+    -- ** GetPlan
+    , module Network.AWS.Glue.GetPlan
+
+    -- ** GetTriggers
+    , module Network.AWS.Glue.GetTriggers
+
+    -- ** StartTrigger
+    , module Network.AWS.Glue.StartTrigger
+
+    -- ** GetDataflowGraph
+    , module Network.AWS.Glue.GetDataflowGraph
+
+    -- ** GetDatabases
+    , module Network.AWS.Glue.GetDatabases
+
+    -- ** GetTable
+    , module Network.AWS.Glue.GetTable
+
+    -- ** CreateCrawler
+    , module Network.AWS.Glue.CreateCrawler
+
+    -- ** GetJobRun
+    , module Network.AWS.Glue.GetJobRun
+
+    -- ** CreateDevEndpoint
+    , module Network.AWS.Glue.CreateDevEndpoint
+
+    -- ** GetDatabase
+    , module Network.AWS.Glue.GetDatabase
+
+    -- ** DeletePartition
+    , module Network.AWS.Glue.DeletePartition
+
+    -- ** UpdatePartition
+    , module Network.AWS.Glue.UpdatePartition
+
+    -- ** CreateScript
+    , module Network.AWS.Glue.CreateScript
+
+    -- ** GetConnections
+    , module Network.AWS.Glue.GetConnections
+
+    -- ** GetTrigger
+    , module Network.AWS.Glue.GetTrigger
+
+    -- ** ImportCatalogToGlue
+    , module Network.AWS.Glue.ImportCatalogToGlue
+
+    -- ** DeleteClassifier
+    , module Network.AWS.Glue.DeleteClassifier
+
+    -- ** UpdateClassifier
+    , module Network.AWS.Glue.UpdateClassifier
+
+    -- ** StartJobRun
+    , module Network.AWS.Glue.StartJobRun
+
+    -- ** CreatePartition
+    , module Network.AWS.Glue.CreatePartition
+
+    -- ** StopCrawlerSchedule
+    , module Network.AWS.Glue.StopCrawlerSchedule
+
+    -- ** CreateDatabase
+    , module Network.AWS.Glue.CreateDatabase
+
+    -- ** GetTableVersions
+    , module Network.AWS.Glue.GetTableVersions
+
+    -- ** DeleteTrigger
+    , module Network.AWS.Glue.DeleteTrigger
+
+    -- ** UpdateTrigger
+    , module Network.AWS.Glue.UpdateTrigger
+
+    -- * Types
+
+    -- ** ConnectionPropertyKey
+    , ConnectionPropertyKey (..)
+
+    -- ** ConnectionType
+    , ConnectionType (..)
+
+    -- ** CrawlerState
+    , CrawlerState (..)
+
+    -- ** DeleteBehavior
+    , DeleteBehavior (..)
+
+    -- ** JobRunState
+    , JobRunState (..)
+
+    -- ** LastCrawlStatus
+    , LastCrawlStatus (..)
+
+    -- ** Logical
+    , Logical (..)
+
+    -- ** LogicalOperator
+    , LogicalOperator (..)
+
+    -- ** PrincipalType
+    , PrincipalType (..)
+
+    -- ** ResourceType
+    , ResourceType (..)
+
+    -- ** ScheduleState
+    , ScheduleState (..)
+
+    -- ** TriggerState
+    , TriggerState (..)
+
+    -- ** TriggerType
+    , TriggerType (..)
+
+    -- ** UpdateBehavior
+    , UpdateBehavior (..)
+
+    -- ** Action
+    , Action
+    , action
+    , aArguments
+    , aJobName
+
+    -- ** BatchStopJobRunError
+    , BatchStopJobRunError
+    , batchStopJobRunError
+    , bsjreJobName
+    , bsjreJobRunId
+    , bsjreErrorDetail
+
+    -- ** BatchStopJobRunSuccessfulSubmission
+    , BatchStopJobRunSuccessfulSubmission
+    , batchStopJobRunSuccessfulSubmission
+    , bsjrssJobName
+    , bsjrssJobRunId
+
+    -- ** CatalogEntry
+    , CatalogEntry
+    , catalogEntry
+    , ceDatabaseName
+    , ceTableName
+
+    -- ** CatalogImportStatus
+    , CatalogImportStatus
+    , catalogImportStatus
+    , cisImportedBy
+    , cisImportTime
+    , cisImportCompleted
+
+    -- ** Classifier
+    , Classifier
+    , classifier
+    , cGrokClassifier
+
+    -- ** CodeGenEdge
+    , CodeGenEdge
+    , codeGenEdge
+    , cgeTargetParameter
+    , cgeSource
+    , cgeTarget
+
+    -- ** CodeGenNode
+    , CodeGenNode
+    , codeGenNode
+    , cgnLineNumber
+    , cgnId
+    , cgnNodeType
+    , cgnArgs
+
+    -- ** CodeGenNodeArg
+    , CodeGenNodeArg
+    , codeGenNodeArg
+    , cgnaParam
+    , cgnaName
+    , cgnaValue
+
+    -- ** Column
+    , Column
+    , column
+    , cType
+    , cComment
+    , cName
+
+    -- ** Condition
+    , Condition
+    , condition
+    , cState
+    , cJobName
+    , cLogicalOperator
+
+    -- ** Connection
+    , Connection
+    , connection
+    , conCreationTime
+    , conLastUpdatedBy
+    , conConnectionProperties
+    , conLastUpdatedTime
+    , conMatchCriteria
+    , conPhysicalConnectionRequirements
+    , conName
+    , conDescription
+    , conConnectionType
+
+    -- ** ConnectionInput
+    , ConnectionInput
+    , connectionInput
+    , ciConnectionProperties
+    , ciMatchCriteria
+    , ciPhysicalConnectionRequirements
+    , ciName
+    , ciDescription
+    , ciConnectionType
+
+    -- ** ConnectionsList
+    , ConnectionsList
+    , connectionsList
+    , clConnections
+
+    -- ** Crawler
+    , Crawler
+    , crawler
+    , craCreationTime
+    , craState
+    , craSchemaChangePolicy
+    , craLastUpdated
+    , craSchedule
+    , craLastCrawl
+    , craCrawlElapsedTime
+    , craClassifiers
+    , craRole
+    , craName
+    , craTargets
+    , craVersion
+    , craDatabaseName
+    , craTablePrefix
+    , craDescription
+
+    -- ** CrawlerMetrics
+    , CrawlerMetrics
+    , crawlerMetrics
+    , cmLastRuntimeSeconds
+    , cmTablesCreated
+    , cmStillEstimating
+    , cmMedianRuntimeSeconds
+    , cmTimeLeftSeconds
+    , cmTablesDeleted
+    , cmTablesUpdated
+    , cmCrawlerName
+
+    -- ** CrawlerTargets
+    , CrawlerTargets
+    , crawlerTargets
+    , ctS3Targets
+    , ctJdbcTargets
+
+    -- ** CreateGrokClassifierRequest
+    , CreateGrokClassifierRequest
+    , createGrokClassifierRequest
+    , cgcrCustomPatterns
+    , cgcrClassification
+    , cgcrName
+    , cgcrGrokPattern
+
+    -- ** Database
+    , Database
+    , database
+    , dLocationURI
+    , dParameters
+    , dDescription
+    , dCreateTime
+    , dName
+
+    -- ** DatabaseInput
+    , DatabaseInput
+    , databaseInput
+    , diLocationURI
+    , diParameters
+    , diDescription
+    , diName
+
+    -- ** DevEndpoint
+    , DevEndpoint
+    , devEndpoint
+    , deStatus
+    , deFailureReason
+    , deEndpointName
+    , deExtraPythonLibsS3Path
+    , deLastUpdateStatus
+    , deSecurityGroupIds
+    , deLastModifiedTimestamp
+    , deVPCId
+    , dePublicKey
+    , deSubnetId
+    , deNumberOfNodes
+    , dePublicAddress
+    , deAvailabilityZone
+    , deZeppelinRemoteSparkInterpreterPort
+    , deExtraJARsS3Path
+    , deCreatedTimestamp
+    , deYarnEndpointAddress
+    , deRoleARN
+
+    -- ** DevEndpointCustomLibraries
+    , DevEndpointCustomLibraries
+    , devEndpointCustomLibraries
+    , declExtraPythonLibsS3Path
+    , declExtraJARsS3Path
+
+    -- ** ErrorDetail
+    , ErrorDetail
+    , errorDetail
+    , edErrorCode
+    , edErrorMessage
+
+    -- ** ExecutionProperty
+    , ExecutionProperty
+    , executionProperty
+    , epMaxConcurrentRuns
+
+    -- ** GetConnectionsFilter
+    , GetConnectionsFilter
+    , getConnectionsFilter
+    , gcfMatchCriteria
+    , gcfConnectionType
+
+    -- ** GrokClassifier
+    , GrokClassifier
+    , grokClassifier
+    , gcCreationTime
+    , gcLastUpdated
+    , gcVersion
+    , gcCustomPatterns
+    , gcName
+    , gcClassification
+    , gcGrokPattern
+
+    -- ** JdbcTarget
+    , JdbcTarget
+    , jdbcTarget
+    , jtPath
+    , jtConnectionName
+    , jtExclusions
+
+    -- ** Job
+    , Job
+    , job
+    , jCommand
+    , jLastModifiedOn
+    , jConnections
+    , jRole
+    , jName
+    , jLogURI
+    , jMaxRetries
+    , jExecutionProperty
+    , jAllocatedCapacity
+    , jDefaultArguments
+    , jDescription
+    , jCreatedOn
+
+    -- ** JobBookmarkEntry
+    , JobBookmarkEntry
+    , jobBookmarkEntry
+    , jbeJobName
+    , jbeRun
+    , jbeVersion
+    , jbeAttempt
+    , jbeJobBookmark
+
+    -- ** JobCommand
+    , JobCommand
+    , jobCommand
+    , jcScriptLocation
+    , jcName
+
+    -- ** JobRun
+    , JobRun
+    , jobRun
+    , jrCompletedOn
+    , jrTriggerName
+    , jrLastModifiedOn
+    , jrArguments
+    , jrJobName
+    , jrStartedOn
+    , jrJobRunState
+    , jrPredecessorRuns
+    , jrPreviousRunId
+    , jrId
+    , jrAttempt
+    , jrAllocatedCapacity
+    , jrErrorMessage
+
+    -- ** JobUpdate
+    , JobUpdate
+    , jobUpdate
+    , juCommand
+    , juConnections
+    , juRole
+    , juLogURI
+    , juMaxRetries
+    , juExecutionProperty
+    , juAllocatedCapacity
+    , juDefaultArguments
+    , juDescription
+
+    -- ** LastCrawlInfo
+    , LastCrawlInfo
+    , lastCrawlInfo
+    , lciStatus
+    , lciStartTime
+    , lciLogStream
+    , lciLogGroup
+    , lciMessagePrefix
+    , lciErrorMessage
+
+    -- ** Location
+    , Location
+    , location
+    , lJdbc
+    , lS3
+
+    -- ** MappingEntry
+    , MappingEntry
+    , mappingEntry
+    , meTargetTable
+    , meSourceType
+    , meSourceTable
+    , meTargetType
+    , meTargetPath
+    , meSourcePath
+
+    -- ** Order
+    , Order
+    , order
+    , oColumn
+    , oSortOrder
+
+    -- ** Partition
+    , Partition
+    , partition
+    , pCreationTime
+    , pValues
+    , pLastAnalyzedTime
+    , pStorageDescriptor
+    , pDatabaseName
+    , pParameters
+    , pLastAccessTime
+    , pTableName
+
+    -- ** PartitionError
+    , PartitionError
+    , partitionError
+    , pePartitionValues
+    , peErrorDetail
+
+    -- ** PartitionInput
+    , PartitionInput
+    , partitionInput
+    , piValues
+    , piLastAnalyzedTime
+    , piStorageDescriptor
+    , piParameters
+    , piLastAccessTime
+
+    -- ** PartitionValueList
+    , PartitionValueList
+    , partitionValueList
+    , pvlValues
+
+    -- ** PhysicalConnectionRequirements
+    , PhysicalConnectionRequirements
+    , physicalConnectionRequirements
+    , pcrSecurityGroupIdList
+    , pcrSubnetId
+    , pcrAvailabilityZone
+
+    -- ** Predecessor
+    , Predecessor
+    , predecessor
+    , pJobName
+    , pRunId
+
+    -- ** Predicate
+    , Predicate
+    , predicate
+    , pLogical
+    , pConditions
+
+    -- ** ResourceURI
+    , ResourceURI
+    , resourceURI
+    , ruResourceType
+    , ruURI
+
+    -- ** S3Target
+    , S3Target
+    , s3Target
+    , stPath
+    , stExclusions
+
+    -- ** Schedule
+    , Schedule
+    , schedule
+    , sState
+    , sScheduleExpression
+
+    -- ** SchemaChangePolicy
+    , SchemaChangePolicy
+    , schemaChangePolicy
+    , scpDeleteBehavior
+    , scpUpdateBehavior
+
+    -- ** Segment
+    , Segment
+    , segment
+    , sSegmentNumber
+    , sTotalSegments
+
+    -- ** SerDeInfo
+    , SerDeInfo
+    , serDeInfo
+    , sdiSerializationLibrary
+    , sdiName
+    , sdiParameters
+
+    -- ** SkewedInfo
+    , SkewedInfo
+    , skewedInfo
+    , siSkewedColumnValueLocationMaps
+    , siSkewedColumnValues
+    , siSkewedColumnNames
+
+    -- ** StorageDescriptor
+    , StorageDescriptor
+    , storageDescriptor
+    , sdSortColumns
+    , sdCompressed
+    , sdLocation
+    , sdBucketColumns
+    , sdSerdeInfo
+    , sdOutputFormat
+    , sdNumberOfBuckets
+    , sdStoredAsSubDirectories
+    , sdParameters
+    , sdInputFormat
+    , sdSkewedInfo
+    , sdColumns
+
+    -- ** Table
+    , Table
+    , table
+    , tRetention
+    , tCreatedBy
+    , tTableType
+    , tOwner
+    , tViewOriginalText
+    , tUpdateTime
+    , tViewExpandedText
+    , tLastAnalyzedTime
+    , tStorageDescriptor
+    , tDatabaseName
+    , tParameters
+    , tLastAccessTime
+    , tDescription
+    , tPartitionKeys
+    , tCreateTime
+    , tName
+
+    -- ** TableError
+    , TableError
+    , tableError
+    , teTableName
+    , teErrorDetail
+
+    -- ** TableInput
+    , TableInput
+    , tableInput
+    , tiRetention
+    , tiTableType
+    , tiOwner
+    , tiViewOriginalText
+    , tiViewExpandedText
+    , tiLastAnalyzedTime
+    , tiStorageDescriptor
+    , tiParameters
+    , tiLastAccessTime
+    , tiDescription
+    , tiPartitionKeys
+    , tiName
+
+    -- ** TableVersion
+    , TableVersion
+    , tableVersion
+    , tvVersionId
+    , tvTable
+
+    -- ** Trigger
+    , Trigger
+    , trigger
+    , triState
+    , triActions
+    , triSchedule
+    , triPredicate
+    , triName
+    , triId
+    , triType
+    , triDescription
+
+    -- ** TriggerUpdate
+    , TriggerUpdate
+    , triggerUpdate
+    , tuActions
+    , tuSchedule
+    , tuPredicate
+    , tuName
+    , tuDescription
+
+    -- ** UpdateGrokClassifierRequest
+    , UpdateGrokClassifierRequest
+    , updateGrokClassifierRequest
+    , ugcrClassification
+    , ugcrCustomPatterns
+    , ugcrGrokPattern
+    , ugcrName
+
+    -- ** UserDefinedFunction
+    , UserDefinedFunction
+    , userDefinedFunction
+    , udfOwnerName
+    , udfResourceURIs
+    , udfFunctionName
+    , udfOwnerType
+    , udfCreateTime
+    , udfClassName
+
+    -- ** UserDefinedFunctionInput
+    , UserDefinedFunctionInput
+    , userDefinedFunctionInput
+    , udfiOwnerName
+    , udfiResourceURIs
+    , udfiFunctionName
+    , udfiOwnerType
+    , udfiClassName
+    ) where
+
+import Network.AWS.Glue.BatchCreatePartition
+import Network.AWS.Glue.BatchDeleteConnection
+import Network.AWS.Glue.BatchDeletePartition
+import Network.AWS.Glue.BatchDeleteTable
+import Network.AWS.Glue.BatchGetPartition
+import Network.AWS.Glue.BatchStopJobRun
+import Network.AWS.Glue.CreateClassifier
+import Network.AWS.Glue.CreateConnection
+import Network.AWS.Glue.CreateCrawler
+import Network.AWS.Glue.CreateDatabase
+import Network.AWS.Glue.CreateDevEndpoint
+import Network.AWS.Glue.CreateJob
+import Network.AWS.Glue.CreatePartition
+import Network.AWS.Glue.CreateScript
+import Network.AWS.Glue.CreateTable
+import Network.AWS.Glue.CreateTrigger
+import Network.AWS.Glue.CreateUserDefinedFunction
+import Network.AWS.Glue.DeleteClassifier
+import Network.AWS.Glue.DeleteConnection
+import Network.AWS.Glue.DeleteCrawler
+import Network.AWS.Glue.DeleteDatabase
+import Network.AWS.Glue.DeleteDevEndpoint
+import Network.AWS.Glue.DeleteJob
+import Network.AWS.Glue.DeletePartition
+import Network.AWS.Glue.DeleteTable
+import Network.AWS.Glue.DeleteTrigger
+import Network.AWS.Glue.DeleteUserDefinedFunction
+import Network.AWS.Glue.GetCatalogImportStatus
+import Network.AWS.Glue.GetClassifier
+import Network.AWS.Glue.GetClassifiers
+import Network.AWS.Glue.GetConnection
+import Network.AWS.Glue.GetConnections
+import Network.AWS.Glue.GetCrawler
+import Network.AWS.Glue.GetCrawlerMetrics
+import Network.AWS.Glue.GetCrawlers
+import Network.AWS.Glue.GetDatabase
+import Network.AWS.Glue.GetDatabases
+import Network.AWS.Glue.GetDataflowGraph
+import Network.AWS.Glue.GetDevEndpoint
+import Network.AWS.Glue.GetDevEndpoints
+import Network.AWS.Glue.GetJob
+import Network.AWS.Glue.GetJobRun
+import Network.AWS.Glue.GetJobRuns
+import Network.AWS.Glue.GetJobs
+import Network.AWS.Glue.GetMapping
+import Network.AWS.Glue.GetPartition
+import Network.AWS.Glue.GetPartitions
+import Network.AWS.Glue.GetPlan
+import Network.AWS.Glue.GetTable
+import Network.AWS.Glue.GetTables
+import Network.AWS.Glue.GetTableVersions
+import Network.AWS.Glue.GetTrigger
+import Network.AWS.Glue.GetTriggers
+import Network.AWS.Glue.GetUserDefinedFunction
+import Network.AWS.Glue.GetUserDefinedFunctions
+import Network.AWS.Glue.ImportCatalogToGlue
+import Network.AWS.Glue.ResetJobBookmark
+import Network.AWS.Glue.StartCrawler
+import Network.AWS.Glue.StartCrawlerSchedule
+import Network.AWS.Glue.StartJobRun
+import Network.AWS.Glue.StartTrigger
+import Network.AWS.Glue.StopCrawler
+import Network.AWS.Glue.StopCrawlerSchedule
+import Network.AWS.Glue.StopTrigger
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.UpdateClassifier
+import Network.AWS.Glue.UpdateConnection
+import Network.AWS.Glue.UpdateCrawler
+import Network.AWS.Glue.UpdateCrawlerSchedule
+import Network.AWS.Glue.UpdateDatabase
+import Network.AWS.Glue.UpdateDevEndpoint
+import Network.AWS.Glue.UpdateJob
+import Network.AWS.Glue.UpdatePartition
+import Network.AWS.Glue.UpdateTable
+import Network.AWS.Glue.UpdateTrigger
+import Network.AWS.Glue.UpdateUserDefinedFunction
+import Network.AWS.Glue.Waiters
+
+{- $errors
+Error matchers are designed for use with the functions provided by
+<http://hackage.haskell.org/package/lens/docs/Control-Exception-Lens.html Control.Exception.Lens>.
+This allows catching (and rethrowing) service specific errors returned
+by 'Glue'.
+-}
+
+{- $operations
+Some AWS operations return results that are incomplete and require subsequent
+requests in order to obtain the entire result set. The process of sending
+subsequent requests to continue where a previous request left off is called
+pagination. For example, the 'ListObjects' operation of Amazon S3 returns up to
+1000 objects at a time, and you must send subsequent requests with the
+appropriate Marker in order to retrieve the next page of results.
+
+Operations that have an 'AWSPager' instance can transparently perform subsequent
+requests, correctly setting Markers and other request facets to iterate through
+the entire result set of a truncated API operation. Operations which support
+this have an additional note in the documentation.
+
+Many operations have the ability to filter results on the server side. See the
+individual operation parameters for details.
+-}
+
+{- $waiters
+Waiters poll by repeatedly sending a request until some remote success condition
+configured by the 'Wait' specification is fulfilled. The 'Wait' specification
+determines how many attempts should be made, in addition to delay and retry strategies.
+-}
diff --git a/gen/Network/AWS/Glue/BatchCreatePartition.hs b/gen/Network/AWS/Glue/BatchCreatePartition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/BatchCreatePartition.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.BatchCreatePartition
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates one or more partitions in a batch operation.
+--
+--
+module Network.AWS.Glue.BatchCreatePartition
+    (
+    -- * Creating a Request
+      batchCreatePartition
+    , BatchCreatePartition
+    -- * Request Lenses
+    , bcpCatalogId
+    , bcpDatabaseName
+    , bcpTableName
+    , bcpPartitionInputList
+
+    -- * Destructuring the Response
+    , batchCreatePartitionResponse
+    , BatchCreatePartitionResponse
+    -- * Response Lenses
+    , bcprsErrors
+    , bcprsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'batchCreatePartition' smart constructor.
+data BatchCreatePartition = BatchCreatePartition'
+  { _bcpCatalogId          :: !(Maybe Text)
+  , _bcpDatabaseName       :: !Text
+  , _bcpTableName          :: !Text
+  , _bcpPartitionInputList :: ![PartitionInput]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchCreatePartition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcpCatalogId' - The ID of the catalog in which the partion is to be created. Currently, this should be the AWS account ID.
+--
+-- * 'bcpDatabaseName' - The name of the metadata database in which the partition is to be created.
+--
+-- * 'bcpTableName' - The name of the metadata table in which the partition is to be created.
+--
+-- * 'bcpPartitionInputList' - A list of @PartitionInput@ structures that define the partitions to be created.
+batchCreatePartition
+    :: Text -- ^ 'bcpDatabaseName'
+    -> Text -- ^ 'bcpTableName'
+    -> BatchCreatePartition
+batchCreatePartition pDatabaseName_ pTableName_ =
+  BatchCreatePartition'
+  { _bcpCatalogId = Nothing
+  , _bcpDatabaseName = pDatabaseName_
+  , _bcpTableName = pTableName_
+  , _bcpPartitionInputList = mempty
+  }
+
+
+-- | The ID of the catalog in which the partion is to be created. Currently, this should be the AWS account ID.
+bcpCatalogId :: Lens' BatchCreatePartition (Maybe Text)
+bcpCatalogId = lens _bcpCatalogId (\ s a -> s{_bcpCatalogId = a});
+
+-- | The name of the metadata database in which the partition is to be created.
+bcpDatabaseName :: Lens' BatchCreatePartition Text
+bcpDatabaseName = lens _bcpDatabaseName (\ s a -> s{_bcpDatabaseName = a});
+
+-- | The name of the metadata table in which the partition is to be created.
+bcpTableName :: Lens' BatchCreatePartition Text
+bcpTableName = lens _bcpTableName (\ s a -> s{_bcpTableName = a});
+
+-- | A list of @PartitionInput@ structures that define the partitions to be created.
+bcpPartitionInputList :: Lens' BatchCreatePartition [PartitionInput]
+bcpPartitionInputList = lens _bcpPartitionInputList (\ s a -> s{_bcpPartitionInputList = a}) . _Coerce;
+
+instance AWSRequest BatchCreatePartition where
+        type Rs BatchCreatePartition =
+             BatchCreatePartitionResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 BatchCreatePartitionResponse' <$>
+                   (x .?> "Errors" .!@ mempty) <*> (pure (fromEnum s)))
+
+instance Hashable BatchCreatePartition where
+
+instance NFData BatchCreatePartition where
+
+instance ToHeaders BatchCreatePartition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.BatchCreatePartition" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON BatchCreatePartition where
+        toJSON BatchCreatePartition'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _bcpCatalogId,
+                  Just ("DatabaseName" .= _bcpDatabaseName),
+                  Just ("TableName" .= _bcpTableName),
+                  Just
+                    ("PartitionInputList" .= _bcpPartitionInputList)])
+
+instance ToPath BatchCreatePartition where
+        toPath = const "/"
+
+instance ToQuery BatchCreatePartition where
+        toQuery = const mempty
+
+-- | /See:/ 'batchCreatePartitionResponse' smart constructor.
+data BatchCreatePartitionResponse = BatchCreatePartitionResponse'
+  { _bcprsErrors         :: !(Maybe [PartitionError])
+  , _bcprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchCreatePartitionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bcprsErrors' - Errors encountered when trying to create the requested partitions.
+--
+-- * 'bcprsResponseStatus' - -- | The response status code.
+batchCreatePartitionResponse
+    :: Int -- ^ 'bcprsResponseStatus'
+    -> BatchCreatePartitionResponse
+batchCreatePartitionResponse pResponseStatus_ =
+  BatchCreatePartitionResponse'
+  {_bcprsErrors = Nothing, _bcprsResponseStatus = pResponseStatus_}
+
+
+-- | Errors encountered when trying to create the requested partitions.
+bcprsErrors :: Lens' BatchCreatePartitionResponse [PartitionError]
+bcprsErrors = lens _bcprsErrors (\ s a -> s{_bcprsErrors = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+bcprsResponseStatus :: Lens' BatchCreatePartitionResponse Int
+bcprsResponseStatus = lens _bcprsResponseStatus (\ s a -> s{_bcprsResponseStatus = a});
+
+instance NFData BatchCreatePartitionResponse where
diff --git a/gen/Network/AWS/Glue/BatchDeleteConnection.hs b/gen/Network/AWS/Glue/BatchDeleteConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/BatchDeleteConnection.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.BatchDeleteConnection
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a list of connection definitions from the Data Catalog.
+--
+--
+module Network.AWS.Glue.BatchDeleteConnection
+    (
+    -- * Creating a Request
+      batchDeleteConnection
+    , BatchDeleteConnection
+    -- * Request Lenses
+    , bdcCatalogId
+    , bdcConnectionNameList
+
+    -- * Destructuring the Response
+    , batchDeleteConnectionResponse
+    , BatchDeleteConnectionResponse
+    -- * Response Lenses
+    , bdcrsSucceeded
+    , bdcrsErrors
+    , bdcrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'batchDeleteConnection' smart constructor.
+data BatchDeleteConnection = BatchDeleteConnection'
+  { _bdcCatalogId          :: !(Maybe Text)
+  , _bdcConnectionNameList :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchDeleteConnection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bdcCatalogId' - The ID of the Data Catalog in which the connections reside. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'bdcConnectionNameList' - A list of names of the connections to delete.
+batchDeleteConnection
+    :: BatchDeleteConnection
+batchDeleteConnection =
+  BatchDeleteConnection'
+  {_bdcCatalogId = Nothing, _bdcConnectionNameList = mempty}
+
+
+-- | The ID of the Data Catalog in which the connections reside. If none is supplied, the AWS account ID is used by default.
+bdcCatalogId :: Lens' BatchDeleteConnection (Maybe Text)
+bdcCatalogId = lens _bdcCatalogId (\ s a -> s{_bdcCatalogId = a});
+
+-- | A list of names of the connections to delete.
+bdcConnectionNameList :: Lens' BatchDeleteConnection [Text]
+bdcConnectionNameList = lens _bdcConnectionNameList (\ s a -> s{_bdcConnectionNameList = a}) . _Coerce;
+
+instance AWSRequest BatchDeleteConnection where
+        type Rs BatchDeleteConnection =
+             BatchDeleteConnectionResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 BatchDeleteConnectionResponse' <$>
+                   (x .?> "Succeeded" .!@ mempty) <*>
+                     (x .?> "Errors" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable BatchDeleteConnection where
+
+instance NFData BatchDeleteConnection where
+
+instance ToHeaders BatchDeleteConnection where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.BatchDeleteConnection" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON BatchDeleteConnection where
+        toJSON BatchDeleteConnection'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _bdcCatalogId,
+                  Just
+                    ("ConnectionNameList" .= _bdcConnectionNameList)])
+
+instance ToPath BatchDeleteConnection where
+        toPath = const "/"
+
+instance ToQuery BatchDeleteConnection where
+        toQuery = const mempty
+
+-- | /See:/ 'batchDeleteConnectionResponse' smart constructor.
+data BatchDeleteConnectionResponse = BatchDeleteConnectionResponse'
+  { _bdcrsSucceeded      :: !(Maybe [Text])
+  , _bdcrsErrors         :: !(Maybe (Map Text ErrorDetail))
+  , _bdcrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchDeleteConnectionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bdcrsSucceeded' - A list of names of the connection definitions that were successfully deleted.
+--
+-- * 'bdcrsErrors' - A map of the names of connections that were not successfully deleted to error details.
+--
+-- * 'bdcrsResponseStatus' - -- | The response status code.
+batchDeleteConnectionResponse
+    :: Int -- ^ 'bdcrsResponseStatus'
+    -> BatchDeleteConnectionResponse
+batchDeleteConnectionResponse pResponseStatus_ =
+  BatchDeleteConnectionResponse'
+  { _bdcrsSucceeded = Nothing
+  , _bdcrsErrors = Nothing
+  , _bdcrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A list of names of the connection definitions that were successfully deleted.
+bdcrsSucceeded :: Lens' BatchDeleteConnectionResponse [Text]
+bdcrsSucceeded = lens _bdcrsSucceeded (\ s a -> s{_bdcrsSucceeded = a}) . _Default . _Coerce;
+
+-- | A map of the names of connections that were not successfully deleted to error details.
+bdcrsErrors :: Lens' BatchDeleteConnectionResponse (HashMap Text ErrorDetail)
+bdcrsErrors = lens _bdcrsErrors (\ s a -> s{_bdcrsErrors = a}) . _Default . _Map;
+
+-- | -- | The response status code.
+bdcrsResponseStatus :: Lens' BatchDeleteConnectionResponse Int
+bdcrsResponseStatus = lens _bdcrsResponseStatus (\ s a -> s{_bdcrsResponseStatus = a});
+
+instance NFData BatchDeleteConnectionResponse where
diff --git a/gen/Network/AWS/Glue/BatchDeletePartition.hs b/gen/Network/AWS/Glue/BatchDeletePartition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/BatchDeletePartition.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.BatchDeletePartition
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes one or more partitions in a batch operation.
+--
+--
+module Network.AWS.Glue.BatchDeletePartition
+    (
+    -- * Creating a Request
+      batchDeletePartition
+    , BatchDeletePartition
+    -- * Request Lenses
+    , bdpCatalogId
+    , bdpDatabaseName
+    , bdpTableName
+    , bdpPartitionsToDelete
+
+    -- * Destructuring the Response
+    , batchDeletePartitionResponse
+    , BatchDeletePartitionResponse
+    -- * Response Lenses
+    , bdprsErrors
+    , bdprsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'batchDeletePartition' smart constructor.
+data BatchDeletePartition = BatchDeletePartition'
+  { _bdpCatalogId          :: !(Maybe Text)
+  , _bdpDatabaseName       :: !Text
+  , _bdpTableName          :: !Text
+  , _bdpPartitionsToDelete :: ![PartitionValueList]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchDeletePartition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bdpCatalogId' - The ID of the Data Catalog where the partition to be deleted resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'bdpDatabaseName' - The name of the catalog database in which the table in question resides.
+--
+-- * 'bdpTableName' - The name of the table where the partitions to be deleted is located.
+--
+-- * 'bdpPartitionsToDelete' - A list of @PartitionInput@ structures that define the partitions to be deleted.
+batchDeletePartition
+    :: Text -- ^ 'bdpDatabaseName'
+    -> Text -- ^ 'bdpTableName'
+    -> BatchDeletePartition
+batchDeletePartition pDatabaseName_ pTableName_ =
+  BatchDeletePartition'
+  { _bdpCatalogId = Nothing
+  , _bdpDatabaseName = pDatabaseName_
+  , _bdpTableName = pTableName_
+  , _bdpPartitionsToDelete = mempty
+  }
+
+
+-- | The ID of the Data Catalog where the partition to be deleted resides. If none is supplied, the AWS account ID is used by default.
+bdpCatalogId :: Lens' BatchDeletePartition (Maybe Text)
+bdpCatalogId = lens _bdpCatalogId (\ s a -> s{_bdpCatalogId = a});
+
+-- | The name of the catalog database in which the table in question resides.
+bdpDatabaseName :: Lens' BatchDeletePartition Text
+bdpDatabaseName = lens _bdpDatabaseName (\ s a -> s{_bdpDatabaseName = a});
+
+-- | The name of the table where the partitions to be deleted is located.
+bdpTableName :: Lens' BatchDeletePartition Text
+bdpTableName = lens _bdpTableName (\ s a -> s{_bdpTableName = a});
+
+-- | A list of @PartitionInput@ structures that define the partitions to be deleted.
+bdpPartitionsToDelete :: Lens' BatchDeletePartition [PartitionValueList]
+bdpPartitionsToDelete = lens _bdpPartitionsToDelete (\ s a -> s{_bdpPartitionsToDelete = a}) . _Coerce;
+
+instance AWSRequest BatchDeletePartition where
+        type Rs BatchDeletePartition =
+             BatchDeletePartitionResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 BatchDeletePartitionResponse' <$>
+                   (x .?> "Errors" .!@ mempty) <*> (pure (fromEnum s)))
+
+instance Hashable BatchDeletePartition where
+
+instance NFData BatchDeletePartition where
+
+instance ToHeaders BatchDeletePartition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.BatchDeletePartition" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON BatchDeletePartition where
+        toJSON BatchDeletePartition'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _bdpCatalogId,
+                  Just ("DatabaseName" .= _bdpDatabaseName),
+                  Just ("TableName" .= _bdpTableName),
+                  Just
+                    ("PartitionsToDelete" .= _bdpPartitionsToDelete)])
+
+instance ToPath BatchDeletePartition where
+        toPath = const "/"
+
+instance ToQuery BatchDeletePartition where
+        toQuery = const mempty
+
+-- | /See:/ 'batchDeletePartitionResponse' smart constructor.
+data BatchDeletePartitionResponse = BatchDeletePartitionResponse'
+  { _bdprsErrors         :: !(Maybe [PartitionError])
+  , _bdprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchDeletePartitionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bdprsErrors' - Errors encountered when trying to delete the requested partitions.
+--
+-- * 'bdprsResponseStatus' - -- | The response status code.
+batchDeletePartitionResponse
+    :: Int -- ^ 'bdprsResponseStatus'
+    -> BatchDeletePartitionResponse
+batchDeletePartitionResponse pResponseStatus_ =
+  BatchDeletePartitionResponse'
+  {_bdprsErrors = Nothing, _bdprsResponseStatus = pResponseStatus_}
+
+
+-- | Errors encountered when trying to delete the requested partitions.
+bdprsErrors :: Lens' BatchDeletePartitionResponse [PartitionError]
+bdprsErrors = lens _bdprsErrors (\ s a -> s{_bdprsErrors = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+bdprsResponseStatus :: Lens' BatchDeletePartitionResponse Int
+bdprsResponseStatus = lens _bdprsResponseStatus (\ s a -> s{_bdprsResponseStatus = a});
+
+instance NFData BatchDeletePartitionResponse where
diff --git a/gen/Network/AWS/Glue/BatchDeleteTable.hs b/gen/Network/AWS/Glue/BatchDeleteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/BatchDeleteTable.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.BatchDeleteTable
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes multiple tables at once.
+--
+--
+module Network.AWS.Glue.BatchDeleteTable
+    (
+    -- * Creating a Request
+      batchDeleteTable
+    , BatchDeleteTable
+    -- * Request Lenses
+    , bdtCatalogId
+    , bdtDatabaseName
+    , bdtTablesToDelete
+
+    -- * Destructuring the Response
+    , batchDeleteTableResponse
+    , BatchDeleteTableResponse
+    -- * Response Lenses
+    , bdtrsErrors
+    , bdtrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'batchDeleteTable' smart constructor.
+data BatchDeleteTable = BatchDeleteTable'
+  { _bdtCatalogId      :: !(Maybe Text)
+  , _bdtDatabaseName   :: !Text
+  , _bdtTablesToDelete :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchDeleteTable' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bdtCatalogId' - The ID of the Data Catalog where the table resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'bdtDatabaseName' - The name of the catalog database where the tables to delete reside.
+--
+-- * 'bdtTablesToDelete' - A list of the table to delete.
+batchDeleteTable
+    :: Text -- ^ 'bdtDatabaseName'
+    -> BatchDeleteTable
+batchDeleteTable pDatabaseName_ =
+  BatchDeleteTable'
+  { _bdtCatalogId = Nothing
+  , _bdtDatabaseName = pDatabaseName_
+  , _bdtTablesToDelete = mempty
+  }
+
+
+-- | The ID of the Data Catalog where the table resides. If none is supplied, the AWS account ID is used by default.
+bdtCatalogId :: Lens' BatchDeleteTable (Maybe Text)
+bdtCatalogId = lens _bdtCatalogId (\ s a -> s{_bdtCatalogId = a});
+
+-- | The name of the catalog database where the tables to delete reside.
+bdtDatabaseName :: Lens' BatchDeleteTable Text
+bdtDatabaseName = lens _bdtDatabaseName (\ s a -> s{_bdtDatabaseName = a});
+
+-- | A list of the table to delete.
+bdtTablesToDelete :: Lens' BatchDeleteTable [Text]
+bdtTablesToDelete = lens _bdtTablesToDelete (\ s a -> s{_bdtTablesToDelete = a}) . _Coerce;
+
+instance AWSRequest BatchDeleteTable where
+        type Rs BatchDeleteTable = BatchDeleteTableResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 BatchDeleteTableResponse' <$>
+                   (x .?> "Errors" .!@ mempty) <*> (pure (fromEnum s)))
+
+instance Hashable BatchDeleteTable where
+
+instance NFData BatchDeleteTable where
+
+instance ToHeaders BatchDeleteTable where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.BatchDeleteTable" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON BatchDeleteTable where
+        toJSON BatchDeleteTable'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _bdtCatalogId,
+                  Just ("DatabaseName" .= _bdtDatabaseName),
+                  Just ("TablesToDelete" .= _bdtTablesToDelete)])
+
+instance ToPath BatchDeleteTable where
+        toPath = const "/"
+
+instance ToQuery BatchDeleteTable where
+        toQuery = const mempty
+
+-- | /See:/ 'batchDeleteTableResponse' smart constructor.
+data BatchDeleteTableResponse = BatchDeleteTableResponse'
+  { _bdtrsErrors         :: !(Maybe [TableError])
+  , _bdtrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchDeleteTableResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bdtrsErrors' - A list of errors encountered in attempting to delete the specified tables.
+--
+-- * 'bdtrsResponseStatus' - -- | The response status code.
+batchDeleteTableResponse
+    :: Int -- ^ 'bdtrsResponseStatus'
+    -> BatchDeleteTableResponse
+batchDeleteTableResponse pResponseStatus_ =
+  BatchDeleteTableResponse'
+  {_bdtrsErrors = Nothing, _bdtrsResponseStatus = pResponseStatus_}
+
+
+-- | A list of errors encountered in attempting to delete the specified tables.
+bdtrsErrors :: Lens' BatchDeleteTableResponse [TableError]
+bdtrsErrors = lens _bdtrsErrors (\ s a -> s{_bdtrsErrors = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+bdtrsResponseStatus :: Lens' BatchDeleteTableResponse Int
+bdtrsResponseStatus = lens _bdtrsResponseStatus (\ s a -> s{_bdtrsResponseStatus = a});
+
+instance NFData BatchDeleteTableResponse where
diff --git a/gen/Network/AWS/Glue/BatchGetPartition.hs b/gen/Network/AWS/Glue/BatchGetPartition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/BatchGetPartition.hs
@@ -0,0 +1,179 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.BatchGetPartition
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves partitions in a batch request.
+--
+--
+module Network.AWS.Glue.BatchGetPartition
+    (
+    -- * Creating a Request
+      batchGetPartition
+    , BatchGetPartition
+    -- * Request Lenses
+    , bgpCatalogId
+    , bgpDatabaseName
+    , bgpTableName
+    , bgpPartitionsToGet
+
+    -- * Destructuring the Response
+    , batchGetPartitionResponse
+    , BatchGetPartitionResponse
+    -- * Response Lenses
+    , bgprsUnprocessedKeys
+    , bgprsPartitions
+    , bgprsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'batchGetPartition' smart constructor.
+data BatchGetPartition = BatchGetPartition'
+  { _bgpCatalogId       :: !(Maybe Text)
+  , _bgpDatabaseName    :: !Text
+  , _bgpTableName       :: !Text
+  , _bgpPartitionsToGet :: ![PartitionValueList]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchGetPartition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bgpCatalogId' - The ID of the Data Catalog where the partitions in question reside. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'bgpDatabaseName' - The name of the catalog database where the partitions reside.
+--
+-- * 'bgpTableName' - The name of the partitions' table.
+--
+-- * 'bgpPartitionsToGet' - A list of partition values identifying the partitions to retrieve.
+batchGetPartition
+    :: Text -- ^ 'bgpDatabaseName'
+    -> Text -- ^ 'bgpTableName'
+    -> BatchGetPartition
+batchGetPartition pDatabaseName_ pTableName_ =
+  BatchGetPartition'
+  { _bgpCatalogId = Nothing
+  , _bgpDatabaseName = pDatabaseName_
+  , _bgpTableName = pTableName_
+  , _bgpPartitionsToGet = mempty
+  }
+
+
+-- | The ID of the Data Catalog where the partitions in question reside. If none is supplied, the AWS account ID is used by default.
+bgpCatalogId :: Lens' BatchGetPartition (Maybe Text)
+bgpCatalogId = lens _bgpCatalogId (\ s a -> s{_bgpCatalogId = a});
+
+-- | The name of the catalog database where the partitions reside.
+bgpDatabaseName :: Lens' BatchGetPartition Text
+bgpDatabaseName = lens _bgpDatabaseName (\ s a -> s{_bgpDatabaseName = a});
+
+-- | The name of the partitions' table.
+bgpTableName :: Lens' BatchGetPartition Text
+bgpTableName = lens _bgpTableName (\ s a -> s{_bgpTableName = a});
+
+-- | A list of partition values identifying the partitions to retrieve.
+bgpPartitionsToGet :: Lens' BatchGetPartition [PartitionValueList]
+bgpPartitionsToGet = lens _bgpPartitionsToGet (\ s a -> s{_bgpPartitionsToGet = a}) . _Coerce;
+
+instance AWSRequest BatchGetPartition where
+        type Rs BatchGetPartition = BatchGetPartitionResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 BatchGetPartitionResponse' <$>
+                   (x .?> "UnprocessedKeys" .!@ mempty) <*>
+                     (x .?> "Partitions" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable BatchGetPartition where
+
+instance NFData BatchGetPartition where
+
+instance ToHeaders BatchGetPartition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.BatchGetPartition" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON BatchGetPartition where
+        toJSON BatchGetPartition'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _bgpCatalogId,
+                  Just ("DatabaseName" .= _bgpDatabaseName),
+                  Just ("TableName" .= _bgpTableName),
+                  Just ("PartitionsToGet" .= _bgpPartitionsToGet)])
+
+instance ToPath BatchGetPartition where
+        toPath = const "/"
+
+instance ToQuery BatchGetPartition where
+        toQuery = const mempty
+
+-- | /See:/ 'batchGetPartitionResponse' smart constructor.
+data BatchGetPartitionResponse = BatchGetPartitionResponse'
+  { _bgprsUnprocessedKeys :: !(Maybe [PartitionValueList])
+  , _bgprsPartitions      :: !(Maybe [Partition])
+  , _bgprsResponseStatus  :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchGetPartitionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bgprsUnprocessedKeys' - A list of the partition values in the request for which partions were not returned.
+--
+-- * 'bgprsPartitions' - A list of the requested partitions.
+--
+-- * 'bgprsResponseStatus' - -- | The response status code.
+batchGetPartitionResponse
+    :: Int -- ^ 'bgprsResponseStatus'
+    -> BatchGetPartitionResponse
+batchGetPartitionResponse pResponseStatus_ =
+  BatchGetPartitionResponse'
+  { _bgprsUnprocessedKeys = Nothing
+  , _bgprsPartitions = Nothing
+  , _bgprsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A list of the partition values in the request for which partions were not returned.
+bgprsUnprocessedKeys :: Lens' BatchGetPartitionResponse [PartitionValueList]
+bgprsUnprocessedKeys = lens _bgprsUnprocessedKeys (\ s a -> s{_bgprsUnprocessedKeys = a}) . _Default . _Coerce;
+
+-- | A list of the requested partitions.
+bgprsPartitions :: Lens' BatchGetPartitionResponse [Partition]
+bgprsPartitions = lens _bgprsPartitions (\ s a -> s{_bgprsPartitions = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+bgprsResponseStatus :: Lens' BatchGetPartitionResponse Int
+bgprsResponseStatus = lens _bgprsResponseStatus (\ s a -> s{_bgprsResponseStatus = a});
+
+instance NFData BatchGetPartitionResponse where
diff --git a/gen/Network/AWS/Glue/BatchStopJobRun.hs b/gen/Network/AWS/Glue/BatchStopJobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/BatchStopJobRun.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.BatchStopJobRun
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a batch of job runs for a given job.
+--
+--
+module Network.AWS.Glue.BatchStopJobRun
+    (
+    -- * Creating a Request
+      batchStopJobRun
+    , BatchStopJobRun
+    -- * Request Lenses
+    , bsjrJobName
+    , bsjrJobRunIds
+
+    -- * Destructuring the Response
+    , batchStopJobRunResponse
+    , BatchStopJobRunResponse
+    -- * Response Lenses
+    , bsjrrsSuccessfulSubmissions
+    , bsjrrsErrors
+    , bsjrrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'batchStopJobRun' smart constructor.
+data BatchStopJobRun = BatchStopJobRun'
+  { _bsjrJobName   :: !Text
+  , _bsjrJobRunIds :: !(List1 Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchStopJobRun' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bsjrJobName' - The name of the job whose job runs are to be stopped.
+--
+-- * 'bsjrJobRunIds' - A list of job run Ids of the given job to be stopped.
+batchStopJobRun
+    :: Text -- ^ 'bsjrJobName'
+    -> NonEmpty Text -- ^ 'bsjrJobRunIds'
+    -> BatchStopJobRun
+batchStopJobRun pJobName_ pJobRunIds_ =
+  BatchStopJobRun'
+  {_bsjrJobName = pJobName_, _bsjrJobRunIds = _List1 # pJobRunIds_}
+
+
+-- | The name of the job whose job runs are to be stopped.
+bsjrJobName :: Lens' BatchStopJobRun Text
+bsjrJobName = lens _bsjrJobName (\ s a -> s{_bsjrJobName = a});
+
+-- | A list of job run Ids of the given job to be stopped.
+bsjrJobRunIds :: Lens' BatchStopJobRun (NonEmpty Text)
+bsjrJobRunIds = lens _bsjrJobRunIds (\ s a -> s{_bsjrJobRunIds = a}) . _List1;
+
+instance AWSRequest BatchStopJobRun where
+        type Rs BatchStopJobRun = BatchStopJobRunResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 BatchStopJobRunResponse' <$>
+                   (x .?> "SuccessfulSubmissions" .!@ mempty) <*>
+                     (x .?> "Errors" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable BatchStopJobRun where
+
+instance NFData BatchStopJobRun where
+
+instance ToHeaders BatchStopJobRun where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.BatchStopJobRun" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON BatchStopJobRun where
+        toJSON BatchStopJobRun'{..}
+          = object
+              (catMaybes
+                 [Just ("JobName" .= _bsjrJobName),
+                  Just ("JobRunIds" .= _bsjrJobRunIds)])
+
+instance ToPath BatchStopJobRun where
+        toPath = const "/"
+
+instance ToQuery BatchStopJobRun where
+        toQuery = const mempty
+
+-- | /See:/ 'batchStopJobRunResponse' smart constructor.
+data BatchStopJobRunResponse = BatchStopJobRunResponse'
+  { _bsjrrsSuccessfulSubmissions :: !(Maybe [BatchStopJobRunSuccessfulSubmission])
+  , _bsjrrsErrors :: !(Maybe [BatchStopJobRunError])
+  , _bsjrrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchStopJobRunResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bsjrrsSuccessfulSubmissions' - A list of job runs which are successfully submitted for stopping.
+--
+-- * 'bsjrrsErrors' - A list containing the job run Ids and details of the error that occurred for each job run while submitting to stop.
+--
+-- * 'bsjrrsResponseStatus' - -- | The response status code.
+batchStopJobRunResponse
+    :: Int -- ^ 'bsjrrsResponseStatus'
+    -> BatchStopJobRunResponse
+batchStopJobRunResponse pResponseStatus_ =
+  BatchStopJobRunResponse'
+  { _bsjrrsSuccessfulSubmissions = Nothing
+  , _bsjrrsErrors = Nothing
+  , _bsjrrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A list of job runs which are successfully submitted for stopping.
+bsjrrsSuccessfulSubmissions :: Lens' BatchStopJobRunResponse [BatchStopJobRunSuccessfulSubmission]
+bsjrrsSuccessfulSubmissions = lens _bsjrrsSuccessfulSubmissions (\ s a -> s{_bsjrrsSuccessfulSubmissions = a}) . _Default . _Coerce;
+
+-- | A list containing the job run Ids and details of the error that occurred for each job run while submitting to stop.
+bsjrrsErrors :: Lens' BatchStopJobRunResponse [BatchStopJobRunError]
+bsjrrsErrors = lens _bsjrrsErrors (\ s a -> s{_bsjrrsErrors = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+bsjrrsResponseStatus :: Lens' BatchStopJobRunResponse Int
+bsjrrsResponseStatus = lens _bsjrrsResponseStatus (\ s a -> s{_bsjrrsResponseStatus = a});
+
+instance NFData BatchStopJobRunResponse where
diff --git a/gen/Network/AWS/Glue/CreateClassifier.hs b/gen/Network/AWS/Glue/CreateClassifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreateClassifier.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreateClassifier
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a @Classifier@ in the user's account.
+--
+--
+module Network.AWS.Glue.CreateClassifier
+    (
+    -- * Creating a Request
+      createClassifier
+    , CreateClassifier
+    -- * Request Lenses
+    , ccGrokClassifier
+
+    -- * Destructuring the Response
+    , createClassifierResponse
+    , CreateClassifierResponse
+    -- * Response Lenses
+    , ccrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createClassifier' smart constructor.
+newtype CreateClassifier = CreateClassifier'
+  { _ccGrokClassifier :: Maybe CreateGrokClassifierRequest
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateClassifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccGrokClassifier' - A grok classifier to create.
+createClassifier
+    :: CreateClassifier
+createClassifier = CreateClassifier' {_ccGrokClassifier = Nothing}
+
+
+-- | A grok classifier to create.
+ccGrokClassifier :: Lens' CreateClassifier (Maybe CreateGrokClassifierRequest)
+ccGrokClassifier = lens _ccGrokClassifier (\ s a -> s{_ccGrokClassifier = a});
+
+instance AWSRequest CreateClassifier where
+        type Rs CreateClassifier = CreateClassifierResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateClassifierResponse' <$> (pure (fromEnum s)))
+
+instance Hashable CreateClassifier where
+
+instance NFData CreateClassifier where
+
+instance ToHeaders CreateClassifier where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreateClassifier" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateClassifier where
+        toJSON CreateClassifier'{..}
+          = object
+              (catMaybes
+                 [("GrokClassifier" .=) <$> _ccGrokClassifier])
+
+instance ToPath CreateClassifier where
+        toPath = const "/"
+
+instance ToQuery CreateClassifier where
+        toQuery = const mempty
+
+-- | /See:/ 'createClassifierResponse' smart constructor.
+newtype CreateClassifierResponse = CreateClassifierResponse'
+  { _ccrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateClassifierResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccrsResponseStatus' - -- | The response status code.
+createClassifierResponse
+    :: Int -- ^ 'ccrsResponseStatus'
+    -> CreateClassifierResponse
+createClassifierResponse pResponseStatus_ =
+  CreateClassifierResponse' {_ccrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+ccrsResponseStatus :: Lens' CreateClassifierResponse Int
+ccrsResponseStatus = lens _ccrsResponseStatus (\ s a -> s{_ccrsResponseStatus = a});
+
+instance NFData CreateClassifierResponse where
diff --git a/gen/Network/AWS/Glue/CreateConnection.hs b/gen/Network/AWS/Glue/CreateConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreateConnection.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreateConnection
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a connection definition in the Data Catalog.
+--
+--
+module Network.AWS.Glue.CreateConnection
+    (
+    -- * Creating a Request
+      createConnection
+    , CreateConnection
+    -- * Request Lenses
+    , ccCatalogId
+    , ccConnectionInput
+
+    -- * Destructuring the Response
+    , createConnectionResponse
+    , CreateConnectionResponse
+    -- * Response Lenses
+    , crsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createConnection' smart constructor.
+data CreateConnection = CreateConnection'
+  { _ccCatalogId       :: !(Maybe Text)
+  , _ccConnectionInput :: !ConnectionInput
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateConnection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccCatalogId' - The ID of the Data Catalog in which to create the connection. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'ccConnectionInput' - A @ConnectionInput@ object defining the connection to create.
+createConnection
+    :: ConnectionInput -- ^ 'ccConnectionInput'
+    -> CreateConnection
+createConnection pConnectionInput_ =
+  CreateConnection'
+  {_ccCatalogId = Nothing, _ccConnectionInput = pConnectionInput_}
+
+
+-- | The ID of the Data Catalog in which to create the connection. If none is supplied, the AWS account ID is used by default.
+ccCatalogId :: Lens' CreateConnection (Maybe Text)
+ccCatalogId = lens _ccCatalogId (\ s a -> s{_ccCatalogId = a});
+
+-- | A @ConnectionInput@ object defining the connection to create.
+ccConnectionInput :: Lens' CreateConnection ConnectionInput
+ccConnectionInput = lens _ccConnectionInput (\ s a -> s{_ccConnectionInput = a});
+
+instance AWSRequest CreateConnection where
+        type Rs CreateConnection = CreateConnectionResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateConnectionResponse' <$> (pure (fromEnum s)))
+
+instance Hashable CreateConnection where
+
+instance NFData CreateConnection where
+
+instance ToHeaders CreateConnection where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreateConnection" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateConnection where
+        toJSON CreateConnection'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _ccCatalogId,
+                  Just ("ConnectionInput" .= _ccConnectionInput)])
+
+instance ToPath CreateConnection where
+        toPath = const "/"
+
+instance ToQuery CreateConnection where
+        toQuery = const mempty
+
+-- | /See:/ 'createConnectionResponse' smart constructor.
+newtype CreateConnectionResponse = CreateConnectionResponse'
+  { _crsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateConnectionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crsResponseStatus' - -- | The response status code.
+createConnectionResponse
+    :: Int -- ^ 'crsResponseStatus'
+    -> CreateConnectionResponse
+createConnectionResponse pResponseStatus_ =
+  CreateConnectionResponse' {_crsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+crsResponseStatus :: Lens' CreateConnectionResponse Int
+crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = a});
+
+instance NFData CreateConnectionResponse where
diff --git a/gen/Network/AWS/Glue/CreateCrawler.hs b/gen/Network/AWS/Glue/CreateCrawler.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreateCrawler.hs
@@ -0,0 +1,207 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreateCrawler
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new @Crawler@ with specified targets, role, configuration, and optional schedule. At least one crawl target must be specified, in either the /s3Targets/ or the /jdbcTargets/ field.
+--
+--
+module Network.AWS.Glue.CreateCrawler
+    (
+    -- * Creating a Request
+      createCrawler
+    , CreateCrawler
+    -- * Request Lenses
+    , ccSchemaChangePolicy
+    , ccSchedule
+    , ccClassifiers
+    , ccTablePrefix
+    , ccDescription
+    , ccName
+    , ccRole
+    , ccDatabaseName
+    , ccTargets
+
+    -- * Destructuring the Response
+    , createCrawlerResponse
+    , CreateCrawlerResponse
+    -- * Response Lenses
+    , crersResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createCrawler' smart constructor.
+data CreateCrawler = CreateCrawler'
+  { _ccSchemaChangePolicy :: !(Maybe SchemaChangePolicy)
+  , _ccSchedule           :: !(Maybe Text)
+  , _ccClassifiers        :: !(Maybe [Text])
+  , _ccTablePrefix        :: !(Maybe Text)
+  , _ccDescription        :: !(Maybe Text)
+  , _ccName               :: !Text
+  , _ccRole               :: !Text
+  , _ccDatabaseName       :: !Text
+  , _ccTargets            :: !CrawlerTargets
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateCrawler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ccSchemaChangePolicy' - Policy for the crawler's update and deletion behavior.
+--
+-- * 'ccSchedule' - A @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+--
+-- * 'ccClassifiers' - A list of custom @Classifier@ names that the user has registered. By default, all AWS classifiers are included in a crawl, but these custom classifiers always override the default classifiers for a given classification.
+--
+-- * 'ccTablePrefix' - The table prefix used for catalog tables created.
+--
+-- * 'ccDescription' - A description of the new @Crawler@ .
+--
+-- * 'ccName' - Name of the new @Crawler@ .
+--
+-- * 'ccRole' - The IAM role (or ARN of an IAM role) used by the new @Crawler@ to access customer resources.
+--
+-- * 'ccDatabaseName' - The Glue @Database@ where results will be stored, such as: @arn:aws:daylight:us-east-1::database/sometable/*@ .
+--
+-- * 'ccTargets' - A list of collection of targets to crawl.
+createCrawler
+    :: Text -- ^ 'ccName'
+    -> Text -- ^ 'ccRole'
+    -> Text -- ^ 'ccDatabaseName'
+    -> CrawlerTargets -- ^ 'ccTargets'
+    -> CreateCrawler
+createCrawler pName_ pRole_ pDatabaseName_ pTargets_ =
+  CreateCrawler'
+  { _ccSchemaChangePolicy = Nothing
+  , _ccSchedule = Nothing
+  , _ccClassifiers = Nothing
+  , _ccTablePrefix = Nothing
+  , _ccDescription = Nothing
+  , _ccName = pName_
+  , _ccRole = pRole_
+  , _ccDatabaseName = pDatabaseName_
+  , _ccTargets = pTargets_
+  }
+
+
+-- | Policy for the crawler's update and deletion behavior.
+ccSchemaChangePolicy :: Lens' CreateCrawler (Maybe SchemaChangePolicy)
+ccSchemaChangePolicy = lens _ccSchemaChangePolicy (\ s a -> s{_ccSchemaChangePolicy = a});
+
+-- | A @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+ccSchedule :: Lens' CreateCrawler (Maybe Text)
+ccSchedule = lens _ccSchedule (\ s a -> s{_ccSchedule = a});
+
+-- | A list of custom @Classifier@ names that the user has registered. By default, all AWS classifiers are included in a crawl, but these custom classifiers always override the default classifiers for a given classification.
+ccClassifiers :: Lens' CreateCrawler [Text]
+ccClassifiers = lens _ccClassifiers (\ s a -> s{_ccClassifiers = a}) . _Default . _Coerce;
+
+-- | The table prefix used for catalog tables created.
+ccTablePrefix :: Lens' CreateCrawler (Maybe Text)
+ccTablePrefix = lens _ccTablePrefix (\ s a -> s{_ccTablePrefix = a});
+
+-- | A description of the new @Crawler@ .
+ccDescription :: Lens' CreateCrawler (Maybe Text)
+ccDescription = lens _ccDescription (\ s a -> s{_ccDescription = a});
+
+-- | Name of the new @Crawler@ .
+ccName :: Lens' CreateCrawler Text
+ccName = lens _ccName (\ s a -> s{_ccName = a});
+
+-- | The IAM role (or ARN of an IAM role) used by the new @Crawler@ to access customer resources.
+ccRole :: Lens' CreateCrawler Text
+ccRole = lens _ccRole (\ s a -> s{_ccRole = a});
+
+-- | The Glue @Database@ where results will be stored, such as: @arn:aws:daylight:us-east-1::database/sometable/*@ .
+ccDatabaseName :: Lens' CreateCrawler Text
+ccDatabaseName = lens _ccDatabaseName (\ s a -> s{_ccDatabaseName = a});
+
+-- | A list of collection of targets to crawl.
+ccTargets :: Lens' CreateCrawler CrawlerTargets
+ccTargets = lens _ccTargets (\ s a -> s{_ccTargets = a});
+
+instance AWSRequest CreateCrawler where
+        type Rs CreateCrawler = CreateCrawlerResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateCrawlerResponse' <$> (pure (fromEnum s)))
+
+instance Hashable CreateCrawler where
+
+instance NFData CreateCrawler where
+
+instance ToHeaders CreateCrawler where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreateCrawler" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateCrawler where
+        toJSON CreateCrawler'{..}
+          = object
+              (catMaybes
+                 [("SchemaChangePolicy" .=) <$> _ccSchemaChangePolicy,
+                  ("Schedule" .=) <$> _ccSchedule,
+                  ("Classifiers" .=) <$> _ccClassifiers,
+                  ("TablePrefix" .=) <$> _ccTablePrefix,
+                  ("Description" .=) <$> _ccDescription,
+                  Just ("Name" .= _ccName), Just ("Role" .= _ccRole),
+                  Just ("DatabaseName" .= _ccDatabaseName),
+                  Just ("Targets" .= _ccTargets)])
+
+instance ToPath CreateCrawler where
+        toPath = const "/"
+
+instance ToQuery CreateCrawler where
+        toQuery = const mempty
+
+-- | /See:/ 'createCrawlerResponse' smart constructor.
+newtype CreateCrawlerResponse = CreateCrawlerResponse'
+  { _crersResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateCrawlerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crersResponseStatus' - -- | The response status code.
+createCrawlerResponse
+    :: Int -- ^ 'crersResponseStatus'
+    -> CreateCrawlerResponse
+createCrawlerResponse pResponseStatus_ =
+  CreateCrawlerResponse' {_crersResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+crersResponseStatus :: Lens' CreateCrawlerResponse Int
+crersResponseStatus = lens _crersResponseStatus (\ s a -> s{_crersResponseStatus = a});
+
+instance NFData CreateCrawlerResponse where
diff --git a/gen/Network/AWS/Glue/CreateDatabase.hs b/gen/Network/AWS/Glue/CreateDatabase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreateDatabase.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreateDatabase
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new database in a Data Catalog.
+--
+--
+module Network.AWS.Glue.CreateDatabase
+    (
+    -- * Creating a Request
+      createDatabase
+    , CreateDatabase
+    -- * Request Lenses
+    , cdCatalogId
+    , cdDatabaseInput
+
+    -- * Destructuring the Response
+    , createDatabaseResponse
+    , CreateDatabaseResponse
+    -- * Response Lenses
+    , cdrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createDatabase' smart constructor.
+data CreateDatabase = CreateDatabase'
+  { _cdCatalogId     :: !(Maybe Text)
+  , _cdDatabaseInput :: !DatabaseInput
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateDatabase' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdCatalogId' - The ID of the Data Catalog in which to create the database. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'cdDatabaseInput' - A @DatabaseInput@ object defining the metadata database to create in the catalog.
+createDatabase
+    :: DatabaseInput -- ^ 'cdDatabaseInput'
+    -> CreateDatabase
+createDatabase pDatabaseInput_ =
+  CreateDatabase' {_cdCatalogId = Nothing, _cdDatabaseInput = pDatabaseInput_}
+
+
+-- | The ID of the Data Catalog in which to create the database. If none is supplied, the AWS account ID is used by default.
+cdCatalogId :: Lens' CreateDatabase (Maybe Text)
+cdCatalogId = lens _cdCatalogId (\ s a -> s{_cdCatalogId = a});
+
+-- | A @DatabaseInput@ object defining the metadata database to create in the catalog.
+cdDatabaseInput :: Lens' CreateDatabase DatabaseInput
+cdDatabaseInput = lens _cdDatabaseInput (\ s a -> s{_cdDatabaseInput = a});
+
+instance AWSRequest CreateDatabase where
+        type Rs CreateDatabase = CreateDatabaseResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateDatabaseResponse' <$> (pure (fromEnum s)))
+
+instance Hashable CreateDatabase where
+
+instance NFData CreateDatabase where
+
+instance ToHeaders CreateDatabase where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreateDatabase" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateDatabase where
+        toJSON CreateDatabase'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _cdCatalogId,
+                  Just ("DatabaseInput" .= _cdDatabaseInput)])
+
+instance ToPath CreateDatabase where
+        toPath = const "/"
+
+instance ToQuery CreateDatabase where
+        toQuery = const mempty
+
+-- | /See:/ 'createDatabaseResponse' smart constructor.
+newtype CreateDatabaseResponse = CreateDatabaseResponse'
+  { _cdrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateDatabaseResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdrsResponseStatus' - -- | The response status code.
+createDatabaseResponse
+    :: Int -- ^ 'cdrsResponseStatus'
+    -> CreateDatabaseResponse
+createDatabaseResponse pResponseStatus_ =
+  CreateDatabaseResponse' {_cdrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+cdrsResponseStatus :: Lens' CreateDatabaseResponse Int
+cdrsResponseStatus = lens _cdrsResponseStatus (\ s a -> s{_cdrsResponseStatus = a});
+
+instance NFData CreateDatabaseResponse where
diff --git a/gen/Network/AWS/Glue/CreateDevEndpoint.hs b/gen/Network/AWS/Glue/CreateDevEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreateDevEndpoint.hs
@@ -0,0 +1,340 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreateDevEndpoint
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new DevEndpoint.
+--
+--
+module Network.AWS.Glue.CreateDevEndpoint
+    (
+    -- * Creating a Request
+      createDevEndpoint
+    , CreateDevEndpoint
+    -- * Request Lenses
+    , cdeExtraPythonLibsS3Path
+    , cdeSecurityGroupIds
+    , cdeSubnetId
+    , cdeNumberOfNodes
+    , cdeExtraJARsS3Path
+    , cdeEndpointName
+    , cdeRoleARN
+    , cdePublicKey
+
+    -- * Destructuring the Response
+    , createDevEndpointResponse
+    , CreateDevEndpointResponse
+    -- * Response Lenses
+    , cdersStatus
+    , cdersFailureReason
+    , cdersEndpointName
+    , cdersExtraPythonLibsS3Path
+    , cdersSecurityGroupIds
+    , cdersVPCId
+    , cdersSubnetId
+    , cdersNumberOfNodes
+    , cdersAvailabilityZone
+    , cdersZeppelinRemoteSparkInterpreterPort
+    , cdersExtraJARsS3Path
+    , cdersCreatedTimestamp
+    , cdersYarnEndpointAddress
+    , cdersRoleARN
+    , cdersResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createDevEndpoint' smart constructor.
+data CreateDevEndpoint = CreateDevEndpoint'
+  { _cdeExtraPythonLibsS3Path :: !(Maybe Text)
+  , _cdeSecurityGroupIds      :: !(Maybe [Text])
+  , _cdeSubnetId              :: !(Maybe Text)
+  , _cdeNumberOfNodes         :: !(Maybe Int)
+  , _cdeExtraJARsS3Path       :: !(Maybe Text)
+  , _cdeEndpointName          :: !Text
+  , _cdeRoleARN               :: !Text
+  , _cdePublicKey             :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateDevEndpoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdeExtraPythonLibsS3Path' - Path(s) to one or more Python libraries in an S3 bucket that should be loaded in your DevEndpoint. Multiple values must be complete paths separated by a comma. Please note that only pure Python libraries can currently be used on a DevEndpoint. Libraries that rely on C extensions, such as the <http://pandas.pydata.org/ pandas> Python data analysis library, are not yet supported.
+--
+-- * 'cdeSecurityGroupIds' - Security group IDs for the security groups to be used by the new DevEndpoint.
+--
+-- * 'cdeSubnetId' - The subnet ID for the new DevEndpoint to use.
+--
+-- * 'cdeNumberOfNodes' - The number of AWS Glue Data Processing Units (DPUs) to allocate to this DevEndpoint.
+--
+-- * 'cdeExtraJARsS3Path' - Path to one or more Java Jars in an S3 bucket that should be loaded in your DevEndpoint.
+--
+-- * 'cdeEndpointName' - The name to be assigned to the new DevEndpoint.
+--
+-- * 'cdeRoleARN' - The IAM role for the DevEndpoint.
+--
+-- * 'cdePublicKey' - The public key to use for authentication.
+createDevEndpoint
+    :: Text -- ^ 'cdeEndpointName'
+    -> Text -- ^ 'cdeRoleARN'
+    -> Text -- ^ 'cdePublicKey'
+    -> CreateDevEndpoint
+createDevEndpoint pEndpointName_ pRoleARN_ pPublicKey_ =
+  CreateDevEndpoint'
+  { _cdeExtraPythonLibsS3Path = Nothing
+  , _cdeSecurityGroupIds = Nothing
+  , _cdeSubnetId = Nothing
+  , _cdeNumberOfNodes = Nothing
+  , _cdeExtraJARsS3Path = Nothing
+  , _cdeEndpointName = pEndpointName_
+  , _cdeRoleARN = pRoleARN_
+  , _cdePublicKey = pPublicKey_
+  }
+
+
+-- | Path(s) to one or more Python libraries in an S3 bucket that should be loaded in your DevEndpoint. Multiple values must be complete paths separated by a comma. Please note that only pure Python libraries can currently be used on a DevEndpoint. Libraries that rely on C extensions, such as the <http://pandas.pydata.org/ pandas> Python data analysis library, are not yet supported.
+cdeExtraPythonLibsS3Path :: Lens' CreateDevEndpoint (Maybe Text)
+cdeExtraPythonLibsS3Path = lens _cdeExtraPythonLibsS3Path (\ s a -> s{_cdeExtraPythonLibsS3Path = a});
+
+-- | Security group IDs for the security groups to be used by the new DevEndpoint.
+cdeSecurityGroupIds :: Lens' CreateDevEndpoint [Text]
+cdeSecurityGroupIds = lens _cdeSecurityGroupIds (\ s a -> s{_cdeSecurityGroupIds = a}) . _Default . _Coerce;
+
+-- | The subnet ID for the new DevEndpoint to use.
+cdeSubnetId :: Lens' CreateDevEndpoint (Maybe Text)
+cdeSubnetId = lens _cdeSubnetId (\ s a -> s{_cdeSubnetId = a});
+
+-- | The number of AWS Glue Data Processing Units (DPUs) to allocate to this DevEndpoint.
+cdeNumberOfNodes :: Lens' CreateDevEndpoint (Maybe Int)
+cdeNumberOfNodes = lens _cdeNumberOfNodes (\ s a -> s{_cdeNumberOfNodes = a});
+
+-- | Path to one or more Java Jars in an S3 bucket that should be loaded in your DevEndpoint.
+cdeExtraJARsS3Path :: Lens' CreateDevEndpoint (Maybe Text)
+cdeExtraJARsS3Path = lens _cdeExtraJARsS3Path (\ s a -> s{_cdeExtraJARsS3Path = a});
+
+-- | The name to be assigned to the new DevEndpoint.
+cdeEndpointName :: Lens' CreateDevEndpoint Text
+cdeEndpointName = lens _cdeEndpointName (\ s a -> s{_cdeEndpointName = a});
+
+-- | The IAM role for the DevEndpoint.
+cdeRoleARN :: Lens' CreateDevEndpoint Text
+cdeRoleARN = lens _cdeRoleARN (\ s a -> s{_cdeRoleARN = a});
+
+-- | The public key to use for authentication.
+cdePublicKey :: Lens' CreateDevEndpoint Text
+cdePublicKey = lens _cdePublicKey (\ s a -> s{_cdePublicKey = a});
+
+instance AWSRequest CreateDevEndpoint where
+        type Rs CreateDevEndpoint = CreateDevEndpointResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateDevEndpointResponse' <$>
+                   (x .?> "Status") <*> (x .?> "FailureReason") <*>
+                     (x .?> "EndpointName")
+                     <*> (x .?> "ExtraPythonLibsS3Path")
+                     <*> (x .?> "SecurityGroupIds" .!@ mempty)
+                     <*> (x .?> "VpcId")
+                     <*> (x .?> "SubnetId")
+                     <*> (x .?> "NumberOfNodes")
+                     <*> (x .?> "AvailabilityZone")
+                     <*> (x .?> "ZeppelinRemoteSparkInterpreterPort")
+                     <*> (x .?> "ExtraJarsS3Path")
+                     <*> (x .?> "CreatedTimestamp")
+                     <*> (x .?> "YarnEndpointAddress")
+                     <*> (x .?> "RoleArn")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable CreateDevEndpoint where
+
+instance NFData CreateDevEndpoint where
+
+instance ToHeaders CreateDevEndpoint where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreateDevEndpoint" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateDevEndpoint where
+        toJSON CreateDevEndpoint'{..}
+          = object
+              (catMaybes
+                 [("ExtraPythonLibsS3Path" .=) <$>
+                    _cdeExtraPythonLibsS3Path,
+                  ("SecurityGroupIds" .=) <$> _cdeSecurityGroupIds,
+                  ("SubnetId" .=) <$> _cdeSubnetId,
+                  ("NumberOfNodes" .=) <$> _cdeNumberOfNodes,
+                  ("ExtraJarsS3Path" .=) <$> _cdeExtraJARsS3Path,
+                  Just ("EndpointName" .= _cdeEndpointName),
+                  Just ("RoleArn" .= _cdeRoleARN),
+                  Just ("PublicKey" .= _cdePublicKey)])
+
+instance ToPath CreateDevEndpoint where
+        toPath = const "/"
+
+instance ToQuery CreateDevEndpoint where
+        toQuery = const mempty
+
+-- | /See:/ 'createDevEndpointResponse' smart constructor.
+data CreateDevEndpointResponse = CreateDevEndpointResponse'
+  { _cdersStatus                             :: !(Maybe Text)
+  , _cdersFailureReason                      :: !(Maybe Text)
+  , _cdersEndpointName                       :: !(Maybe Text)
+  , _cdersExtraPythonLibsS3Path              :: !(Maybe Text)
+  , _cdersSecurityGroupIds                   :: !(Maybe [Text])
+  , _cdersVPCId                              :: !(Maybe Text)
+  , _cdersSubnetId                           :: !(Maybe Text)
+  , _cdersNumberOfNodes                      :: !(Maybe Int)
+  , _cdersAvailabilityZone                   :: !(Maybe Text)
+  , _cdersZeppelinRemoteSparkInterpreterPort :: !(Maybe Int)
+  , _cdersExtraJARsS3Path                    :: !(Maybe Text)
+  , _cdersCreatedTimestamp                   :: !(Maybe POSIX)
+  , _cdersYarnEndpointAddress                :: !(Maybe Text)
+  , _cdersRoleARN                            :: !(Maybe Text)
+  , _cdersResponseStatus                     :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateDevEndpointResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cdersStatus' - The current status of the new DevEndpoint.
+--
+-- * 'cdersFailureReason' - The reason for a current failure in this DevEndpoint.
+--
+-- * 'cdersEndpointName' - The name assigned to the new DevEndpoint.
+--
+-- * 'cdersExtraPythonLibsS3Path' - Path(s) to one or more Python libraries in an S3 bucket that will be loaded in your DevEndpoint.
+--
+-- * 'cdersSecurityGroupIds' - The security groups assigned to the new DevEndpoint.
+--
+-- * 'cdersVPCId' - The ID of the VPC used by this DevEndpoint.
+--
+-- * 'cdersSubnetId' - The subnet ID assigned to the new DevEndpoint.
+--
+-- * 'cdersNumberOfNodes' - The number of AWS Glue Data Processing Units (DPUs) allocated to this DevEndpoint.
+--
+-- * 'cdersAvailabilityZone' - The AWS availability zone where this DevEndpoint is located.
+--
+-- * 'cdersZeppelinRemoteSparkInterpreterPort' - The Apache Zeppelin port for the remote Apache Spark interpreter.
+--
+-- * 'cdersExtraJARsS3Path' - Path to one or more Java Jars in an S3 bucket that will be loaded in your DevEndpoint.
+--
+-- * 'cdersCreatedTimestamp' - The point in time at which this DevEndpoint was created.
+--
+-- * 'cdersYarnEndpointAddress' - The address of the YARN endpoint used by this DevEndpoint.
+--
+-- * 'cdersRoleARN' - The AWS ARN of the role assigned to the new DevEndpoint.
+--
+-- * 'cdersResponseStatus' - -- | The response status code.
+createDevEndpointResponse
+    :: Int -- ^ 'cdersResponseStatus'
+    -> CreateDevEndpointResponse
+createDevEndpointResponse pResponseStatus_ =
+  CreateDevEndpointResponse'
+  { _cdersStatus = Nothing
+  , _cdersFailureReason = Nothing
+  , _cdersEndpointName = Nothing
+  , _cdersExtraPythonLibsS3Path = Nothing
+  , _cdersSecurityGroupIds = Nothing
+  , _cdersVPCId = Nothing
+  , _cdersSubnetId = Nothing
+  , _cdersNumberOfNodes = Nothing
+  , _cdersAvailabilityZone = Nothing
+  , _cdersZeppelinRemoteSparkInterpreterPort = Nothing
+  , _cdersExtraJARsS3Path = Nothing
+  , _cdersCreatedTimestamp = Nothing
+  , _cdersYarnEndpointAddress = Nothing
+  , _cdersRoleARN = Nothing
+  , _cdersResponseStatus = pResponseStatus_
+  }
+
+
+-- | The current status of the new DevEndpoint.
+cdersStatus :: Lens' CreateDevEndpointResponse (Maybe Text)
+cdersStatus = lens _cdersStatus (\ s a -> s{_cdersStatus = a});
+
+-- | The reason for a current failure in this DevEndpoint.
+cdersFailureReason :: Lens' CreateDevEndpointResponse (Maybe Text)
+cdersFailureReason = lens _cdersFailureReason (\ s a -> s{_cdersFailureReason = a});
+
+-- | The name assigned to the new DevEndpoint.
+cdersEndpointName :: Lens' CreateDevEndpointResponse (Maybe Text)
+cdersEndpointName = lens _cdersEndpointName (\ s a -> s{_cdersEndpointName = a});
+
+-- | Path(s) to one or more Python libraries in an S3 bucket that will be loaded in your DevEndpoint.
+cdersExtraPythonLibsS3Path :: Lens' CreateDevEndpointResponse (Maybe Text)
+cdersExtraPythonLibsS3Path = lens _cdersExtraPythonLibsS3Path (\ s a -> s{_cdersExtraPythonLibsS3Path = a});
+
+-- | The security groups assigned to the new DevEndpoint.
+cdersSecurityGroupIds :: Lens' CreateDevEndpointResponse [Text]
+cdersSecurityGroupIds = lens _cdersSecurityGroupIds (\ s a -> s{_cdersSecurityGroupIds = a}) . _Default . _Coerce;
+
+-- | The ID of the VPC used by this DevEndpoint.
+cdersVPCId :: Lens' CreateDevEndpointResponse (Maybe Text)
+cdersVPCId = lens _cdersVPCId (\ s a -> s{_cdersVPCId = a});
+
+-- | The subnet ID assigned to the new DevEndpoint.
+cdersSubnetId :: Lens' CreateDevEndpointResponse (Maybe Text)
+cdersSubnetId = lens _cdersSubnetId (\ s a -> s{_cdersSubnetId = a});
+
+-- | The number of AWS Glue Data Processing Units (DPUs) allocated to this DevEndpoint.
+cdersNumberOfNodes :: Lens' CreateDevEndpointResponse (Maybe Int)
+cdersNumberOfNodes = lens _cdersNumberOfNodes (\ s a -> s{_cdersNumberOfNodes = a});
+
+-- | The AWS availability zone where this DevEndpoint is located.
+cdersAvailabilityZone :: Lens' CreateDevEndpointResponse (Maybe Text)
+cdersAvailabilityZone = lens _cdersAvailabilityZone (\ s a -> s{_cdersAvailabilityZone = a});
+
+-- | The Apache Zeppelin port for the remote Apache Spark interpreter.
+cdersZeppelinRemoteSparkInterpreterPort :: Lens' CreateDevEndpointResponse (Maybe Int)
+cdersZeppelinRemoteSparkInterpreterPort = lens _cdersZeppelinRemoteSparkInterpreterPort (\ s a -> s{_cdersZeppelinRemoteSparkInterpreterPort = a});
+
+-- | Path to one or more Java Jars in an S3 bucket that will be loaded in your DevEndpoint.
+cdersExtraJARsS3Path :: Lens' CreateDevEndpointResponse (Maybe Text)
+cdersExtraJARsS3Path = lens _cdersExtraJARsS3Path (\ s a -> s{_cdersExtraJARsS3Path = a});
+
+-- | The point in time at which this DevEndpoint was created.
+cdersCreatedTimestamp :: Lens' CreateDevEndpointResponse (Maybe UTCTime)
+cdersCreatedTimestamp = lens _cdersCreatedTimestamp (\ s a -> s{_cdersCreatedTimestamp = a}) . mapping _Time;
+
+-- | The address of the YARN endpoint used by this DevEndpoint.
+cdersYarnEndpointAddress :: Lens' CreateDevEndpointResponse (Maybe Text)
+cdersYarnEndpointAddress = lens _cdersYarnEndpointAddress (\ s a -> s{_cdersYarnEndpointAddress = a});
+
+-- | The AWS ARN of the role assigned to the new DevEndpoint.
+cdersRoleARN :: Lens' CreateDevEndpointResponse (Maybe Text)
+cdersRoleARN = lens _cdersRoleARN (\ s a -> s{_cdersRoleARN = a});
+
+-- | -- | The response status code.
+cdersResponseStatus :: Lens' CreateDevEndpointResponse Int
+cdersResponseStatus = lens _cdersResponseStatus (\ s a -> s{_cdersResponseStatus = a});
+
+instance NFData CreateDevEndpointResponse where
diff --git a/gen/Network/AWS/Glue/CreateJob.hs b/gen/Network/AWS/Glue/CreateJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreateJob.hs
@@ -0,0 +1,226 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreateJob
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new job.
+--
+--
+module Network.AWS.Glue.CreateJob
+    (
+    -- * Creating a Request
+      createJob
+    , CreateJob
+    -- * Request Lenses
+    , cjConnections
+    , cjLogURI
+    , cjMaxRetries
+    , cjExecutionProperty
+    , cjAllocatedCapacity
+    , cjDefaultArguments
+    , cjDescription
+    , cjName
+    , cjRole
+    , cjCommand
+
+    -- * Destructuring the Response
+    , createJobResponse
+    , CreateJobResponse
+    -- * Response Lenses
+    , cjrsName
+    , cjrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createJob' smart constructor.
+data CreateJob = CreateJob'
+  { _cjConnections       :: !(Maybe ConnectionsList)
+  , _cjLogURI            :: !(Maybe Text)
+  , _cjMaxRetries        :: !(Maybe Int)
+  , _cjExecutionProperty :: !(Maybe ExecutionProperty)
+  , _cjAllocatedCapacity :: !(Maybe Int)
+  , _cjDefaultArguments  :: !(Maybe (Map Text Text))
+  , _cjDescription       :: !(Maybe Text)
+  , _cjName              :: !Text
+  , _cjRole              :: !Text
+  , _cjCommand           :: !JobCommand
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cjConnections' - The connections used for this job.
+--
+-- * 'cjLogURI' - This field is reserved for future use.
+--
+-- * 'cjMaxRetries' - The maximum number of times to retry this job if it fails.
+--
+-- * 'cjExecutionProperty' - An ExecutionProperty specifying the maximum number of concurrent runs allowed for this job.
+--
+-- * 'cjAllocatedCapacity' - The number of capacity units allocated to this job.
+--
+-- * 'cjDefaultArguments' - The default parameters for this job.
+--
+-- * 'cjDescription' - Description of the job.
+--
+-- * 'cjName' - The name you assign to this job.
+--
+-- * 'cjRole' - The role associated with this job.
+--
+-- * 'cjCommand' - The JobCommand that executes this job.
+createJob
+    :: Text -- ^ 'cjName'
+    -> Text -- ^ 'cjRole'
+    -> JobCommand -- ^ 'cjCommand'
+    -> CreateJob
+createJob pName_ pRole_ pCommand_ =
+  CreateJob'
+  { _cjConnections = Nothing
+  , _cjLogURI = Nothing
+  , _cjMaxRetries = Nothing
+  , _cjExecutionProperty = Nothing
+  , _cjAllocatedCapacity = Nothing
+  , _cjDefaultArguments = Nothing
+  , _cjDescription = Nothing
+  , _cjName = pName_
+  , _cjRole = pRole_
+  , _cjCommand = pCommand_
+  }
+
+
+-- | The connections used for this job.
+cjConnections :: Lens' CreateJob (Maybe ConnectionsList)
+cjConnections = lens _cjConnections (\ s a -> s{_cjConnections = a});
+
+-- | This field is reserved for future use.
+cjLogURI :: Lens' CreateJob (Maybe Text)
+cjLogURI = lens _cjLogURI (\ s a -> s{_cjLogURI = a});
+
+-- | The maximum number of times to retry this job if it fails.
+cjMaxRetries :: Lens' CreateJob (Maybe Int)
+cjMaxRetries = lens _cjMaxRetries (\ s a -> s{_cjMaxRetries = a});
+
+-- | An ExecutionProperty specifying the maximum number of concurrent runs allowed for this job.
+cjExecutionProperty :: Lens' CreateJob (Maybe ExecutionProperty)
+cjExecutionProperty = lens _cjExecutionProperty (\ s a -> s{_cjExecutionProperty = a});
+
+-- | The number of capacity units allocated to this job.
+cjAllocatedCapacity :: Lens' CreateJob (Maybe Int)
+cjAllocatedCapacity = lens _cjAllocatedCapacity (\ s a -> s{_cjAllocatedCapacity = a});
+
+-- | The default parameters for this job.
+cjDefaultArguments :: Lens' CreateJob (HashMap Text Text)
+cjDefaultArguments = lens _cjDefaultArguments (\ s a -> s{_cjDefaultArguments = a}) . _Default . _Map;
+
+-- | Description of the job.
+cjDescription :: Lens' CreateJob (Maybe Text)
+cjDescription = lens _cjDescription (\ s a -> s{_cjDescription = a});
+
+-- | The name you assign to this job.
+cjName :: Lens' CreateJob Text
+cjName = lens _cjName (\ s a -> s{_cjName = a});
+
+-- | The role associated with this job.
+cjRole :: Lens' CreateJob Text
+cjRole = lens _cjRole (\ s a -> s{_cjRole = a});
+
+-- | The JobCommand that executes this job.
+cjCommand :: Lens' CreateJob JobCommand
+cjCommand = lens _cjCommand (\ s a -> s{_cjCommand = a});
+
+instance AWSRequest CreateJob where
+        type Rs CreateJob = CreateJobResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateJobResponse' <$>
+                   (x .?> "Name") <*> (pure (fromEnum s)))
+
+instance Hashable CreateJob where
+
+instance NFData CreateJob where
+
+instance ToHeaders CreateJob where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreateJob" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateJob where
+        toJSON CreateJob'{..}
+          = object
+              (catMaybes
+                 [("Connections" .=) <$> _cjConnections,
+                  ("LogUri" .=) <$> _cjLogURI,
+                  ("MaxRetries" .=) <$> _cjMaxRetries,
+                  ("ExecutionProperty" .=) <$> _cjExecutionProperty,
+                  ("AllocatedCapacity" .=) <$> _cjAllocatedCapacity,
+                  ("DefaultArguments" .=) <$> _cjDefaultArguments,
+                  ("Description" .=) <$> _cjDescription,
+                  Just ("Name" .= _cjName), Just ("Role" .= _cjRole),
+                  Just ("Command" .= _cjCommand)])
+
+instance ToPath CreateJob where
+        toPath = const "/"
+
+instance ToQuery CreateJob where
+        toQuery = const mempty
+
+-- | /See:/ 'createJobResponse' smart constructor.
+data CreateJobResponse = CreateJobResponse'
+  { _cjrsName           :: !(Maybe Text)
+  , _cjrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateJobResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cjrsName' - The unique name of the new job that has been created.
+--
+-- * 'cjrsResponseStatus' - -- | The response status code.
+createJobResponse
+    :: Int -- ^ 'cjrsResponseStatus'
+    -> CreateJobResponse
+createJobResponse pResponseStatus_ =
+  CreateJobResponse'
+  {_cjrsName = Nothing, _cjrsResponseStatus = pResponseStatus_}
+
+
+-- | The unique name of the new job that has been created.
+cjrsName :: Lens' CreateJobResponse (Maybe Text)
+cjrsName = lens _cjrsName (\ s a -> s{_cjrsName = a});
+
+-- | -- | The response status code.
+cjrsResponseStatus :: Lens' CreateJobResponse Int
+cjrsResponseStatus = lens _cjrsResponseStatus (\ s a -> s{_cjrsResponseStatus = a});
+
+instance NFData CreateJobResponse where
diff --git a/gen/Network/AWS/Glue/CreatePartition.hs b/gen/Network/AWS/Glue/CreatePartition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreatePartition.hs
@@ -0,0 +1,157 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreatePartition
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new partition.
+--
+--
+module Network.AWS.Glue.CreatePartition
+    (
+    -- * Creating a Request
+      createPartition
+    , CreatePartition
+    -- * Request Lenses
+    , cpCatalogId
+    , cpDatabaseName
+    , cpTableName
+    , cpPartitionInput
+
+    -- * Destructuring the Response
+    , createPartitionResponse
+    , CreatePartitionResponse
+    -- * Response Lenses
+    , cprsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createPartition' smart constructor.
+data CreatePartition = CreatePartition'
+  { _cpCatalogId      :: !(Maybe Text)
+  , _cpDatabaseName   :: !Text
+  , _cpTableName      :: !Text
+  , _cpPartitionInput :: !PartitionInput
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreatePartition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpCatalogId' - The ID of the catalog in which the partion is to be created. Currently, this should be the AWS account ID.
+--
+-- * 'cpDatabaseName' - The name of the metadata database in which the partition is to be created.
+--
+-- * 'cpTableName' - The name of the metadata table in which the partition is to be created.
+--
+-- * 'cpPartitionInput' - A @PartitionInput@ structure defining the partition to be created.
+createPartition
+    :: Text -- ^ 'cpDatabaseName'
+    -> Text -- ^ 'cpTableName'
+    -> PartitionInput -- ^ 'cpPartitionInput'
+    -> CreatePartition
+createPartition pDatabaseName_ pTableName_ pPartitionInput_ =
+  CreatePartition'
+  { _cpCatalogId = Nothing
+  , _cpDatabaseName = pDatabaseName_
+  , _cpTableName = pTableName_
+  , _cpPartitionInput = pPartitionInput_
+  }
+
+
+-- | The ID of the catalog in which the partion is to be created. Currently, this should be the AWS account ID.
+cpCatalogId :: Lens' CreatePartition (Maybe Text)
+cpCatalogId = lens _cpCatalogId (\ s a -> s{_cpCatalogId = a});
+
+-- | The name of the metadata database in which the partition is to be created.
+cpDatabaseName :: Lens' CreatePartition Text
+cpDatabaseName = lens _cpDatabaseName (\ s a -> s{_cpDatabaseName = a});
+
+-- | The name of the metadata table in which the partition is to be created.
+cpTableName :: Lens' CreatePartition Text
+cpTableName = lens _cpTableName (\ s a -> s{_cpTableName = a});
+
+-- | A @PartitionInput@ structure defining the partition to be created.
+cpPartitionInput :: Lens' CreatePartition PartitionInput
+cpPartitionInput = lens _cpPartitionInput (\ s a -> s{_cpPartitionInput = a});
+
+instance AWSRequest CreatePartition where
+        type Rs CreatePartition = CreatePartitionResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreatePartitionResponse' <$> (pure (fromEnum s)))
+
+instance Hashable CreatePartition where
+
+instance NFData CreatePartition where
+
+instance ToHeaders CreatePartition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreatePartition" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreatePartition where
+        toJSON CreatePartition'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _cpCatalogId,
+                  Just ("DatabaseName" .= _cpDatabaseName),
+                  Just ("TableName" .= _cpTableName),
+                  Just ("PartitionInput" .= _cpPartitionInput)])
+
+instance ToPath CreatePartition where
+        toPath = const "/"
+
+instance ToQuery CreatePartition where
+        toQuery = const mempty
+
+-- | /See:/ 'createPartitionResponse' smart constructor.
+newtype CreatePartitionResponse = CreatePartitionResponse'
+  { _cprsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreatePartitionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cprsResponseStatus' - -- | The response status code.
+createPartitionResponse
+    :: Int -- ^ 'cprsResponseStatus'
+    -> CreatePartitionResponse
+createPartitionResponse pResponseStatus_ =
+  CreatePartitionResponse' {_cprsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+cprsResponseStatus :: Lens' CreatePartitionResponse Int
+cprsResponseStatus = lens _cprsResponseStatus (\ s a -> s{_cprsResponseStatus = a});
+
+instance NFData CreatePartitionResponse where
diff --git a/gen/Network/AWS/Glue/CreateScript.hs b/gen/Network/AWS/Glue/CreateScript.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreateScript.hs
@@ -0,0 +1,140 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreateScript
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Transforms a directed acyclic graph (DAG) into a Python script.
+--
+--
+module Network.AWS.Glue.CreateScript
+    (
+    -- * Creating a Request
+      createScript
+    , CreateScript
+    -- * Request Lenses
+    , csDagEdges
+    , csDagNodes
+
+    -- * Destructuring the Response
+    , createScriptResponse
+    , CreateScriptResponse
+    -- * Response Lenses
+    , csrsPythonScript
+    , csrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createScript' smart constructor.
+data CreateScript = CreateScript'
+  { _csDagEdges :: !(Maybe [CodeGenEdge])
+  , _csDagNodes :: !(Maybe [CodeGenNode])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateScript' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csDagEdges' - A list of the edges in the DAG.
+--
+-- * 'csDagNodes' - A list of the nodes in the DAG.
+createScript
+    :: CreateScript
+createScript = CreateScript' {_csDagEdges = Nothing, _csDagNodes = Nothing}
+
+
+-- | A list of the edges in the DAG.
+csDagEdges :: Lens' CreateScript [CodeGenEdge]
+csDagEdges = lens _csDagEdges (\ s a -> s{_csDagEdges = a}) . _Default . _Coerce;
+
+-- | A list of the nodes in the DAG.
+csDagNodes :: Lens' CreateScript [CodeGenNode]
+csDagNodes = lens _csDagNodes (\ s a -> s{_csDagNodes = a}) . _Default . _Coerce;
+
+instance AWSRequest CreateScript where
+        type Rs CreateScript = CreateScriptResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateScriptResponse' <$>
+                   (x .?> "PythonScript") <*> (pure (fromEnum s)))
+
+instance Hashable CreateScript where
+
+instance NFData CreateScript where
+
+instance ToHeaders CreateScript where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreateScript" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateScript where
+        toJSON CreateScript'{..}
+          = object
+              (catMaybes
+                 [("DagEdges" .=) <$> _csDagEdges,
+                  ("DagNodes" .=) <$> _csDagNodes])
+
+instance ToPath CreateScript where
+        toPath = const "/"
+
+instance ToQuery CreateScript where
+        toQuery = const mempty
+
+-- | /See:/ 'createScriptResponse' smart constructor.
+data CreateScriptResponse = CreateScriptResponse'
+  { _csrsPythonScript   :: !(Maybe Text)
+  , _csrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateScriptResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'csrsPythonScript' - The Python script generated from the DAG.
+--
+-- * 'csrsResponseStatus' - -- | The response status code.
+createScriptResponse
+    :: Int -- ^ 'csrsResponseStatus'
+    -> CreateScriptResponse
+createScriptResponse pResponseStatus_ =
+  CreateScriptResponse'
+  {_csrsPythonScript = Nothing, _csrsResponseStatus = pResponseStatus_}
+
+
+-- | The Python script generated from the DAG.
+csrsPythonScript :: Lens' CreateScriptResponse (Maybe Text)
+csrsPythonScript = lens _csrsPythonScript (\ s a -> s{_csrsPythonScript = a});
+
+-- | -- | The response status code.
+csrsResponseStatus :: Lens' CreateScriptResponse Int
+csrsResponseStatus = lens _csrsResponseStatus (\ s a -> s{_csrsResponseStatus = a});
+
+instance NFData CreateScriptResponse where
diff --git a/gen/Network/AWS/Glue/CreateTable.hs b/gen/Network/AWS/Glue/CreateTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreateTable.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreateTable
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new table definition in the Data Catalog.
+--
+--
+module Network.AWS.Glue.CreateTable
+    (
+    -- * Creating a Request
+      createTable
+    , CreateTable
+    -- * Request Lenses
+    , ctCatalogId
+    , ctDatabaseName
+    , ctTableInput
+
+    -- * Destructuring the Response
+    , createTableResponse
+    , CreateTableResponse
+    -- * Response Lenses
+    , cttrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createTable' smart constructor.
+data CreateTable = CreateTable'
+  { _ctCatalogId    :: !(Maybe Text)
+  , _ctDatabaseName :: !Text
+  , _ctTableInput   :: !TableInput
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateTable' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctCatalogId' - The ID of the Data Catalog in which to create the @Table@ . If none is supplied, the AWS account ID is used by default.
+--
+-- * 'ctDatabaseName' - The catalog database in which to create the new table.
+--
+-- * 'ctTableInput' - The @TableInput@ object that defines the metadata table to create in the catalog.
+createTable
+    :: Text -- ^ 'ctDatabaseName'
+    -> TableInput -- ^ 'ctTableInput'
+    -> CreateTable
+createTable pDatabaseName_ pTableInput_ =
+  CreateTable'
+  { _ctCatalogId = Nothing
+  , _ctDatabaseName = pDatabaseName_
+  , _ctTableInput = pTableInput_
+  }
+
+
+-- | The ID of the Data Catalog in which to create the @Table@ . If none is supplied, the AWS account ID is used by default.
+ctCatalogId :: Lens' CreateTable (Maybe Text)
+ctCatalogId = lens _ctCatalogId (\ s a -> s{_ctCatalogId = a});
+
+-- | The catalog database in which to create the new table.
+ctDatabaseName :: Lens' CreateTable Text
+ctDatabaseName = lens _ctDatabaseName (\ s a -> s{_ctDatabaseName = a});
+
+-- | The @TableInput@ object that defines the metadata table to create in the catalog.
+ctTableInput :: Lens' CreateTable TableInput
+ctTableInput = lens _ctTableInput (\ s a -> s{_ctTableInput = a});
+
+instance AWSRequest CreateTable where
+        type Rs CreateTable = CreateTableResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateTableResponse' <$> (pure (fromEnum s)))
+
+instance Hashable CreateTable where
+
+instance NFData CreateTable where
+
+instance ToHeaders CreateTable where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreateTable" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateTable where
+        toJSON CreateTable'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _ctCatalogId,
+                  Just ("DatabaseName" .= _ctDatabaseName),
+                  Just ("TableInput" .= _ctTableInput)])
+
+instance ToPath CreateTable where
+        toPath = const "/"
+
+instance ToQuery CreateTable where
+        toQuery = const mempty
+
+-- | /See:/ 'createTableResponse' smart constructor.
+newtype CreateTableResponse = CreateTableResponse'
+  { _cttrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateTableResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cttrsResponseStatus' - -- | The response status code.
+createTableResponse
+    :: Int -- ^ 'cttrsResponseStatus'
+    -> CreateTableResponse
+createTableResponse pResponseStatus_ =
+  CreateTableResponse' {_cttrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+cttrsResponseStatus :: Lens' CreateTableResponse Int
+cttrsResponseStatus = lens _cttrsResponseStatus (\ s a -> s{_cttrsResponseStatus = a});
+
+instance NFData CreateTableResponse where
diff --git a/gen/Network/AWS/Glue/CreateTrigger.hs b/gen/Network/AWS/Glue/CreateTrigger.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreateTrigger.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreateTrigger
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new trigger.
+--
+--
+module Network.AWS.Glue.CreateTrigger
+    (
+    -- * Creating a Request
+      createTrigger
+    , CreateTrigger
+    -- * Request Lenses
+    , ctSchedule
+    , ctPredicate
+    , ctDescription
+    , ctName
+    , ctType
+    , ctActions
+
+    -- * Destructuring the Response
+    , createTriggerResponse
+    , CreateTriggerResponse
+    -- * Response Lenses
+    , ctrsName
+    , ctrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createTrigger' smart constructor.
+data CreateTrigger = CreateTrigger'
+  { _ctSchedule    :: !(Maybe Text)
+  , _ctPredicate   :: !(Maybe Predicate)
+  , _ctDescription :: !(Maybe Text)
+  , _ctName        :: !Text
+  , _ctType        :: !TriggerType
+  , _ctActions     :: ![Action]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateTrigger' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctSchedule' - A @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+--
+-- * 'ctPredicate' - A predicate to specify when the new trigger should fire.
+--
+-- * 'ctDescription' - A description of the new trigger.
+--
+-- * 'ctName' - The name to assign to the new trigger.
+--
+-- * 'ctType' - The type of the new trigger.
+--
+-- * 'ctActions' - The actions initiated by this trigger when it fires.
+createTrigger
+    :: Text -- ^ 'ctName'
+    -> TriggerType -- ^ 'ctType'
+    -> CreateTrigger
+createTrigger pName_ pType_ =
+  CreateTrigger'
+  { _ctSchedule = Nothing
+  , _ctPredicate = Nothing
+  , _ctDescription = Nothing
+  , _ctName = pName_
+  , _ctType = pType_
+  , _ctActions = mempty
+  }
+
+
+-- | A @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+ctSchedule :: Lens' CreateTrigger (Maybe Text)
+ctSchedule = lens _ctSchedule (\ s a -> s{_ctSchedule = a});
+
+-- | A predicate to specify when the new trigger should fire.
+ctPredicate :: Lens' CreateTrigger (Maybe Predicate)
+ctPredicate = lens _ctPredicate (\ s a -> s{_ctPredicate = a});
+
+-- | A description of the new trigger.
+ctDescription :: Lens' CreateTrigger (Maybe Text)
+ctDescription = lens _ctDescription (\ s a -> s{_ctDescription = a});
+
+-- | The name to assign to the new trigger.
+ctName :: Lens' CreateTrigger Text
+ctName = lens _ctName (\ s a -> s{_ctName = a});
+
+-- | The type of the new trigger.
+ctType :: Lens' CreateTrigger TriggerType
+ctType = lens _ctType (\ s a -> s{_ctType = a});
+
+-- | The actions initiated by this trigger when it fires.
+ctActions :: Lens' CreateTrigger [Action]
+ctActions = lens _ctActions (\ s a -> s{_ctActions = a}) . _Coerce;
+
+instance AWSRequest CreateTrigger where
+        type Rs CreateTrigger = CreateTriggerResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateTriggerResponse' <$>
+                   (x .?> "Name") <*> (pure (fromEnum s)))
+
+instance Hashable CreateTrigger where
+
+instance NFData CreateTrigger where
+
+instance ToHeaders CreateTrigger where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreateTrigger" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateTrigger where
+        toJSON CreateTrigger'{..}
+          = object
+              (catMaybes
+                 [("Schedule" .=) <$> _ctSchedule,
+                  ("Predicate" .=) <$> _ctPredicate,
+                  ("Description" .=) <$> _ctDescription,
+                  Just ("Name" .= _ctName), Just ("Type" .= _ctType),
+                  Just ("Actions" .= _ctActions)])
+
+instance ToPath CreateTrigger where
+        toPath = const "/"
+
+instance ToQuery CreateTrigger where
+        toQuery = const mempty
+
+-- | /See:/ 'createTriggerResponse' smart constructor.
+data CreateTriggerResponse = CreateTriggerResponse'
+  { _ctrsName           :: !(Maybe Text)
+  , _ctrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateTriggerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctrsName' - The name assigned to the new trigger.
+--
+-- * 'ctrsResponseStatus' - -- | The response status code.
+createTriggerResponse
+    :: Int -- ^ 'ctrsResponseStatus'
+    -> CreateTriggerResponse
+createTriggerResponse pResponseStatus_ =
+  CreateTriggerResponse'
+  {_ctrsName = Nothing, _ctrsResponseStatus = pResponseStatus_}
+
+
+-- | The name assigned to the new trigger.
+ctrsName :: Lens' CreateTriggerResponse (Maybe Text)
+ctrsName = lens _ctrsName (\ s a -> s{_ctrsName = a});
+
+-- | -- | The response status code.
+ctrsResponseStatus :: Lens' CreateTriggerResponse Int
+ctrsResponseStatus = lens _ctrsResponseStatus (\ s a -> s{_ctrsResponseStatus = a});
+
+instance NFData CreateTriggerResponse where
diff --git a/gen/Network/AWS/Glue/CreateUserDefinedFunction.hs b/gen/Network/AWS/Glue/CreateUserDefinedFunction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/CreateUserDefinedFunction.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.CreateUserDefinedFunction
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new function definition in the Data Catalog.
+--
+--
+module Network.AWS.Glue.CreateUserDefinedFunction
+    (
+    -- * Creating a Request
+      createUserDefinedFunction
+    , CreateUserDefinedFunction
+    -- * Request Lenses
+    , cudfCatalogId
+    , cudfDatabaseName
+    , cudfFunctionInput
+
+    -- * Destructuring the Response
+    , createUserDefinedFunctionResponse
+    , CreateUserDefinedFunctionResponse
+    -- * Response Lenses
+    , cudfrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'createUserDefinedFunction' smart constructor.
+data CreateUserDefinedFunction = CreateUserDefinedFunction'
+  { _cudfCatalogId     :: !(Maybe Text)
+  , _cudfDatabaseName  :: !Text
+  , _cudfFunctionInput :: !UserDefinedFunctionInput
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateUserDefinedFunction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cudfCatalogId' - The ID of the Data Catalog in which to create the function. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'cudfDatabaseName' - The name of the catalog database in which to create the function.
+--
+-- * 'cudfFunctionInput' - A @FunctionInput@ object that defines the function to create in the Data Catalog.
+createUserDefinedFunction
+    :: Text -- ^ 'cudfDatabaseName'
+    -> UserDefinedFunctionInput -- ^ 'cudfFunctionInput'
+    -> CreateUserDefinedFunction
+createUserDefinedFunction pDatabaseName_ pFunctionInput_ =
+  CreateUserDefinedFunction'
+  { _cudfCatalogId = Nothing
+  , _cudfDatabaseName = pDatabaseName_
+  , _cudfFunctionInput = pFunctionInput_
+  }
+
+
+-- | The ID of the Data Catalog in which to create the function. If none is supplied, the AWS account ID is used by default.
+cudfCatalogId :: Lens' CreateUserDefinedFunction (Maybe Text)
+cudfCatalogId = lens _cudfCatalogId (\ s a -> s{_cudfCatalogId = a});
+
+-- | The name of the catalog database in which to create the function.
+cudfDatabaseName :: Lens' CreateUserDefinedFunction Text
+cudfDatabaseName = lens _cudfDatabaseName (\ s a -> s{_cudfDatabaseName = a});
+
+-- | A @FunctionInput@ object that defines the function to create in the Data Catalog.
+cudfFunctionInput :: Lens' CreateUserDefinedFunction UserDefinedFunctionInput
+cudfFunctionInput = lens _cudfFunctionInput (\ s a -> s{_cudfFunctionInput = a});
+
+instance AWSRequest CreateUserDefinedFunction where
+        type Rs CreateUserDefinedFunction =
+             CreateUserDefinedFunctionResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 CreateUserDefinedFunctionResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable CreateUserDefinedFunction where
+
+instance NFData CreateUserDefinedFunction where
+
+instance ToHeaders CreateUserDefinedFunction where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.CreateUserDefinedFunction" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateUserDefinedFunction where
+        toJSON CreateUserDefinedFunction'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _cudfCatalogId,
+                  Just ("DatabaseName" .= _cudfDatabaseName),
+                  Just ("FunctionInput" .= _cudfFunctionInput)])
+
+instance ToPath CreateUserDefinedFunction where
+        toPath = const "/"
+
+instance ToQuery CreateUserDefinedFunction where
+        toQuery = const mempty
+
+-- | /See:/ 'createUserDefinedFunctionResponse' smart constructor.
+newtype CreateUserDefinedFunctionResponse = CreateUserDefinedFunctionResponse'
+  { _cudfrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateUserDefinedFunctionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cudfrsResponseStatus' - -- | The response status code.
+createUserDefinedFunctionResponse
+    :: Int -- ^ 'cudfrsResponseStatus'
+    -> CreateUserDefinedFunctionResponse
+createUserDefinedFunctionResponse pResponseStatus_ =
+  CreateUserDefinedFunctionResponse' {_cudfrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+cudfrsResponseStatus :: Lens' CreateUserDefinedFunctionResponse Int
+cudfrsResponseStatus = lens _cudfrsResponseStatus (\ s a -> s{_cudfrsResponseStatus = a});
+
+instance NFData CreateUserDefinedFunctionResponse
+         where
diff --git a/gen/Network/AWS/Glue/DeleteClassifier.hs b/gen/Network/AWS/Glue/DeleteClassifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/DeleteClassifier.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.DeleteClassifier
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a @Classifier@ from the metadata store.
+--
+--
+module Network.AWS.Glue.DeleteClassifier
+    (
+    -- * Creating a Request
+      deleteClassifier
+    , DeleteClassifier
+    -- * Request Lenses
+    , delName
+
+    -- * Destructuring the Response
+    , deleteClassifierResponse
+    , DeleteClassifierResponse
+    -- * Response Lenses
+    , drsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteClassifier' smart constructor.
+newtype DeleteClassifier = DeleteClassifier'
+  { _delName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteClassifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'delName' - Name of the @Classifier@ to remove.
+deleteClassifier
+    :: Text -- ^ 'delName'
+    -> DeleteClassifier
+deleteClassifier pName_ = DeleteClassifier' {_delName = pName_}
+
+
+-- | Name of the @Classifier@ to remove.
+delName :: Lens' DeleteClassifier Text
+delName = lens _delName (\ s a -> s{_delName = a});
+
+instance AWSRequest DeleteClassifier where
+        type Rs DeleteClassifier = DeleteClassifierResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteClassifierResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteClassifier where
+
+instance NFData DeleteClassifier where
+
+instance ToHeaders DeleteClassifier where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.DeleteClassifier" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteClassifier where
+        toJSON DeleteClassifier'{..}
+          = object (catMaybes [Just ("Name" .= _delName)])
+
+instance ToPath DeleteClassifier where
+        toPath = const "/"
+
+instance ToQuery DeleteClassifier where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteClassifierResponse' smart constructor.
+newtype DeleteClassifierResponse = DeleteClassifierResponse'
+  { _drsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteClassifierResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'drsResponseStatus' - -- | The response status code.
+deleteClassifierResponse
+    :: Int -- ^ 'drsResponseStatus'
+    -> DeleteClassifierResponse
+deleteClassifierResponse pResponseStatus_ =
+  DeleteClassifierResponse' {_drsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+drsResponseStatus :: Lens' DeleteClassifierResponse Int
+drsResponseStatus = lens _drsResponseStatus (\ s a -> s{_drsResponseStatus = a});
+
+instance NFData DeleteClassifierResponse where
diff --git a/gen/Network/AWS/Glue/DeleteConnection.hs b/gen/Network/AWS/Glue/DeleteConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/DeleteConnection.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.DeleteConnection
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a connection from the Data Catalog.
+--
+--
+module Network.AWS.Glue.DeleteConnection
+    (
+    -- * Creating a Request
+      deleteConnection
+    , DeleteConnection
+    -- * Request Lenses
+    , dcCatalogId
+    , dcConnectionName
+
+    -- * Destructuring the Response
+    , deleteConnectionResponse
+    , DeleteConnectionResponse
+    -- * Response Lenses
+    , dcrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteConnection' smart constructor.
+data DeleteConnection = DeleteConnection'
+  { _dcCatalogId      :: !(Maybe Text)
+  , _dcConnectionName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteConnection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcCatalogId' - The ID of the Data Catalog in which the connection resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'dcConnectionName' - The name of the connection to delete.
+deleteConnection
+    :: Text -- ^ 'dcConnectionName'
+    -> DeleteConnection
+deleteConnection pConnectionName_ =
+  DeleteConnection'
+  {_dcCatalogId = Nothing, _dcConnectionName = pConnectionName_}
+
+
+-- | The ID of the Data Catalog in which the connection resides. If none is supplied, the AWS account ID is used by default.
+dcCatalogId :: Lens' DeleteConnection (Maybe Text)
+dcCatalogId = lens _dcCatalogId (\ s a -> s{_dcCatalogId = a});
+
+-- | The name of the connection to delete.
+dcConnectionName :: Lens' DeleteConnection Text
+dcConnectionName = lens _dcConnectionName (\ s a -> s{_dcConnectionName = a});
+
+instance AWSRequest DeleteConnection where
+        type Rs DeleteConnection = DeleteConnectionResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteConnectionResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteConnection where
+
+instance NFData DeleteConnection where
+
+instance ToHeaders DeleteConnection where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.DeleteConnection" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteConnection where
+        toJSON DeleteConnection'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _dcCatalogId,
+                  Just ("ConnectionName" .= _dcConnectionName)])
+
+instance ToPath DeleteConnection where
+        toPath = const "/"
+
+instance ToQuery DeleteConnection where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteConnectionResponse' smart constructor.
+newtype DeleteConnectionResponse = DeleteConnectionResponse'
+  { _dcrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteConnectionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcrsResponseStatus' - -- | The response status code.
+deleteConnectionResponse
+    :: Int -- ^ 'dcrsResponseStatus'
+    -> DeleteConnectionResponse
+deleteConnectionResponse pResponseStatus_ =
+  DeleteConnectionResponse' {_dcrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dcrsResponseStatus :: Lens' DeleteConnectionResponse Int
+dcrsResponseStatus = lens _dcrsResponseStatus (\ s a -> s{_dcrsResponseStatus = a});
+
+instance NFData DeleteConnectionResponse where
diff --git a/gen/Network/AWS/Glue/DeleteCrawler.hs b/gen/Network/AWS/Glue/DeleteCrawler.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/DeleteCrawler.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.DeleteCrawler
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a specified @Crawler@ from the metadata store, unless the @Crawler@ state is @RUNNING@ .
+--
+--
+module Network.AWS.Glue.DeleteCrawler
+    (
+    -- * Creating a Request
+      deleteCrawler
+    , DeleteCrawler
+    -- * Request Lenses
+    , dcName
+
+    -- * Destructuring the Response
+    , deleteCrawlerResponse
+    , DeleteCrawlerResponse
+    -- * Response Lenses
+    , dccrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteCrawler' smart constructor.
+newtype DeleteCrawler = DeleteCrawler'
+  { _dcName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteCrawler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dcName' - Name of the @Crawler@ to remove.
+deleteCrawler
+    :: Text -- ^ 'dcName'
+    -> DeleteCrawler
+deleteCrawler pName_ = DeleteCrawler' {_dcName = pName_}
+
+
+-- | Name of the @Crawler@ to remove.
+dcName :: Lens' DeleteCrawler Text
+dcName = lens _dcName (\ s a -> s{_dcName = a});
+
+instance AWSRequest DeleteCrawler where
+        type Rs DeleteCrawler = DeleteCrawlerResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteCrawlerResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteCrawler where
+
+instance NFData DeleteCrawler where
+
+instance ToHeaders DeleteCrawler where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.DeleteCrawler" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteCrawler where
+        toJSON DeleteCrawler'{..}
+          = object (catMaybes [Just ("Name" .= _dcName)])
+
+instance ToPath DeleteCrawler where
+        toPath = const "/"
+
+instance ToQuery DeleteCrawler where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteCrawlerResponse' smart constructor.
+newtype DeleteCrawlerResponse = DeleteCrawlerResponse'
+  { _dccrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteCrawlerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dccrsResponseStatus' - -- | The response status code.
+deleteCrawlerResponse
+    :: Int -- ^ 'dccrsResponseStatus'
+    -> DeleteCrawlerResponse
+deleteCrawlerResponse pResponseStatus_ =
+  DeleteCrawlerResponse' {_dccrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dccrsResponseStatus :: Lens' DeleteCrawlerResponse Int
+dccrsResponseStatus = lens _dccrsResponseStatus (\ s a -> s{_dccrsResponseStatus = a});
+
+instance NFData DeleteCrawlerResponse where
diff --git a/gen/Network/AWS/Glue/DeleteDatabase.hs b/gen/Network/AWS/Glue/DeleteDatabase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/DeleteDatabase.hs
@@ -0,0 +1,132 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.DeleteDatabase
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a specified Database from a Data Catalog.
+--
+--
+module Network.AWS.Glue.DeleteDatabase
+    (
+    -- * Creating a Request
+      deleteDatabase
+    , DeleteDatabase
+    -- * Request Lenses
+    , ddCatalogId
+    , ddName
+
+    -- * Destructuring the Response
+    , deleteDatabaseResponse
+    , DeleteDatabaseResponse
+    -- * Response Lenses
+    , ddrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteDatabase' smart constructor.
+data DeleteDatabase = DeleteDatabase'
+  { _ddCatalogId :: !(Maybe Text)
+  , _ddName      :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteDatabase' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddCatalogId' - The ID of the Data Catalog in which the database resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'ddName' - The name of the Database to delete.
+deleteDatabase
+    :: Text -- ^ 'ddName'
+    -> DeleteDatabase
+deleteDatabase pName_ =
+  DeleteDatabase' {_ddCatalogId = Nothing, _ddName = pName_}
+
+
+-- | The ID of the Data Catalog in which the database resides. If none is supplied, the AWS account ID is used by default.
+ddCatalogId :: Lens' DeleteDatabase (Maybe Text)
+ddCatalogId = lens _ddCatalogId (\ s a -> s{_ddCatalogId = a});
+
+-- | The name of the Database to delete.
+ddName :: Lens' DeleteDatabase Text
+ddName = lens _ddName (\ s a -> s{_ddName = a});
+
+instance AWSRequest DeleteDatabase where
+        type Rs DeleteDatabase = DeleteDatabaseResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteDatabaseResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteDatabase where
+
+instance NFData DeleteDatabase where
+
+instance ToHeaders DeleteDatabase where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.DeleteDatabase" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteDatabase where
+        toJSON DeleteDatabase'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _ddCatalogId,
+                  Just ("Name" .= _ddName)])
+
+instance ToPath DeleteDatabase where
+        toPath = const "/"
+
+instance ToQuery DeleteDatabase where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteDatabaseResponse' smart constructor.
+newtype DeleteDatabaseResponse = DeleteDatabaseResponse'
+  { _ddrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteDatabaseResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddrsResponseStatus' - -- | The response status code.
+deleteDatabaseResponse
+    :: Int -- ^ 'ddrsResponseStatus'
+    -> DeleteDatabaseResponse
+deleteDatabaseResponse pResponseStatus_ =
+  DeleteDatabaseResponse' {_ddrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+ddrsResponseStatus :: Lens' DeleteDatabaseResponse Int
+ddrsResponseStatus = lens _ddrsResponseStatus (\ s a -> s{_ddrsResponseStatus = a});
+
+instance NFData DeleteDatabaseResponse where
diff --git a/gen/Network/AWS/Glue/DeleteDevEndpoint.hs b/gen/Network/AWS/Glue/DeleteDevEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/DeleteDevEndpoint.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.DeleteDevEndpoint
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a specified DevEndpoint.
+--
+--
+module Network.AWS.Glue.DeleteDevEndpoint
+    (
+    -- * Creating a Request
+      deleteDevEndpoint
+    , DeleteDevEndpoint
+    -- * Request Lenses
+    , ddeEndpointName
+
+    -- * Destructuring the Response
+    , deleteDevEndpointResponse
+    , DeleteDevEndpointResponse
+    -- * Response Lenses
+    , ddersResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteDevEndpoint' smart constructor.
+newtype DeleteDevEndpoint = DeleteDevEndpoint'
+  { _ddeEndpointName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteDevEndpoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddeEndpointName' - The name of the DevEndpoint.
+deleteDevEndpoint
+    :: Text -- ^ 'ddeEndpointName'
+    -> DeleteDevEndpoint
+deleteDevEndpoint pEndpointName_ =
+  DeleteDevEndpoint' {_ddeEndpointName = pEndpointName_}
+
+
+-- | The name of the DevEndpoint.
+ddeEndpointName :: Lens' DeleteDevEndpoint Text
+ddeEndpointName = lens _ddeEndpointName (\ s a -> s{_ddeEndpointName = a});
+
+instance AWSRequest DeleteDevEndpoint where
+        type Rs DeleteDevEndpoint = DeleteDevEndpointResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteDevEndpointResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteDevEndpoint where
+
+instance NFData DeleteDevEndpoint where
+
+instance ToHeaders DeleteDevEndpoint where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.DeleteDevEndpoint" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteDevEndpoint where
+        toJSON DeleteDevEndpoint'{..}
+          = object
+              (catMaybes
+                 [Just ("EndpointName" .= _ddeEndpointName)])
+
+instance ToPath DeleteDevEndpoint where
+        toPath = const "/"
+
+instance ToQuery DeleteDevEndpoint where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteDevEndpointResponse' smart constructor.
+newtype DeleteDevEndpointResponse = DeleteDevEndpointResponse'
+  { _ddersResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteDevEndpointResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ddersResponseStatus' - -- | The response status code.
+deleteDevEndpointResponse
+    :: Int -- ^ 'ddersResponseStatus'
+    -> DeleteDevEndpointResponse
+deleteDevEndpointResponse pResponseStatus_ =
+  DeleteDevEndpointResponse' {_ddersResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+ddersResponseStatus :: Lens' DeleteDevEndpointResponse Int
+ddersResponseStatus = lens _ddersResponseStatus (\ s a -> s{_ddersResponseStatus = a});
+
+instance NFData DeleteDevEndpointResponse where
diff --git a/gen/Network/AWS/Glue/DeleteJob.hs b/gen/Network/AWS/Glue/DeleteJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/DeleteJob.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.DeleteJob
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a specified job.
+--
+--
+module Network.AWS.Glue.DeleteJob
+    (
+    -- * Creating a Request
+      deleteJob
+    , DeleteJob
+    -- * Request Lenses
+    , djJobName
+
+    -- * Destructuring the Response
+    , deleteJobResponse
+    , DeleteJobResponse
+    -- * Response Lenses
+    , djrsJobName
+    , djrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteJob' smart constructor.
+newtype DeleteJob = DeleteJob'
+  { _djJobName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'djJobName' - The name of the job to delete.
+deleteJob
+    :: Text -- ^ 'djJobName'
+    -> DeleteJob
+deleteJob pJobName_ = DeleteJob' {_djJobName = pJobName_}
+
+
+-- | The name of the job to delete.
+djJobName :: Lens' DeleteJob Text
+djJobName = lens _djJobName (\ s a -> s{_djJobName = a});
+
+instance AWSRequest DeleteJob where
+        type Rs DeleteJob = DeleteJobResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DeleteJobResponse' <$>
+                   (x .?> "JobName") <*> (pure (fromEnum s)))
+
+instance Hashable DeleteJob where
+
+instance NFData DeleteJob where
+
+instance ToHeaders DeleteJob where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.DeleteJob" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteJob where
+        toJSON DeleteJob'{..}
+          = object (catMaybes [Just ("JobName" .= _djJobName)])
+
+instance ToPath DeleteJob where
+        toPath = const "/"
+
+instance ToQuery DeleteJob where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteJobResponse' smart constructor.
+data DeleteJobResponse = DeleteJobResponse'
+  { _djrsJobName        :: !(Maybe Text)
+  , _djrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteJobResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'djrsJobName' - The name of the job that was deleted.
+--
+-- * 'djrsResponseStatus' - -- | The response status code.
+deleteJobResponse
+    :: Int -- ^ 'djrsResponseStatus'
+    -> DeleteJobResponse
+deleteJobResponse pResponseStatus_ =
+  DeleteJobResponse'
+  {_djrsJobName = Nothing, _djrsResponseStatus = pResponseStatus_}
+
+
+-- | The name of the job that was deleted.
+djrsJobName :: Lens' DeleteJobResponse (Maybe Text)
+djrsJobName = lens _djrsJobName (\ s a -> s{_djrsJobName = a});
+
+-- | -- | The response status code.
+djrsResponseStatus :: Lens' DeleteJobResponse Int
+djrsResponseStatus = lens _djrsResponseStatus (\ s a -> s{_djrsResponseStatus = a});
+
+instance NFData DeleteJobResponse where
diff --git a/gen/Network/AWS/Glue/DeletePartition.hs b/gen/Network/AWS/Glue/DeletePartition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/DeletePartition.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.DeletePartition
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a specified partition.
+--
+--
+module Network.AWS.Glue.DeletePartition
+    (
+    -- * Creating a Request
+      deletePartition
+    , DeletePartition
+    -- * Request Lenses
+    , dpCatalogId
+    , dpDatabaseName
+    , dpTableName
+    , dpPartitionValues
+
+    -- * Destructuring the Response
+    , deletePartitionResponse
+    , DeletePartitionResponse
+    -- * Response Lenses
+    , dprsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deletePartition' smart constructor.
+data DeletePartition = DeletePartition'
+  { _dpCatalogId       :: !(Maybe Text)
+  , _dpDatabaseName    :: !Text
+  , _dpTableName       :: !Text
+  , _dpPartitionValues :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeletePartition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dpCatalogId' - The ID of the Data Catalog where the partition to be deleted resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'dpDatabaseName' - The name of the catalog database in which the table in question resides.
+--
+-- * 'dpTableName' - The name of the table where the partition to be deleted is located.
+--
+-- * 'dpPartitionValues' - The values that define the partition.
+deletePartition
+    :: Text -- ^ 'dpDatabaseName'
+    -> Text -- ^ 'dpTableName'
+    -> DeletePartition
+deletePartition pDatabaseName_ pTableName_ =
+  DeletePartition'
+  { _dpCatalogId = Nothing
+  , _dpDatabaseName = pDatabaseName_
+  , _dpTableName = pTableName_
+  , _dpPartitionValues = mempty
+  }
+
+
+-- | The ID of the Data Catalog where the partition to be deleted resides. If none is supplied, the AWS account ID is used by default.
+dpCatalogId :: Lens' DeletePartition (Maybe Text)
+dpCatalogId = lens _dpCatalogId (\ s a -> s{_dpCatalogId = a});
+
+-- | The name of the catalog database in which the table in question resides.
+dpDatabaseName :: Lens' DeletePartition Text
+dpDatabaseName = lens _dpDatabaseName (\ s a -> s{_dpDatabaseName = a});
+
+-- | The name of the table where the partition to be deleted is located.
+dpTableName :: Lens' DeletePartition Text
+dpTableName = lens _dpTableName (\ s a -> s{_dpTableName = a});
+
+-- | The values that define the partition.
+dpPartitionValues :: Lens' DeletePartition [Text]
+dpPartitionValues = lens _dpPartitionValues (\ s a -> s{_dpPartitionValues = a}) . _Coerce;
+
+instance AWSRequest DeletePartition where
+        type Rs DeletePartition = DeletePartitionResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeletePartitionResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeletePartition where
+
+instance NFData DeletePartition where
+
+instance ToHeaders DeletePartition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.DeletePartition" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeletePartition where
+        toJSON DeletePartition'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _dpCatalogId,
+                  Just ("DatabaseName" .= _dpDatabaseName),
+                  Just ("TableName" .= _dpTableName),
+                  Just ("PartitionValues" .= _dpPartitionValues)])
+
+instance ToPath DeletePartition where
+        toPath = const "/"
+
+instance ToQuery DeletePartition where
+        toQuery = const mempty
+
+-- | /See:/ 'deletePartitionResponse' smart constructor.
+newtype DeletePartitionResponse = DeletePartitionResponse'
+  { _dprsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeletePartitionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dprsResponseStatus' - -- | The response status code.
+deletePartitionResponse
+    :: Int -- ^ 'dprsResponseStatus'
+    -> DeletePartitionResponse
+deletePartitionResponse pResponseStatus_ =
+  DeletePartitionResponse' {_dprsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dprsResponseStatus :: Lens' DeletePartitionResponse Int
+dprsResponseStatus = lens _dprsResponseStatus (\ s a -> s{_dprsResponseStatus = a});
+
+instance NFData DeletePartitionResponse where
diff --git a/gen/Network/AWS/Glue/DeleteTable.hs b/gen/Network/AWS/Glue/DeleteTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/DeleteTable.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.DeleteTable
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Removes a table definition from the Data Catalog.
+--
+--
+module Network.AWS.Glue.DeleteTable
+    (
+    -- * Creating a Request
+      deleteTable
+    , DeleteTable
+    -- * Request Lenses
+    , dtCatalogId
+    , dtDatabaseName
+    , dtName
+
+    -- * Destructuring the Response
+    , deleteTableResponse
+    , DeleteTableResponse
+    -- * Response Lenses
+    , dtrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteTable' smart constructor.
+data DeleteTable = DeleteTable'
+  { _dtCatalogId    :: !(Maybe Text)
+  , _dtDatabaseName :: !Text
+  , _dtName         :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteTable' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtCatalogId' - The ID of the Data Catalog where the table resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'dtDatabaseName' - The name of the catalog database in which the table resides.
+--
+-- * 'dtName' - The name of the table to be deleted.
+deleteTable
+    :: Text -- ^ 'dtDatabaseName'
+    -> Text -- ^ 'dtName'
+    -> DeleteTable
+deleteTable pDatabaseName_ pName_ =
+  DeleteTable'
+  {_dtCatalogId = Nothing, _dtDatabaseName = pDatabaseName_, _dtName = pName_}
+
+
+-- | The ID of the Data Catalog where the table resides. If none is supplied, the AWS account ID is used by default.
+dtCatalogId :: Lens' DeleteTable (Maybe Text)
+dtCatalogId = lens _dtCatalogId (\ s a -> s{_dtCatalogId = a});
+
+-- | The name of the catalog database in which the table resides.
+dtDatabaseName :: Lens' DeleteTable Text
+dtDatabaseName = lens _dtDatabaseName (\ s a -> s{_dtDatabaseName = a});
+
+-- | The name of the table to be deleted.
+dtName :: Lens' DeleteTable Text
+dtName = lens _dtName (\ s a -> s{_dtName = a});
+
+instance AWSRequest DeleteTable where
+        type Rs DeleteTable = DeleteTableResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteTableResponse' <$> (pure (fromEnum s)))
+
+instance Hashable DeleteTable where
+
+instance NFData DeleteTable where
+
+instance ToHeaders DeleteTable where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.DeleteTable" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteTable where
+        toJSON DeleteTable'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _dtCatalogId,
+                  Just ("DatabaseName" .= _dtDatabaseName),
+                  Just ("Name" .= _dtName)])
+
+instance ToPath DeleteTable where
+        toPath = const "/"
+
+instance ToQuery DeleteTable where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteTableResponse' smart constructor.
+newtype DeleteTableResponse = DeleteTableResponse'
+  { _dtrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteTableResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dtrsResponseStatus' - -- | The response status code.
+deleteTableResponse
+    :: Int -- ^ 'dtrsResponseStatus'
+    -> DeleteTableResponse
+deleteTableResponse pResponseStatus_ =
+  DeleteTableResponse' {_dtrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dtrsResponseStatus :: Lens' DeleteTableResponse Int
+dtrsResponseStatus = lens _dtrsResponseStatus (\ s a -> s{_dtrsResponseStatus = a});
+
+instance NFData DeleteTableResponse where
diff --git a/gen/Network/AWS/Glue/DeleteTrigger.hs b/gen/Network/AWS/Glue/DeleteTrigger.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/DeleteTrigger.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.DeleteTrigger
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a specified trigger.
+--
+--
+module Network.AWS.Glue.DeleteTrigger
+    (
+    -- * Creating a Request
+      deleteTrigger
+    , DeleteTrigger
+    -- * Request Lenses
+    , dttName
+
+    -- * Destructuring the Response
+    , deleteTriggerResponse
+    , DeleteTriggerResponse
+    -- * Response Lenses
+    , delrsName
+    , delrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteTrigger' smart constructor.
+newtype DeleteTrigger = DeleteTrigger'
+  { _dttName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteTrigger' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dttName' - The name of the trigger to delete.
+deleteTrigger
+    :: Text -- ^ 'dttName'
+    -> DeleteTrigger
+deleteTrigger pName_ = DeleteTrigger' {_dttName = pName_}
+
+
+-- | The name of the trigger to delete.
+dttName :: Lens' DeleteTrigger Text
+dttName = lens _dttName (\ s a -> s{_dttName = a});
+
+instance AWSRequest DeleteTrigger where
+        type Rs DeleteTrigger = DeleteTriggerResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DeleteTriggerResponse' <$>
+                   (x .?> "Name") <*> (pure (fromEnum s)))
+
+instance Hashable DeleteTrigger where
+
+instance NFData DeleteTrigger where
+
+instance ToHeaders DeleteTrigger where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.DeleteTrigger" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteTrigger where
+        toJSON DeleteTrigger'{..}
+          = object (catMaybes [Just ("Name" .= _dttName)])
+
+instance ToPath DeleteTrigger where
+        toPath = const "/"
+
+instance ToQuery DeleteTrigger where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteTriggerResponse' smart constructor.
+data DeleteTriggerResponse = DeleteTriggerResponse'
+  { _delrsName           :: !(Maybe Text)
+  , _delrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteTriggerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'delrsName' - The name of the trigger that was deleted.
+--
+-- * 'delrsResponseStatus' - -- | The response status code.
+deleteTriggerResponse
+    :: Int -- ^ 'delrsResponseStatus'
+    -> DeleteTriggerResponse
+deleteTriggerResponse pResponseStatus_ =
+  DeleteTriggerResponse'
+  {_delrsName = Nothing, _delrsResponseStatus = pResponseStatus_}
+
+
+-- | The name of the trigger that was deleted.
+delrsName :: Lens' DeleteTriggerResponse (Maybe Text)
+delrsName = lens _delrsName (\ s a -> s{_delrsName = a});
+
+-- | -- | The response status code.
+delrsResponseStatus :: Lens' DeleteTriggerResponse Int
+delrsResponseStatus = lens _delrsResponseStatus (\ s a -> s{_delrsResponseStatus = a});
+
+instance NFData DeleteTriggerResponse where
diff --git a/gen/Network/AWS/Glue/DeleteUserDefinedFunction.hs b/gen/Network/AWS/Glue/DeleteUserDefinedFunction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/DeleteUserDefinedFunction.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.DeleteUserDefinedFunction
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an existing function definition from the Data Catalog.
+--
+--
+module Network.AWS.Glue.DeleteUserDefinedFunction
+    (
+    -- * Creating a Request
+      deleteUserDefinedFunction
+    , DeleteUserDefinedFunction
+    -- * Request Lenses
+    , dudfCatalogId
+    , dudfDatabaseName
+    , dudfFunctionName
+
+    -- * Destructuring the Response
+    , deleteUserDefinedFunctionResponse
+    , DeleteUserDefinedFunctionResponse
+    -- * Response Lenses
+    , dudfrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'deleteUserDefinedFunction' smart constructor.
+data DeleteUserDefinedFunction = DeleteUserDefinedFunction'
+  { _dudfCatalogId    :: !(Maybe Text)
+  , _dudfDatabaseName :: !Text
+  , _dudfFunctionName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteUserDefinedFunction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dudfCatalogId' - The ID of the Data Catalog where the function to be deleted is located. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'dudfDatabaseName' - The name of the catalog database where the function is located.
+--
+-- * 'dudfFunctionName' - The name of the function definition to be deleted.
+deleteUserDefinedFunction
+    :: Text -- ^ 'dudfDatabaseName'
+    -> Text -- ^ 'dudfFunctionName'
+    -> DeleteUserDefinedFunction
+deleteUserDefinedFunction pDatabaseName_ pFunctionName_ =
+  DeleteUserDefinedFunction'
+  { _dudfCatalogId = Nothing
+  , _dudfDatabaseName = pDatabaseName_
+  , _dudfFunctionName = pFunctionName_
+  }
+
+
+-- | The ID of the Data Catalog where the function to be deleted is located. If none is supplied, the AWS account ID is used by default.
+dudfCatalogId :: Lens' DeleteUserDefinedFunction (Maybe Text)
+dudfCatalogId = lens _dudfCatalogId (\ s a -> s{_dudfCatalogId = a});
+
+-- | The name of the catalog database where the function is located.
+dudfDatabaseName :: Lens' DeleteUserDefinedFunction Text
+dudfDatabaseName = lens _dudfDatabaseName (\ s a -> s{_dudfDatabaseName = a});
+
+-- | The name of the function definition to be deleted.
+dudfFunctionName :: Lens' DeleteUserDefinedFunction Text
+dudfFunctionName = lens _dudfFunctionName (\ s a -> s{_dudfFunctionName = a});
+
+instance AWSRequest DeleteUserDefinedFunction where
+        type Rs DeleteUserDefinedFunction =
+             DeleteUserDefinedFunctionResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 DeleteUserDefinedFunctionResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable DeleteUserDefinedFunction where
+
+instance NFData DeleteUserDefinedFunction where
+
+instance ToHeaders DeleteUserDefinedFunction where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.DeleteUserDefinedFunction" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteUserDefinedFunction where
+        toJSON DeleteUserDefinedFunction'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _dudfCatalogId,
+                  Just ("DatabaseName" .= _dudfDatabaseName),
+                  Just ("FunctionName" .= _dudfFunctionName)])
+
+instance ToPath DeleteUserDefinedFunction where
+        toPath = const "/"
+
+instance ToQuery DeleteUserDefinedFunction where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteUserDefinedFunctionResponse' smart constructor.
+newtype DeleteUserDefinedFunctionResponse = DeleteUserDefinedFunctionResponse'
+  { _dudfrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DeleteUserDefinedFunctionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dudfrsResponseStatus' - -- | The response status code.
+deleteUserDefinedFunctionResponse
+    :: Int -- ^ 'dudfrsResponseStatus'
+    -> DeleteUserDefinedFunctionResponse
+deleteUserDefinedFunctionResponse pResponseStatus_ =
+  DeleteUserDefinedFunctionResponse' {_dudfrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+dudfrsResponseStatus :: Lens' DeleteUserDefinedFunctionResponse Int
+dudfrsResponseStatus = lens _dudfrsResponseStatus (\ s a -> s{_dudfrsResponseStatus = a});
+
+instance NFData DeleteUserDefinedFunctionResponse
+         where
diff --git a/gen/Network/AWS/Glue/GetCatalogImportStatus.hs b/gen/Network/AWS/Glue/GetCatalogImportStatus.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetCatalogImportStatus.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetCatalogImportStatus
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the status of a migration operation.
+--
+--
+module Network.AWS.Glue.GetCatalogImportStatus
+    (
+    -- * Creating a Request
+      getCatalogImportStatus
+    , GetCatalogImportStatus
+    -- * Request Lenses
+    , gcisCatalogId
+
+    -- * Destructuring the Response
+    , getCatalogImportStatusResponse
+    , GetCatalogImportStatusResponse
+    -- * Response Lenses
+    , gcisrsImportStatus
+    , gcisrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getCatalogImportStatus' smart constructor.
+newtype GetCatalogImportStatus = GetCatalogImportStatus'
+  { _gcisCatalogId :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetCatalogImportStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcisCatalogId' - The ID of the catalog to migrate. Currently, this should be the AWS account ID.
+getCatalogImportStatus
+    :: GetCatalogImportStatus
+getCatalogImportStatus = GetCatalogImportStatus' {_gcisCatalogId = Nothing}
+
+
+-- | The ID of the catalog to migrate. Currently, this should be the AWS account ID.
+gcisCatalogId :: Lens' GetCatalogImportStatus (Maybe Text)
+gcisCatalogId = lens _gcisCatalogId (\ s a -> s{_gcisCatalogId = a});
+
+instance AWSRequest GetCatalogImportStatus where
+        type Rs GetCatalogImportStatus =
+             GetCatalogImportStatusResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetCatalogImportStatusResponse' <$>
+                   (x .?> "ImportStatus") <*> (pure (fromEnum s)))
+
+instance Hashable GetCatalogImportStatus where
+
+instance NFData GetCatalogImportStatus where
+
+instance ToHeaders GetCatalogImportStatus where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetCatalogImportStatus" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetCatalogImportStatus where
+        toJSON GetCatalogImportStatus'{..}
+          = object
+              (catMaybes [("CatalogId" .=) <$> _gcisCatalogId])
+
+instance ToPath GetCatalogImportStatus where
+        toPath = const "/"
+
+instance ToQuery GetCatalogImportStatus where
+        toQuery = const mempty
+
+-- | /See:/ 'getCatalogImportStatusResponse' smart constructor.
+data GetCatalogImportStatusResponse = GetCatalogImportStatusResponse'
+  { _gcisrsImportStatus   :: !(Maybe CatalogImportStatus)
+  , _gcisrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetCatalogImportStatusResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcisrsImportStatus' - The status of the specified catalog migration.
+--
+-- * 'gcisrsResponseStatus' - -- | The response status code.
+getCatalogImportStatusResponse
+    :: Int -- ^ 'gcisrsResponseStatus'
+    -> GetCatalogImportStatusResponse
+getCatalogImportStatusResponse pResponseStatus_ =
+  GetCatalogImportStatusResponse'
+  {_gcisrsImportStatus = Nothing, _gcisrsResponseStatus = pResponseStatus_}
+
+
+-- | The status of the specified catalog migration.
+gcisrsImportStatus :: Lens' GetCatalogImportStatusResponse (Maybe CatalogImportStatus)
+gcisrsImportStatus = lens _gcisrsImportStatus (\ s a -> s{_gcisrsImportStatus = a});
+
+-- | -- | The response status code.
+gcisrsResponseStatus :: Lens' GetCatalogImportStatusResponse Int
+gcisrsResponseStatus = lens _gcisrsResponseStatus (\ s a -> s{_gcisrsResponseStatus = a});
+
+instance NFData GetCatalogImportStatusResponse where
diff --git a/gen/Network/AWS/Glue/GetClassifier.hs b/gen/Network/AWS/Glue/GetClassifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetClassifier.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetClassifier
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieve a @Classifier@ by name.
+--
+--
+module Network.AWS.Glue.GetClassifier
+    (
+    -- * Creating a Request
+      getClassifier
+    , GetClassifier
+    -- * Request Lenses
+    , getName
+
+    -- * Destructuring the Response
+    , getClassifierResponse
+    , GetClassifierResponse
+    -- * Response Lenses
+    , gcrsClassifier
+    , gcrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getClassifier' smart constructor.
+newtype GetClassifier = GetClassifier'
+  { _getName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetClassifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'getName' - Name of the @Classifier@ to retrieve.
+getClassifier
+    :: Text -- ^ 'getName'
+    -> GetClassifier
+getClassifier pName_ = GetClassifier' {_getName = pName_}
+
+
+-- | Name of the @Classifier@ to retrieve.
+getName :: Lens' GetClassifier Text
+getName = lens _getName (\ s a -> s{_getName = a});
+
+instance AWSRequest GetClassifier where
+        type Rs GetClassifier = GetClassifierResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetClassifierResponse' <$>
+                   (x .?> "Classifier") <*> (pure (fromEnum s)))
+
+instance Hashable GetClassifier where
+
+instance NFData GetClassifier where
+
+instance ToHeaders GetClassifier where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetClassifier" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetClassifier where
+        toJSON GetClassifier'{..}
+          = object (catMaybes [Just ("Name" .= _getName)])
+
+instance ToPath GetClassifier where
+        toPath = const "/"
+
+instance ToQuery GetClassifier where
+        toQuery = const mempty
+
+-- | /See:/ 'getClassifierResponse' smart constructor.
+data GetClassifierResponse = GetClassifierResponse'
+  { _gcrsClassifier     :: !(Maybe Classifier)
+  , _gcrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetClassifierResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcrsClassifier' - The requested @Classifier@ .
+--
+-- * 'gcrsResponseStatus' - -- | The response status code.
+getClassifierResponse
+    :: Int -- ^ 'gcrsResponseStatus'
+    -> GetClassifierResponse
+getClassifierResponse pResponseStatus_ =
+  GetClassifierResponse'
+  {_gcrsClassifier = Nothing, _gcrsResponseStatus = pResponseStatus_}
+
+
+-- | The requested @Classifier@ .
+gcrsClassifier :: Lens' GetClassifierResponse (Maybe Classifier)
+gcrsClassifier = lens _gcrsClassifier (\ s a -> s{_gcrsClassifier = a});
+
+-- | -- | The response status code.
+gcrsResponseStatus :: Lens' GetClassifierResponse Int
+gcrsResponseStatus = lens _gcrsResponseStatus (\ s a -> s{_gcrsResponseStatus = a});
+
+instance NFData GetClassifierResponse where
diff --git a/gen/Network/AWS/Glue/GetClassifiers.hs b/gen/Network/AWS/Glue/GetClassifiers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetClassifiers.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetClassifiers
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Lists all Classifier objects in the metadata store.
+--
+--
+module Network.AWS.Glue.GetClassifiers
+    (
+    -- * Creating a Request
+      getClassifiers
+    , GetClassifiers
+    -- * Request Lenses
+    , gcNextToken
+    , gcMaxResults
+
+    -- * Destructuring the Response
+    , getClassifiersResponse
+    , GetClassifiersResponse
+    -- * Response Lenses
+    , gcsrsNextToken
+    , gcsrsClassifiers
+    , gcsrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getClassifiers' smart constructor.
+data GetClassifiers = GetClassifiers'
+  { _gcNextToken  :: !(Maybe Text)
+  , _gcMaxResults :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetClassifiers' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcNextToken' - An optional continuation token.
+--
+-- * 'gcMaxResults' - Size of the list to return (optional).
+getClassifiers
+    :: GetClassifiers
+getClassifiers =
+  GetClassifiers' {_gcNextToken = Nothing, _gcMaxResults = Nothing}
+
+
+-- | An optional continuation token.
+gcNextToken :: Lens' GetClassifiers (Maybe Text)
+gcNextToken = lens _gcNextToken (\ s a -> s{_gcNextToken = a});
+
+-- | Size of the list to return (optional).
+gcMaxResults :: Lens' GetClassifiers (Maybe Natural)
+gcMaxResults = lens _gcMaxResults (\ s a -> s{_gcMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetClassifiers where
+        type Rs GetClassifiers = GetClassifiersResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetClassifiersResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "Classifiers" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetClassifiers where
+
+instance NFData GetClassifiers where
+
+instance ToHeaders GetClassifiers where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetClassifiers" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetClassifiers where
+        toJSON GetClassifiers'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _gcNextToken,
+                  ("MaxResults" .=) <$> _gcMaxResults])
+
+instance ToPath GetClassifiers where
+        toPath = const "/"
+
+instance ToQuery GetClassifiers where
+        toQuery = const mempty
+
+-- | /See:/ 'getClassifiersResponse' smart constructor.
+data GetClassifiersResponse = GetClassifiersResponse'
+  { _gcsrsNextToken      :: !(Maybe Text)
+  , _gcsrsClassifiers    :: !(Maybe [Classifier])
+  , _gcsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetClassifiersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcsrsNextToken' - A continuation token.
+--
+-- * 'gcsrsClassifiers' - The requested list of @Classifier@ objects.
+--
+-- * 'gcsrsResponseStatus' - -- | The response status code.
+getClassifiersResponse
+    :: Int -- ^ 'gcsrsResponseStatus'
+    -> GetClassifiersResponse
+getClassifiersResponse pResponseStatus_ =
+  GetClassifiersResponse'
+  { _gcsrsNextToken = Nothing
+  , _gcsrsClassifiers = Nothing
+  , _gcsrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A continuation token.
+gcsrsNextToken :: Lens' GetClassifiersResponse (Maybe Text)
+gcsrsNextToken = lens _gcsrsNextToken (\ s a -> s{_gcsrsNextToken = a});
+
+-- | The requested list of @Classifier@ objects.
+gcsrsClassifiers :: Lens' GetClassifiersResponse [Classifier]
+gcsrsClassifiers = lens _gcsrsClassifiers (\ s a -> s{_gcsrsClassifiers = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gcsrsResponseStatus :: Lens' GetClassifiersResponse Int
+gcsrsResponseStatus = lens _gcsrsResponseStatus (\ s a -> s{_gcsrsResponseStatus = a});
+
+instance NFData GetClassifiersResponse where
diff --git a/gen/Network/AWS/Glue/GetConnection.hs b/gen/Network/AWS/Glue/GetConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetConnection.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetConnection
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a connection definition from the Data Catalog.
+--
+--
+module Network.AWS.Glue.GetConnection
+    (
+    -- * Creating a Request
+      getConnection
+    , GetConnection
+    -- * Request Lenses
+    , gCatalogId
+    , gName
+
+    -- * Destructuring the Response
+    , getConnectionResponse
+    , GetConnectionResponse
+    -- * Response Lenses
+    , getrsConnection
+    , getrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getConnection' smart constructor.
+data GetConnection = GetConnection'
+  { _gCatalogId :: !(Maybe Text)
+  , _gName      :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetConnection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gCatalogId' - The ID of the Data Catalog in which the connection resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'gName' - The name of the connection definition to retrieve.
+getConnection
+    :: Text -- ^ 'gName'
+    -> GetConnection
+getConnection pName_ = GetConnection' {_gCatalogId = Nothing, _gName = pName_}
+
+
+-- | The ID of the Data Catalog in which the connection resides. If none is supplied, the AWS account ID is used by default.
+gCatalogId :: Lens' GetConnection (Maybe Text)
+gCatalogId = lens _gCatalogId (\ s a -> s{_gCatalogId = a});
+
+-- | The name of the connection definition to retrieve.
+gName :: Lens' GetConnection Text
+gName = lens _gName (\ s a -> s{_gName = a});
+
+instance AWSRequest GetConnection where
+        type Rs GetConnection = GetConnectionResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetConnectionResponse' <$>
+                   (x .?> "Connection") <*> (pure (fromEnum s)))
+
+instance Hashable GetConnection where
+
+instance NFData GetConnection where
+
+instance ToHeaders GetConnection where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetConnection" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetConnection where
+        toJSON GetConnection'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _gCatalogId,
+                  Just ("Name" .= _gName)])
+
+instance ToPath GetConnection where
+        toPath = const "/"
+
+instance ToQuery GetConnection where
+        toQuery = const mempty
+
+-- | /See:/ 'getConnectionResponse' smart constructor.
+data GetConnectionResponse = GetConnectionResponse'
+  { _getrsConnection     :: !(Maybe Connection)
+  , _getrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetConnectionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'getrsConnection' - The requested connection definition.
+--
+-- * 'getrsResponseStatus' - -- | The response status code.
+getConnectionResponse
+    :: Int -- ^ 'getrsResponseStatus'
+    -> GetConnectionResponse
+getConnectionResponse pResponseStatus_ =
+  GetConnectionResponse'
+  {_getrsConnection = Nothing, _getrsResponseStatus = pResponseStatus_}
+
+
+-- | The requested connection definition.
+getrsConnection :: Lens' GetConnectionResponse (Maybe Connection)
+getrsConnection = lens _getrsConnection (\ s a -> s{_getrsConnection = a});
+
+-- | -- | The response status code.
+getrsResponseStatus :: Lens' GetConnectionResponse Int
+getrsResponseStatus = lens _getrsResponseStatus (\ s a -> s{_getrsResponseStatus = a});
+
+instance NFData GetConnectionResponse where
diff --git a/gen/Network/AWS/Glue/GetConnections.hs b/gen/Network/AWS/Glue/GetConnections.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetConnections.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetConnections
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of connection definitions from the Data Catalog.
+--
+--
+module Network.AWS.Glue.GetConnections
+    (
+    -- * Creating a Request
+      getConnections
+    , GetConnections
+    -- * Request Lenses
+    , gcsCatalogId
+    , gcsNextToken
+    , gcsFilter
+    , gcsMaxResults
+
+    -- * Destructuring the Response
+    , getConnectionsResponse
+    , GetConnectionsResponse
+    -- * Response Lenses
+    , gccrsNextToken
+    , gccrsConnectionList
+    , gccrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getConnections' smart constructor.
+data GetConnections = GetConnections'
+  { _gcsCatalogId  :: !(Maybe Text)
+  , _gcsNextToken  :: !(Maybe Text)
+  , _gcsFilter     :: !(Maybe GetConnectionsFilter)
+  , _gcsMaxResults :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetConnections' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcsCatalogId' - The ID of the Data Catalog in which the connections reside. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'gcsNextToken' - A continuation token, if this is a continuation call.
+--
+-- * 'gcsFilter' - A filter that controls which connections will be returned.
+--
+-- * 'gcsMaxResults' - The maximum number of connections to return in one response.
+getConnections
+    :: GetConnections
+getConnections =
+  GetConnections'
+  { _gcsCatalogId = Nothing
+  , _gcsNextToken = Nothing
+  , _gcsFilter = Nothing
+  , _gcsMaxResults = Nothing
+  }
+
+
+-- | The ID of the Data Catalog in which the connections reside. If none is supplied, the AWS account ID is used by default.
+gcsCatalogId :: Lens' GetConnections (Maybe Text)
+gcsCatalogId = lens _gcsCatalogId (\ s a -> s{_gcsCatalogId = a});
+
+-- | A continuation token, if this is a continuation call.
+gcsNextToken :: Lens' GetConnections (Maybe Text)
+gcsNextToken = lens _gcsNextToken (\ s a -> s{_gcsNextToken = a});
+
+-- | A filter that controls which connections will be returned.
+gcsFilter :: Lens' GetConnections (Maybe GetConnectionsFilter)
+gcsFilter = lens _gcsFilter (\ s a -> s{_gcsFilter = a});
+
+-- | The maximum number of connections to return in one response.
+gcsMaxResults :: Lens' GetConnections (Maybe Natural)
+gcsMaxResults = lens _gcsMaxResults (\ s a -> s{_gcsMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetConnections where
+        type Rs GetConnections = GetConnectionsResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetConnectionsResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "ConnectionList" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetConnections where
+
+instance NFData GetConnections where
+
+instance ToHeaders GetConnections where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetConnections" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetConnections where
+        toJSON GetConnections'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _gcsCatalogId,
+                  ("NextToken" .=) <$> _gcsNextToken,
+                  ("Filter" .=) <$> _gcsFilter,
+                  ("MaxResults" .=) <$> _gcsMaxResults])
+
+instance ToPath GetConnections where
+        toPath = const "/"
+
+instance ToQuery GetConnections where
+        toQuery = const mempty
+
+-- | /See:/ 'getConnectionsResponse' smart constructor.
+data GetConnectionsResponse = GetConnectionsResponse'
+  { _gccrsNextToken      :: !(Maybe Text)
+  , _gccrsConnectionList :: !(Maybe [Connection])
+  , _gccrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetConnectionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gccrsNextToken' - A continuation token, if the list of connections returned does not include the last of the filtered connections.
+--
+-- * 'gccrsConnectionList' - A list of requested connection definitions.
+--
+-- * 'gccrsResponseStatus' - -- | The response status code.
+getConnectionsResponse
+    :: Int -- ^ 'gccrsResponseStatus'
+    -> GetConnectionsResponse
+getConnectionsResponse pResponseStatus_ =
+  GetConnectionsResponse'
+  { _gccrsNextToken = Nothing
+  , _gccrsConnectionList = Nothing
+  , _gccrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A continuation token, if the list of connections returned does not include the last of the filtered connections.
+gccrsNextToken :: Lens' GetConnectionsResponse (Maybe Text)
+gccrsNextToken = lens _gccrsNextToken (\ s a -> s{_gccrsNextToken = a});
+
+-- | A list of requested connection definitions.
+gccrsConnectionList :: Lens' GetConnectionsResponse [Connection]
+gccrsConnectionList = lens _gccrsConnectionList (\ s a -> s{_gccrsConnectionList = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gccrsResponseStatus :: Lens' GetConnectionsResponse Int
+gccrsResponseStatus = lens _gccrsResponseStatus (\ s a -> s{_gccrsResponseStatus = a});
+
+instance NFData GetConnectionsResponse where
diff --git a/gen/Network/AWS/Glue/GetCrawler.hs b/gen/Network/AWS/Glue/GetCrawler.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetCrawler.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetCrawler
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves metadata for a specified @Crawler@ .
+--
+--
+module Network.AWS.Glue.GetCrawler
+    (
+    -- * Creating a Request
+      getCrawler
+    , GetCrawler
+    -- * Request Lenses
+    , gccName
+
+    -- * Destructuring the Response
+    , getCrawlerResponse
+    , GetCrawlerResponse
+    -- * Response Lenses
+    , getersCrawler
+    , getersResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getCrawler' smart constructor.
+newtype GetCrawler = GetCrawler'
+  { _gccName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetCrawler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gccName' - Name of the @Crawler@ to retrieve metadata for.
+getCrawler
+    :: Text -- ^ 'gccName'
+    -> GetCrawler
+getCrawler pName_ = GetCrawler' {_gccName = pName_}
+
+
+-- | Name of the @Crawler@ to retrieve metadata for.
+gccName :: Lens' GetCrawler Text
+gccName = lens _gccName (\ s a -> s{_gccName = a});
+
+instance AWSRequest GetCrawler where
+        type Rs GetCrawler = GetCrawlerResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetCrawlerResponse' <$>
+                   (x .?> "Crawler") <*> (pure (fromEnum s)))
+
+instance Hashable GetCrawler where
+
+instance NFData GetCrawler where
+
+instance ToHeaders GetCrawler where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetCrawler" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetCrawler where
+        toJSON GetCrawler'{..}
+          = object (catMaybes [Just ("Name" .= _gccName)])
+
+instance ToPath GetCrawler where
+        toPath = const "/"
+
+instance ToQuery GetCrawler where
+        toQuery = const mempty
+
+-- | /See:/ 'getCrawlerResponse' smart constructor.
+data GetCrawlerResponse = GetCrawlerResponse'
+  { _getersCrawler        :: !(Maybe Crawler)
+  , _getersResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetCrawlerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'getersCrawler' - The metadata for the specified @Crawler@ .
+--
+-- * 'getersResponseStatus' - -- | The response status code.
+getCrawlerResponse
+    :: Int -- ^ 'getersResponseStatus'
+    -> GetCrawlerResponse
+getCrawlerResponse pResponseStatus_ =
+  GetCrawlerResponse'
+  {_getersCrawler = Nothing, _getersResponseStatus = pResponseStatus_}
+
+
+-- | The metadata for the specified @Crawler@ .
+getersCrawler :: Lens' GetCrawlerResponse (Maybe Crawler)
+getersCrawler = lens _getersCrawler (\ s a -> s{_getersCrawler = a});
+
+-- | -- | The response status code.
+getersResponseStatus :: Lens' GetCrawlerResponse Int
+getersResponseStatus = lens _getersResponseStatus (\ s a -> s{_getersResponseStatus = a});
+
+instance NFData GetCrawlerResponse where
diff --git a/gen/Network/AWS/Glue/GetCrawlerMetrics.hs b/gen/Network/AWS/Glue/GetCrawlerMetrics.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetCrawlerMetrics.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetCrawlerMetrics
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves metrics about specified crawlers.
+--
+--
+module Network.AWS.Glue.GetCrawlerMetrics
+    (
+    -- * Creating a Request
+      getCrawlerMetrics
+    , GetCrawlerMetrics
+    -- * Request Lenses
+    , gcmNextToken
+    , gcmMaxResults
+    , gcmCrawlerNameList
+
+    -- * Destructuring the Response
+    , getCrawlerMetricsResponse
+    , GetCrawlerMetricsResponse
+    -- * Response Lenses
+    , gcmrsCrawlerMetricsList
+    , gcmrsNextToken
+    , gcmrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getCrawlerMetrics' smart constructor.
+data GetCrawlerMetrics = GetCrawlerMetrics'
+  { _gcmNextToken       :: !(Maybe Text)
+  , _gcmMaxResults      :: !(Maybe Nat)
+  , _gcmCrawlerNameList :: !(Maybe [Text])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetCrawlerMetrics' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcmNextToken' - A continuation token, if this is a continuation call.
+--
+-- * 'gcmMaxResults' - The maximum size of a list to return.
+--
+-- * 'gcmCrawlerNameList' - A list of the names of crawlers about which to retrieve metrics.
+getCrawlerMetrics
+    :: GetCrawlerMetrics
+getCrawlerMetrics =
+  GetCrawlerMetrics'
+  { _gcmNextToken = Nothing
+  , _gcmMaxResults = Nothing
+  , _gcmCrawlerNameList = Nothing
+  }
+
+
+-- | A continuation token, if this is a continuation call.
+gcmNextToken :: Lens' GetCrawlerMetrics (Maybe Text)
+gcmNextToken = lens _gcmNextToken (\ s a -> s{_gcmNextToken = a});
+
+-- | The maximum size of a list to return.
+gcmMaxResults :: Lens' GetCrawlerMetrics (Maybe Natural)
+gcmMaxResults = lens _gcmMaxResults (\ s a -> s{_gcmMaxResults = a}) . mapping _Nat;
+
+-- | A list of the names of crawlers about which to retrieve metrics.
+gcmCrawlerNameList :: Lens' GetCrawlerMetrics [Text]
+gcmCrawlerNameList = lens _gcmCrawlerNameList (\ s a -> s{_gcmCrawlerNameList = a}) . _Default . _Coerce;
+
+instance AWSRequest GetCrawlerMetrics where
+        type Rs GetCrawlerMetrics = GetCrawlerMetricsResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetCrawlerMetricsResponse' <$>
+                   (x .?> "CrawlerMetricsList" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetCrawlerMetrics where
+
+instance NFData GetCrawlerMetrics where
+
+instance ToHeaders GetCrawlerMetrics where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetCrawlerMetrics" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetCrawlerMetrics where
+        toJSON GetCrawlerMetrics'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _gcmNextToken,
+                  ("MaxResults" .=) <$> _gcmMaxResults,
+                  ("CrawlerNameList" .=) <$> _gcmCrawlerNameList])
+
+instance ToPath GetCrawlerMetrics where
+        toPath = const "/"
+
+instance ToQuery GetCrawlerMetrics where
+        toQuery = const mempty
+
+-- | /See:/ 'getCrawlerMetricsResponse' smart constructor.
+data GetCrawlerMetricsResponse = GetCrawlerMetricsResponse'
+  { _gcmrsCrawlerMetricsList :: !(Maybe [CrawlerMetrics])
+  , _gcmrsNextToken          :: !(Maybe Text)
+  , _gcmrsResponseStatus     :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetCrawlerMetricsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcmrsCrawlerMetricsList' - A list of metrics for the specified crawler.
+--
+-- * 'gcmrsNextToken' - A continuation token, if the returned list does not contain the last metric available.
+--
+-- * 'gcmrsResponseStatus' - -- | The response status code.
+getCrawlerMetricsResponse
+    :: Int -- ^ 'gcmrsResponseStatus'
+    -> GetCrawlerMetricsResponse
+getCrawlerMetricsResponse pResponseStatus_ =
+  GetCrawlerMetricsResponse'
+  { _gcmrsCrawlerMetricsList = Nothing
+  , _gcmrsNextToken = Nothing
+  , _gcmrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A list of metrics for the specified crawler.
+gcmrsCrawlerMetricsList :: Lens' GetCrawlerMetricsResponse [CrawlerMetrics]
+gcmrsCrawlerMetricsList = lens _gcmrsCrawlerMetricsList (\ s a -> s{_gcmrsCrawlerMetricsList = a}) . _Default . _Coerce;
+
+-- | A continuation token, if the returned list does not contain the last metric available.
+gcmrsNextToken :: Lens' GetCrawlerMetricsResponse (Maybe Text)
+gcmrsNextToken = lens _gcmrsNextToken (\ s a -> s{_gcmrsNextToken = a});
+
+-- | -- | The response status code.
+gcmrsResponseStatus :: Lens' GetCrawlerMetricsResponse Int
+gcmrsResponseStatus = lens _gcmrsResponseStatus (\ s a -> s{_gcmrsResponseStatus = a});
+
+instance NFData GetCrawlerMetricsResponse where
diff --git a/gen/Network/AWS/Glue/GetCrawlers.hs b/gen/Network/AWS/Glue/GetCrawlers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetCrawlers.hs
@@ -0,0 +1,152 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetCrawlers
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves metadata for all @Crawlers@ defined in the customer account.
+--
+--
+module Network.AWS.Glue.GetCrawlers
+    (
+    -- * Creating a Request
+      getCrawlers
+    , GetCrawlers
+    -- * Request Lenses
+    , gNextToken
+    , gMaxResults
+
+    -- * Destructuring the Response
+    , getCrawlersResponse
+    , GetCrawlersResponse
+    -- * Response Lenses
+    , grsNextToken
+    , grsCrawlers
+    , grsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getCrawlers' smart constructor.
+data GetCrawlers = GetCrawlers'
+  { _gNextToken  :: !(Maybe Text)
+  , _gMaxResults :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetCrawlers' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gNextToken' - A continuation token, if this is a continuation request.
+--
+-- * 'gMaxResults' - The number of Crawlers to return on each call.
+getCrawlers
+    :: GetCrawlers
+getCrawlers = GetCrawlers' {_gNextToken = Nothing, _gMaxResults = Nothing}
+
+
+-- | A continuation token, if this is a continuation request.
+gNextToken :: Lens' GetCrawlers (Maybe Text)
+gNextToken = lens _gNextToken (\ s a -> s{_gNextToken = a});
+
+-- | The number of Crawlers to return on each call.
+gMaxResults :: Lens' GetCrawlers (Maybe Natural)
+gMaxResults = lens _gMaxResults (\ s a -> s{_gMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetCrawlers where
+        type Rs GetCrawlers = GetCrawlersResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetCrawlersResponse' <$>
+                   (x .?> "NextToken") <*> (x .?> "Crawlers" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetCrawlers where
+
+instance NFData GetCrawlers where
+
+instance ToHeaders GetCrawlers where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetCrawlers" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetCrawlers where
+        toJSON GetCrawlers'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _gNextToken,
+                  ("MaxResults" .=) <$> _gMaxResults])
+
+instance ToPath GetCrawlers where
+        toPath = const "/"
+
+instance ToQuery GetCrawlers where
+        toQuery = const mempty
+
+-- | /See:/ 'getCrawlersResponse' smart constructor.
+data GetCrawlersResponse = GetCrawlersResponse'
+  { _grsNextToken      :: !(Maybe Text)
+  , _grsCrawlers       :: !(Maybe [Crawler])
+  , _grsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetCrawlersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'grsNextToken' - A continuation token, if the returned list has not reached the end of those defined in this customer account.
+--
+-- * 'grsCrawlers' - A list of @Crawler@ metadata.
+--
+-- * 'grsResponseStatus' - -- | The response status code.
+getCrawlersResponse
+    :: Int -- ^ 'grsResponseStatus'
+    -> GetCrawlersResponse
+getCrawlersResponse pResponseStatus_ =
+  GetCrawlersResponse'
+  { _grsNextToken = Nothing
+  , _grsCrawlers = Nothing
+  , _grsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A continuation token, if the returned list has not reached the end of those defined in this customer account.
+grsNextToken :: Lens' GetCrawlersResponse (Maybe Text)
+grsNextToken = lens _grsNextToken (\ s a -> s{_grsNextToken = a});
+
+-- | A list of @Crawler@ metadata.
+grsCrawlers :: Lens' GetCrawlersResponse [Crawler]
+grsCrawlers = lens _grsCrawlers (\ s a -> s{_grsCrawlers = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+grsResponseStatus :: Lens' GetCrawlersResponse Int
+grsResponseStatus = lens _grsResponseStatus (\ s a -> s{_grsResponseStatus = a});
+
+instance NFData GetCrawlersResponse where
diff --git a/gen/Network/AWS/Glue/GetDatabase.hs b/gen/Network/AWS/Glue/GetDatabase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetDatabase.hs
@@ -0,0 +1,141 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetDatabase
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the definition of a specified database.
+--
+--
+module Network.AWS.Glue.GetDatabase
+    (
+    -- * Creating a Request
+      getDatabase
+    , GetDatabase
+    -- * Request Lenses
+    , gddCatalogId
+    , gddName
+
+    -- * Destructuring the Response
+    , getDatabaseResponse
+    , GetDatabaseResponse
+    -- * Response Lenses
+    , gdrsDatabase
+    , gdrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getDatabase' smart constructor.
+data GetDatabase = GetDatabase'
+  { _gddCatalogId :: !(Maybe Text)
+  , _gddName      :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDatabase' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gddCatalogId' - The ID of the Data Catalog in which the database resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'gddName' - The name of the database to retrieve.
+getDatabase
+    :: Text -- ^ 'gddName'
+    -> GetDatabase
+getDatabase pName_ = GetDatabase' {_gddCatalogId = Nothing, _gddName = pName_}
+
+
+-- | The ID of the Data Catalog in which the database resides. If none is supplied, the AWS account ID is used by default.
+gddCatalogId :: Lens' GetDatabase (Maybe Text)
+gddCatalogId = lens _gddCatalogId (\ s a -> s{_gddCatalogId = a});
+
+-- | The name of the database to retrieve.
+gddName :: Lens' GetDatabase Text
+gddName = lens _gddName (\ s a -> s{_gddName = a});
+
+instance AWSRequest GetDatabase where
+        type Rs GetDatabase = GetDatabaseResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDatabaseResponse' <$>
+                   (x .?> "Database") <*> (pure (fromEnum s)))
+
+instance Hashable GetDatabase where
+
+instance NFData GetDatabase where
+
+instance ToHeaders GetDatabase where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetDatabase" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetDatabase where
+        toJSON GetDatabase'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _gddCatalogId,
+                  Just ("Name" .= _gddName)])
+
+instance ToPath GetDatabase where
+        toPath = const "/"
+
+instance ToQuery GetDatabase where
+        toQuery = const mempty
+
+-- | /See:/ 'getDatabaseResponse' smart constructor.
+data GetDatabaseResponse = GetDatabaseResponse'
+  { _gdrsDatabase       :: !(Maybe Database)
+  , _gdrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDatabaseResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdrsDatabase' - The definition of the specified database in the catalog.
+--
+-- * 'gdrsResponseStatus' - -- | The response status code.
+getDatabaseResponse
+    :: Int -- ^ 'gdrsResponseStatus'
+    -> GetDatabaseResponse
+getDatabaseResponse pResponseStatus_ =
+  GetDatabaseResponse'
+  {_gdrsDatabase = Nothing, _gdrsResponseStatus = pResponseStatus_}
+
+
+-- | The definition of the specified database in the catalog.
+gdrsDatabase :: Lens' GetDatabaseResponse (Maybe Database)
+gdrsDatabase = lens _gdrsDatabase (\ s a -> s{_gdrsDatabase = a});
+
+-- | -- | The response status code.
+gdrsResponseStatus :: Lens' GetDatabaseResponse Int
+gdrsResponseStatus = lens _gdrsResponseStatus (\ s a -> s{_gdrsResponseStatus = a});
+
+instance NFData GetDatabaseResponse where
diff --git a/gen/Network/AWS/Glue/GetDatabases.hs b/gen/Network/AWS/Glue/GetDatabases.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetDatabases.hs
@@ -0,0 +1,163 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetDatabases
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves all Databases defined in a given Data Catalog.
+--
+--
+module Network.AWS.Glue.GetDatabases
+    (
+    -- * Creating a Request
+      getDatabases
+    , GetDatabases
+    -- * Request Lenses
+    , gdCatalogId
+    , gdNextToken
+    , gdMaxResults
+
+    -- * Destructuring the Response
+    , getDatabasesResponse
+    , GetDatabasesResponse
+    -- * Response Lenses
+    , gdsrsNextToken
+    , gdsrsResponseStatus
+    , gdsrsDatabaseList
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getDatabases' smart constructor.
+data GetDatabases = GetDatabases'
+  { _gdCatalogId  :: !(Maybe Text)
+  , _gdNextToken  :: !(Maybe Text)
+  , _gdMaxResults :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDatabases' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdCatalogId' - The ID of the Data Catalog from which to retrieve @Databases@ . If none is supplied, the AWS account ID is used by default.
+--
+-- * 'gdNextToken' - A continuation token, if this is a continuation call.
+--
+-- * 'gdMaxResults' - The maximum number of databases to return in one response.
+getDatabases
+    :: GetDatabases
+getDatabases =
+  GetDatabases'
+  {_gdCatalogId = Nothing, _gdNextToken = Nothing, _gdMaxResults = Nothing}
+
+
+-- | The ID of the Data Catalog from which to retrieve @Databases@ . If none is supplied, the AWS account ID is used by default.
+gdCatalogId :: Lens' GetDatabases (Maybe Text)
+gdCatalogId = lens _gdCatalogId (\ s a -> s{_gdCatalogId = a});
+
+-- | A continuation token, if this is a continuation call.
+gdNextToken :: Lens' GetDatabases (Maybe Text)
+gdNextToken = lens _gdNextToken (\ s a -> s{_gdNextToken = a});
+
+-- | The maximum number of databases to return in one response.
+gdMaxResults :: Lens' GetDatabases (Maybe Natural)
+gdMaxResults = lens _gdMaxResults (\ s a -> s{_gdMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetDatabases where
+        type Rs GetDatabases = GetDatabasesResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDatabasesResponse' <$>
+                   (x .?> "NextToken") <*> (pure (fromEnum s)) <*>
+                     (x .?> "DatabaseList" .!@ mempty))
+
+instance Hashable GetDatabases where
+
+instance NFData GetDatabases where
+
+instance ToHeaders GetDatabases where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetDatabases" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetDatabases where
+        toJSON GetDatabases'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _gdCatalogId,
+                  ("NextToken" .=) <$> _gdNextToken,
+                  ("MaxResults" .=) <$> _gdMaxResults])
+
+instance ToPath GetDatabases where
+        toPath = const "/"
+
+instance ToQuery GetDatabases where
+        toQuery = const mempty
+
+-- | /See:/ 'getDatabasesResponse' smart constructor.
+data GetDatabasesResponse = GetDatabasesResponse'
+  { _gdsrsNextToken      :: !(Maybe Text)
+  , _gdsrsResponseStatus :: !Int
+  , _gdsrsDatabaseList   :: ![Database]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDatabasesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdsrsNextToken' - A continuation token for paginating the returned list of tokens, returned if the current segment of the list is not the last.
+--
+-- * 'gdsrsResponseStatus' - -- | The response status code.
+--
+-- * 'gdsrsDatabaseList' - A list of @Database@ objects from the specified catalog.
+getDatabasesResponse
+    :: Int -- ^ 'gdsrsResponseStatus'
+    -> GetDatabasesResponse
+getDatabasesResponse pResponseStatus_ =
+  GetDatabasesResponse'
+  { _gdsrsNextToken = Nothing
+  , _gdsrsResponseStatus = pResponseStatus_
+  , _gdsrsDatabaseList = mempty
+  }
+
+
+-- | A continuation token for paginating the returned list of tokens, returned if the current segment of the list is not the last.
+gdsrsNextToken :: Lens' GetDatabasesResponse (Maybe Text)
+gdsrsNextToken = lens _gdsrsNextToken (\ s a -> s{_gdsrsNextToken = a});
+
+-- | -- | The response status code.
+gdsrsResponseStatus :: Lens' GetDatabasesResponse Int
+gdsrsResponseStatus = lens _gdsrsResponseStatus (\ s a -> s{_gdsrsResponseStatus = a});
+
+-- | A list of @Database@ objects from the specified catalog.
+gdsrsDatabaseList :: Lens' GetDatabasesResponse [Database]
+gdsrsDatabaseList = lens _gdsrsDatabaseList (\ s a -> s{_gdsrsDatabaseList = a}) . _Coerce;
+
+instance NFData GetDatabasesResponse where
diff --git a/gen/Network/AWS/Glue/GetDataflowGraph.hs b/gen/Network/AWS/Glue/GetDataflowGraph.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetDataflowGraph.hs
@@ -0,0 +1,144 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetDataflowGraph
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Transforms a Python script into a directed acyclic graph (DAG).
+--
+--
+module Network.AWS.Glue.GetDataflowGraph
+    (
+    -- * Creating a Request
+      getDataflowGraph
+    , GetDataflowGraph
+    -- * Request Lenses
+    , gdgPythonScript
+
+    -- * Destructuring the Response
+    , getDataflowGraphResponse
+    , GetDataflowGraphResponse
+    -- * Response Lenses
+    , gdgrsDagEdges
+    , gdgrsDagNodes
+    , gdgrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getDataflowGraph' smart constructor.
+newtype GetDataflowGraph = GetDataflowGraph'
+  { _gdgPythonScript :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDataflowGraph' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgPythonScript' - The Python script to transform.
+getDataflowGraph
+    :: GetDataflowGraph
+getDataflowGraph = GetDataflowGraph' {_gdgPythonScript = Nothing}
+
+
+-- | The Python script to transform.
+gdgPythonScript :: Lens' GetDataflowGraph (Maybe Text)
+gdgPythonScript = lens _gdgPythonScript (\ s a -> s{_gdgPythonScript = a});
+
+instance AWSRequest GetDataflowGraph where
+        type Rs GetDataflowGraph = GetDataflowGraphResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDataflowGraphResponse' <$>
+                   (x .?> "DagEdges" .!@ mempty) <*>
+                     (x .?> "DagNodes" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetDataflowGraph where
+
+instance NFData GetDataflowGraph where
+
+instance ToHeaders GetDataflowGraph where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetDataflowGraph" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetDataflowGraph where
+        toJSON GetDataflowGraph'{..}
+          = object
+              (catMaybes
+                 [("PythonScript" .=) <$> _gdgPythonScript])
+
+instance ToPath GetDataflowGraph where
+        toPath = const "/"
+
+instance ToQuery GetDataflowGraph where
+        toQuery = const mempty
+
+-- | /See:/ 'getDataflowGraphResponse' smart constructor.
+data GetDataflowGraphResponse = GetDataflowGraphResponse'
+  { _gdgrsDagEdges       :: !(Maybe [CodeGenEdge])
+  , _gdgrsDagNodes       :: !(Maybe [CodeGenNode])
+  , _gdgrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDataflowGraphResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdgrsDagEdges' - A list of the edges in the resulting DAG.
+--
+-- * 'gdgrsDagNodes' - A list of the nodes in the resulting DAG.
+--
+-- * 'gdgrsResponseStatus' - -- | The response status code.
+getDataflowGraphResponse
+    :: Int -- ^ 'gdgrsResponseStatus'
+    -> GetDataflowGraphResponse
+getDataflowGraphResponse pResponseStatus_ =
+  GetDataflowGraphResponse'
+  { _gdgrsDagEdges = Nothing
+  , _gdgrsDagNodes = Nothing
+  , _gdgrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A list of the edges in the resulting DAG.
+gdgrsDagEdges :: Lens' GetDataflowGraphResponse [CodeGenEdge]
+gdgrsDagEdges = lens _gdgrsDagEdges (\ s a -> s{_gdgrsDagEdges = a}) . _Default . _Coerce;
+
+-- | A list of the nodes in the resulting DAG.
+gdgrsDagNodes :: Lens' GetDataflowGraphResponse [CodeGenNode]
+gdgrsDagNodes = lens _gdgrsDagNodes (\ s a -> s{_gdgrsDagNodes = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gdgrsResponseStatus :: Lens' GetDataflowGraphResponse Int
+gdgrsResponseStatus = lens _gdgrsResponseStatus (\ s a -> s{_gdgrsResponseStatus = a});
+
+instance NFData GetDataflowGraphResponse where
diff --git a/gen/Network/AWS/Glue/GetDevEndpoint.hs b/gen/Network/AWS/Glue/GetDevEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetDevEndpoint.hs
@@ -0,0 +1,133 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetDevEndpoint
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a specified DevEndpoint.
+--
+--
+module Network.AWS.Glue.GetDevEndpoint
+    (
+    -- * Creating a Request
+      getDevEndpoint
+    , GetDevEndpoint
+    -- * Request Lenses
+    , gdeEndpointName
+
+    -- * Destructuring the Response
+    , getDevEndpointResponse
+    , GetDevEndpointResponse
+    -- * Response Lenses
+    , gdedrsDevEndpoint
+    , gdedrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getDevEndpoint' smart constructor.
+newtype GetDevEndpoint = GetDevEndpoint'
+  { _gdeEndpointName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDevEndpoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdeEndpointName' - Name of the DevEndpoint for which to retrieve information.
+getDevEndpoint
+    :: Text -- ^ 'gdeEndpointName'
+    -> GetDevEndpoint
+getDevEndpoint pEndpointName_ =
+  GetDevEndpoint' {_gdeEndpointName = pEndpointName_}
+
+
+-- | Name of the DevEndpoint for which to retrieve information.
+gdeEndpointName :: Lens' GetDevEndpoint Text
+gdeEndpointName = lens _gdeEndpointName (\ s a -> s{_gdeEndpointName = a});
+
+instance AWSRequest GetDevEndpoint where
+        type Rs GetDevEndpoint = GetDevEndpointResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDevEndpointResponse' <$>
+                   (x .?> "DevEndpoint") <*> (pure (fromEnum s)))
+
+instance Hashable GetDevEndpoint where
+
+instance NFData GetDevEndpoint where
+
+instance ToHeaders GetDevEndpoint where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetDevEndpoint" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetDevEndpoint where
+        toJSON GetDevEndpoint'{..}
+          = object
+              (catMaybes
+                 [Just ("EndpointName" .= _gdeEndpointName)])
+
+instance ToPath GetDevEndpoint where
+        toPath = const "/"
+
+instance ToQuery GetDevEndpoint where
+        toQuery = const mempty
+
+-- | /See:/ 'getDevEndpointResponse' smart constructor.
+data GetDevEndpointResponse = GetDevEndpointResponse'
+  { _gdedrsDevEndpoint    :: !(Maybe DevEndpoint)
+  , _gdedrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDevEndpointResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdedrsDevEndpoint' - A DevEndpoint definition.
+--
+-- * 'gdedrsResponseStatus' - -- | The response status code.
+getDevEndpointResponse
+    :: Int -- ^ 'gdedrsResponseStatus'
+    -> GetDevEndpointResponse
+getDevEndpointResponse pResponseStatus_ =
+  GetDevEndpointResponse'
+  {_gdedrsDevEndpoint = Nothing, _gdedrsResponseStatus = pResponseStatus_}
+
+
+-- | A DevEndpoint definition.
+gdedrsDevEndpoint :: Lens' GetDevEndpointResponse (Maybe DevEndpoint)
+gdedrsDevEndpoint = lens _gdedrsDevEndpoint (\ s a -> s{_gdedrsDevEndpoint = a});
+
+-- | -- | The response status code.
+gdedrsResponseStatus :: Lens' GetDevEndpointResponse Int
+gdedrsResponseStatus = lens _gdedrsResponseStatus (\ s a -> s{_gdedrsResponseStatus = a});
+
+instance NFData GetDevEndpointResponse where
diff --git a/gen/Network/AWS/Glue/GetDevEndpoints.hs b/gen/Network/AWS/Glue/GetDevEndpoints.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetDevEndpoints.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetDevEndpoints
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves all the DevEndpoints in this AWS account.
+--
+--
+module Network.AWS.Glue.GetDevEndpoints
+    (
+    -- * Creating a Request
+      getDevEndpoints
+    , GetDevEndpoints
+    -- * Request Lenses
+    , gdeNextToken
+    , gdeMaxResults
+
+    -- * Destructuring the Response
+    , getDevEndpointsResponse
+    , GetDevEndpointsResponse
+    -- * Response Lenses
+    , gdersNextToken
+    , gdersDevEndpoints
+    , gdersResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getDevEndpoints' smart constructor.
+data GetDevEndpoints = GetDevEndpoints'
+  { _gdeNextToken  :: !(Maybe Text)
+  , _gdeMaxResults :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDevEndpoints' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdeNextToken' - A continuation token, if this is a continuation call.
+--
+-- * 'gdeMaxResults' - The maximum size of information to return.
+getDevEndpoints
+    :: GetDevEndpoints
+getDevEndpoints =
+  GetDevEndpoints' {_gdeNextToken = Nothing, _gdeMaxResults = Nothing}
+
+
+-- | A continuation token, if this is a continuation call.
+gdeNextToken :: Lens' GetDevEndpoints (Maybe Text)
+gdeNextToken = lens _gdeNextToken (\ s a -> s{_gdeNextToken = a});
+
+-- | The maximum size of information to return.
+gdeMaxResults :: Lens' GetDevEndpoints (Maybe Natural)
+gdeMaxResults = lens _gdeMaxResults (\ s a -> s{_gdeMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetDevEndpoints where
+        type Rs GetDevEndpoints = GetDevEndpointsResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetDevEndpointsResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "DevEndpoints" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetDevEndpoints where
+
+instance NFData GetDevEndpoints where
+
+instance ToHeaders GetDevEndpoints where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetDevEndpoints" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetDevEndpoints where
+        toJSON GetDevEndpoints'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _gdeNextToken,
+                  ("MaxResults" .=) <$> _gdeMaxResults])
+
+instance ToPath GetDevEndpoints where
+        toPath = const "/"
+
+instance ToQuery GetDevEndpoints where
+        toQuery = const mempty
+
+-- | /See:/ 'getDevEndpointsResponse' smart constructor.
+data GetDevEndpointsResponse = GetDevEndpointsResponse'
+  { _gdersNextToken      :: !(Maybe Text)
+  , _gdersDevEndpoints   :: !(Maybe [DevEndpoint])
+  , _gdersResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetDevEndpointsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gdersNextToken' - A continuation token, if not all DevEndpoint definitions have yet been returned.
+--
+-- * 'gdersDevEndpoints' - A list of DevEndpoint definitions.
+--
+-- * 'gdersResponseStatus' - -- | The response status code.
+getDevEndpointsResponse
+    :: Int -- ^ 'gdersResponseStatus'
+    -> GetDevEndpointsResponse
+getDevEndpointsResponse pResponseStatus_ =
+  GetDevEndpointsResponse'
+  { _gdersNextToken = Nothing
+  , _gdersDevEndpoints = Nothing
+  , _gdersResponseStatus = pResponseStatus_
+  }
+
+
+-- | A continuation token, if not all DevEndpoint definitions have yet been returned.
+gdersNextToken :: Lens' GetDevEndpointsResponse (Maybe Text)
+gdersNextToken = lens _gdersNextToken (\ s a -> s{_gdersNextToken = a});
+
+-- | A list of DevEndpoint definitions.
+gdersDevEndpoints :: Lens' GetDevEndpointsResponse [DevEndpoint]
+gdersDevEndpoints = lens _gdersDevEndpoints (\ s a -> s{_gdersDevEndpoints = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gdersResponseStatus :: Lens' GetDevEndpointsResponse Int
+gdersResponseStatus = lens _gdersResponseStatus (\ s a -> s{_gdersResponseStatus = a});
+
+instance NFData GetDevEndpointsResponse where
diff --git a/gen/Network/AWS/Glue/GetJob.hs b/gen/Network/AWS/Glue/GetJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetJob.hs
@@ -0,0 +1,128 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetJob
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves an existing job definition.
+--
+--
+module Network.AWS.Glue.GetJob
+    (
+    -- * Creating a Request
+      getJob
+    , GetJob
+    -- * Request Lenses
+    , gjJobName
+
+    -- * Destructuring the Response
+    , getJobResponse
+    , GetJobResponse
+    -- * Response Lenses
+    , gjrsJob
+    , gjrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getJob' smart constructor.
+newtype GetJob = GetJob'
+  { _gjJobName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjJobName' - The name of the job to retrieve.
+getJob
+    :: Text -- ^ 'gjJobName'
+    -> GetJob
+getJob pJobName_ = GetJob' {_gjJobName = pJobName_}
+
+
+-- | The name of the job to retrieve.
+gjJobName :: Lens' GetJob Text
+gjJobName = lens _gjJobName (\ s a -> s{_gjJobName = a});
+
+instance AWSRequest GetJob where
+        type Rs GetJob = GetJobResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetJobResponse' <$>
+                   (x .?> "Job") <*> (pure (fromEnum s)))
+
+instance Hashable GetJob where
+
+instance NFData GetJob where
+
+instance ToHeaders GetJob where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =# ("AWSGlue.GetJob" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetJob where
+        toJSON GetJob'{..}
+          = object (catMaybes [Just ("JobName" .= _gjJobName)])
+
+instance ToPath GetJob where
+        toPath = const "/"
+
+instance ToQuery GetJob where
+        toQuery = const mempty
+
+-- | /See:/ 'getJobResponse' smart constructor.
+data GetJobResponse = GetJobResponse'
+  { _gjrsJob            :: !(Maybe Job)
+  , _gjrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetJobResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjrsJob' - The requested job definition.
+--
+-- * 'gjrsResponseStatus' - -- | The response status code.
+getJobResponse
+    :: Int -- ^ 'gjrsResponseStatus'
+    -> GetJobResponse
+getJobResponse pResponseStatus_ =
+  GetJobResponse' {_gjrsJob = Nothing, _gjrsResponseStatus = pResponseStatus_}
+
+
+-- | The requested job definition.
+gjrsJob :: Lens' GetJobResponse (Maybe Job)
+gjrsJob = lens _gjrsJob (\ s a -> s{_gjrsJob = a});
+
+-- | -- | The response status code.
+gjrsResponseStatus :: Lens' GetJobResponse Int
+gjrsResponseStatus = lens _gjrsResponseStatus (\ s a -> s{_gjrsResponseStatus = a});
+
+instance NFData GetJobResponse where
diff --git a/gen/Network/AWS/Glue/GetJobRun.hs b/gen/Network/AWS/Glue/GetJobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetJobRun.hs
@@ -0,0 +1,154 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetJobRun
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the metadata for a given job run.
+--
+--
+module Network.AWS.Glue.GetJobRun
+    (
+    -- * Creating a Request
+      getJobRun
+    , GetJobRun
+    -- * Request Lenses
+    , gPredecessorsIncluded
+    , gJobName
+    , gRunId
+
+    -- * Destructuring the Response
+    , getJobRunResponse
+    , GetJobRunResponse
+    -- * Response Lenses
+    , gjrjrsJobRun
+    , gjrjrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getJobRun' smart constructor.
+data GetJobRun = GetJobRun'
+  { _gPredecessorsIncluded :: !(Maybe Bool)
+  , _gJobName              :: !Text
+  , _gRunId                :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetJobRun' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gPredecessorsIncluded' - A list of the predecessor runs to return as well.
+--
+-- * 'gJobName' - Name of the job being run.
+--
+-- * 'gRunId' - The ID of the job run.
+getJobRun
+    :: Text -- ^ 'gJobName'
+    -> Text -- ^ 'gRunId'
+    -> GetJobRun
+getJobRun pJobName_ pRunId_ =
+  GetJobRun'
+  {_gPredecessorsIncluded = Nothing, _gJobName = pJobName_, _gRunId = pRunId_}
+
+
+-- | A list of the predecessor runs to return as well.
+gPredecessorsIncluded :: Lens' GetJobRun (Maybe Bool)
+gPredecessorsIncluded = lens _gPredecessorsIncluded (\ s a -> s{_gPredecessorsIncluded = a});
+
+-- | Name of the job being run.
+gJobName :: Lens' GetJobRun Text
+gJobName = lens _gJobName (\ s a -> s{_gJobName = a});
+
+-- | The ID of the job run.
+gRunId :: Lens' GetJobRun Text
+gRunId = lens _gRunId (\ s a -> s{_gRunId = a});
+
+instance AWSRequest GetJobRun where
+        type Rs GetJobRun = GetJobRunResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetJobRunResponse' <$>
+                   (x .?> "JobRun") <*> (pure (fromEnum s)))
+
+instance Hashable GetJobRun where
+
+instance NFData GetJobRun where
+
+instance ToHeaders GetJobRun where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetJobRun" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetJobRun where
+        toJSON GetJobRun'{..}
+          = object
+              (catMaybes
+                 [("PredecessorsIncluded" .=) <$>
+                    _gPredecessorsIncluded,
+                  Just ("JobName" .= _gJobName),
+                  Just ("RunId" .= _gRunId)])
+
+instance ToPath GetJobRun where
+        toPath = const "/"
+
+instance ToQuery GetJobRun where
+        toQuery = const mempty
+
+-- | /See:/ 'getJobRunResponse' smart constructor.
+data GetJobRunResponse = GetJobRunResponse'
+  { _gjrjrsJobRun         :: !(Maybe JobRun)
+  , _gjrjrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetJobRunResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjrjrsJobRun' - The requested job-run metadata.
+--
+-- * 'gjrjrsResponseStatus' - -- | The response status code.
+getJobRunResponse
+    :: Int -- ^ 'gjrjrsResponseStatus'
+    -> GetJobRunResponse
+getJobRunResponse pResponseStatus_ =
+  GetJobRunResponse'
+  {_gjrjrsJobRun = Nothing, _gjrjrsResponseStatus = pResponseStatus_}
+
+
+-- | The requested job-run metadata.
+gjrjrsJobRun :: Lens' GetJobRunResponse (Maybe JobRun)
+gjrjrsJobRun = lens _gjrjrsJobRun (\ s a -> s{_gjrjrsJobRun = a});
+
+-- | -- | The response status code.
+gjrjrsResponseStatus :: Lens' GetJobRunResponse Int
+gjrjrsResponseStatus = lens _gjrjrsResponseStatus (\ s a -> s{_gjrjrsResponseStatus = a});
+
+instance NFData GetJobRunResponse where
diff --git a/gen/Network/AWS/Glue/GetJobRuns.hs b/gen/Network/AWS/Glue/GetJobRuns.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetJobRuns.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetJobRuns
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves metadata for all runs of a given job.
+--
+--
+module Network.AWS.Glue.GetJobRuns
+    (
+    -- * Creating a Request
+      getJobRuns
+    , GetJobRuns
+    -- * Request Lenses
+    , gjrNextToken
+    , gjrMaxResults
+    , gjrJobName
+
+    -- * Destructuring the Response
+    , getJobRunsResponse
+    , GetJobRunsResponse
+    -- * Response Lenses
+    , gjrrsNextToken
+    , gjrrsJobRuns
+    , gjrrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getJobRuns' smart constructor.
+data GetJobRuns = GetJobRuns'
+  { _gjrNextToken  :: !(Maybe Text)
+  , _gjrMaxResults :: !(Maybe Nat)
+  , _gjrJobName    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetJobRuns' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjrNextToken' - A continuation token, if this is a continuation call.
+--
+-- * 'gjrMaxResults' - The maximum size of the response.
+--
+-- * 'gjrJobName' - The name of the job for which to retrieve all job runs.
+getJobRuns
+    :: Text -- ^ 'gjrJobName'
+    -> GetJobRuns
+getJobRuns pJobName_ =
+  GetJobRuns'
+  {_gjrNextToken = Nothing, _gjrMaxResults = Nothing, _gjrJobName = pJobName_}
+
+
+-- | A continuation token, if this is a continuation call.
+gjrNextToken :: Lens' GetJobRuns (Maybe Text)
+gjrNextToken = lens _gjrNextToken (\ s a -> s{_gjrNextToken = a});
+
+-- | The maximum size of the response.
+gjrMaxResults :: Lens' GetJobRuns (Maybe Natural)
+gjrMaxResults = lens _gjrMaxResults (\ s a -> s{_gjrMaxResults = a}) . mapping _Nat;
+
+-- | The name of the job for which to retrieve all job runs.
+gjrJobName :: Lens' GetJobRuns Text
+gjrJobName = lens _gjrJobName (\ s a -> s{_gjrJobName = a});
+
+instance AWSRequest GetJobRuns where
+        type Rs GetJobRuns = GetJobRunsResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetJobRunsResponse' <$>
+                   (x .?> "NextToken") <*> (x .?> "JobRuns" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetJobRuns where
+
+instance NFData GetJobRuns where
+
+instance ToHeaders GetJobRuns where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetJobRuns" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetJobRuns where
+        toJSON GetJobRuns'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _gjrNextToken,
+                  ("MaxResults" .=) <$> _gjrMaxResults,
+                  Just ("JobName" .= _gjrJobName)])
+
+instance ToPath GetJobRuns where
+        toPath = const "/"
+
+instance ToQuery GetJobRuns where
+        toQuery = const mempty
+
+-- | /See:/ 'getJobRunsResponse' smart constructor.
+data GetJobRunsResponse = GetJobRunsResponse'
+  { _gjrrsNextToken      :: !(Maybe Text)
+  , _gjrrsJobRuns        :: !(Maybe [JobRun])
+  , _gjrrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetJobRunsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjrrsNextToken' - A continuation token, if not all reequested job runs have been returned.
+--
+-- * 'gjrrsJobRuns' - A list of job-run metatdata objects.
+--
+-- * 'gjrrsResponseStatus' - -- | The response status code.
+getJobRunsResponse
+    :: Int -- ^ 'gjrrsResponseStatus'
+    -> GetJobRunsResponse
+getJobRunsResponse pResponseStatus_ =
+  GetJobRunsResponse'
+  { _gjrrsNextToken = Nothing
+  , _gjrrsJobRuns = Nothing
+  , _gjrrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A continuation token, if not all reequested job runs have been returned.
+gjrrsNextToken :: Lens' GetJobRunsResponse (Maybe Text)
+gjrrsNextToken = lens _gjrrsNextToken (\ s a -> s{_gjrrsNextToken = a});
+
+-- | A list of job-run metatdata objects.
+gjrrsJobRuns :: Lens' GetJobRunsResponse [JobRun]
+gjrrsJobRuns = lens _gjrrsJobRuns (\ s a -> s{_gjrrsJobRuns = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gjrrsResponseStatus :: Lens' GetJobRunsResponse Int
+gjrrsResponseStatus = lens _gjrrsResponseStatus (\ s a -> s{_gjrrsResponseStatus = a});
+
+instance NFData GetJobRunsResponse where
diff --git a/gen/Network/AWS/Glue/GetJobs.hs b/gen/Network/AWS/Glue/GetJobs.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetJobs.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetJobs
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves all current jobs.
+--
+--
+module Network.AWS.Glue.GetJobs
+    (
+    -- * Creating a Request
+      getJobs
+    , GetJobs
+    -- * Request Lenses
+    , gjNextToken
+    , gjMaxResults
+
+    -- * Destructuring the Response
+    , getJobsResponse
+    , GetJobsResponse
+    -- * Response Lenses
+    , gjsrsNextToken
+    , gjsrsJobs
+    , gjsrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getJobs' smart constructor.
+data GetJobs = GetJobs'
+  { _gjNextToken  :: !(Maybe Text)
+  , _gjMaxResults :: !(Maybe Nat)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetJobs' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjNextToken' - A continuation token, if this is a continuation call.
+--
+-- * 'gjMaxResults' - The maximum size of the response.
+getJobs
+    :: GetJobs
+getJobs = GetJobs' {_gjNextToken = Nothing, _gjMaxResults = Nothing}
+
+
+-- | A continuation token, if this is a continuation call.
+gjNextToken :: Lens' GetJobs (Maybe Text)
+gjNextToken = lens _gjNextToken (\ s a -> s{_gjNextToken = a});
+
+-- | The maximum size of the response.
+gjMaxResults :: Lens' GetJobs (Maybe Natural)
+gjMaxResults = lens _gjMaxResults (\ s a -> s{_gjMaxResults = a}) . mapping _Nat;
+
+instance AWSRequest GetJobs where
+        type Rs GetJobs = GetJobsResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetJobsResponse' <$>
+                   (x .?> "NextToken") <*> (x .?> "Jobs" .!@ mempty) <*>
+                     (pure (fromEnum s)))
+
+instance Hashable GetJobs where
+
+instance NFData GetJobs where
+
+instance ToHeaders GetJobs where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =# ("AWSGlue.GetJobs" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetJobs where
+        toJSON GetJobs'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _gjNextToken,
+                  ("MaxResults" .=) <$> _gjMaxResults])
+
+instance ToPath GetJobs where
+        toPath = const "/"
+
+instance ToQuery GetJobs where
+        toQuery = const mempty
+
+-- | /See:/ 'getJobsResponse' smart constructor.
+data GetJobsResponse = GetJobsResponse'
+  { _gjsrsNextToken      :: !(Maybe Text)
+  , _gjsrsJobs           :: !(Maybe [Job])
+  , _gjsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetJobsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gjsrsNextToken' - A continuation token, if not all jobs have yet been returned.
+--
+-- * 'gjsrsJobs' - A list of jobs.
+--
+-- * 'gjsrsResponseStatus' - -- | The response status code.
+getJobsResponse
+    :: Int -- ^ 'gjsrsResponseStatus'
+    -> GetJobsResponse
+getJobsResponse pResponseStatus_ =
+  GetJobsResponse'
+  { _gjsrsNextToken = Nothing
+  , _gjsrsJobs = Nothing
+  , _gjsrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A continuation token, if not all jobs have yet been returned.
+gjsrsNextToken :: Lens' GetJobsResponse (Maybe Text)
+gjsrsNextToken = lens _gjsrsNextToken (\ s a -> s{_gjsrsNextToken = a});
+
+-- | A list of jobs.
+gjsrsJobs :: Lens' GetJobsResponse [Job]
+gjsrsJobs = lens _gjsrsJobs (\ s a -> s{_gjsrsJobs = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gjsrsResponseStatus :: Lens' GetJobsResponse Int
+gjsrsResponseStatus = lens _gjsrsResponseStatus (\ s a -> s{_gjsrsResponseStatus = a});
+
+instance NFData GetJobsResponse where
diff --git a/gen/Network/AWS/Glue/GetMapping.hs b/gen/Network/AWS/Glue/GetMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetMapping.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetMapping
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates mappings.
+--
+--
+module Network.AWS.Glue.GetMapping
+    (
+    -- * Creating a Request
+      getMapping
+    , GetMapping
+    -- * Request Lenses
+    , gmSinks
+    , gmLocation
+    , gmSource
+
+    -- * Destructuring the Response
+    , getMappingResponse
+    , GetMappingResponse
+    -- * Response Lenses
+    , gmrsResponseStatus
+    , gmrsMapping
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getMapping' smart constructor.
+data GetMapping = GetMapping'
+  { _gmSinks    :: !(Maybe [CatalogEntry])
+  , _gmLocation :: !(Maybe Location)
+  , _gmSource   :: !CatalogEntry
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetMapping' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gmSinks' - A list of target tables.
+--
+-- * 'gmLocation' - Parameters for the mapping.
+--
+-- * 'gmSource' - Specifies the source table.
+getMapping
+    :: CatalogEntry -- ^ 'gmSource'
+    -> GetMapping
+getMapping pSource_ =
+  GetMapping' {_gmSinks = Nothing, _gmLocation = Nothing, _gmSource = pSource_}
+
+
+-- | A list of target tables.
+gmSinks :: Lens' GetMapping [CatalogEntry]
+gmSinks = lens _gmSinks (\ s a -> s{_gmSinks = a}) . _Default . _Coerce;
+
+-- | Parameters for the mapping.
+gmLocation :: Lens' GetMapping (Maybe Location)
+gmLocation = lens _gmLocation (\ s a -> s{_gmLocation = a});
+
+-- | Specifies the source table.
+gmSource :: Lens' GetMapping CatalogEntry
+gmSource = lens _gmSource (\ s a -> s{_gmSource = a});
+
+instance AWSRequest GetMapping where
+        type Rs GetMapping = GetMappingResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetMappingResponse' <$>
+                   (pure (fromEnum s)) <*> (x .?> "Mapping" .!@ mempty))
+
+instance Hashable GetMapping where
+
+instance NFData GetMapping where
+
+instance ToHeaders GetMapping where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetMapping" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetMapping where
+        toJSON GetMapping'{..}
+          = object
+              (catMaybes
+                 [("Sinks" .=) <$> _gmSinks,
+                  ("Location" .=) <$> _gmLocation,
+                  Just ("Source" .= _gmSource)])
+
+instance ToPath GetMapping where
+        toPath = const "/"
+
+instance ToQuery GetMapping where
+        toQuery = const mempty
+
+-- | /See:/ 'getMappingResponse' smart constructor.
+data GetMappingResponse = GetMappingResponse'
+  { _gmrsResponseStatus :: !Int
+  , _gmrsMapping        :: ![MappingEntry]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetMappingResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gmrsResponseStatus' - -- | The response status code.
+--
+-- * 'gmrsMapping' - A list of mappings to the specified targets.
+getMappingResponse
+    :: Int -- ^ 'gmrsResponseStatus'
+    -> GetMappingResponse
+getMappingResponse pResponseStatus_ =
+  GetMappingResponse'
+  {_gmrsResponseStatus = pResponseStatus_, _gmrsMapping = mempty}
+
+
+-- | -- | The response status code.
+gmrsResponseStatus :: Lens' GetMappingResponse Int
+gmrsResponseStatus = lens _gmrsResponseStatus (\ s a -> s{_gmrsResponseStatus = a});
+
+-- | A list of mappings to the specified targets.
+gmrsMapping :: Lens' GetMappingResponse [MappingEntry]
+gmrsMapping = lens _gmrsMapping (\ s a -> s{_gmrsMapping = a}) . _Coerce;
+
+instance NFData GetMappingResponse where
diff --git a/gen/Network/AWS/Glue/GetPartition.hs b/gen/Network/AWS/Glue/GetPartition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetPartition.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetPartition
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about a specified partition.
+--
+--
+module Network.AWS.Glue.GetPartition
+    (
+    -- * Creating a Request
+      getPartition
+    , GetPartition
+    -- * Request Lenses
+    , gpCatalogId
+    , gpDatabaseName
+    , gpTableName
+    , gpPartitionValues
+
+    -- * Destructuring the Response
+    , getPartitionResponse
+    , GetPartitionResponse
+    -- * Response Lenses
+    , gprsPartition
+    , gprsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getPartition' smart constructor.
+data GetPartition = GetPartition'
+  { _gpCatalogId       :: !(Maybe Text)
+  , _gpDatabaseName    :: !Text
+  , _gpTableName       :: !Text
+  , _gpPartitionValues :: ![Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetPartition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpCatalogId' - The ID of the Data Catalog where the partition in question resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'gpDatabaseName' - The name of the catalog database where the partition resides.
+--
+-- * 'gpTableName' - The name of the partition's table.
+--
+-- * 'gpPartitionValues' - The values that define the partition.
+getPartition
+    :: Text -- ^ 'gpDatabaseName'
+    -> Text -- ^ 'gpTableName'
+    -> GetPartition
+getPartition pDatabaseName_ pTableName_ =
+  GetPartition'
+  { _gpCatalogId = Nothing
+  , _gpDatabaseName = pDatabaseName_
+  , _gpTableName = pTableName_
+  , _gpPartitionValues = mempty
+  }
+
+
+-- | The ID of the Data Catalog where the partition in question resides. If none is supplied, the AWS account ID is used by default.
+gpCatalogId :: Lens' GetPartition (Maybe Text)
+gpCatalogId = lens _gpCatalogId (\ s a -> s{_gpCatalogId = a});
+
+-- | The name of the catalog database where the partition resides.
+gpDatabaseName :: Lens' GetPartition Text
+gpDatabaseName = lens _gpDatabaseName (\ s a -> s{_gpDatabaseName = a});
+
+-- | The name of the partition's table.
+gpTableName :: Lens' GetPartition Text
+gpTableName = lens _gpTableName (\ s a -> s{_gpTableName = a});
+
+-- | The values that define the partition.
+gpPartitionValues :: Lens' GetPartition [Text]
+gpPartitionValues = lens _gpPartitionValues (\ s a -> s{_gpPartitionValues = a}) . _Coerce;
+
+instance AWSRequest GetPartition where
+        type Rs GetPartition = GetPartitionResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetPartitionResponse' <$>
+                   (x .?> "Partition") <*> (pure (fromEnum s)))
+
+instance Hashable GetPartition where
+
+instance NFData GetPartition where
+
+instance ToHeaders GetPartition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetPartition" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetPartition where
+        toJSON GetPartition'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _gpCatalogId,
+                  Just ("DatabaseName" .= _gpDatabaseName),
+                  Just ("TableName" .= _gpTableName),
+                  Just ("PartitionValues" .= _gpPartitionValues)])
+
+instance ToPath GetPartition where
+        toPath = const "/"
+
+instance ToQuery GetPartition where
+        toQuery = const mempty
+
+-- | /See:/ 'getPartitionResponse' smart constructor.
+data GetPartitionResponse = GetPartitionResponse'
+  { _gprsPartition      :: !(Maybe Partition)
+  , _gprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetPartitionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gprsPartition' - The requested information, in the form of a @Partition@ object.
+--
+-- * 'gprsResponseStatus' - -- | The response status code.
+getPartitionResponse
+    :: Int -- ^ 'gprsResponseStatus'
+    -> GetPartitionResponse
+getPartitionResponse pResponseStatus_ =
+  GetPartitionResponse'
+  {_gprsPartition = Nothing, _gprsResponseStatus = pResponseStatus_}
+
+
+-- | The requested information, in the form of a @Partition@ object.
+gprsPartition :: Lens' GetPartitionResponse (Maybe Partition)
+gprsPartition = lens _gprsPartition (\ s a -> s{_gprsPartition = a});
+
+-- | -- | The response status code.
+gprsResponseStatus :: Lens' GetPartitionResponse Int
+gprsResponseStatus = lens _gprsResponseStatus (\ s a -> s{_gprsResponseStatus = a});
+
+instance NFData GetPartitionResponse where
diff --git a/gen/Network/AWS/Glue/GetPartitions.hs b/gen/Network/AWS/Glue/GetPartitions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetPartitions.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetPartitions
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves information about the partitions in a table.
+--
+--
+module Network.AWS.Glue.GetPartitions
+    (
+    -- * Creating a Request
+      getPartitions
+    , GetPartitions
+    -- * Request Lenses
+    , gpsCatalogId
+    , gpsNextToken
+    , gpsExpression
+    , gpsSegment
+    , gpsMaxResults
+    , gpsDatabaseName
+    , gpsTableName
+
+    -- * Destructuring the Response
+    , getPartitionsResponse
+    , GetPartitionsResponse
+    -- * Response Lenses
+    , gpsrsPartitions
+    , gpsrsNextToken
+    , gpsrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getPartitions' smart constructor.
+data GetPartitions = GetPartitions'
+  { _gpsCatalogId    :: !(Maybe Text)
+  , _gpsNextToken    :: !(Maybe Text)
+  , _gpsExpression   :: !(Maybe Text)
+  , _gpsSegment      :: !(Maybe Segment)
+  , _gpsMaxResults   :: !(Maybe Nat)
+  , _gpsDatabaseName :: !Text
+  , _gpsTableName    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetPartitions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpsCatalogId' - The ID of the Data Catalog where the partitions in question reside. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'gpsNextToken' - A continuation token, if this is not the first call to retrieve these partitions.
+--
+-- * 'gpsExpression' - An expression filtering the partitions to be returned.
+--
+-- * 'gpsSegment' - The segment of the table's partitions to scan in this request.
+--
+-- * 'gpsMaxResults' - The maximum number of partitions to return in a single response.
+--
+-- * 'gpsDatabaseName' - The name of the catalog database where the partitions reside.
+--
+-- * 'gpsTableName' - The name of the partitions' table.
+getPartitions
+    :: Text -- ^ 'gpsDatabaseName'
+    -> Text -- ^ 'gpsTableName'
+    -> GetPartitions
+getPartitions pDatabaseName_ pTableName_ =
+  GetPartitions'
+  { _gpsCatalogId = Nothing
+  , _gpsNextToken = Nothing
+  , _gpsExpression = Nothing
+  , _gpsSegment = Nothing
+  , _gpsMaxResults = Nothing
+  , _gpsDatabaseName = pDatabaseName_
+  , _gpsTableName = pTableName_
+  }
+
+
+-- | The ID of the Data Catalog where the partitions in question reside. If none is supplied, the AWS account ID is used by default.
+gpsCatalogId :: Lens' GetPartitions (Maybe Text)
+gpsCatalogId = lens _gpsCatalogId (\ s a -> s{_gpsCatalogId = a});
+
+-- | A continuation token, if this is not the first call to retrieve these partitions.
+gpsNextToken :: Lens' GetPartitions (Maybe Text)
+gpsNextToken = lens _gpsNextToken (\ s a -> s{_gpsNextToken = a});
+
+-- | An expression filtering the partitions to be returned.
+gpsExpression :: Lens' GetPartitions (Maybe Text)
+gpsExpression = lens _gpsExpression (\ s a -> s{_gpsExpression = a});
+
+-- | The segment of the table's partitions to scan in this request.
+gpsSegment :: Lens' GetPartitions (Maybe Segment)
+gpsSegment = lens _gpsSegment (\ s a -> s{_gpsSegment = a});
+
+-- | The maximum number of partitions to return in a single response.
+gpsMaxResults :: Lens' GetPartitions (Maybe Natural)
+gpsMaxResults = lens _gpsMaxResults (\ s a -> s{_gpsMaxResults = a}) . mapping _Nat;
+
+-- | The name of the catalog database where the partitions reside.
+gpsDatabaseName :: Lens' GetPartitions Text
+gpsDatabaseName = lens _gpsDatabaseName (\ s a -> s{_gpsDatabaseName = a});
+
+-- | The name of the partitions' table.
+gpsTableName :: Lens' GetPartitions Text
+gpsTableName = lens _gpsTableName (\ s a -> s{_gpsTableName = a});
+
+instance AWSRequest GetPartitions where
+        type Rs GetPartitions = GetPartitionsResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetPartitionsResponse' <$>
+                   (x .?> "Partitions" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetPartitions where
+
+instance NFData GetPartitions where
+
+instance ToHeaders GetPartitions where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetPartitions" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetPartitions where
+        toJSON GetPartitions'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _gpsCatalogId,
+                  ("NextToken" .=) <$> _gpsNextToken,
+                  ("Expression" .=) <$> _gpsExpression,
+                  ("Segment" .=) <$> _gpsSegment,
+                  ("MaxResults" .=) <$> _gpsMaxResults,
+                  Just ("DatabaseName" .= _gpsDatabaseName),
+                  Just ("TableName" .= _gpsTableName)])
+
+instance ToPath GetPartitions where
+        toPath = const "/"
+
+instance ToQuery GetPartitions where
+        toQuery = const mempty
+
+-- | /See:/ 'getPartitionsResponse' smart constructor.
+data GetPartitionsResponse = GetPartitionsResponse'
+  { _gpsrsPartitions     :: !(Maybe [Partition])
+  , _gpsrsNextToken      :: !(Maybe Text)
+  , _gpsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetPartitionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpsrsPartitions' - A list of requested partitions.
+--
+-- * 'gpsrsNextToken' - A continuation token, if the returned list of partitions does not does not include the last one.
+--
+-- * 'gpsrsResponseStatus' - -- | The response status code.
+getPartitionsResponse
+    :: Int -- ^ 'gpsrsResponseStatus'
+    -> GetPartitionsResponse
+getPartitionsResponse pResponseStatus_ =
+  GetPartitionsResponse'
+  { _gpsrsPartitions = Nothing
+  , _gpsrsNextToken = Nothing
+  , _gpsrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A list of requested partitions.
+gpsrsPartitions :: Lens' GetPartitionsResponse [Partition]
+gpsrsPartitions = lens _gpsrsPartitions (\ s a -> s{_gpsrsPartitions = a}) . _Default . _Coerce;
+
+-- | A continuation token, if the returned list of partitions does not does not include the last one.
+gpsrsNextToken :: Lens' GetPartitionsResponse (Maybe Text)
+gpsrsNextToken = lens _gpsrsNextToken (\ s a -> s{_gpsrsNextToken = a});
+
+-- | -- | The response status code.
+gpsrsResponseStatus :: Lens' GetPartitionsResponse Int
+gpsrsResponseStatus = lens _gpsrsResponseStatus (\ s a -> s{_gpsrsResponseStatus = a});
+
+instance NFData GetPartitionsResponse where
diff --git a/gen/Network/AWS/Glue/GetPlan.hs b/gen/Network/AWS/Glue/GetPlan.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetPlan.hs
@@ -0,0 +1,164 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetPlan
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets a Python script to perform a specified mapping.
+--
+--
+module Network.AWS.Glue.GetPlan
+    (
+    -- * Creating a Request
+      getPlan
+    , GetPlan
+    -- * Request Lenses
+    , gpSinks
+    , gpLocation
+    , gpMapping
+    , gpSource
+
+    -- * Destructuring the Response
+    , getPlanResponse
+    , GetPlanResponse
+    -- * Response Lenses
+    , gpprsPythonScript
+    , gpprsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getPlan' smart constructor.
+data GetPlan = GetPlan'
+  { _gpSinks    :: !(Maybe [CatalogEntry])
+  , _gpLocation :: !(Maybe Location)
+  , _gpMapping  :: ![MappingEntry]
+  , _gpSource   :: !CatalogEntry
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetPlan' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpSinks' - The target tables.
+--
+-- * 'gpLocation' - Parameters for the mapping.
+--
+-- * 'gpMapping' - The list of mappings from a source table to target tables.
+--
+-- * 'gpSource' - The source table.
+getPlan
+    :: CatalogEntry -- ^ 'gpSource'
+    -> GetPlan
+getPlan pSource_ =
+  GetPlan'
+  { _gpSinks = Nothing
+  , _gpLocation = Nothing
+  , _gpMapping = mempty
+  , _gpSource = pSource_
+  }
+
+
+-- | The target tables.
+gpSinks :: Lens' GetPlan [CatalogEntry]
+gpSinks = lens _gpSinks (\ s a -> s{_gpSinks = a}) . _Default . _Coerce;
+
+-- | Parameters for the mapping.
+gpLocation :: Lens' GetPlan (Maybe Location)
+gpLocation = lens _gpLocation (\ s a -> s{_gpLocation = a});
+
+-- | The list of mappings from a source table to target tables.
+gpMapping :: Lens' GetPlan [MappingEntry]
+gpMapping = lens _gpMapping (\ s a -> s{_gpMapping = a}) . _Coerce;
+
+-- | The source table.
+gpSource :: Lens' GetPlan CatalogEntry
+gpSource = lens _gpSource (\ s a -> s{_gpSource = a});
+
+instance AWSRequest GetPlan where
+        type Rs GetPlan = GetPlanResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetPlanResponse' <$>
+                   (x .?> "PythonScript") <*> (pure (fromEnum s)))
+
+instance Hashable GetPlan where
+
+instance NFData GetPlan where
+
+instance ToHeaders GetPlan where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =# ("AWSGlue.GetPlan" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetPlan where
+        toJSON GetPlan'{..}
+          = object
+              (catMaybes
+                 [("Sinks" .=) <$> _gpSinks,
+                  ("Location" .=) <$> _gpLocation,
+                  Just ("Mapping" .= _gpMapping),
+                  Just ("Source" .= _gpSource)])
+
+instance ToPath GetPlan where
+        toPath = const "/"
+
+instance ToQuery GetPlan where
+        toQuery = const mempty
+
+-- | /See:/ 'getPlanResponse' smart constructor.
+data GetPlanResponse = GetPlanResponse'
+  { _gpprsPythonScript   :: !(Maybe Text)
+  , _gpprsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetPlanResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpprsPythonScript' - A python script to perform the mapping.
+--
+-- * 'gpprsResponseStatus' - -- | The response status code.
+getPlanResponse
+    :: Int -- ^ 'gpprsResponseStatus'
+    -> GetPlanResponse
+getPlanResponse pResponseStatus_ =
+  GetPlanResponse'
+  {_gpprsPythonScript = Nothing, _gpprsResponseStatus = pResponseStatus_}
+
+
+-- | A python script to perform the mapping.
+gpprsPythonScript :: Lens' GetPlanResponse (Maybe Text)
+gpprsPythonScript = lens _gpprsPythonScript (\ s a -> s{_gpprsPythonScript = a});
+
+-- | -- | The response status code.
+gpprsResponseStatus :: Lens' GetPlanResponse Int
+gpprsResponseStatus = lens _gpprsResponseStatus (\ s a -> s{_gpprsResponseStatus = a});
+
+instance NFData GetPlanResponse where
diff --git a/gen/Network/AWS/Glue/GetTable.hs b/gen/Network/AWS/Glue/GetTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetTable.hs
@@ -0,0 +1,156 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetTable
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the @Table@ definition in a Data Catalog for a specified table.
+--
+--
+module Network.AWS.Glue.GetTable
+    (
+    -- * Creating a Request
+      getTable
+    , GetTable
+    -- * Request Lenses
+    , gttCatalogId
+    , gttDatabaseName
+    , gttName
+
+    -- * Destructuring the Response
+    , getTableResponse
+    , GetTableResponse
+    -- * Response Lenses
+    , ggrsTable
+    , ggrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getTable' smart constructor.
+data GetTable = GetTable'
+  { _gttCatalogId    :: !(Maybe Text)
+  , _gttDatabaseName :: !Text
+  , _gttName         :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTable' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gttCatalogId' - The ID of the Data Catalog where the table resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'gttDatabaseName' - The name of the database in the catalog in which the table resides.
+--
+-- * 'gttName' - The name of the table for which to retrieve the definition.
+getTable
+    :: Text -- ^ 'gttDatabaseName'
+    -> Text -- ^ 'gttName'
+    -> GetTable
+getTable pDatabaseName_ pName_ =
+  GetTable'
+  { _gttCatalogId = Nothing
+  , _gttDatabaseName = pDatabaseName_
+  , _gttName = pName_
+  }
+
+
+-- | The ID of the Data Catalog where the table resides. If none is supplied, the AWS account ID is used by default.
+gttCatalogId :: Lens' GetTable (Maybe Text)
+gttCatalogId = lens _gttCatalogId (\ s a -> s{_gttCatalogId = a});
+
+-- | The name of the database in the catalog in which the table resides.
+gttDatabaseName :: Lens' GetTable Text
+gttDatabaseName = lens _gttDatabaseName (\ s a -> s{_gttDatabaseName = a});
+
+-- | The name of the table for which to retrieve the definition.
+gttName :: Lens' GetTable Text
+gttName = lens _gttName (\ s a -> s{_gttName = a});
+
+instance AWSRequest GetTable where
+        type Rs GetTable = GetTableResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetTableResponse' <$>
+                   (x .?> "Table") <*> (pure (fromEnum s)))
+
+instance Hashable GetTable where
+
+instance NFData GetTable where
+
+instance ToHeaders GetTable where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetTable" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetTable where
+        toJSON GetTable'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _gttCatalogId,
+                  Just ("DatabaseName" .= _gttDatabaseName),
+                  Just ("Name" .= _gttName)])
+
+instance ToPath GetTable where
+        toPath = const "/"
+
+instance ToQuery GetTable where
+        toQuery = const mempty
+
+-- | /See:/ 'getTableResponse' smart constructor.
+data GetTableResponse = GetTableResponse'
+  { _ggrsTable          :: !(Maybe Table)
+  , _ggrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTableResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ggrsTable' - The @Table@ object that defines the specified table.
+--
+-- * 'ggrsResponseStatus' - -- | The response status code.
+getTableResponse
+    :: Int -- ^ 'ggrsResponseStatus'
+    -> GetTableResponse
+getTableResponse pResponseStatus_ =
+  GetTableResponse'
+  {_ggrsTable = Nothing, _ggrsResponseStatus = pResponseStatus_}
+
+
+-- | The @Table@ object that defines the specified table.
+ggrsTable :: Lens' GetTableResponse (Maybe Table)
+ggrsTable = lens _ggrsTable (\ s a -> s{_ggrsTable = a});
+
+-- | -- | The response status code.
+ggrsResponseStatus :: Lens' GetTableResponse Int
+ggrsResponseStatus = lens _ggrsResponseStatus (\ s a -> s{_ggrsResponseStatus = a});
+
+instance NFData GetTableResponse where
diff --git a/gen/Network/AWS/Glue/GetTableVersions.hs b/gen/Network/AWS/Glue/GetTableVersions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetTableVersions.hs
@@ -0,0 +1,189 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetTableVersions
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a list of strings that identify available versions of a specified table.
+--
+--
+module Network.AWS.Glue.GetTableVersions
+    (
+    -- * Creating a Request
+      getTableVersions
+    , GetTableVersions
+    -- * Request Lenses
+    , gtvCatalogId
+    , gtvNextToken
+    , gtvMaxResults
+    , gtvDatabaseName
+    , gtvTableName
+
+    -- * Destructuring the Response
+    , getTableVersionsResponse
+    , GetTableVersionsResponse
+    -- * Response Lenses
+    , gtvrsTableVersions
+    , gtvrsNextToken
+    , gtvrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getTableVersions' smart constructor.
+data GetTableVersions = GetTableVersions'
+  { _gtvCatalogId    :: !(Maybe Text)
+  , _gtvNextToken    :: !(Maybe Text)
+  , _gtvMaxResults   :: !(Maybe Nat)
+  , _gtvDatabaseName :: !Text
+  , _gtvTableName    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTableVersions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtvCatalogId' - The ID of the Data Catalog where the tables reside. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'gtvNextToken' - A continuation token, if this is not the first call.
+--
+-- * 'gtvMaxResults' - The maximum number of table versions to return in one response.
+--
+-- * 'gtvDatabaseName' - The database in the catalog in which the table resides.
+--
+-- * 'gtvTableName' - The name of the table.
+getTableVersions
+    :: Text -- ^ 'gtvDatabaseName'
+    -> Text -- ^ 'gtvTableName'
+    -> GetTableVersions
+getTableVersions pDatabaseName_ pTableName_ =
+  GetTableVersions'
+  { _gtvCatalogId = Nothing
+  , _gtvNextToken = Nothing
+  , _gtvMaxResults = Nothing
+  , _gtvDatabaseName = pDatabaseName_
+  , _gtvTableName = pTableName_
+  }
+
+
+-- | The ID of the Data Catalog where the tables reside. If none is supplied, the AWS account ID is used by default.
+gtvCatalogId :: Lens' GetTableVersions (Maybe Text)
+gtvCatalogId = lens _gtvCatalogId (\ s a -> s{_gtvCatalogId = a});
+
+-- | A continuation token, if this is not the first call.
+gtvNextToken :: Lens' GetTableVersions (Maybe Text)
+gtvNextToken = lens _gtvNextToken (\ s a -> s{_gtvNextToken = a});
+
+-- | The maximum number of table versions to return in one response.
+gtvMaxResults :: Lens' GetTableVersions (Maybe Natural)
+gtvMaxResults = lens _gtvMaxResults (\ s a -> s{_gtvMaxResults = a}) . mapping _Nat;
+
+-- | The database in the catalog in which the table resides.
+gtvDatabaseName :: Lens' GetTableVersions Text
+gtvDatabaseName = lens _gtvDatabaseName (\ s a -> s{_gtvDatabaseName = a});
+
+-- | The name of the table.
+gtvTableName :: Lens' GetTableVersions Text
+gtvTableName = lens _gtvTableName (\ s a -> s{_gtvTableName = a});
+
+instance AWSRequest GetTableVersions where
+        type Rs GetTableVersions = GetTableVersionsResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetTableVersionsResponse' <$>
+                   (x .?> "TableVersions" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetTableVersions where
+
+instance NFData GetTableVersions where
+
+instance ToHeaders GetTableVersions where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetTableVersions" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetTableVersions where
+        toJSON GetTableVersions'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _gtvCatalogId,
+                  ("NextToken" .=) <$> _gtvNextToken,
+                  ("MaxResults" .=) <$> _gtvMaxResults,
+                  Just ("DatabaseName" .= _gtvDatabaseName),
+                  Just ("TableName" .= _gtvTableName)])
+
+instance ToPath GetTableVersions where
+        toPath = const "/"
+
+instance ToQuery GetTableVersions where
+        toQuery = const mempty
+
+-- | /See:/ 'getTableVersionsResponse' smart constructor.
+data GetTableVersionsResponse = GetTableVersionsResponse'
+  { _gtvrsTableVersions  :: !(Maybe [TableVersion])
+  , _gtvrsNextToken      :: !(Maybe Text)
+  , _gtvrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTableVersionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtvrsTableVersions' - A list of strings identifying available versions of the specified table.
+--
+-- * 'gtvrsNextToken' - A continuation token, if the list of available versions does not include the last one.
+--
+-- * 'gtvrsResponseStatus' - -- | The response status code.
+getTableVersionsResponse
+    :: Int -- ^ 'gtvrsResponseStatus'
+    -> GetTableVersionsResponse
+getTableVersionsResponse pResponseStatus_ =
+  GetTableVersionsResponse'
+  { _gtvrsTableVersions = Nothing
+  , _gtvrsNextToken = Nothing
+  , _gtvrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A list of strings identifying available versions of the specified table.
+gtvrsTableVersions :: Lens' GetTableVersionsResponse [TableVersion]
+gtvrsTableVersions = lens _gtvrsTableVersions (\ s a -> s{_gtvrsTableVersions = a}) . _Default . _Coerce;
+
+-- | A continuation token, if the list of available versions does not include the last one.
+gtvrsNextToken :: Lens' GetTableVersionsResponse (Maybe Text)
+gtvrsNextToken = lens _gtvrsNextToken (\ s a -> s{_gtvrsNextToken = a});
+
+-- | -- | The response status code.
+gtvrsResponseStatus :: Lens' GetTableVersionsResponse Int
+gtvrsResponseStatus = lens _gtvrsResponseStatus (\ s a -> s{_gtvrsResponseStatus = a});
+
+instance NFData GetTableVersionsResponse where
diff --git a/gen/Network/AWS/Glue/GetTables.hs b/gen/Network/AWS/Glue/GetTables.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetTables.hs
@@ -0,0 +1,188 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetTables
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the definitions of some or all of the tables in a given @Database@ .
+--
+--
+module Network.AWS.Glue.GetTables
+    (
+    -- * Creating a Request
+      getTables
+    , GetTables
+    -- * Request Lenses
+    , gtCatalogId
+    , gtNextToken
+    , gtExpression
+    , gtMaxResults
+    , gtDatabaseName
+
+    -- * Destructuring the Response
+    , getTablesResponse
+    , GetTablesResponse
+    -- * Response Lenses
+    , gtsrsTableList
+    , gtsrsNextToken
+    , gtsrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getTables' smart constructor.
+data GetTables = GetTables'
+  { _gtCatalogId    :: !(Maybe Text)
+  , _gtNextToken    :: !(Maybe Text)
+  , _gtExpression   :: !(Maybe Text)
+  , _gtMaxResults   :: !(Maybe Nat)
+  , _gtDatabaseName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTables' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtCatalogId' - The ID of the Data Catalog where the tables reside. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'gtNextToken' - A continuation token, included if this is a continuation call.
+--
+-- * 'gtExpression' - A regular expression pattern. If present, only those tables whose names match the pattern are returned.
+--
+-- * 'gtMaxResults' - The maximum number of tables to return in a single response.
+--
+-- * 'gtDatabaseName' - The database in the catalog whose tables to list.
+getTables
+    :: Text -- ^ 'gtDatabaseName'
+    -> GetTables
+getTables pDatabaseName_ =
+  GetTables'
+  { _gtCatalogId = Nothing
+  , _gtNextToken = Nothing
+  , _gtExpression = Nothing
+  , _gtMaxResults = Nothing
+  , _gtDatabaseName = pDatabaseName_
+  }
+
+
+-- | The ID of the Data Catalog where the tables reside. If none is supplied, the AWS account ID is used by default.
+gtCatalogId :: Lens' GetTables (Maybe Text)
+gtCatalogId = lens _gtCatalogId (\ s a -> s{_gtCatalogId = a});
+
+-- | A continuation token, included if this is a continuation call.
+gtNextToken :: Lens' GetTables (Maybe Text)
+gtNextToken = lens _gtNextToken (\ s a -> s{_gtNextToken = a});
+
+-- | A regular expression pattern. If present, only those tables whose names match the pattern are returned.
+gtExpression :: Lens' GetTables (Maybe Text)
+gtExpression = lens _gtExpression (\ s a -> s{_gtExpression = a});
+
+-- | The maximum number of tables to return in a single response.
+gtMaxResults :: Lens' GetTables (Maybe Natural)
+gtMaxResults = lens _gtMaxResults (\ s a -> s{_gtMaxResults = a}) . mapping _Nat;
+
+-- | The database in the catalog whose tables to list.
+gtDatabaseName :: Lens' GetTables Text
+gtDatabaseName = lens _gtDatabaseName (\ s a -> s{_gtDatabaseName = a});
+
+instance AWSRequest GetTables where
+        type Rs GetTables = GetTablesResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetTablesResponse' <$>
+                   (x .?> "TableList" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetTables where
+
+instance NFData GetTables where
+
+instance ToHeaders GetTables where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetTables" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetTables where
+        toJSON GetTables'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _gtCatalogId,
+                  ("NextToken" .=) <$> _gtNextToken,
+                  ("Expression" .=) <$> _gtExpression,
+                  ("MaxResults" .=) <$> _gtMaxResults,
+                  Just ("DatabaseName" .= _gtDatabaseName)])
+
+instance ToPath GetTables where
+        toPath = const "/"
+
+instance ToQuery GetTables where
+        toQuery = const mempty
+
+-- | /See:/ 'getTablesResponse' smart constructor.
+data GetTablesResponse = GetTablesResponse'
+  { _gtsrsTableList      :: !(Maybe [Table])
+  , _gtsrsNextToken      :: !(Maybe Text)
+  , _gtsrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTablesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtsrsTableList' - A list of the requested @Table@ objects.
+--
+-- * 'gtsrsNextToken' - A continuation token, present if the current list segment is not the last.
+--
+-- * 'gtsrsResponseStatus' - -- | The response status code.
+getTablesResponse
+    :: Int -- ^ 'gtsrsResponseStatus'
+    -> GetTablesResponse
+getTablesResponse pResponseStatus_ =
+  GetTablesResponse'
+  { _gtsrsTableList = Nothing
+  , _gtsrsNextToken = Nothing
+  , _gtsrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A list of the requested @Table@ objects.
+gtsrsTableList :: Lens' GetTablesResponse [Table]
+gtsrsTableList = lens _gtsrsTableList (\ s a -> s{_gtsrsTableList = a}) . _Default . _Coerce;
+
+-- | A continuation token, present if the current list segment is not the last.
+gtsrsNextToken :: Lens' GetTablesResponse (Maybe Text)
+gtsrsNextToken = lens _gtsrsNextToken (\ s a -> s{_gtsrsNextToken = a});
+
+-- | -- | The response status code.
+gtsrsResponseStatus :: Lens' GetTablesResponse Int
+gtsrsResponseStatus = lens _gtsrsResponseStatus (\ s a -> s{_gtsrsResponseStatus = a});
+
+instance NFData GetTablesResponse where
diff --git a/gen/Network/AWS/Glue/GetTrigger.hs b/gen/Network/AWS/Glue/GetTrigger.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetTrigger.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetTrigger
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves the definition of a trigger.
+--
+--
+module Network.AWS.Glue.GetTrigger
+    (
+    -- * Creating a Request
+      getTrigger
+    , GetTrigger
+    -- * Request Lenses
+    , gtName
+
+    -- * Destructuring the Response
+    , getTriggerResponse
+    , GetTriggerResponse
+    -- * Response Lenses
+    , gtrsTrigger
+    , gtrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getTrigger' smart constructor.
+newtype GetTrigger = GetTrigger'
+  { _gtName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTrigger' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtName' - The name of the trigger to retrieve.
+getTrigger
+    :: Text -- ^ 'gtName'
+    -> GetTrigger
+getTrigger pName_ = GetTrigger' {_gtName = pName_}
+
+
+-- | The name of the trigger to retrieve.
+gtName :: Lens' GetTrigger Text
+gtName = lens _gtName (\ s a -> s{_gtName = a});
+
+instance AWSRequest GetTrigger where
+        type Rs GetTrigger = GetTriggerResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetTriggerResponse' <$>
+                   (x .?> "Trigger") <*> (pure (fromEnum s)))
+
+instance Hashable GetTrigger where
+
+instance NFData GetTrigger where
+
+instance ToHeaders GetTrigger where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetTrigger" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetTrigger where
+        toJSON GetTrigger'{..}
+          = object (catMaybes [Just ("Name" .= _gtName)])
+
+instance ToPath GetTrigger where
+        toPath = const "/"
+
+instance ToQuery GetTrigger where
+        toQuery = const mempty
+
+-- | /See:/ 'getTriggerResponse' smart constructor.
+data GetTriggerResponse = GetTriggerResponse'
+  { _gtrsTrigger        :: !(Maybe Trigger)
+  , _gtrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTriggerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtrsTrigger' - The requested trigger definition.
+--
+-- * 'gtrsResponseStatus' - -- | The response status code.
+getTriggerResponse
+    :: Int -- ^ 'gtrsResponseStatus'
+    -> GetTriggerResponse
+getTriggerResponse pResponseStatus_ =
+  GetTriggerResponse'
+  {_gtrsTrigger = Nothing, _gtrsResponseStatus = pResponseStatus_}
+
+
+-- | The requested trigger definition.
+gtrsTrigger :: Lens' GetTriggerResponse (Maybe Trigger)
+gtrsTrigger = lens _gtrsTrigger (\ s a -> s{_gtrsTrigger = a});
+
+-- | -- | The response status code.
+gtrsResponseStatus :: Lens' GetTriggerResponse Int
+gtrsResponseStatus = lens _gtrsResponseStatus (\ s a -> s{_gtrsResponseStatus = a});
+
+instance NFData GetTriggerResponse where
diff --git a/gen/Network/AWS/Glue/GetTriggers.hs b/gen/Network/AWS/Glue/GetTriggers.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetTriggers.hs
@@ -0,0 +1,166 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetTriggers
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Gets all the triggers associated with a job.
+--
+--
+module Network.AWS.Glue.GetTriggers
+    (
+    -- * Creating a Request
+      getTriggers
+    , GetTriggers
+    -- * Request Lenses
+    , gtsNextToken
+    , gtsMaxResults
+    , gtsDependentJobName
+
+    -- * Destructuring the Response
+    , getTriggersResponse
+    , GetTriggersResponse
+    -- * Response Lenses
+    , gttrsTriggers
+    , gttrsNextToken
+    , gttrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getTriggers' smart constructor.
+data GetTriggers = GetTriggers'
+  { _gtsNextToken        :: !(Maybe Text)
+  , _gtsMaxResults       :: !(Maybe Nat)
+  , _gtsDependentJobName :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTriggers' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gtsNextToken' - A continuation token, if this is a continuation call.
+--
+-- * 'gtsMaxResults' - The maximum size of the response.
+--
+-- * 'gtsDependentJobName' - The name of the job for which to retrieve triggers.
+getTriggers
+    :: GetTriggers
+getTriggers =
+  GetTriggers'
+  { _gtsNextToken = Nothing
+  , _gtsMaxResults = Nothing
+  , _gtsDependentJobName = Nothing
+  }
+
+
+-- | A continuation token, if this is a continuation call.
+gtsNextToken :: Lens' GetTriggers (Maybe Text)
+gtsNextToken = lens _gtsNextToken (\ s a -> s{_gtsNextToken = a});
+
+-- | The maximum size of the response.
+gtsMaxResults :: Lens' GetTriggers (Maybe Natural)
+gtsMaxResults = lens _gtsMaxResults (\ s a -> s{_gtsMaxResults = a}) . mapping _Nat;
+
+-- | The name of the job for which to retrieve triggers.
+gtsDependentJobName :: Lens' GetTriggers (Maybe Text)
+gtsDependentJobName = lens _gtsDependentJobName (\ s a -> s{_gtsDependentJobName = a});
+
+instance AWSRequest GetTriggers where
+        type Rs GetTriggers = GetTriggersResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetTriggersResponse' <$>
+                   (x .?> "Triggers" .!@ mempty) <*> (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetTriggers where
+
+instance NFData GetTriggers where
+
+instance ToHeaders GetTriggers where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetTriggers" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetTriggers where
+        toJSON GetTriggers'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _gtsNextToken,
+                  ("MaxResults" .=) <$> _gtsMaxResults,
+                  ("DependentJobName" .=) <$> _gtsDependentJobName])
+
+instance ToPath GetTriggers where
+        toPath = const "/"
+
+instance ToQuery GetTriggers where
+        toQuery = const mempty
+
+-- | /See:/ 'getTriggersResponse' smart constructor.
+data GetTriggersResponse = GetTriggersResponse'
+  { _gttrsTriggers       :: !(Maybe [Trigger])
+  , _gttrsNextToken      :: !(Maybe Text)
+  , _gttrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetTriggersResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gttrsTriggers' - A list of triggers for the specified job.
+--
+-- * 'gttrsNextToken' - A continuation token, if not all the requested triggers have yet been returned.
+--
+-- * 'gttrsResponseStatus' - -- | The response status code.
+getTriggersResponse
+    :: Int -- ^ 'gttrsResponseStatus'
+    -> GetTriggersResponse
+getTriggersResponse pResponseStatus_ =
+  GetTriggersResponse'
+  { _gttrsTriggers = Nothing
+  , _gttrsNextToken = Nothing
+  , _gttrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A list of triggers for the specified job.
+gttrsTriggers :: Lens' GetTriggersResponse [Trigger]
+gttrsTriggers = lens _gttrsTriggers (\ s a -> s{_gttrsTriggers = a}) . _Default . _Coerce;
+
+-- | A continuation token, if not all the requested triggers have yet been returned.
+gttrsNextToken :: Lens' GetTriggersResponse (Maybe Text)
+gttrsNextToken = lens _gttrsNextToken (\ s a -> s{_gttrsNextToken = a});
+
+-- | -- | The response status code.
+gttrsResponseStatus :: Lens' GetTriggersResponse Int
+gttrsResponseStatus = lens _gttrsResponseStatus (\ s a -> s{_gttrsResponseStatus = a});
+
+instance NFData GetTriggersResponse where
diff --git a/gen/Network/AWS/Glue/GetUserDefinedFunction.hs b/gen/Network/AWS/Glue/GetUserDefinedFunction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetUserDefinedFunction.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetUserDefinedFunction
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a specified function definition from the Data Catalog.
+--
+--
+module Network.AWS.Glue.GetUserDefinedFunction
+    (
+    -- * Creating a Request
+      getUserDefinedFunction
+    , GetUserDefinedFunction
+    -- * Request Lenses
+    , getCatalogId
+    , getDatabaseName
+    , getFunctionName
+
+    -- * Destructuring the Response
+    , getUserDefinedFunctionResponse
+    , GetUserDefinedFunctionResponse
+    -- * Response Lenses
+    , gudfursUserDefinedFunction
+    , gudfursResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getUserDefinedFunction' smart constructor.
+data GetUserDefinedFunction = GetUserDefinedFunction'
+  { _getCatalogId    :: !(Maybe Text)
+  , _getDatabaseName :: !Text
+  , _getFunctionName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetUserDefinedFunction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'getCatalogId' - The ID of the Data Catalog where the function to be retrieved is located. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'getDatabaseName' - The name of the catalog database where the function is located.
+--
+-- * 'getFunctionName' - The name of the function.
+getUserDefinedFunction
+    :: Text -- ^ 'getDatabaseName'
+    -> Text -- ^ 'getFunctionName'
+    -> GetUserDefinedFunction
+getUserDefinedFunction pDatabaseName_ pFunctionName_ =
+  GetUserDefinedFunction'
+  { _getCatalogId = Nothing
+  , _getDatabaseName = pDatabaseName_
+  , _getFunctionName = pFunctionName_
+  }
+
+
+-- | The ID of the Data Catalog where the function to be retrieved is located. If none is supplied, the AWS account ID is used by default.
+getCatalogId :: Lens' GetUserDefinedFunction (Maybe Text)
+getCatalogId = lens _getCatalogId (\ s a -> s{_getCatalogId = a});
+
+-- | The name of the catalog database where the function is located.
+getDatabaseName :: Lens' GetUserDefinedFunction Text
+getDatabaseName = lens _getDatabaseName (\ s a -> s{_getDatabaseName = a});
+
+-- | The name of the function.
+getFunctionName :: Lens' GetUserDefinedFunction Text
+getFunctionName = lens _getFunctionName (\ s a -> s{_getFunctionName = a});
+
+instance AWSRequest GetUserDefinedFunction where
+        type Rs GetUserDefinedFunction =
+             GetUserDefinedFunctionResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetUserDefinedFunctionResponse' <$>
+                   (x .?> "UserDefinedFunction") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable GetUserDefinedFunction where
+
+instance NFData GetUserDefinedFunction where
+
+instance ToHeaders GetUserDefinedFunction where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetUserDefinedFunction" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetUserDefinedFunction where
+        toJSON GetUserDefinedFunction'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _getCatalogId,
+                  Just ("DatabaseName" .= _getDatabaseName),
+                  Just ("FunctionName" .= _getFunctionName)])
+
+instance ToPath GetUserDefinedFunction where
+        toPath = const "/"
+
+instance ToQuery GetUserDefinedFunction where
+        toQuery = const mempty
+
+-- | /See:/ 'getUserDefinedFunctionResponse' smart constructor.
+data GetUserDefinedFunctionResponse = GetUserDefinedFunctionResponse'
+  { _gudfursUserDefinedFunction :: !(Maybe UserDefinedFunction)
+  , _gudfursResponseStatus      :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetUserDefinedFunctionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gudfursUserDefinedFunction' - The requested function definition.
+--
+-- * 'gudfursResponseStatus' - -- | The response status code.
+getUserDefinedFunctionResponse
+    :: Int -- ^ 'gudfursResponseStatus'
+    -> GetUserDefinedFunctionResponse
+getUserDefinedFunctionResponse pResponseStatus_ =
+  GetUserDefinedFunctionResponse'
+  { _gudfursUserDefinedFunction = Nothing
+  , _gudfursResponseStatus = pResponseStatus_
+  }
+
+
+-- | The requested function definition.
+gudfursUserDefinedFunction :: Lens' GetUserDefinedFunctionResponse (Maybe UserDefinedFunction)
+gudfursUserDefinedFunction = lens _gudfursUserDefinedFunction (\ s a -> s{_gudfursUserDefinedFunction = a});
+
+-- | -- | The response status code.
+gudfursResponseStatus :: Lens' GetUserDefinedFunctionResponse Int
+gudfursResponseStatus = lens _gudfursResponseStatus (\ s a -> s{_gudfursResponseStatus = a});
+
+instance NFData GetUserDefinedFunctionResponse where
diff --git a/gen/Network/AWS/Glue/GetUserDefinedFunctions.hs b/gen/Network/AWS/Glue/GetUserDefinedFunctions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/GetUserDefinedFunctions.hs
@@ -0,0 +1,190 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.GetUserDefinedFunctions
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Retrieves a multiple function definitions from the Data Catalog.
+--
+--
+module Network.AWS.Glue.GetUserDefinedFunctions
+    (
+    -- * Creating a Request
+      getUserDefinedFunctions
+    , GetUserDefinedFunctions
+    -- * Request Lenses
+    , gudfCatalogId
+    , gudfNextToken
+    , gudfMaxResults
+    , gudfDatabaseName
+    , gudfPattern
+
+    -- * Destructuring the Response
+    , getUserDefinedFunctionsResponse
+    , GetUserDefinedFunctionsResponse
+    -- * Response Lenses
+    , gudfrsNextToken
+    , gudfrsUserDefinedFunctions
+    , gudfrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'getUserDefinedFunctions' smart constructor.
+data GetUserDefinedFunctions = GetUserDefinedFunctions'
+  { _gudfCatalogId    :: !(Maybe Text)
+  , _gudfNextToken    :: !(Maybe Text)
+  , _gudfMaxResults   :: !(Maybe Nat)
+  , _gudfDatabaseName :: !Text
+  , _gudfPattern      :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetUserDefinedFunctions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gudfCatalogId' - The ID of the Data Catalog where the functions to be retrieved are located. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'gudfNextToken' - A continuation token, if this is a continuation call.
+--
+-- * 'gudfMaxResults' - The maximum number of functions to return in one response.
+--
+-- * 'gudfDatabaseName' - The name of the catalog database where the functions are located.
+--
+-- * 'gudfPattern' - An optional function-name pattern string that filters the function definitions returned.
+getUserDefinedFunctions
+    :: Text -- ^ 'gudfDatabaseName'
+    -> Text -- ^ 'gudfPattern'
+    -> GetUserDefinedFunctions
+getUserDefinedFunctions pDatabaseName_ pPattern_ =
+  GetUserDefinedFunctions'
+  { _gudfCatalogId = Nothing
+  , _gudfNextToken = Nothing
+  , _gudfMaxResults = Nothing
+  , _gudfDatabaseName = pDatabaseName_
+  , _gudfPattern = pPattern_
+  }
+
+
+-- | The ID of the Data Catalog where the functions to be retrieved are located. If none is supplied, the AWS account ID is used by default.
+gudfCatalogId :: Lens' GetUserDefinedFunctions (Maybe Text)
+gudfCatalogId = lens _gudfCatalogId (\ s a -> s{_gudfCatalogId = a});
+
+-- | A continuation token, if this is a continuation call.
+gudfNextToken :: Lens' GetUserDefinedFunctions (Maybe Text)
+gudfNextToken = lens _gudfNextToken (\ s a -> s{_gudfNextToken = a});
+
+-- | The maximum number of functions to return in one response.
+gudfMaxResults :: Lens' GetUserDefinedFunctions (Maybe Natural)
+gudfMaxResults = lens _gudfMaxResults (\ s a -> s{_gudfMaxResults = a}) . mapping _Nat;
+
+-- | The name of the catalog database where the functions are located.
+gudfDatabaseName :: Lens' GetUserDefinedFunctions Text
+gudfDatabaseName = lens _gudfDatabaseName (\ s a -> s{_gudfDatabaseName = a});
+
+-- | An optional function-name pattern string that filters the function definitions returned.
+gudfPattern :: Lens' GetUserDefinedFunctions Text
+gudfPattern = lens _gudfPattern (\ s a -> s{_gudfPattern = a});
+
+instance AWSRequest GetUserDefinedFunctions where
+        type Rs GetUserDefinedFunctions =
+             GetUserDefinedFunctionsResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetUserDefinedFunctionsResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "UserDefinedFunctions" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable GetUserDefinedFunctions where
+
+instance NFData GetUserDefinedFunctions where
+
+instance ToHeaders GetUserDefinedFunctions where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.GetUserDefinedFunctions" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetUserDefinedFunctions where
+        toJSON GetUserDefinedFunctions'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _gudfCatalogId,
+                  ("NextToken" .=) <$> _gudfNextToken,
+                  ("MaxResults" .=) <$> _gudfMaxResults,
+                  Just ("DatabaseName" .= _gudfDatabaseName),
+                  Just ("Pattern" .= _gudfPattern)])
+
+instance ToPath GetUserDefinedFunctions where
+        toPath = const "/"
+
+instance ToQuery GetUserDefinedFunctions where
+        toQuery = const mempty
+
+-- | /See:/ 'getUserDefinedFunctionsResponse' smart constructor.
+data GetUserDefinedFunctionsResponse = GetUserDefinedFunctionsResponse'
+  { _gudfrsNextToken            :: !(Maybe Text)
+  , _gudfrsUserDefinedFunctions :: !(Maybe [UserDefinedFunction])
+  , _gudfrsResponseStatus       :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetUserDefinedFunctionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gudfrsNextToken' - A continuation token, if the list of functions returned does not include the last requested function.
+--
+-- * 'gudfrsUserDefinedFunctions' - A list of requested function definitions.
+--
+-- * 'gudfrsResponseStatus' - -- | The response status code.
+getUserDefinedFunctionsResponse
+    :: Int -- ^ 'gudfrsResponseStatus'
+    -> GetUserDefinedFunctionsResponse
+getUserDefinedFunctionsResponse pResponseStatus_ =
+  GetUserDefinedFunctionsResponse'
+  { _gudfrsNextToken = Nothing
+  , _gudfrsUserDefinedFunctions = Nothing
+  , _gudfrsResponseStatus = pResponseStatus_
+  }
+
+
+-- | A continuation token, if the list of functions returned does not include the last requested function.
+gudfrsNextToken :: Lens' GetUserDefinedFunctionsResponse (Maybe Text)
+gudfrsNextToken = lens _gudfrsNextToken (\ s a -> s{_gudfrsNextToken = a});
+
+-- | A list of requested function definitions.
+gudfrsUserDefinedFunctions :: Lens' GetUserDefinedFunctionsResponse [UserDefinedFunction]
+gudfrsUserDefinedFunctions = lens _gudfrsUserDefinedFunctions (\ s a -> s{_gudfrsUserDefinedFunctions = a}) . _Default . _Coerce;
+
+-- | -- | The response status code.
+gudfrsResponseStatus :: Lens' GetUserDefinedFunctionsResponse Int
+gudfrsResponseStatus = lens _gudfrsResponseStatus (\ s a -> s{_gudfrsResponseStatus = a});
+
+instance NFData GetUserDefinedFunctionsResponse where
diff --git a/gen/Network/AWS/Glue/ImportCatalogToGlue.hs b/gen/Network/AWS/Glue/ImportCatalogToGlue.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/ImportCatalogToGlue.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.ImportCatalogToGlue
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Imports an existing Athena Data Catalog to AWS Glue
+--
+--
+module Network.AWS.Glue.ImportCatalogToGlue
+    (
+    -- * Creating a Request
+      importCatalogToGlue
+    , ImportCatalogToGlue
+    -- * Request Lenses
+    , ictgCatalogId
+
+    -- * Destructuring the Response
+    , importCatalogToGlueResponse
+    , ImportCatalogToGlueResponse
+    -- * Response Lenses
+    , ictgrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'importCatalogToGlue' smart constructor.
+newtype ImportCatalogToGlue = ImportCatalogToGlue'
+  { _ictgCatalogId :: Maybe Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ImportCatalogToGlue' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ictgCatalogId' - The ID of the catalog to import. Currently, this should be the AWS account ID.
+importCatalogToGlue
+    :: ImportCatalogToGlue
+importCatalogToGlue = ImportCatalogToGlue' {_ictgCatalogId = Nothing}
+
+
+-- | The ID of the catalog to import. Currently, this should be the AWS account ID.
+ictgCatalogId :: Lens' ImportCatalogToGlue (Maybe Text)
+ictgCatalogId = lens _ictgCatalogId (\ s a -> s{_ictgCatalogId = a});
+
+instance AWSRequest ImportCatalogToGlue where
+        type Rs ImportCatalogToGlue =
+             ImportCatalogToGlueResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 ImportCatalogToGlueResponse' <$> (pure (fromEnum s)))
+
+instance Hashable ImportCatalogToGlue where
+
+instance NFData ImportCatalogToGlue where
+
+instance ToHeaders ImportCatalogToGlue where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.ImportCatalogToGlue" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ImportCatalogToGlue where
+        toJSON ImportCatalogToGlue'{..}
+          = object
+              (catMaybes [("CatalogId" .=) <$> _ictgCatalogId])
+
+instance ToPath ImportCatalogToGlue where
+        toPath = const "/"
+
+instance ToQuery ImportCatalogToGlue where
+        toQuery = const mempty
+
+-- | /See:/ 'importCatalogToGlueResponse' smart constructor.
+newtype ImportCatalogToGlueResponse = ImportCatalogToGlueResponse'
+  { _ictgrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ImportCatalogToGlueResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ictgrsResponseStatus' - -- | The response status code.
+importCatalogToGlueResponse
+    :: Int -- ^ 'ictgrsResponseStatus'
+    -> ImportCatalogToGlueResponse
+importCatalogToGlueResponse pResponseStatus_ =
+  ImportCatalogToGlueResponse' {_ictgrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+ictgrsResponseStatus :: Lens' ImportCatalogToGlueResponse Int
+ictgrsResponseStatus = lens _ictgrsResponseStatus (\ s a -> s{_ictgrsResponseStatus = a});
+
+instance NFData ImportCatalogToGlueResponse where
diff --git a/gen/Network/AWS/Glue/ResetJobBookmark.hs b/gen/Network/AWS/Glue/ResetJobBookmark.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/ResetJobBookmark.hs
@@ -0,0 +1,131 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.ResetJobBookmark
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Resets a bookmark entry.
+--
+--
+module Network.AWS.Glue.ResetJobBookmark
+    (
+    -- * Creating a Request
+      resetJobBookmark
+    , ResetJobBookmark
+    -- * Request Lenses
+    , rjbJobName
+
+    -- * Destructuring the Response
+    , resetJobBookmarkResponse
+    , ResetJobBookmarkResponse
+    -- * Response Lenses
+    , rjbrsJobBookmarkEntry
+    , rjbrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'resetJobBookmark' smart constructor.
+newtype ResetJobBookmark = ResetJobBookmark'
+  { _rjbJobName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ResetJobBookmark' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rjbJobName' - The name of the job in question.
+resetJobBookmark
+    :: Text -- ^ 'rjbJobName'
+    -> ResetJobBookmark
+resetJobBookmark pJobName_ = ResetJobBookmark' {_rjbJobName = pJobName_}
+
+
+-- | The name of the job in question.
+rjbJobName :: Lens' ResetJobBookmark Text
+rjbJobName = lens _rjbJobName (\ s a -> s{_rjbJobName = a});
+
+instance AWSRequest ResetJobBookmark where
+        type Rs ResetJobBookmark = ResetJobBookmarkResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ResetJobBookmarkResponse' <$>
+                   (x .?> "JobBookmarkEntry") <*> (pure (fromEnum s)))
+
+instance Hashable ResetJobBookmark where
+
+instance NFData ResetJobBookmark where
+
+instance ToHeaders ResetJobBookmark where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.ResetJobBookmark" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ResetJobBookmark where
+        toJSON ResetJobBookmark'{..}
+          = object
+              (catMaybes [Just ("JobName" .= _rjbJobName)])
+
+instance ToPath ResetJobBookmark where
+        toPath = const "/"
+
+instance ToQuery ResetJobBookmark where
+        toQuery = const mempty
+
+-- | /See:/ 'resetJobBookmarkResponse' smart constructor.
+data ResetJobBookmarkResponse = ResetJobBookmarkResponse'
+  { _rjbrsJobBookmarkEntry :: !(Maybe JobBookmarkEntry)
+  , _rjbrsResponseStatus   :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ResetJobBookmarkResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rjbrsJobBookmarkEntry' - The reset bookmark entry.
+--
+-- * 'rjbrsResponseStatus' - -- | The response status code.
+resetJobBookmarkResponse
+    :: Int -- ^ 'rjbrsResponseStatus'
+    -> ResetJobBookmarkResponse
+resetJobBookmarkResponse pResponseStatus_ =
+  ResetJobBookmarkResponse'
+  {_rjbrsJobBookmarkEntry = Nothing, _rjbrsResponseStatus = pResponseStatus_}
+
+
+-- | The reset bookmark entry.
+rjbrsJobBookmarkEntry :: Lens' ResetJobBookmarkResponse (Maybe JobBookmarkEntry)
+rjbrsJobBookmarkEntry = lens _rjbrsJobBookmarkEntry (\ s a -> s{_rjbrsJobBookmarkEntry = a});
+
+-- | -- | The response status code.
+rjbrsResponseStatus :: Lens' ResetJobBookmarkResponse Int
+rjbrsResponseStatus = lens _rjbrsResponseStatus (\ s a -> s{_rjbrsResponseStatus = a});
+
+instance NFData ResetJobBookmarkResponse where
diff --git a/gen/Network/AWS/Glue/StartCrawler.hs b/gen/Network/AWS/Glue/StartCrawler.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/StartCrawler.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.StartCrawler
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts a crawl using the specified @Crawler@ , regardless of what is scheduled. If the @Crawler@ is already running, does nothing.
+--
+--
+module Network.AWS.Glue.StartCrawler
+    (
+    -- * Creating a Request
+      startCrawler
+    , StartCrawler
+    -- * Request Lenses
+    , scName
+
+    -- * Destructuring the Response
+    , startCrawlerResponse
+    , StartCrawlerResponse
+    -- * Response Lenses
+    , scrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'startCrawler' smart constructor.
+newtype StartCrawler = StartCrawler'
+  { _scName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartCrawler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scName' - Name of the @Crawler@ to start.
+startCrawler
+    :: Text -- ^ 'scName'
+    -> StartCrawler
+startCrawler pName_ = StartCrawler' {_scName = pName_}
+
+
+-- | Name of the @Crawler@ to start.
+scName :: Lens' StartCrawler Text
+scName = lens _scName (\ s a -> s{_scName = a});
+
+instance AWSRequest StartCrawler where
+        type Rs StartCrawler = StartCrawlerResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 StartCrawlerResponse' <$> (pure (fromEnum s)))
+
+instance Hashable StartCrawler where
+
+instance NFData StartCrawler where
+
+instance ToHeaders StartCrawler where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.StartCrawler" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StartCrawler where
+        toJSON StartCrawler'{..}
+          = object (catMaybes [Just ("Name" .= _scName)])
+
+instance ToPath StartCrawler where
+        toPath = const "/"
+
+instance ToQuery StartCrawler where
+        toQuery = const mempty
+
+-- | /See:/ 'startCrawlerResponse' smart constructor.
+newtype StartCrawlerResponse = StartCrawlerResponse'
+  { _scrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartCrawlerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scrsResponseStatus' - -- | The response status code.
+startCrawlerResponse
+    :: Int -- ^ 'scrsResponseStatus'
+    -> StartCrawlerResponse
+startCrawlerResponse pResponseStatus_ =
+  StartCrawlerResponse' {_scrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+scrsResponseStatus :: Lens' StartCrawlerResponse Int
+scrsResponseStatus = lens _scrsResponseStatus (\ s a -> s{_scrsResponseStatus = a});
+
+instance NFData StartCrawlerResponse where
diff --git a/gen/Network/AWS/Glue/StartCrawlerSchedule.hs b/gen/Network/AWS/Glue/StartCrawlerSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/StartCrawlerSchedule.hs
@@ -0,0 +1,124 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.StartCrawlerSchedule
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Changes the schedule state of the specified crawler to @SCHEDULED@ , unless the crawler is already running or the schedule state is already @SCHEDULED@ .
+--
+--
+module Network.AWS.Glue.StartCrawlerSchedule
+    (
+    -- * Creating a Request
+      startCrawlerSchedule
+    , StartCrawlerSchedule
+    -- * Request Lenses
+    , scsCrawlerName
+
+    -- * Destructuring the Response
+    , startCrawlerScheduleResponse
+    , StartCrawlerScheduleResponse
+    -- * Response Lenses
+    , scsrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'startCrawlerSchedule' smart constructor.
+newtype StartCrawlerSchedule = StartCrawlerSchedule'
+  { _scsCrawlerName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartCrawlerSchedule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scsCrawlerName' - Name of the crawler to schedule.
+startCrawlerSchedule
+    :: Text -- ^ 'scsCrawlerName'
+    -> StartCrawlerSchedule
+startCrawlerSchedule pCrawlerName_ =
+  StartCrawlerSchedule' {_scsCrawlerName = pCrawlerName_}
+
+
+-- | Name of the crawler to schedule.
+scsCrawlerName :: Lens' StartCrawlerSchedule Text
+scsCrawlerName = lens _scsCrawlerName (\ s a -> s{_scsCrawlerName = a});
+
+instance AWSRequest StartCrawlerSchedule where
+        type Rs StartCrawlerSchedule =
+             StartCrawlerScheduleResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 StartCrawlerScheduleResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable StartCrawlerSchedule where
+
+instance NFData StartCrawlerSchedule where
+
+instance ToHeaders StartCrawlerSchedule where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.StartCrawlerSchedule" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StartCrawlerSchedule where
+        toJSON StartCrawlerSchedule'{..}
+          = object
+              (catMaybes [Just ("CrawlerName" .= _scsCrawlerName)])
+
+instance ToPath StartCrawlerSchedule where
+        toPath = const "/"
+
+instance ToQuery StartCrawlerSchedule where
+        toQuery = const mempty
+
+-- | /See:/ 'startCrawlerScheduleResponse' smart constructor.
+newtype StartCrawlerScheduleResponse = StartCrawlerScheduleResponse'
+  { _scsrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartCrawlerScheduleResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scsrsResponseStatus' - -- | The response status code.
+startCrawlerScheduleResponse
+    :: Int -- ^ 'scsrsResponseStatus'
+    -> StartCrawlerScheduleResponse
+startCrawlerScheduleResponse pResponseStatus_ =
+  StartCrawlerScheduleResponse' {_scsrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+scsrsResponseStatus :: Lens' StartCrawlerScheduleResponse Int
+scsrsResponseStatus = lens _scsrsResponseStatus (\ s a -> s{_scsrsResponseStatus = a});
+
+instance NFData StartCrawlerScheduleResponse where
diff --git a/gen/Network/AWS/Glue/StartJobRun.hs b/gen/Network/AWS/Glue/StartJobRun.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/StartJobRun.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.StartJobRun
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Runs a job.
+--
+--
+module Network.AWS.Glue.StartJobRun
+    (
+    -- * Creating a Request
+      startJobRun
+    , StartJobRun
+    -- * Request Lenses
+    , sjrArguments
+    , sjrAllocatedCapacity
+    , sjrJobRunId
+    , sjrJobName
+
+    -- * Destructuring the Response
+    , startJobRunResponse
+    , StartJobRunResponse
+    -- * Response Lenses
+    , sjrrsJobRunId
+    , sjrrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'startJobRun' smart constructor.
+data StartJobRun = StartJobRun'
+  { _sjrArguments         :: !(Maybe (Map Text Text))
+  , _sjrAllocatedCapacity :: !(Maybe Int)
+  , _sjrJobRunId          :: !(Maybe Text)
+  , _sjrJobName           :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartJobRun' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sjrArguments' - Specific arguments for this job run.
+--
+-- * 'sjrAllocatedCapacity' - The infrastructure capacity to allocate to this job.
+--
+-- * 'sjrJobRunId' - The ID of the job run to start.
+--
+-- * 'sjrJobName' - The name of the job to start.
+startJobRun
+    :: Text -- ^ 'sjrJobName'
+    -> StartJobRun
+startJobRun pJobName_ =
+  StartJobRun'
+  { _sjrArguments = Nothing
+  , _sjrAllocatedCapacity = Nothing
+  , _sjrJobRunId = Nothing
+  , _sjrJobName = pJobName_
+  }
+
+
+-- | Specific arguments for this job run.
+sjrArguments :: Lens' StartJobRun (HashMap Text Text)
+sjrArguments = lens _sjrArguments (\ s a -> s{_sjrArguments = a}) . _Default . _Map;
+
+-- | The infrastructure capacity to allocate to this job.
+sjrAllocatedCapacity :: Lens' StartJobRun (Maybe Int)
+sjrAllocatedCapacity = lens _sjrAllocatedCapacity (\ s a -> s{_sjrAllocatedCapacity = a});
+
+-- | The ID of the job run to start.
+sjrJobRunId :: Lens' StartJobRun (Maybe Text)
+sjrJobRunId = lens _sjrJobRunId (\ s a -> s{_sjrJobRunId = a});
+
+-- | The name of the job to start.
+sjrJobName :: Lens' StartJobRun Text
+sjrJobName = lens _sjrJobName (\ s a -> s{_sjrJobName = a});
+
+instance AWSRequest StartJobRun where
+        type Rs StartJobRun = StartJobRunResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StartJobRunResponse' <$>
+                   (x .?> "JobRunId") <*> (pure (fromEnum s)))
+
+instance Hashable StartJobRun where
+
+instance NFData StartJobRun where
+
+instance ToHeaders StartJobRun where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.StartJobRun" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StartJobRun where
+        toJSON StartJobRun'{..}
+          = object
+              (catMaybes
+                 [("Arguments" .=) <$> _sjrArguments,
+                  ("AllocatedCapacity" .=) <$> _sjrAllocatedCapacity,
+                  ("JobRunId" .=) <$> _sjrJobRunId,
+                  Just ("JobName" .= _sjrJobName)])
+
+instance ToPath StartJobRun where
+        toPath = const "/"
+
+instance ToQuery StartJobRun where
+        toQuery = const mempty
+
+-- | /See:/ 'startJobRunResponse' smart constructor.
+data StartJobRunResponse = StartJobRunResponse'
+  { _sjrrsJobRunId       :: !(Maybe Text)
+  , _sjrrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartJobRunResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sjrrsJobRunId' - The ID assigned to this job run.
+--
+-- * 'sjrrsResponseStatus' - -- | The response status code.
+startJobRunResponse
+    :: Int -- ^ 'sjrrsResponseStatus'
+    -> StartJobRunResponse
+startJobRunResponse pResponseStatus_ =
+  StartJobRunResponse'
+  {_sjrrsJobRunId = Nothing, _sjrrsResponseStatus = pResponseStatus_}
+
+
+-- | The ID assigned to this job run.
+sjrrsJobRunId :: Lens' StartJobRunResponse (Maybe Text)
+sjrrsJobRunId = lens _sjrrsJobRunId (\ s a -> s{_sjrrsJobRunId = a});
+
+-- | -- | The response status code.
+sjrrsResponseStatus :: Lens' StartJobRunResponse Int
+sjrrsResponseStatus = lens _sjrrsResponseStatus (\ s a -> s{_sjrrsResponseStatus = a});
+
+instance NFData StartJobRunResponse where
diff --git a/gen/Network/AWS/Glue/StartTrigger.hs b/gen/Network/AWS/Glue/StartTrigger.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/StartTrigger.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.StartTrigger
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Starts an existing trigger.
+--
+--
+module Network.AWS.Glue.StartTrigger
+    (
+    -- * Creating a Request
+      startTrigger
+    , StartTrigger
+    -- * Request Lenses
+    , staName
+
+    -- * Destructuring the Response
+    , startTriggerResponse
+    , StartTriggerResponse
+    -- * Response Lenses
+    , starsName
+    , starsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'startTrigger' smart constructor.
+newtype StartTrigger = StartTrigger'
+  { _staName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartTrigger' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'staName' - The name of the trigger to start.
+startTrigger
+    :: Text -- ^ 'staName'
+    -> StartTrigger
+startTrigger pName_ = StartTrigger' {_staName = pName_}
+
+
+-- | The name of the trigger to start.
+staName :: Lens' StartTrigger Text
+staName = lens _staName (\ s a -> s{_staName = a});
+
+instance AWSRequest StartTrigger where
+        type Rs StartTrigger = StartTriggerResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StartTriggerResponse' <$>
+                   (x .?> "Name") <*> (pure (fromEnum s)))
+
+instance Hashable StartTrigger where
+
+instance NFData StartTrigger where
+
+instance ToHeaders StartTrigger where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.StartTrigger" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StartTrigger where
+        toJSON StartTrigger'{..}
+          = object (catMaybes [Just ("Name" .= _staName)])
+
+instance ToPath StartTrigger where
+        toPath = const "/"
+
+instance ToQuery StartTrigger where
+        toQuery = const mempty
+
+-- | /See:/ 'startTriggerResponse' smart constructor.
+data StartTriggerResponse = StartTriggerResponse'
+  { _starsName           :: !(Maybe Text)
+  , _starsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StartTriggerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'starsName' - The name of the trigger that was started.
+--
+-- * 'starsResponseStatus' - -- | The response status code.
+startTriggerResponse
+    :: Int -- ^ 'starsResponseStatus'
+    -> StartTriggerResponse
+startTriggerResponse pResponseStatus_ =
+  StartTriggerResponse'
+  {_starsName = Nothing, _starsResponseStatus = pResponseStatus_}
+
+
+-- | The name of the trigger that was started.
+starsName :: Lens' StartTriggerResponse (Maybe Text)
+starsName = lens _starsName (\ s a -> s{_starsName = a});
+
+-- | -- | The response status code.
+starsResponseStatus :: Lens' StartTriggerResponse Int
+starsResponseStatus = lens _starsResponseStatus (\ s a -> s{_starsResponseStatus = a});
+
+instance NFData StartTriggerResponse where
diff --git a/gen/Network/AWS/Glue/StopCrawler.hs b/gen/Network/AWS/Glue/StopCrawler.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/StopCrawler.hs
@@ -0,0 +1,120 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.StopCrawler
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- If the specified @Crawler@ is running, stops the crawl.
+--
+--
+module Network.AWS.Glue.StopCrawler
+    (
+    -- * Creating a Request
+      stopCrawler
+    , StopCrawler
+    -- * Request Lenses
+    , sName
+
+    -- * Destructuring the Response
+    , stopCrawlerResponse
+    , StopCrawlerResponse
+    -- * Response Lenses
+    , srsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'stopCrawler' smart constructor.
+newtype StopCrawler = StopCrawler'
+  { _sName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StopCrawler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sName' - Name of the @Crawler@ to stop.
+stopCrawler
+    :: Text -- ^ 'sName'
+    -> StopCrawler
+stopCrawler pName_ = StopCrawler' {_sName = pName_}
+
+
+-- | Name of the @Crawler@ to stop.
+sName :: Lens' StopCrawler Text
+sName = lens _sName (\ s a -> s{_sName = a});
+
+instance AWSRequest StopCrawler where
+        type Rs StopCrawler = StopCrawlerResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 StopCrawlerResponse' <$> (pure (fromEnum s)))
+
+instance Hashable StopCrawler where
+
+instance NFData StopCrawler where
+
+instance ToHeaders StopCrawler where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.StopCrawler" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StopCrawler where
+        toJSON StopCrawler'{..}
+          = object (catMaybes [Just ("Name" .= _sName)])
+
+instance ToPath StopCrawler where
+        toPath = const "/"
+
+instance ToQuery StopCrawler where
+        toQuery = const mempty
+
+-- | /See:/ 'stopCrawlerResponse' smart constructor.
+newtype StopCrawlerResponse = StopCrawlerResponse'
+  { _srsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StopCrawlerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'srsResponseStatus' - -- | The response status code.
+stopCrawlerResponse
+    :: Int -- ^ 'srsResponseStatus'
+    -> StopCrawlerResponse
+stopCrawlerResponse pResponseStatus_ =
+  StopCrawlerResponse' {_srsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+srsResponseStatus :: Lens' StopCrawlerResponse Int
+srsResponseStatus = lens _srsResponseStatus (\ s a -> s{_srsResponseStatus = a});
+
+instance NFData StopCrawlerResponse where
diff --git a/gen/Network/AWS/Glue/StopCrawlerSchedule.hs b/gen/Network/AWS/Glue/StopCrawlerSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/StopCrawlerSchedule.hs
@@ -0,0 +1,123 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.StopCrawlerSchedule
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Sets the schedule state of the specified crawler to @NOT_SCHEDULED@ , but does not stop the crawler if it is already running.
+--
+--
+module Network.AWS.Glue.StopCrawlerSchedule
+    (
+    -- * Creating a Request
+      stopCrawlerSchedule
+    , StopCrawlerSchedule
+    -- * Request Lenses
+    , sCrawlerName
+
+    -- * Destructuring the Response
+    , stopCrawlerScheduleResponse
+    , StopCrawlerScheduleResponse
+    -- * Response Lenses
+    , storsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'stopCrawlerSchedule' smart constructor.
+newtype StopCrawlerSchedule = StopCrawlerSchedule'
+  { _sCrawlerName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StopCrawlerSchedule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sCrawlerName' - Name of the crawler whose schedule state to set.
+stopCrawlerSchedule
+    :: Text -- ^ 'sCrawlerName'
+    -> StopCrawlerSchedule
+stopCrawlerSchedule pCrawlerName_ =
+  StopCrawlerSchedule' {_sCrawlerName = pCrawlerName_}
+
+
+-- | Name of the crawler whose schedule state to set.
+sCrawlerName :: Lens' StopCrawlerSchedule Text
+sCrawlerName = lens _sCrawlerName (\ s a -> s{_sCrawlerName = a});
+
+instance AWSRequest StopCrawlerSchedule where
+        type Rs StopCrawlerSchedule =
+             StopCrawlerScheduleResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 StopCrawlerScheduleResponse' <$> (pure (fromEnum s)))
+
+instance Hashable StopCrawlerSchedule where
+
+instance NFData StopCrawlerSchedule where
+
+instance ToHeaders StopCrawlerSchedule where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.StopCrawlerSchedule" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StopCrawlerSchedule where
+        toJSON StopCrawlerSchedule'{..}
+          = object
+              (catMaybes [Just ("CrawlerName" .= _sCrawlerName)])
+
+instance ToPath StopCrawlerSchedule where
+        toPath = const "/"
+
+instance ToQuery StopCrawlerSchedule where
+        toQuery = const mempty
+
+-- | /See:/ 'stopCrawlerScheduleResponse' smart constructor.
+newtype StopCrawlerScheduleResponse = StopCrawlerScheduleResponse'
+  { _storsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StopCrawlerScheduleResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'storsResponseStatus' - -- | The response status code.
+stopCrawlerScheduleResponse
+    :: Int -- ^ 'storsResponseStatus'
+    -> StopCrawlerScheduleResponse
+stopCrawlerScheduleResponse pResponseStatus_ =
+  StopCrawlerScheduleResponse' {_storsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+storsResponseStatus :: Lens' StopCrawlerScheduleResponse Int
+storsResponseStatus = lens _storsResponseStatus (\ s a -> s{_storsResponseStatus = a});
+
+instance NFData StopCrawlerScheduleResponse where
diff --git a/gen/Network/AWS/Glue/StopTrigger.hs b/gen/Network/AWS/Glue/StopTrigger.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/StopTrigger.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.StopTrigger
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Stops a specified trigger.
+--
+--
+module Network.AWS.Glue.StopTrigger
+    (
+    -- * Creating a Request
+      stopTrigger
+    , StopTrigger
+    -- * Request Lenses
+    , stName
+
+    -- * Destructuring the Response
+    , stopTriggerResponse
+    , StopTriggerResponse
+    -- * Response Lenses
+    , strsName
+    , strsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'stopTrigger' smart constructor.
+newtype StopTrigger = StopTrigger'
+  { _stName :: Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StopTrigger' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'stName' - The name of the trigger to stop.
+stopTrigger
+    :: Text -- ^ 'stName'
+    -> StopTrigger
+stopTrigger pName_ = StopTrigger' {_stName = pName_}
+
+
+-- | The name of the trigger to stop.
+stName :: Lens' StopTrigger Text
+stName = lens _stName (\ s a -> s{_stName = a});
+
+instance AWSRequest StopTrigger where
+        type Rs StopTrigger = StopTriggerResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 StopTriggerResponse' <$>
+                   (x .?> "Name") <*> (pure (fromEnum s)))
+
+instance Hashable StopTrigger where
+
+instance NFData StopTrigger where
+
+instance ToHeaders StopTrigger where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.StopTrigger" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON StopTrigger where
+        toJSON StopTrigger'{..}
+          = object (catMaybes [Just ("Name" .= _stName)])
+
+instance ToPath StopTrigger where
+        toPath = const "/"
+
+instance ToQuery StopTrigger where
+        toQuery = const mempty
+
+-- | /See:/ 'stopTriggerResponse' smart constructor.
+data StopTriggerResponse = StopTriggerResponse'
+  { _strsName           :: !(Maybe Text)
+  , _strsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StopTriggerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'strsName' - The name of the trigger that was stopped.
+--
+-- * 'strsResponseStatus' - -- | The response status code.
+stopTriggerResponse
+    :: Int -- ^ 'strsResponseStatus'
+    -> StopTriggerResponse
+stopTriggerResponse pResponseStatus_ =
+  StopTriggerResponse'
+  {_strsName = Nothing, _strsResponseStatus = pResponseStatus_}
+
+
+-- | The name of the trigger that was stopped.
+strsName :: Lens' StopTriggerResponse (Maybe Text)
+strsName = lens _strsName (\ s a -> s{_strsName = a});
+
+-- | -- | The response status code.
+strsResponseStatus :: Lens' StopTriggerResponse Int
+strsResponseStatus = lens _strsResponseStatus (\ s a -> s{_strsResponseStatus = a});
+
+instance NFData StopTriggerResponse where
diff --git a/gen/Network/AWS/Glue/Types.hs b/gen/Network/AWS/Glue/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/Types.hs
@@ -0,0 +1,789 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.Types
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Glue.Types
+    (
+    -- * Service Configuration
+      glue
+
+    -- * Errors
+    , _ValidationException
+    , _AccessDeniedException
+    , _CrawlerRunningException
+    , _SchedulerTransitioningException
+    , _SchedulerRunningException
+    , _ConcurrentRunsExceededException
+    , _NoScheduleException
+    , _OperationTimeoutException
+    , _CrawlerNotRunningException
+    , _VersionMismatchException
+    , _EntityNotFoundException
+    , _ConcurrentModificationException
+    , _SchedulerNotRunningException
+    , _InternalServiceException
+    , _InvalidInputException
+    , _ResourceNumberLimitExceededException
+    , _IdempotentParameterMismatchException
+    , _CrawlerStoppingException
+    , _AlreadyExistsException
+
+    -- * ConnectionPropertyKey
+    , ConnectionPropertyKey (..)
+
+    -- * ConnectionType
+    , ConnectionType (..)
+
+    -- * CrawlerState
+    , CrawlerState (..)
+
+    -- * DeleteBehavior
+    , DeleteBehavior (..)
+
+    -- * JobRunState
+    , JobRunState (..)
+
+    -- * LastCrawlStatus
+    , LastCrawlStatus (..)
+
+    -- * Logical
+    , Logical (..)
+
+    -- * LogicalOperator
+    , LogicalOperator (..)
+
+    -- * PrincipalType
+    , PrincipalType (..)
+
+    -- * ResourceType
+    , ResourceType (..)
+
+    -- * ScheduleState
+    , ScheduleState (..)
+
+    -- * TriggerState
+    , TriggerState (..)
+
+    -- * TriggerType
+    , TriggerType (..)
+
+    -- * UpdateBehavior
+    , UpdateBehavior (..)
+
+    -- * Action
+    , Action
+    , action
+    , aArguments
+    , aJobName
+
+    -- * BatchStopJobRunError
+    , BatchStopJobRunError
+    , batchStopJobRunError
+    , bsjreJobName
+    , bsjreJobRunId
+    , bsjreErrorDetail
+
+    -- * BatchStopJobRunSuccessfulSubmission
+    , BatchStopJobRunSuccessfulSubmission
+    , batchStopJobRunSuccessfulSubmission
+    , bsjrssJobName
+    , bsjrssJobRunId
+
+    -- * CatalogEntry
+    , CatalogEntry
+    , catalogEntry
+    , ceDatabaseName
+    , ceTableName
+
+    -- * CatalogImportStatus
+    , CatalogImportStatus
+    , catalogImportStatus
+    , cisImportedBy
+    , cisImportTime
+    , cisImportCompleted
+
+    -- * Classifier
+    , Classifier
+    , classifier
+    , cGrokClassifier
+
+    -- * CodeGenEdge
+    , CodeGenEdge
+    , codeGenEdge
+    , cgeTargetParameter
+    , cgeSource
+    , cgeTarget
+
+    -- * CodeGenNode
+    , CodeGenNode
+    , codeGenNode
+    , cgnLineNumber
+    , cgnId
+    , cgnNodeType
+    , cgnArgs
+
+    -- * CodeGenNodeArg
+    , CodeGenNodeArg
+    , codeGenNodeArg
+    , cgnaParam
+    , cgnaName
+    , cgnaValue
+
+    -- * Column
+    , Column
+    , column
+    , cType
+    , cComment
+    , cName
+
+    -- * Condition
+    , Condition
+    , condition
+    , cState
+    , cJobName
+    , cLogicalOperator
+
+    -- * Connection
+    , Connection
+    , connection
+    , conCreationTime
+    , conLastUpdatedBy
+    , conConnectionProperties
+    , conLastUpdatedTime
+    , conMatchCriteria
+    , conPhysicalConnectionRequirements
+    , conName
+    , conDescription
+    , conConnectionType
+
+    -- * ConnectionInput
+    , ConnectionInput
+    , connectionInput
+    , ciConnectionProperties
+    , ciMatchCriteria
+    , ciPhysicalConnectionRequirements
+    , ciName
+    , ciDescription
+    , ciConnectionType
+
+    -- * ConnectionsList
+    , ConnectionsList
+    , connectionsList
+    , clConnections
+
+    -- * Crawler
+    , Crawler
+    , crawler
+    , craCreationTime
+    , craState
+    , craSchemaChangePolicy
+    , craLastUpdated
+    , craSchedule
+    , craLastCrawl
+    , craCrawlElapsedTime
+    , craClassifiers
+    , craRole
+    , craName
+    , craTargets
+    , craVersion
+    , craDatabaseName
+    , craTablePrefix
+    , craDescription
+
+    -- * CrawlerMetrics
+    , CrawlerMetrics
+    , crawlerMetrics
+    , cmLastRuntimeSeconds
+    , cmTablesCreated
+    , cmStillEstimating
+    , cmMedianRuntimeSeconds
+    , cmTimeLeftSeconds
+    , cmTablesDeleted
+    , cmTablesUpdated
+    , cmCrawlerName
+
+    -- * CrawlerTargets
+    , CrawlerTargets
+    , crawlerTargets
+    , ctS3Targets
+    , ctJdbcTargets
+
+    -- * CreateGrokClassifierRequest
+    , CreateGrokClassifierRequest
+    , createGrokClassifierRequest
+    , cgcrCustomPatterns
+    , cgcrClassification
+    , cgcrName
+    , cgcrGrokPattern
+
+    -- * Database
+    , Database
+    , database
+    , dLocationURI
+    , dParameters
+    , dDescription
+    , dCreateTime
+    , dName
+
+    -- * DatabaseInput
+    , DatabaseInput
+    , databaseInput
+    , diLocationURI
+    , diParameters
+    , diDescription
+    , diName
+
+    -- * DevEndpoint
+    , DevEndpoint
+    , devEndpoint
+    , deStatus
+    , deFailureReason
+    , deEndpointName
+    , deExtraPythonLibsS3Path
+    , deLastUpdateStatus
+    , deSecurityGroupIds
+    , deLastModifiedTimestamp
+    , deVPCId
+    , dePublicKey
+    , deSubnetId
+    , deNumberOfNodes
+    , dePublicAddress
+    , deAvailabilityZone
+    , deZeppelinRemoteSparkInterpreterPort
+    , deExtraJARsS3Path
+    , deCreatedTimestamp
+    , deYarnEndpointAddress
+    , deRoleARN
+
+    -- * DevEndpointCustomLibraries
+    , DevEndpointCustomLibraries
+    , devEndpointCustomLibraries
+    , declExtraPythonLibsS3Path
+    , declExtraJARsS3Path
+
+    -- * ErrorDetail
+    , ErrorDetail
+    , errorDetail
+    , edErrorCode
+    , edErrorMessage
+
+    -- * ExecutionProperty
+    , ExecutionProperty
+    , executionProperty
+    , epMaxConcurrentRuns
+
+    -- * GetConnectionsFilter
+    , GetConnectionsFilter
+    , getConnectionsFilter
+    , gcfMatchCriteria
+    , gcfConnectionType
+
+    -- * GrokClassifier
+    , GrokClassifier
+    , grokClassifier
+    , gcCreationTime
+    , gcLastUpdated
+    , gcVersion
+    , gcCustomPatterns
+    , gcName
+    , gcClassification
+    , gcGrokPattern
+
+    -- * JdbcTarget
+    , JdbcTarget
+    , jdbcTarget
+    , jtPath
+    , jtConnectionName
+    , jtExclusions
+
+    -- * Job
+    , Job
+    , job
+    , jCommand
+    , jLastModifiedOn
+    , jConnections
+    , jRole
+    , jName
+    , jLogURI
+    , jMaxRetries
+    , jExecutionProperty
+    , jAllocatedCapacity
+    , jDefaultArguments
+    , jDescription
+    , jCreatedOn
+
+    -- * JobBookmarkEntry
+    , JobBookmarkEntry
+    , jobBookmarkEntry
+    , jbeJobName
+    , jbeRun
+    , jbeVersion
+    , jbeAttempt
+    , jbeJobBookmark
+
+    -- * JobCommand
+    , JobCommand
+    , jobCommand
+    , jcScriptLocation
+    , jcName
+
+    -- * JobRun
+    , JobRun
+    , jobRun
+    , jrCompletedOn
+    , jrTriggerName
+    , jrLastModifiedOn
+    , jrArguments
+    , jrJobName
+    , jrStartedOn
+    , jrJobRunState
+    , jrPredecessorRuns
+    , jrPreviousRunId
+    , jrId
+    , jrAttempt
+    , jrAllocatedCapacity
+    , jrErrorMessage
+
+    -- * JobUpdate
+    , JobUpdate
+    , jobUpdate
+    , juCommand
+    , juConnections
+    , juRole
+    , juLogURI
+    , juMaxRetries
+    , juExecutionProperty
+    , juAllocatedCapacity
+    , juDefaultArguments
+    , juDescription
+
+    -- * LastCrawlInfo
+    , LastCrawlInfo
+    , lastCrawlInfo
+    , lciStatus
+    , lciStartTime
+    , lciLogStream
+    , lciLogGroup
+    , lciMessagePrefix
+    , lciErrorMessage
+
+    -- * Location
+    , Location
+    , location
+    , lJdbc
+    , lS3
+
+    -- * MappingEntry
+    , MappingEntry
+    , mappingEntry
+    , meTargetTable
+    , meSourceType
+    , meSourceTable
+    , meTargetType
+    , meTargetPath
+    , meSourcePath
+
+    -- * Order
+    , Order
+    , order
+    , oColumn
+    , oSortOrder
+
+    -- * Partition
+    , Partition
+    , partition
+    , pCreationTime
+    , pValues
+    , pLastAnalyzedTime
+    , pStorageDescriptor
+    , pDatabaseName
+    , pParameters
+    , pLastAccessTime
+    , pTableName
+
+    -- * PartitionError
+    , PartitionError
+    , partitionError
+    , pePartitionValues
+    , peErrorDetail
+
+    -- * PartitionInput
+    , PartitionInput
+    , partitionInput
+    , piValues
+    , piLastAnalyzedTime
+    , piStorageDescriptor
+    , piParameters
+    , piLastAccessTime
+
+    -- * PartitionValueList
+    , PartitionValueList
+    , partitionValueList
+    , pvlValues
+
+    -- * PhysicalConnectionRequirements
+    , PhysicalConnectionRequirements
+    , physicalConnectionRequirements
+    , pcrSecurityGroupIdList
+    , pcrSubnetId
+    , pcrAvailabilityZone
+
+    -- * Predecessor
+    , Predecessor
+    , predecessor
+    , pJobName
+    , pRunId
+
+    -- * Predicate
+    , Predicate
+    , predicate
+    , pLogical
+    , pConditions
+
+    -- * ResourceURI
+    , ResourceURI
+    , resourceURI
+    , ruResourceType
+    , ruURI
+
+    -- * S3Target
+    , S3Target
+    , s3Target
+    , stPath
+    , stExclusions
+
+    -- * Schedule
+    , Schedule
+    , schedule
+    , sState
+    , sScheduleExpression
+
+    -- * SchemaChangePolicy
+    , SchemaChangePolicy
+    , schemaChangePolicy
+    , scpDeleteBehavior
+    , scpUpdateBehavior
+
+    -- * Segment
+    , Segment
+    , segment
+    , sSegmentNumber
+    , sTotalSegments
+
+    -- * SerDeInfo
+    , SerDeInfo
+    , serDeInfo
+    , sdiSerializationLibrary
+    , sdiName
+    , sdiParameters
+
+    -- * SkewedInfo
+    , SkewedInfo
+    , skewedInfo
+    , siSkewedColumnValueLocationMaps
+    , siSkewedColumnValues
+    , siSkewedColumnNames
+
+    -- * StorageDescriptor
+    , StorageDescriptor
+    , storageDescriptor
+    , sdSortColumns
+    , sdCompressed
+    , sdLocation
+    , sdBucketColumns
+    , sdSerdeInfo
+    , sdOutputFormat
+    , sdNumberOfBuckets
+    , sdStoredAsSubDirectories
+    , sdParameters
+    , sdInputFormat
+    , sdSkewedInfo
+    , sdColumns
+
+    -- * Table
+    , Table
+    , table
+    , tRetention
+    , tCreatedBy
+    , tTableType
+    , tOwner
+    , tViewOriginalText
+    , tUpdateTime
+    , tViewExpandedText
+    , tLastAnalyzedTime
+    , tStorageDescriptor
+    , tDatabaseName
+    , tParameters
+    , tLastAccessTime
+    , tDescription
+    , tPartitionKeys
+    , tCreateTime
+    , tName
+
+    -- * TableError
+    , TableError
+    , tableError
+    , teTableName
+    , teErrorDetail
+
+    -- * TableInput
+    , TableInput
+    , tableInput
+    , tiRetention
+    , tiTableType
+    , tiOwner
+    , tiViewOriginalText
+    , tiViewExpandedText
+    , tiLastAnalyzedTime
+    , tiStorageDescriptor
+    , tiParameters
+    , tiLastAccessTime
+    , tiDescription
+    , tiPartitionKeys
+    , tiName
+
+    -- * TableVersion
+    , TableVersion
+    , tableVersion
+    , tvVersionId
+    , tvTable
+
+    -- * Trigger
+    , Trigger
+    , trigger
+    , triState
+    , triActions
+    , triSchedule
+    , triPredicate
+    , triName
+    , triId
+    , triType
+    , triDescription
+
+    -- * TriggerUpdate
+    , TriggerUpdate
+    , triggerUpdate
+    , tuActions
+    , tuSchedule
+    , tuPredicate
+    , tuName
+    , tuDescription
+
+    -- * UpdateGrokClassifierRequest
+    , UpdateGrokClassifierRequest
+    , updateGrokClassifierRequest
+    , ugcrClassification
+    , ugcrCustomPatterns
+    , ugcrGrokPattern
+    , ugcrName
+
+    -- * UserDefinedFunction
+    , UserDefinedFunction
+    , userDefinedFunction
+    , udfOwnerName
+    , udfResourceURIs
+    , udfFunctionName
+    , udfOwnerType
+    , udfCreateTime
+    , udfClassName
+
+    -- * UserDefinedFunctionInput
+    , UserDefinedFunctionInput
+    , userDefinedFunctionInput
+    , udfiOwnerName
+    , udfiResourceURIs
+    , udfiFunctionName
+    , udfiOwnerType
+    , udfiClassName
+    ) where
+
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Glue.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Sign.V4
+
+-- | API version @2017-03-31@ of the Amazon Glue SDK configuration.
+glue :: Service
+glue =
+  Service
+  { _svcAbbrev = "Glue"
+  , _svcSigner = v4
+  , _svcPrefix = "glue"
+  , _svcVersion = "2017-03-31"
+  , _svcEndpoint = defaultEndpoint glue
+  , _svcTimeout = Just 70
+  , _svcCheck = statusSuccess
+  , _svcError = parseJSONError "Glue"
+  , _svcRetry = retry
+  }
+  where
+    retry =
+      Exponential
+      { _retryBase = 5.0e-2
+      , _retryGrowth = 2
+      , _retryAttempts = 5
+      , _retryCheck = check
+      }
+    check e
+      | has (hasCode "ThrottledException" . hasStatus 400) e =
+        Just "throttled_exception"
+      | has (hasStatus 429) e = Just "too_many_requests"
+      | has (hasCode "ThrottlingException" . hasStatus 400) e =
+        Just "throttling_exception"
+      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+      | has (hasStatus 504) e = Just "gateway_timeout"
+      | has (hasStatus 502) e = Just "bad_gateway"
+      | has (hasStatus 503) e = Just "service_unavailable"
+      | has (hasStatus 500) e = Just "general_server_error"
+      | has (hasStatus 509) e = Just "limit_exceeded"
+      | otherwise = Nothing
+
+
+-- | A value could not be validated.
+--
+--
+_ValidationException :: AsError a => Getting (First ServiceError) a ServiceError
+_ValidationException = _MatchServiceError glue "ValidationException"
+
+
+-- | Access to a resource was denied.
+--
+--
+_AccessDeniedException :: AsError a => Getting (First ServiceError) a ServiceError
+_AccessDeniedException = _MatchServiceError glue "AccessDeniedException"
+
+
+-- | The operation cannot be performed because the crawler is already running.
+--
+--
+_CrawlerRunningException :: AsError a => Getting (First ServiceError) a ServiceError
+_CrawlerRunningException = _MatchServiceError glue "CrawlerRunningException"
+
+
+-- | The specified scheduler is transitioning.
+--
+--
+_SchedulerTransitioningException :: AsError a => Getting (First ServiceError) a ServiceError
+_SchedulerTransitioningException =
+  _MatchServiceError glue "SchedulerTransitioningException"
+
+
+-- | The specified scheduler is already running.
+--
+--
+_SchedulerRunningException :: AsError a => Getting (First ServiceError) a ServiceError
+_SchedulerRunningException = _MatchServiceError glue "SchedulerRunningException"
+
+
+-- | Too many jobs are being run concurrently.
+--
+--
+_ConcurrentRunsExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_ConcurrentRunsExceededException =
+  _MatchServiceError glue "ConcurrentRunsExceededException"
+
+
+-- | There is no applicable schedule.
+--
+--
+_NoScheduleException :: AsError a => Getting (First ServiceError) a ServiceError
+_NoScheduleException = _MatchServiceError glue "NoScheduleException"
+
+
+-- | The operation timed out.
+--
+--
+_OperationTimeoutException :: AsError a => Getting (First ServiceError) a ServiceError
+_OperationTimeoutException = _MatchServiceError glue "OperationTimeoutException"
+
+
+-- | The specified crawler is not running.
+--
+--
+_CrawlerNotRunningException :: AsError a => Getting (First ServiceError) a ServiceError
+_CrawlerNotRunningException =
+  _MatchServiceError glue "CrawlerNotRunningException"
+
+
+-- | There was a version conflict.
+--
+--
+_VersionMismatchException :: AsError a => Getting (First ServiceError) a ServiceError
+_VersionMismatchException = _MatchServiceError glue "VersionMismatchException"
+
+
+-- | A specified entity does not exist
+--
+--
+_EntityNotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_EntityNotFoundException = _MatchServiceError glue "EntityNotFoundException"
+
+
+-- | Two processes are trying to modify a resource simultaneously.
+--
+--
+_ConcurrentModificationException :: AsError a => Getting (First ServiceError) a ServiceError
+_ConcurrentModificationException =
+  _MatchServiceError glue "ConcurrentModificationException"
+
+
+-- | The specified scheduler is not running.
+--
+--
+_SchedulerNotRunningException :: AsError a => Getting (First ServiceError) a ServiceError
+_SchedulerNotRunningException =
+  _MatchServiceError glue "SchedulerNotRunningException"
+
+
+-- | An internal service error occurred.
+--
+--
+_InternalServiceException :: AsError a => Getting (First ServiceError) a ServiceError
+_InternalServiceException = _MatchServiceError glue "InternalServiceException"
+
+
+-- | The input provided was not valid.
+--
+--
+_InvalidInputException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidInputException = _MatchServiceError glue "InvalidInputException"
+
+
+-- | A resource numerical limit was exceeded.
+--
+--
+_ResourceNumberLimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_ResourceNumberLimitExceededException =
+  _MatchServiceError glue "ResourceNumberLimitExceededException"
+
+
+-- | The same unique identifier was associated with two different records.
+--
+--
+_IdempotentParameterMismatchException :: AsError a => Getting (First ServiceError) a ServiceError
+_IdempotentParameterMismatchException =
+  _MatchServiceError glue "IdempotentParameterMismatchException"
+
+
+-- | The specified crawler is stopping.
+--
+--
+_CrawlerStoppingException :: AsError a => Getting (First ServiceError) a ServiceError
+_CrawlerStoppingException = _MatchServiceError glue "CrawlerStoppingException"
+
+
+-- | A resource to be created or added already exists.
+--
+--
+_AlreadyExistsException :: AsError a => Getting (First ServiceError) a ServiceError
+_AlreadyExistsException = _MatchServiceError glue "AlreadyExistsException"
+
diff --git a/gen/Network/AWS/Glue/Types/Product.hs b/gen/Network/AWS/Glue/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/Types/Product.hs
@@ -0,0 +1,4398 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.Types.Product
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Glue.Types.Product where
+
+import Network.AWS.Glue.Types.Sum
+import Network.AWS.Lens
+import Network.AWS.Prelude
+
+-- | Defines an action to be initiated by a trigger.
+--
+--
+--
+-- /See:/ 'action' smart constructor.
+data Action = Action'
+  { _aArguments :: !(Maybe (Map Text Text))
+  , _aJobName   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Action' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aArguments' - Arguments to be passed to the job.
+--
+-- * 'aJobName' - The name of a job to be executed.
+action
+    :: Action
+action = Action' {_aArguments = Nothing, _aJobName = Nothing}
+
+
+-- | Arguments to be passed to the job.
+aArguments :: Lens' Action (HashMap Text Text)
+aArguments = lens _aArguments (\ s a -> s{_aArguments = a}) . _Default . _Map;
+
+-- | The name of a job to be executed.
+aJobName :: Lens' Action (Maybe Text)
+aJobName = lens _aJobName (\ s a -> s{_aJobName = a});
+
+instance FromJSON Action where
+        parseJSON
+          = withObject "Action"
+              (\ x ->
+                 Action' <$>
+                   (x .:? "Arguments" .!= mempty) <*> (x .:? "JobName"))
+
+instance Hashable Action where
+
+instance NFData Action where
+
+instance ToJSON Action where
+        toJSON Action'{..}
+          = object
+              (catMaybes
+                 [("Arguments" .=) <$> _aArguments,
+                  ("JobName" .=) <$> _aJobName])
+
+-- | Details about the job run and the error that occurred while trying to submit it for stopping.
+--
+--
+--
+-- /See:/ 'batchStopJobRunError' smart constructor.
+data BatchStopJobRunError = BatchStopJobRunError'
+  { _bsjreJobName     :: !(Maybe Text)
+  , _bsjreJobRunId    :: !(Maybe Text)
+  , _bsjreErrorDetail :: !(Maybe ErrorDetail)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchStopJobRunError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bsjreJobName' - The name of the job.
+--
+-- * 'bsjreJobRunId' - The job run Id.
+--
+-- * 'bsjreErrorDetail' - The details of the error that occurred.
+batchStopJobRunError
+    :: BatchStopJobRunError
+batchStopJobRunError =
+  BatchStopJobRunError'
+  { _bsjreJobName = Nothing
+  , _bsjreJobRunId = Nothing
+  , _bsjreErrorDetail = Nothing
+  }
+
+
+-- | The name of the job.
+bsjreJobName :: Lens' BatchStopJobRunError (Maybe Text)
+bsjreJobName = lens _bsjreJobName (\ s a -> s{_bsjreJobName = a});
+
+-- | The job run Id.
+bsjreJobRunId :: Lens' BatchStopJobRunError (Maybe Text)
+bsjreJobRunId = lens _bsjreJobRunId (\ s a -> s{_bsjreJobRunId = a});
+
+-- | The details of the error that occurred.
+bsjreErrorDetail :: Lens' BatchStopJobRunError (Maybe ErrorDetail)
+bsjreErrorDetail = lens _bsjreErrorDetail (\ s a -> s{_bsjreErrorDetail = a});
+
+instance FromJSON BatchStopJobRunError where
+        parseJSON
+          = withObject "BatchStopJobRunError"
+              (\ x ->
+                 BatchStopJobRunError' <$>
+                   (x .:? "JobName") <*> (x .:? "JobRunId") <*>
+                     (x .:? "ErrorDetail"))
+
+instance Hashable BatchStopJobRunError where
+
+instance NFData BatchStopJobRunError where
+
+-- | Details about the job run which is submitted successfully for stopping.
+--
+--
+--
+-- /See:/ 'batchStopJobRunSuccessfulSubmission' smart constructor.
+data BatchStopJobRunSuccessfulSubmission = BatchStopJobRunSuccessfulSubmission'
+  { _bsjrssJobName  :: !(Maybe Text)
+  , _bsjrssJobRunId :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'BatchStopJobRunSuccessfulSubmission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bsjrssJobName' - The name of the job.
+--
+-- * 'bsjrssJobRunId' - The job run Id.
+batchStopJobRunSuccessfulSubmission
+    :: BatchStopJobRunSuccessfulSubmission
+batchStopJobRunSuccessfulSubmission =
+  BatchStopJobRunSuccessfulSubmission'
+  {_bsjrssJobName = Nothing, _bsjrssJobRunId = Nothing}
+
+
+-- | The name of the job.
+bsjrssJobName :: Lens' BatchStopJobRunSuccessfulSubmission (Maybe Text)
+bsjrssJobName = lens _bsjrssJobName (\ s a -> s{_bsjrssJobName = a});
+
+-- | The job run Id.
+bsjrssJobRunId :: Lens' BatchStopJobRunSuccessfulSubmission (Maybe Text)
+bsjrssJobRunId = lens _bsjrssJobRunId (\ s a -> s{_bsjrssJobRunId = a});
+
+instance FromJSON BatchStopJobRunSuccessfulSubmission
+         where
+        parseJSON
+          = withObject "BatchStopJobRunSuccessfulSubmission"
+              (\ x ->
+                 BatchStopJobRunSuccessfulSubmission' <$>
+                   (x .:? "JobName") <*> (x .:? "JobRunId"))
+
+instance Hashable BatchStopJobRunSuccessfulSubmission
+         where
+
+instance NFData BatchStopJobRunSuccessfulSubmission
+         where
+
+-- | Specifies a table definition in the Data Catalog.
+--
+--
+--
+-- /See:/ 'catalogEntry' smart constructor.
+data CatalogEntry = CatalogEntry'
+  { _ceDatabaseName :: !Text
+  , _ceTableName    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ceDatabaseName' - The database in which the table metadata resides.
+--
+-- * 'ceTableName' - The name of the table in question.
+catalogEntry
+    :: Text -- ^ 'ceDatabaseName'
+    -> Text -- ^ 'ceTableName'
+    -> CatalogEntry
+catalogEntry pDatabaseName_ pTableName_ =
+  CatalogEntry' {_ceDatabaseName = pDatabaseName_, _ceTableName = pTableName_}
+
+
+-- | The database in which the table metadata resides.
+ceDatabaseName :: Lens' CatalogEntry Text
+ceDatabaseName = lens _ceDatabaseName (\ s a -> s{_ceDatabaseName = a});
+
+-- | The name of the table in question.
+ceTableName :: Lens' CatalogEntry Text
+ceTableName = lens _ceTableName (\ s a -> s{_ceTableName = a});
+
+instance Hashable CatalogEntry where
+
+instance NFData CatalogEntry where
+
+instance ToJSON CatalogEntry where
+        toJSON CatalogEntry'{..}
+          = object
+              (catMaybes
+                 [Just ("DatabaseName" .= _ceDatabaseName),
+                  Just ("TableName" .= _ceTableName)])
+
+-- | A structure containing migration status information.
+--
+--
+--
+-- /See:/ 'catalogImportStatus' smart constructor.
+data CatalogImportStatus = CatalogImportStatus'
+  { _cisImportedBy      :: !(Maybe Text)
+  , _cisImportTime      :: !(Maybe POSIX)
+  , _cisImportCompleted :: !(Maybe Bool)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CatalogImportStatus' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cisImportedBy' - The name of the person who initiated the migration.
+--
+-- * 'cisImportTime' - The time that the migration was started.
+--
+-- * 'cisImportCompleted' - True if the migration has completed, or False otherwise.
+catalogImportStatus
+    :: CatalogImportStatus
+catalogImportStatus =
+  CatalogImportStatus'
+  { _cisImportedBy = Nothing
+  , _cisImportTime = Nothing
+  , _cisImportCompleted = Nothing
+  }
+
+
+-- | The name of the person who initiated the migration.
+cisImportedBy :: Lens' CatalogImportStatus (Maybe Text)
+cisImportedBy = lens _cisImportedBy (\ s a -> s{_cisImportedBy = a});
+
+-- | The time that the migration was started.
+cisImportTime :: Lens' CatalogImportStatus (Maybe UTCTime)
+cisImportTime = lens _cisImportTime (\ s a -> s{_cisImportTime = a}) . mapping _Time;
+
+-- | True if the migration has completed, or False otherwise.
+cisImportCompleted :: Lens' CatalogImportStatus (Maybe Bool)
+cisImportCompleted = lens _cisImportCompleted (\ s a -> s{_cisImportCompleted = a});
+
+instance FromJSON CatalogImportStatus where
+        parseJSON
+          = withObject "CatalogImportStatus"
+              (\ x ->
+                 CatalogImportStatus' <$>
+                   (x .:? "ImportedBy") <*> (x .:? "ImportTime") <*>
+                     (x .:? "ImportCompleted"))
+
+instance Hashable CatalogImportStatus where
+
+instance NFData CatalogImportStatus where
+
+-- | Classifiers are written in Python and triggered during a Crawl Task. You can write your own Classifiers to best categorize your data sources and specify the appropriate schemas to use for them. A Classifier first checks whether a given file is in a format it can handle, and then, if so, creates a schema in the form of a @StructType@ object that matches that data format.
+--
+--
+--
+-- /See:/ 'classifier' smart constructor.
+newtype Classifier = Classifier'
+  { _cGrokClassifier :: Maybe GrokClassifier
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Classifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cGrokClassifier' - A GrokClassifier object.
+classifier
+    :: Classifier
+classifier = Classifier' {_cGrokClassifier = Nothing}
+
+
+-- | A GrokClassifier object.
+cGrokClassifier :: Lens' Classifier (Maybe GrokClassifier)
+cGrokClassifier = lens _cGrokClassifier (\ s a -> s{_cGrokClassifier = a});
+
+instance FromJSON Classifier where
+        parseJSON
+          = withObject "Classifier"
+              (\ x -> Classifier' <$> (x .:? "GrokClassifier"))
+
+instance Hashable Classifier where
+
+instance NFData Classifier where
+
+-- | Represents a directional edge in a directed acyclic graph (DAG).
+--
+--
+--
+-- /See:/ 'codeGenEdge' smart constructor.
+data CodeGenEdge = CodeGenEdge'
+  { _cgeTargetParameter :: !(Maybe Text)
+  , _cgeSource          :: !Text
+  , _cgeTarget          :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CodeGenEdge' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgeTargetParameter' - The target of the edge.
+--
+-- * 'cgeSource' - The ID of the node at which the edge starts.
+--
+-- * 'cgeTarget' - The ID of the node at which the edge ends.
+codeGenEdge
+    :: Text -- ^ 'cgeSource'
+    -> Text -- ^ 'cgeTarget'
+    -> CodeGenEdge
+codeGenEdge pSource_ pTarget_ =
+  CodeGenEdge'
+  {_cgeTargetParameter = Nothing, _cgeSource = pSource_, _cgeTarget = pTarget_}
+
+
+-- | The target of the edge.
+cgeTargetParameter :: Lens' CodeGenEdge (Maybe Text)
+cgeTargetParameter = lens _cgeTargetParameter (\ s a -> s{_cgeTargetParameter = a});
+
+-- | The ID of the node at which the edge starts.
+cgeSource :: Lens' CodeGenEdge Text
+cgeSource = lens _cgeSource (\ s a -> s{_cgeSource = a});
+
+-- | The ID of the node at which the edge ends.
+cgeTarget :: Lens' CodeGenEdge Text
+cgeTarget = lens _cgeTarget (\ s a -> s{_cgeTarget = a});
+
+instance FromJSON CodeGenEdge where
+        parseJSON
+          = withObject "CodeGenEdge"
+              (\ x ->
+                 CodeGenEdge' <$>
+                   (x .:? "TargetParameter") <*> (x .: "Source") <*>
+                     (x .: "Target"))
+
+instance Hashable CodeGenEdge where
+
+instance NFData CodeGenEdge where
+
+instance ToJSON CodeGenEdge where
+        toJSON CodeGenEdge'{..}
+          = object
+              (catMaybes
+                 [("TargetParameter" .=) <$> _cgeTargetParameter,
+                  Just ("Source" .= _cgeSource),
+                  Just ("Target" .= _cgeTarget)])
+
+-- | Represents a node in a directed acyclic graph (DAG)
+--
+--
+--
+-- /See:/ 'codeGenNode' smart constructor.
+data CodeGenNode = CodeGenNode'
+  { _cgnLineNumber :: !(Maybe Int)
+  , _cgnId         :: !Text
+  , _cgnNodeType   :: !Text
+  , _cgnArgs       :: ![CodeGenNodeArg]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CodeGenNode' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgnLineNumber' - The line number of the node.
+--
+-- * 'cgnId' - A node identifier that is unique within the node's graph.
+--
+-- * 'cgnNodeType' - The type of node this is.
+--
+-- * 'cgnArgs' - Properties of the node, in the form of name-value pairs.
+codeGenNode
+    :: Text -- ^ 'cgnId'
+    -> Text -- ^ 'cgnNodeType'
+    -> CodeGenNode
+codeGenNode pId_ pNodeType_ =
+  CodeGenNode'
+  { _cgnLineNumber = Nothing
+  , _cgnId = pId_
+  , _cgnNodeType = pNodeType_
+  , _cgnArgs = mempty
+  }
+
+
+-- | The line number of the node.
+cgnLineNumber :: Lens' CodeGenNode (Maybe Int)
+cgnLineNumber = lens _cgnLineNumber (\ s a -> s{_cgnLineNumber = a});
+
+-- | A node identifier that is unique within the node's graph.
+cgnId :: Lens' CodeGenNode Text
+cgnId = lens _cgnId (\ s a -> s{_cgnId = a});
+
+-- | The type of node this is.
+cgnNodeType :: Lens' CodeGenNode Text
+cgnNodeType = lens _cgnNodeType (\ s a -> s{_cgnNodeType = a});
+
+-- | Properties of the node, in the form of name-value pairs.
+cgnArgs :: Lens' CodeGenNode [CodeGenNodeArg]
+cgnArgs = lens _cgnArgs (\ s a -> s{_cgnArgs = a}) . _Coerce;
+
+instance FromJSON CodeGenNode where
+        parseJSON
+          = withObject "CodeGenNode"
+              (\ x ->
+                 CodeGenNode' <$>
+                   (x .:? "LineNumber") <*> (x .: "Id") <*>
+                     (x .: "NodeType")
+                     <*> (x .:? "Args" .!= mempty))
+
+instance Hashable CodeGenNode where
+
+instance NFData CodeGenNode where
+
+instance ToJSON CodeGenNode where
+        toJSON CodeGenNode'{..}
+          = object
+              (catMaybes
+                 [("LineNumber" .=) <$> _cgnLineNumber,
+                  Just ("Id" .= _cgnId),
+                  Just ("NodeType" .= _cgnNodeType),
+                  Just ("Args" .= _cgnArgs)])
+
+-- | An argument or property of a node.
+--
+--
+--
+-- /See:/ 'codeGenNodeArg' smart constructor.
+data CodeGenNodeArg = CodeGenNodeArg'
+  { _cgnaParam :: !(Maybe Bool)
+  , _cgnaName  :: !Text
+  , _cgnaValue :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CodeGenNodeArg' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgnaParam' - True if the value is used as a parameter.
+--
+-- * 'cgnaName' - The name of the argument or property.
+--
+-- * 'cgnaValue' - The value of the argument or property.
+codeGenNodeArg
+    :: Text -- ^ 'cgnaName'
+    -> Text -- ^ 'cgnaValue'
+    -> CodeGenNodeArg
+codeGenNodeArg pName_ pValue_ =
+  CodeGenNodeArg'
+  {_cgnaParam = Nothing, _cgnaName = pName_, _cgnaValue = pValue_}
+
+
+-- | True if the value is used as a parameter.
+cgnaParam :: Lens' CodeGenNodeArg (Maybe Bool)
+cgnaParam = lens _cgnaParam (\ s a -> s{_cgnaParam = a});
+
+-- | The name of the argument or property.
+cgnaName :: Lens' CodeGenNodeArg Text
+cgnaName = lens _cgnaName (\ s a -> s{_cgnaName = a});
+
+-- | The value of the argument or property.
+cgnaValue :: Lens' CodeGenNodeArg Text
+cgnaValue = lens _cgnaValue (\ s a -> s{_cgnaValue = a});
+
+instance FromJSON CodeGenNodeArg where
+        parseJSON
+          = withObject "CodeGenNodeArg"
+              (\ x ->
+                 CodeGenNodeArg' <$>
+                   (x .:? "Param") <*> (x .: "Name") <*> (x .: "Value"))
+
+instance Hashable CodeGenNodeArg where
+
+instance NFData CodeGenNodeArg where
+
+instance ToJSON CodeGenNodeArg where
+        toJSON CodeGenNodeArg'{..}
+          = object
+              (catMaybes
+                 [("Param" .=) <$> _cgnaParam,
+                  Just ("Name" .= _cgnaName),
+                  Just ("Value" .= _cgnaValue)])
+
+-- | A column in a @Table@ .
+--
+--
+--
+-- /See:/ 'column' smart constructor.
+data Column = Column'
+  { _cType    :: !(Maybe Text)
+  , _cComment :: !(Maybe Text)
+  , _cName    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Column' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cType' - The datatype of data in the @Column@ .
+--
+-- * 'cComment' - Free-form text comment.
+--
+-- * 'cName' - The name of the @Column@ .
+column
+    :: Text -- ^ 'cName'
+    -> Column
+column pName_ = Column' {_cType = Nothing, _cComment = Nothing, _cName = pName_}
+
+
+-- | The datatype of data in the @Column@ .
+cType :: Lens' Column (Maybe Text)
+cType = lens _cType (\ s a -> s{_cType = a});
+
+-- | Free-form text comment.
+cComment :: Lens' Column (Maybe Text)
+cComment = lens _cComment (\ s a -> s{_cComment = a});
+
+-- | The name of the @Column@ .
+cName :: Lens' Column Text
+cName = lens _cName (\ s a -> s{_cName = a});
+
+instance FromJSON Column where
+        parseJSON
+          = withObject "Column"
+              (\ x ->
+                 Column' <$>
+                   (x .:? "Type") <*> (x .:? "Comment") <*>
+                     (x .: "Name"))
+
+instance Hashable Column where
+
+instance NFData Column where
+
+instance ToJSON Column where
+        toJSON Column'{..}
+          = object
+              (catMaybes
+                 [("Type" .=) <$> _cType,
+                  ("Comment" .=) <$> _cComment,
+                  Just ("Name" .= _cName)])
+
+-- | Defines a condition under which a trigger fires.
+--
+--
+--
+-- /See:/ 'condition' smart constructor.
+data Condition = Condition'
+  { _cState           :: !(Maybe JobRunState)
+  , _cJobName         :: !(Maybe Text)
+  , _cLogicalOperator :: !(Maybe LogicalOperator)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Condition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cState' - The condition state.
+--
+-- * 'cJobName' - The name of the job in question.
+--
+-- * 'cLogicalOperator' - A logical operator.
+condition
+    :: Condition
+condition =
+  Condition'
+  {_cState = Nothing, _cJobName = Nothing, _cLogicalOperator = Nothing}
+
+
+-- | The condition state.
+cState :: Lens' Condition (Maybe JobRunState)
+cState = lens _cState (\ s a -> s{_cState = a});
+
+-- | The name of the job in question.
+cJobName :: Lens' Condition (Maybe Text)
+cJobName = lens _cJobName (\ s a -> s{_cJobName = a});
+
+-- | A logical operator.
+cLogicalOperator :: Lens' Condition (Maybe LogicalOperator)
+cLogicalOperator = lens _cLogicalOperator (\ s a -> s{_cLogicalOperator = a});
+
+instance FromJSON Condition where
+        parseJSON
+          = withObject "Condition"
+              (\ x ->
+                 Condition' <$>
+                   (x .:? "State") <*> (x .:? "JobName") <*>
+                     (x .:? "LogicalOperator"))
+
+instance Hashable Condition where
+
+instance NFData Condition where
+
+instance ToJSON Condition where
+        toJSON Condition'{..}
+          = object
+              (catMaybes
+                 [("State" .=) <$> _cState,
+                  ("JobName" .=) <$> _cJobName,
+                  ("LogicalOperator" .=) <$> _cLogicalOperator])
+
+-- | Defines a connection to a data source.
+--
+--
+--
+-- /See:/ 'connection' smart constructor.
+data Connection = Connection'
+  { _conCreationTime :: !(Maybe POSIX)
+  , _conLastUpdatedBy :: !(Maybe Text)
+  , _conConnectionProperties :: !(Maybe (Map ConnectionPropertyKey Text))
+  , _conLastUpdatedTime :: !(Maybe POSIX)
+  , _conMatchCriteria :: !(Maybe [Text])
+  , _conPhysicalConnectionRequirements :: !(Maybe PhysicalConnectionRequirements)
+  , _conName :: !(Maybe Text)
+  , _conDescription :: !(Maybe Text)
+  , _conConnectionType :: !(Maybe ConnectionType)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Connection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'conCreationTime' - The time this connection definition was created.
+--
+-- * 'conLastUpdatedBy' - The user, group or role that last updated this connection definition.
+--
+-- * 'conConnectionProperties' - A list of key-value pairs used as parameters for this connection.
+--
+-- * 'conLastUpdatedTime' - The last time this connection definition was updated.
+--
+-- * 'conMatchCriteria' - A list of criteria that can be used in selecting this connection.
+--
+-- * 'conPhysicalConnectionRequirements' - A map of physical connection requirements, such as VPC and SecurityGroup, needed for making this connection successfully.
+--
+-- * 'conName' - The name of the connection definition.
+--
+-- * 'conDescription' - Description of the connection.
+--
+-- * 'conConnectionType' - The type of the connection. Currently, only JDBC is supported; SFTP is not supported.
+connection
+    :: Connection
+connection =
+  Connection'
+  { _conCreationTime = Nothing
+  , _conLastUpdatedBy = Nothing
+  , _conConnectionProperties = Nothing
+  , _conLastUpdatedTime = Nothing
+  , _conMatchCriteria = Nothing
+  , _conPhysicalConnectionRequirements = Nothing
+  , _conName = Nothing
+  , _conDescription = Nothing
+  , _conConnectionType = Nothing
+  }
+
+
+-- | The time this connection definition was created.
+conCreationTime :: Lens' Connection (Maybe UTCTime)
+conCreationTime = lens _conCreationTime (\ s a -> s{_conCreationTime = a}) . mapping _Time;
+
+-- | The user, group or role that last updated this connection definition.
+conLastUpdatedBy :: Lens' Connection (Maybe Text)
+conLastUpdatedBy = lens _conLastUpdatedBy (\ s a -> s{_conLastUpdatedBy = a});
+
+-- | A list of key-value pairs used as parameters for this connection.
+conConnectionProperties :: Lens' Connection (HashMap ConnectionPropertyKey Text)
+conConnectionProperties = lens _conConnectionProperties (\ s a -> s{_conConnectionProperties = a}) . _Default . _Map;
+
+-- | The last time this connection definition was updated.
+conLastUpdatedTime :: Lens' Connection (Maybe UTCTime)
+conLastUpdatedTime = lens _conLastUpdatedTime (\ s a -> s{_conLastUpdatedTime = a}) . mapping _Time;
+
+-- | A list of criteria that can be used in selecting this connection.
+conMatchCriteria :: Lens' Connection [Text]
+conMatchCriteria = lens _conMatchCriteria (\ s a -> s{_conMatchCriteria = a}) . _Default . _Coerce;
+
+-- | A map of physical connection requirements, such as VPC and SecurityGroup, needed for making this connection successfully.
+conPhysicalConnectionRequirements :: Lens' Connection (Maybe PhysicalConnectionRequirements)
+conPhysicalConnectionRequirements = lens _conPhysicalConnectionRequirements (\ s a -> s{_conPhysicalConnectionRequirements = a});
+
+-- | The name of the connection definition.
+conName :: Lens' Connection (Maybe Text)
+conName = lens _conName (\ s a -> s{_conName = a});
+
+-- | Description of the connection.
+conDescription :: Lens' Connection (Maybe Text)
+conDescription = lens _conDescription (\ s a -> s{_conDescription = a});
+
+-- | The type of the connection. Currently, only JDBC is supported; SFTP is not supported.
+conConnectionType :: Lens' Connection (Maybe ConnectionType)
+conConnectionType = lens _conConnectionType (\ s a -> s{_conConnectionType = a});
+
+instance FromJSON Connection where
+        parseJSON
+          = withObject "Connection"
+              (\ x ->
+                 Connection' <$>
+                   (x .:? "CreationTime") <*> (x .:? "LastUpdatedBy")
+                     <*> (x .:? "ConnectionProperties" .!= mempty)
+                     <*> (x .:? "LastUpdatedTime")
+                     <*> (x .:? "MatchCriteria" .!= mempty)
+                     <*> (x .:? "PhysicalConnectionRequirements")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "Description")
+                     <*> (x .:? "ConnectionType"))
+
+instance Hashable Connection where
+
+instance NFData Connection where
+
+-- | A structure used to specify a connection to create or update.
+--
+--
+--
+-- /See:/ 'connectionInput' smart constructor.
+data ConnectionInput = ConnectionInput'
+  { _ciConnectionProperties :: !(Maybe (Map ConnectionPropertyKey Text))
+  , _ciMatchCriteria :: !(Maybe [Text])
+  , _ciPhysicalConnectionRequirements :: !(Maybe PhysicalConnectionRequirements)
+  , _ciName :: !(Maybe Text)
+  , _ciDescription :: !(Maybe Text)
+  , _ciConnectionType :: !(Maybe ConnectionType)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ConnectionInput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ciConnectionProperties' - A list of key-value pairs used as parameters for this connection.
+--
+-- * 'ciMatchCriteria' - A list of criteria that can be used in selecting this connection.
+--
+-- * 'ciPhysicalConnectionRequirements' - A map of physical connection requirements, such as VPC and SecurityGroup, needed for making this connection successfully.
+--
+-- * 'ciName' - The name of the connection.
+--
+-- * 'ciDescription' - Description of the connection.
+--
+-- * 'ciConnectionType' - The type of the connection. Currently, only JDBC is supported; SFTP is not supported.
+connectionInput
+    :: ConnectionInput
+connectionInput =
+  ConnectionInput'
+  { _ciConnectionProperties = Nothing
+  , _ciMatchCriteria = Nothing
+  , _ciPhysicalConnectionRequirements = Nothing
+  , _ciName = Nothing
+  , _ciDescription = Nothing
+  , _ciConnectionType = Nothing
+  }
+
+
+-- | A list of key-value pairs used as parameters for this connection.
+ciConnectionProperties :: Lens' ConnectionInput (HashMap ConnectionPropertyKey Text)
+ciConnectionProperties = lens _ciConnectionProperties (\ s a -> s{_ciConnectionProperties = a}) . _Default . _Map;
+
+-- | A list of criteria that can be used in selecting this connection.
+ciMatchCriteria :: Lens' ConnectionInput [Text]
+ciMatchCriteria = lens _ciMatchCriteria (\ s a -> s{_ciMatchCriteria = a}) . _Default . _Coerce;
+
+-- | A map of physical connection requirements, such as VPC and SecurityGroup, needed for making this connection successfully.
+ciPhysicalConnectionRequirements :: Lens' ConnectionInput (Maybe PhysicalConnectionRequirements)
+ciPhysicalConnectionRequirements = lens _ciPhysicalConnectionRequirements (\ s a -> s{_ciPhysicalConnectionRequirements = a});
+
+-- | The name of the connection.
+ciName :: Lens' ConnectionInput (Maybe Text)
+ciName = lens _ciName (\ s a -> s{_ciName = a});
+
+-- | Description of the connection.
+ciDescription :: Lens' ConnectionInput (Maybe Text)
+ciDescription = lens _ciDescription (\ s a -> s{_ciDescription = a});
+
+-- | The type of the connection. Currently, only JDBC is supported; SFTP is not supported.
+ciConnectionType :: Lens' ConnectionInput (Maybe ConnectionType)
+ciConnectionType = lens _ciConnectionType (\ s a -> s{_ciConnectionType = a});
+
+instance Hashable ConnectionInput where
+
+instance NFData ConnectionInput where
+
+instance ToJSON ConnectionInput where
+        toJSON ConnectionInput'{..}
+          = object
+              (catMaybes
+                 [("ConnectionProperties" .=) <$>
+                    _ciConnectionProperties,
+                  ("MatchCriteria" .=) <$> _ciMatchCriteria,
+                  ("PhysicalConnectionRequirements" .=) <$>
+                    _ciPhysicalConnectionRequirements,
+                  ("Name" .=) <$> _ciName,
+                  ("Description" .=) <$> _ciDescription,
+                  ("ConnectionType" .=) <$> _ciConnectionType])
+
+-- | Specifies the connections used by a job.
+--
+--
+--
+-- /See:/ 'connectionsList' smart constructor.
+newtype ConnectionsList = ConnectionsList'
+  { _clConnections :: Maybe [Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ConnectionsList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'clConnections' - A list of connections used by the job.
+connectionsList
+    :: ConnectionsList
+connectionsList = ConnectionsList' {_clConnections = Nothing}
+
+
+-- | A list of connections used by the job.
+clConnections :: Lens' ConnectionsList [Text]
+clConnections = lens _clConnections (\ s a -> s{_clConnections = a}) . _Default . _Coerce;
+
+instance FromJSON ConnectionsList where
+        parseJSON
+          = withObject "ConnectionsList"
+              (\ x ->
+                 ConnectionsList' <$>
+                   (x .:? "Connections" .!= mempty))
+
+instance Hashable ConnectionsList where
+
+instance NFData ConnectionsList where
+
+instance ToJSON ConnectionsList where
+        toJSON ConnectionsList'{..}
+          = object
+              (catMaybes [("Connections" .=) <$> _clConnections])
+
+-- | Specifies a crawler program that examines a data source and uses classifiers to try to determine its schema. If successful, the crawler records metatdata concerning the data source in the Data Catalog.
+--
+--
+--
+-- /See:/ 'crawler' smart constructor.
+data Crawler = Crawler'
+  { _craCreationTime       :: !(Maybe POSIX)
+  , _craState              :: !(Maybe CrawlerState)
+  , _craSchemaChangePolicy :: !(Maybe SchemaChangePolicy)
+  , _craLastUpdated        :: !(Maybe POSIX)
+  , _craSchedule           :: !(Maybe Schedule)
+  , _craLastCrawl          :: !(Maybe LastCrawlInfo)
+  , _craCrawlElapsedTime   :: !(Maybe Integer)
+  , _craClassifiers        :: !(Maybe [Text])
+  , _craRole               :: !(Maybe Text)
+  , _craName               :: !(Maybe Text)
+  , _craTargets            :: !(Maybe CrawlerTargets)
+  , _craVersion            :: !(Maybe Integer)
+  , _craDatabaseName       :: !(Maybe Text)
+  , _craTablePrefix        :: !(Maybe Text)
+  , _craDescription        :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Crawler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'craCreationTime' - The time when the Crawler was created.
+--
+-- * 'craState' - Indicates whether this Crawler is running, or whether a run is pending.
+--
+-- * 'craSchemaChangePolicy' - Sets policy for the crawler's update and delete behavior.
+--
+-- * 'craLastUpdated' - The time the Crawler was last updated.
+--
+-- * 'craSchedule' - A @Schedule@ object that specifies the schedule on which this Crawler is to be run.
+--
+-- * 'craLastCrawl' - The status of the last crawl, and potentially error information if an error occurred.
+--
+-- * 'craCrawlElapsedTime' - If this Crawler is running, contains the total time elapsed since the last crawl began.
+--
+-- * 'craClassifiers' - A list of custom @Classifier@ s associated with this Crawler.
+--
+-- * 'craRole' - The IAM role (or ARN of an IAM role) used to access customer resources such as data in S3.
+--
+-- * 'craName' - The @Crawler@ name.
+--
+-- * 'craTargets' - A collection of targets to crawl.
+--
+-- * 'craVersion' - The version of the Crawler.
+--
+-- * 'craDatabaseName' - The @Database@ where this Crawler's output should be stored.
+--
+-- * 'craTablePrefix' - The table prefix used for catalog tables created.
+--
+-- * 'craDescription' - A description of this Crawler and where it should be used.
+crawler
+    :: Crawler
+crawler =
+  Crawler'
+  { _craCreationTime = Nothing
+  , _craState = Nothing
+  , _craSchemaChangePolicy = Nothing
+  , _craLastUpdated = Nothing
+  , _craSchedule = Nothing
+  , _craLastCrawl = Nothing
+  , _craCrawlElapsedTime = Nothing
+  , _craClassifiers = Nothing
+  , _craRole = Nothing
+  , _craName = Nothing
+  , _craTargets = Nothing
+  , _craVersion = Nothing
+  , _craDatabaseName = Nothing
+  , _craTablePrefix = Nothing
+  , _craDescription = Nothing
+  }
+
+
+-- | The time when the Crawler was created.
+craCreationTime :: Lens' Crawler (Maybe UTCTime)
+craCreationTime = lens _craCreationTime (\ s a -> s{_craCreationTime = a}) . mapping _Time;
+
+-- | Indicates whether this Crawler is running, or whether a run is pending.
+craState :: Lens' Crawler (Maybe CrawlerState)
+craState = lens _craState (\ s a -> s{_craState = a});
+
+-- | Sets policy for the crawler's update and delete behavior.
+craSchemaChangePolicy :: Lens' Crawler (Maybe SchemaChangePolicy)
+craSchemaChangePolicy = lens _craSchemaChangePolicy (\ s a -> s{_craSchemaChangePolicy = a});
+
+-- | The time the Crawler was last updated.
+craLastUpdated :: Lens' Crawler (Maybe UTCTime)
+craLastUpdated = lens _craLastUpdated (\ s a -> s{_craLastUpdated = a}) . mapping _Time;
+
+-- | A @Schedule@ object that specifies the schedule on which this Crawler is to be run.
+craSchedule :: Lens' Crawler (Maybe Schedule)
+craSchedule = lens _craSchedule (\ s a -> s{_craSchedule = a});
+
+-- | The status of the last crawl, and potentially error information if an error occurred.
+craLastCrawl :: Lens' Crawler (Maybe LastCrawlInfo)
+craLastCrawl = lens _craLastCrawl (\ s a -> s{_craLastCrawl = a});
+
+-- | If this Crawler is running, contains the total time elapsed since the last crawl began.
+craCrawlElapsedTime :: Lens' Crawler (Maybe Integer)
+craCrawlElapsedTime = lens _craCrawlElapsedTime (\ s a -> s{_craCrawlElapsedTime = a});
+
+-- | A list of custom @Classifier@ s associated with this Crawler.
+craClassifiers :: Lens' Crawler [Text]
+craClassifiers = lens _craClassifiers (\ s a -> s{_craClassifiers = a}) . _Default . _Coerce;
+
+-- | The IAM role (or ARN of an IAM role) used to access customer resources such as data in S3.
+craRole :: Lens' Crawler (Maybe Text)
+craRole = lens _craRole (\ s a -> s{_craRole = a});
+
+-- | The @Crawler@ name.
+craName :: Lens' Crawler (Maybe Text)
+craName = lens _craName (\ s a -> s{_craName = a});
+
+-- | A collection of targets to crawl.
+craTargets :: Lens' Crawler (Maybe CrawlerTargets)
+craTargets = lens _craTargets (\ s a -> s{_craTargets = a});
+
+-- | The version of the Crawler.
+craVersion :: Lens' Crawler (Maybe Integer)
+craVersion = lens _craVersion (\ s a -> s{_craVersion = a});
+
+-- | The @Database@ where this Crawler's output should be stored.
+craDatabaseName :: Lens' Crawler (Maybe Text)
+craDatabaseName = lens _craDatabaseName (\ s a -> s{_craDatabaseName = a});
+
+-- | The table prefix used for catalog tables created.
+craTablePrefix :: Lens' Crawler (Maybe Text)
+craTablePrefix = lens _craTablePrefix (\ s a -> s{_craTablePrefix = a});
+
+-- | A description of this Crawler and where it should be used.
+craDescription :: Lens' Crawler (Maybe Text)
+craDescription = lens _craDescription (\ s a -> s{_craDescription = a});
+
+instance FromJSON Crawler where
+        parseJSON
+          = withObject "Crawler"
+              (\ x ->
+                 Crawler' <$>
+                   (x .:? "CreationTime") <*> (x .:? "State") <*>
+                     (x .:? "SchemaChangePolicy")
+                     <*> (x .:? "LastUpdated")
+                     <*> (x .:? "Schedule")
+                     <*> (x .:? "LastCrawl")
+                     <*> (x .:? "CrawlElapsedTime")
+                     <*> (x .:? "Classifiers" .!= mempty)
+                     <*> (x .:? "Role")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "Targets")
+                     <*> (x .:? "Version")
+                     <*> (x .:? "DatabaseName")
+                     <*> (x .:? "TablePrefix")
+                     <*> (x .:? "Description"))
+
+instance Hashable Crawler where
+
+instance NFData Crawler where
+
+-- | Metrics for a specified crawler.
+--
+--
+--
+-- /See:/ 'crawlerMetrics' smart constructor.
+data CrawlerMetrics = CrawlerMetrics'
+  { _cmLastRuntimeSeconds   :: !(Maybe Double)
+  , _cmTablesCreated        :: !(Maybe Nat)
+  , _cmStillEstimating      :: !(Maybe Bool)
+  , _cmMedianRuntimeSeconds :: !(Maybe Double)
+  , _cmTimeLeftSeconds      :: !(Maybe Double)
+  , _cmTablesDeleted        :: !(Maybe Nat)
+  , _cmTablesUpdated        :: !(Maybe Nat)
+  , _cmCrawlerName          :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CrawlerMetrics' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cmLastRuntimeSeconds' - The duration of the crawler's most recent run, in seconds.
+--
+-- * 'cmTablesCreated' - A list of the tables created by this crawler.
+--
+-- * 'cmStillEstimating' - True if the crawler is estimating its
+--
+-- * 'cmMedianRuntimeSeconds' - The median duration of this crawler's runs, in seconds.
+--
+-- * 'cmTimeLeftSeconds' - The estimated time left to complete a running crawl.
+--
+-- * 'cmTablesDeleted' - A list of the tables deleted by this crawler.
+--
+-- * 'cmTablesUpdated' - A list of the tables created by this crawler.
+--
+-- * 'cmCrawlerName' - The name of the crawler.
+crawlerMetrics
+    :: CrawlerMetrics
+crawlerMetrics =
+  CrawlerMetrics'
+  { _cmLastRuntimeSeconds = Nothing
+  , _cmTablesCreated = Nothing
+  , _cmStillEstimating = Nothing
+  , _cmMedianRuntimeSeconds = Nothing
+  , _cmTimeLeftSeconds = Nothing
+  , _cmTablesDeleted = Nothing
+  , _cmTablesUpdated = Nothing
+  , _cmCrawlerName = Nothing
+  }
+
+
+-- | The duration of the crawler's most recent run, in seconds.
+cmLastRuntimeSeconds :: Lens' CrawlerMetrics (Maybe Double)
+cmLastRuntimeSeconds = lens _cmLastRuntimeSeconds (\ s a -> s{_cmLastRuntimeSeconds = a});
+
+-- | A list of the tables created by this crawler.
+cmTablesCreated :: Lens' CrawlerMetrics (Maybe Natural)
+cmTablesCreated = lens _cmTablesCreated (\ s a -> s{_cmTablesCreated = a}) . mapping _Nat;
+
+-- | True if the crawler is estimating its
+cmStillEstimating :: Lens' CrawlerMetrics (Maybe Bool)
+cmStillEstimating = lens _cmStillEstimating (\ s a -> s{_cmStillEstimating = a});
+
+-- | The median duration of this crawler's runs, in seconds.
+cmMedianRuntimeSeconds :: Lens' CrawlerMetrics (Maybe Double)
+cmMedianRuntimeSeconds = lens _cmMedianRuntimeSeconds (\ s a -> s{_cmMedianRuntimeSeconds = a});
+
+-- | The estimated time left to complete a running crawl.
+cmTimeLeftSeconds :: Lens' CrawlerMetrics (Maybe Double)
+cmTimeLeftSeconds = lens _cmTimeLeftSeconds (\ s a -> s{_cmTimeLeftSeconds = a});
+
+-- | A list of the tables deleted by this crawler.
+cmTablesDeleted :: Lens' CrawlerMetrics (Maybe Natural)
+cmTablesDeleted = lens _cmTablesDeleted (\ s a -> s{_cmTablesDeleted = a}) . mapping _Nat;
+
+-- | A list of the tables created by this crawler.
+cmTablesUpdated :: Lens' CrawlerMetrics (Maybe Natural)
+cmTablesUpdated = lens _cmTablesUpdated (\ s a -> s{_cmTablesUpdated = a}) . mapping _Nat;
+
+-- | The name of the crawler.
+cmCrawlerName :: Lens' CrawlerMetrics (Maybe Text)
+cmCrawlerName = lens _cmCrawlerName (\ s a -> s{_cmCrawlerName = a});
+
+instance FromJSON CrawlerMetrics where
+        parseJSON
+          = withObject "CrawlerMetrics"
+              (\ x ->
+                 CrawlerMetrics' <$>
+                   (x .:? "LastRuntimeSeconds") <*>
+                     (x .:? "TablesCreated")
+                     <*> (x .:? "StillEstimating")
+                     <*> (x .:? "MedianRuntimeSeconds")
+                     <*> (x .:? "TimeLeftSeconds")
+                     <*> (x .:? "TablesDeleted")
+                     <*> (x .:? "TablesUpdated")
+                     <*> (x .:? "CrawlerName"))
+
+instance Hashable CrawlerMetrics where
+
+instance NFData CrawlerMetrics where
+
+-- | Specifies crawler targets.
+--
+--
+--
+-- /See:/ 'crawlerTargets' smart constructor.
+data CrawlerTargets = CrawlerTargets'
+  { _ctS3Targets   :: !(Maybe [S3Target])
+  , _ctJdbcTargets :: !(Maybe [JdbcTarget])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CrawlerTargets' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ctS3Targets' - Specifies targets in AWS S3.
+--
+-- * 'ctJdbcTargets' - Specifies JDBC targets.
+crawlerTargets
+    :: CrawlerTargets
+crawlerTargets =
+  CrawlerTargets' {_ctS3Targets = Nothing, _ctJdbcTargets = Nothing}
+
+
+-- | Specifies targets in AWS S3.
+ctS3Targets :: Lens' CrawlerTargets [S3Target]
+ctS3Targets = lens _ctS3Targets (\ s a -> s{_ctS3Targets = a}) . _Default . _Coerce;
+
+-- | Specifies JDBC targets.
+ctJdbcTargets :: Lens' CrawlerTargets [JdbcTarget]
+ctJdbcTargets = lens _ctJdbcTargets (\ s a -> s{_ctJdbcTargets = a}) . _Default . _Coerce;
+
+instance FromJSON CrawlerTargets where
+        parseJSON
+          = withObject "CrawlerTargets"
+              (\ x ->
+                 CrawlerTargets' <$>
+                   (x .:? "S3Targets" .!= mempty) <*>
+                     (x .:? "JdbcTargets" .!= mempty))
+
+instance Hashable CrawlerTargets where
+
+instance NFData CrawlerTargets where
+
+instance ToJSON CrawlerTargets where
+        toJSON CrawlerTargets'{..}
+          = object
+              (catMaybes
+                 [("S3Targets" .=) <$> _ctS3Targets,
+                  ("JdbcTargets" .=) <$> _ctJdbcTargets])
+
+-- | Specifies a Grok classifier for CreateClassifier to create.
+--
+--
+--
+-- /See:/ 'createGrokClassifierRequest' smart constructor.
+data CreateGrokClassifierRequest = CreateGrokClassifierRequest'
+  { _cgcrCustomPatterns :: !(Maybe Text)
+  , _cgcrClassification :: !Text
+  , _cgcrName           :: !Text
+  , _cgcrGrokPattern    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'CreateGrokClassifierRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgcrCustomPatterns' - Custom grok patterns used by this classifier.
+--
+-- * 'cgcrClassification' - The type of result that the classifier matches, such as Twitter Json, Omniture logs, Cloudwatch logs, and so forth.
+--
+-- * 'cgcrName' - The name of the new Classifier.
+--
+-- * 'cgcrGrokPattern' - The grok pattern used by this classifier.
+createGrokClassifierRequest
+    :: Text -- ^ 'cgcrClassification'
+    -> Text -- ^ 'cgcrName'
+    -> Text -- ^ 'cgcrGrokPattern'
+    -> CreateGrokClassifierRequest
+createGrokClassifierRequest pClassification_ pName_ pGrokPattern_ =
+  CreateGrokClassifierRequest'
+  { _cgcrCustomPatterns = Nothing
+  , _cgcrClassification = pClassification_
+  , _cgcrName = pName_
+  , _cgcrGrokPattern = pGrokPattern_
+  }
+
+
+-- | Custom grok patterns used by this classifier.
+cgcrCustomPatterns :: Lens' CreateGrokClassifierRequest (Maybe Text)
+cgcrCustomPatterns = lens _cgcrCustomPatterns (\ s a -> s{_cgcrCustomPatterns = a});
+
+-- | The type of result that the classifier matches, such as Twitter Json, Omniture logs, Cloudwatch logs, and so forth.
+cgcrClassification :: Lens' CreateGrokClassifierRequest Text
+cgcrClassification = lens _cgcrClassification (\ s a -> s{_cgcrClassification = a});
+
+-- | The name of the new Classifier.
+cgcrName :: Lens' CreateGrokClassifierRequest Text
+cgcrName = lens _cgcrName (\ s a -> s{_cgcrName = a});
+
+-- | The grok pattern used by this classifier.
+cgcrGrokPattern :: Lens' CreateGrokClassifierRequest Text
+cgcrGrokPattern = lens _cgcrGrokPattern (\ s a -> s{_cgcrGrokPattern = a});
+
+instance Hashable CreateGrokClassifierRequest where
+
+instance NFData CreateGrokClassifierRequest where
+
+instance ToJSON CreateGrokClassifierRequest where
+        toJSON CreateGrokClassifierRequest'{..}
+          = object
+              (catMaybes
+                 [("CustomPatterns" .=) <$> _cgcrCustomPatterns,
+                  Just ("Classification" .= _cgcrClassification),
+                  Just ("Name" .= _cgcrName),
+                  Just ("GrokPattern" .= _cgcrGrokPattern)])
+
+-- | The @Database@ object represents a logical grouping of tables that may reside in a Hive metastore or an RDBMS.
+--
+--
+--
+-- /See:/ 'database' smart constructor.
+data Database = Database'
+  { _dLocationURI :: !(Maybe Text)
+  , _dParameters  :: !(Maybe (Map Text Text))
+  , _dDescription :: !(Maybe Text)
+  , _dCreateTime  :: !(Maybe POSIX)
+  , _dName        :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Database' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dLocationURI' - The location of the database (for example, an HDFS path).
+--
+-- * 'dParameters' - A list of key-value pairs that define parameters and properties of the database.
+--
+-- * 'dDescription' - Description of the database.
+--
+-- * 'dCreateTime' - The time at which the metadata database was created in the catalog.
+--
+-- * 'dName' - Name of the database.
+database
+    :: Text -- ^ 'dName'
+    -> Database
+database pName_ =
+  Database'
+  { _dLocationURI = Nothing
+  , _dParameters = Nothing
+  , _dDescription = Nothing
+  , _dCreateTime = Nothing
+  , _dName = pName_
+  }
+
+
+-- | The location of the database (for example, an HDFS path).
+dLocationURI :: Lens' Database (Maybe Text)
+dLocationURI = lens _dLocationURI (\ s a -> s{_dLocationURI = a});
+
+-- | A list of key-value pairs that define parameters and properties of the database.
+dParameters :: Lens' Database (HashMap Text Text)
+dParameters = lens _dParameters (\ s a -> s{_dParameters = a}) . _Default . _Map;
+
+-- | Description of the database.
+dDescription :: Lens' Database (Maybe Text)
+dDescription = lens _dDescription (\ s a -> s{_dDescription = a});
+
+-- | The time at which the metadata database was created in the catalog.
+dCreateTime :: Lens' Database (Maybe UTCTime)
+dCreateTime = lens _dCreateTime (\ s a -> s{_dCreateTime = a}) . mapping _Time;
+
+-- | Name of the database.
+dName :: Lens' Database Text
+dName = lens _dName (\ s a -> s{_dName = a});
+
+instance FromJSON Database where
+        parseJSON
+          = withObject "Database"
+              (\ x ->
+                 Database' <$>
+                   (x .:? "LocationUri") <*>
+                     (x .:? "Parameters" .!= mempty)
+                     <*> (x .:? "Description")
+                     <*> (x .:? "CreateTime")
+                     <*> (x .: "Name"))
+
+instance Hashable Database where
+
+instance NFData Database where
+
+-- | The structure used to create or updata a database.
+--
+--
+--
+-- /See:/ 'databaseInput' smart constructor.
+data DatabaseInput = DatabaseInput'
+  { _diLocationURI :: !(Maybe Text)
+  , _diParameters  :: !(Maybe (Map Text Text))
+  , _diDescription :: !(Maybe Text)
+  , _diName        :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DatabaseInput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'diLocationURI' - The location of the database (for example, an HDFS path).
+--
+-- * 'diParameters' - A list of key-value pairs that define parameters and properties of the database.
+--
+-- * 'diDescription' - Description of the database
+--
+-- * 'diName' - Name of the database.
+databaseInput
+    :: Text -- ^ 'diName'
+    -> DatabaseInput
+databaseInput pName_ =
+  DatabaseInput'
+  { _diLocationURI = Nothing
+  , _diParameters = Nothing
+  , _diDescription = Nothing
+  , _diName = pName_
+  }
+
+
+-- | The location of the database (for example, an HDFS path).
+diLocationURI :: Lens' DatabaseInput (Maybe Text)
+diLocationURI = lens _diLocationURI (\ s a -> s{_diLocationURI = a});
+
+-- | A list of key-value pairs that define parameters and properties of the database.
+diParameters :: Lens' DatabaseInput (HashMap Text Text)
+diParameters = lens _diParameters (\ s a -> s{_diParameters = a}) . _Default . _Map;
+
+-- | Description of the database
+diDescription :: Lens' DatabaseInput (Maybe Text)
+diDescription = lens _diDescription (\ s a -> s{_diDescription = a});
+
+-- | Name of the database.
+diName :: Lens' DatabaseInput Text
+diName = lens _diName (\ s a -> s{_diName = a});
+
+instance Hashable DatabaseInput where
+
+instance NFData DatabaseInput where
+
+instance ToJSON DatabaseInput where
+        toJSON DatabaseInput'{..}
+          = object
+              (catMaybes
+                 [("LocationUri" .=) <$> _diLocationURI,
+                  ("Parameters" .=) <$> _diParameters,
+                  ("Description" .=) <$> _diDescription,
+                  Just ("Name" .= _diName)])
+
+-- | A development endpoint where a developer can remotely debug ETL scripts.
+--
+--
+--
+-- /See:/ 'devEndpoint' smart constructor.
+data DevEndpoint = DevEndpoint'
+  { _deStatus                             :: !(Maybe Text)
+  , _deFailureReason                      :: !(Maybe Text)
+  , _deEndpointName                       :: !(Maybe Text)
+  , _deExtraPythonLibsS3Path              :: !(Maybe Text)
+  , _deLastUpdateStatus                   :: !(Maybe Text)
+  , _deSecurityGroupIds                   :: !(Maybe [Text])
+  , _deLastModifiedTimestamp              :: !(Maybe POSIX)
+  , _deVPCId                              :: !(Maybe Text)
+  , _dePublicKey                          :: !(Maybe Text)
+  , _deSubnetId                           :: !(Maybe Text)
+  , _deNumberOfNodes                      :: !(Maybe Int)
+  , _dePublicAddress                      :: !(Maybe Text)
+  , _deAvailabilityZone                   :: !(Maybe Text)
+  , _deZeppelinRemoteSparkInterpreterPort :: !(Maybe Int)
+  , _deExtraJARsS3Path                    :: !(Maybe Text)
+  , _deCreatedTimestamp                   :: !(Maybe POSIX)
+  , _deYarnEndpointAddress                :: !(Maybe Text)
+  , _deRoleARN                            :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DevEndpoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'deStatus' - The current status of this DevEndpoint.
+--
+-- * 'deFailureReason' - The reason for a current failure in this DevEndpoint.
+--
+-- * 'deEndpointName' - The name of the DevEndpoint.
+--
+-- * 'deExtraPythonLibsS3Path' - Path(s) to one or more Python libraries in an S3 bucket that should be loaded in your DevEndpoint. Multiple values must be complete paths separated by a comma. Please note that only pure Python libraries can currently be used on a DevEndpoint. Libraries that rely on C extensions, such as the <http://pandas.pydata.org/ pandas> Python data analysis library, are not yet supported.
+--
+-- * 'deLastUpdateStatus' - The status of the last update.
+--
+-- * 'deSecurityGroupIds' - A list of security group identifiers used in this DevEndpoint.
+--
+-- * 'deLastModifiedTimestamp' - The point in time at which this DevEndpoint was last modified.
+--
+-- * 'deVPCId' - The ID of the virtual private cloud (VPC) used by this DevEndpoint.
+--
+-- * 'dePublicKey' - The public key to be used by this DevEndpoint for authentication.
+--
+-- * 'deSubnetId' - The subnet ID for this DevEndpoint.
+--
+-- * 'deNumberOfNodes' - The number of AWS Glue Data Processing Units (DPUs) allocated to this DevEndpoint.
+--
+-- * 'dePublicAddress' - The public address used by this DevEndpoint.
+--
+-- * 'deAvailabilityZone' - The AWS availability zone where this DevEndpoint is located.
+--
+-- * 'deZeppelinRemoteSparkInterpreterPort' - The Apache Zeppelin port for the remote Apache Spark interpreter.
+--
+-- * 'deExtraJARsS3Path' - Path to one or more Java Jars in an S3 bucket that should be loaded in your DevEndpoint. Please note that only pure Java/Scala libraries can currently be used on a DevEndpoint.
+--
+-- * 'deCreatedTimestamp' - The point in time at which this DevEndpoint was created.
+--
+-- * 'deYarnEndpointAddress' - The YARN endpoint address used by this DevEndpoint.
+--
+-- * 'deRoleARN' - The AWS ARN of the IAM role used in this DevEndpoint.
+devEndpoint
+    :: DevEndpoint
+devEndpoint =
+  DevEndpoint'
+  { _deStatus = Nothing
+  , _deFailureReason = Nothing
+  , _deEndpointName = Nothing
+  , _deExtraPythonLibsS3Path = Nothing
+  , _deLastUpdateStatus = Nothing
+  , _deSecurityGroupIds = Nothing
+  , _deLastModifiedTimestamp = Nothing
+  , _deVPCId = Nothing
+  , _dePublicKey = Nothing
+  , _deSubnetId = Nothing
+  , _deNumberOfNodes = Nothing
+  , _dePublicAddress = Nothing
+  , _deAvailabilityZone = Nothing
+  , _deZeppelinRemoteSparkInterpreterPort = Nothing
+  , _deExtraJARsS3Path = Nothing
+  , _deCreatedTimestamp = Nothing
+  , _deYarnEndpointAddress = Nothing
+  , _deRoleARN = Nothing
+  }
+
+
+-- | The current status of this DevEndpoint.
+deStatus :: Lens' DevEndpoint (Maybe Text)
+deStatus = lens _deStatus (\ s a -> s{_deStatus = a});
+
+-- | The reason for a current failure in this DevEndpoint.
+deFailureReason :: Lens' DevEndpoint (Maybe Text)
+deFailureReason = lens _deFailureReason (\ s a -> s{_deFailureReason = a});
+
+-- | The name of the DevEndpoint.
+deEndpointName :: Lens' DevEndpoint (Maybe Text)
+deEndpointName = lens _deEndpointName (\ s a -> s{_deEndpointName = a});
+
+-- | Path(s) to one or more Python libraries in an S3 bucket that should be loaded in your DevEndpoint. Multiple values must be complete paths separated by a comma. Please note that only pure Python libraries can currently be used on a DevEndpoint. Libraries that rely on C extensions, such as the <http://pandas.pydata.org/ pandas> Python data analysis library, are not yet supported.
+deExtraPythonLibsS3Path :: Lens' DevEndpoint (Maybe Text)
+deExtraPythonLibsS3Path = lens _deExtraPythonLibsS3Path (\ s a -> s{_deExtraPythonLibsS3Path = a});
+
+-- | The status of the last update.
+deLastUpdateStatus :: Lens' DevEndpoint (Maybe Text)
+deLastUpdateStatus = lens _deLastUpdateStatus (\ s a -> s{_deLastUpdateStatus = a});
+
+-- | A list of security group identifiers used in this DevEndpoint.
+deSecurityGroupIds :: Lens' DevEndpoint [Text]
+deSecurityGroupIds = lens _deSecurityGroupIds (\ s a -> s{_deSecurityGroupIds = a}) . _Default . _Coerce;
+
+-- | The point in time at which this DevEndpoint was last modified.
+deLastModifiedTimestamp :: Lens' DevEndpoint (Maybe UTCTime)
+deLastModifiedTimestamp = lens _deLastModifiedTimestamp (\ s a -> s{_deLastModifiedTimestamp = a}) . mapping _Time;
+
+-- | The ID of the virtual private cloud (VPC) used by this DevEndpoint.
+deVPCId :: Lens' DevEndpoint (Maybe Text)
+deVPCId = lens _deVPCId (\ s a -> s{_deVPCId = a});
+
+-- | The public key to be used by this DevEndpoint for authentication.
+dePublicKey :: Lens' DevEndpoint (Maybe Text)
+dePublicKey = lens _dePublicKey (\ s a -> s{_dePublicKey = a});
+
+-- | The subnet ID for this DevEndpoint.
+deSubnetId :: Lens' DevEndpoint (Maybe Text)
+deSubnetId = lens _deSubnetId (\ s a -> s{_deSubnetId = a});
+
+-- | The number of AWS Glue Data Processing Units (DPUs) allocated to this DevEndpoint.
+deNumberOfNodes :: Lens' DevEndpoint (Maybe Int)
+deNumberOfNodes = lens _deNumberOfNodes (\ s a -> s{_deNumberOfNodes = a});
+
+-- | The public address used by this DevEndpoint.
+dePublicAddress :: Lens' DevEndpoint (Maybe Text)
+dePublicAddress = lens _dePublicAddress (\ s a -> s{_dePublicAddress = a});
+
+-- | The AWS availability zone where this DevEndpoint is located.
+deAvailabilityZone :: Lens' DevEndpoint (Maybe Text)
+deAvailabilityZone = lens _deAvailabilityZone (\ s a -> s{_deAvailabilityZone = a});
+
+-- | The Apache Zeppelin port for the remote Apache Spark interpreter.
+deZeppelinRemoteSparkInterpreterPort :: Lens' DevEndpoint (Maybe Int)
+deZeppelinRemoteSparkInterpreterPort = lens _deZeppelinRemoteSparkInterpreterPort (\ s a -> s{_deZeppelinRemoteSparkInterpreterPort = a});
+
+-- | Path to one or more Java Jars in an S3 bucket that should be loaded in your DevEndpoint. Please note that only pure Java/Scala libraries can currently be used on a DevEndpoint.
+deExtraJARsS3Path :: Lens' DevEndpoint (Maybe Text)
+deExtraJARsS3Path = lens _deExtraJARsS3Path (\ s a -> s{_deExtraJARsS3Path = a});
+
+-- | The point in time at which this DevEndpoint was created.
+deCreatedTimestamp :: Lens' DevEndpoint (Maybe UTCTime)
+deCreatedTimestamp = lens _deCreatedTimestamp (\ s a -> s{_deCreatedTimestamp = a}) . mapping _Time;
+
+-- | The YARN endpoint address used by this DevEndpoint.
+deYarnEndpointAddress :: Lens' DevEndpoint (Maybe Text)
+deYarnEndpointAddress = lens _deYarnEndpointAddress (\ s a -> s{_deYarnEndpointAddress = a});
+
+-- | The AWS ARN of the IAM role used in this DevEndpoint.
+deRoleARN :: Lens' DevEndpoint (Maybe Text)
+deRoleARN = lens _deRoleARN (\ s a -> s{_deRoleARN = a});
+
+instance FromJSON DevEndpoint where
+        parseJSON
+          = withObject "DevEndpoint"
+              (\ x ->
+                 DevEndpoint' <$>
+                   (x .:? "Status") <*> (x .:? "FailureReason") <*>
+                     (x .:? "EndpointName")
+                     <*> (x .:? "ExtraPythonLibsS3Path")
+                     <*> (x .:? "LastUpdateStatus")
+                     <*> (x .:? "SecurityGroupIds" .!= mempty)
+                     <*> (x .:? "LastModifiedTimestamp")
+                     <*> (x .:? "VpcId")
+                     <*> (x .:? "PublicKey")
+                     <*> (x .:? "SubnetId")
+                     <*> (x .:? "NumberOfNodes")
+                     <*> (x .:? "PublicAddress")
+                     <*> (x .:? "AvailabilityZone")
+                     <*> (x .:? "ZeppelinRemoteSparkInterpreterPort")
+                     <*> (x .:? "ExtraJarsS3Path")
+                     <*> (x .:? "CreatedTimestamp")
+                     <*> (x .:? "YarnEndpointAddress")
+                     <*> (x .:? "RoleArn"))
+
+instance Hashable DevEndpoint where
+
+instance NFData DevEndpoint where
+
+-- | Custom libraries to be loaded into a DevEndpoint.
+--
+--
+--
+-- /See:/ 'devEndpointCustomLibraries' smart constructor.
+data DevEndpointCustomLibraries = DevEndpointCustomLibraries'
+  { _declExtraPythonLibsS3Path :: !(Maybe Text)
+  , _declExtraJARsS3Path       :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'DevEndpointCustomLibraries' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'declExtraPythonLibsS3Path' - Path(s) to one or more Python libraries in an S3 bucket that should be loaded in your DevEndpoint. Multiple values must be complete paths separated by a comma. Please note that only pure Python libraries can currently be used on a DevEndpoint. Libraries that rely on C extensions, such as the <http://pandas.pydata.org/ pandas> Python data analysis library, are not yet supported.
+--
+-- * 'declExtraJARsS3Path' - Path to one or more Java Jars in an S3 bucket that should be loaded in your DevEndpoint. Please note that only pure Java/Scala libraries can currently be used on a DevEndpoint.
+devEndpointCustomLibraries
+    :: DevEndpointCustomLibraries
+devEndpointCustomLibraries =
+  DevEndpointCustomLibraries'
+  {_declExtraPythonLibsS3Path = Nothing, _declExtraJARsS3Path = Nothing}
+
+
+-- | Path(s) to one or more Python libraries in an S3 bucket that should be loaded in your DevEndpoint. Multiple values must be complete paths separated by a comma. Please note that only pure Python libraries can currently be used on a DevEndpoint. Libraries that rely on C extensions, such as the <http://pandas.pydata.org/ pandas> Python data analysis library, are not yet supported.
+declExtraPythonLibsS3Path :: Lens' DevEndpointCustomLibraries (Maybe Text)
+declExtraPythonLibsS3Path = lens _declExtraPythonLibsS3Path (\ s a -> s{_declExtraPythonLibsS3Path = a});
+
+-- | Path to one or more Java Jars in an S3 bucket that should be loaded in your DevEndpoint. Please note that only pure Java/Scala libraries can currently be used on a DevEndpoint.
+declExtraJARsS3Path :: Lens' DevEndpointCustomLibraries (Maybe Text)
+declExtraJARsS3Path = lens _declExtraJARsS3Path (\ s a -> s{_declExtraJARsS3Path = a});
+
+instance Hashable DevEndpointCustomLibraries where
+
+instance NFData DevEndpointCustomLibraries where
+
+instance ToJSON DevEndpointCustomLibraries where
+        toJSON DevEndpointCustomLibraries'{..}
+          = object
+              (catMaybes
+                 [("ExtraPythonLibsS3Path" .=) <$>
+                    _declExtraPythonLibsS3Path,
+                  ("ExtraJarsS3Path" .=) <$> _declExtraJARsS3Path])
+
+-- | Contains details about an error.
+--
+--
+--
+-- /See:/ 'errorDetail' smart constructor.
+data ErrorDetail = ErrorDetail'
+  { _edErrorCode    :: !(Maybe Text)
+  , _edErrorMessage :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ErrorDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'edErrorCode' - The code associated with this error.
+--
+-- * 'edErrorMessage' - A message describing the error.
+errorDetail
+    :: ErrorDetail
+errorDetail = ErrorDetail' {_edErrorCode = Nothing, _edErrorMessage = Nothing}
+
+
+-- | The code associated with this error.
+edErrorCode :: Lens' ErrorDetail (Maybe Text)
+edErrorCode = lens _edErrorCode (\ s a -> s{_edErrorCode = a});
+
+-- | A message describing the error.
+edErrorMessage :: Lens' ErrorDetail (Maybe Text)
+edErrorMessage = lens _edErrorMessage (\ s a -> s{_edErrorMessage = a});
+
+instance FromJSON ErrorDetail where
+        parseJSON
+          = withObject "ErrorDetail"
+              (\ x ->
+                 ErrorDetail' <$>
+                   (x .:? "ErrorCode") <*> (x .:? "ErrorMessage"))
+
+instance Hashable ErrorDetail where
+
+instance NFData ErrorDetail where
+
+-- | An execution property of a job.
+--
+--
+--
+-- /See:/ 'executionProperty' smart constructor.
+newtype ExecutionProperty = ExecutionProperty'
+  { _epMaxConcurrentRuns :: Maybe Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ExecutionProperty' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'epMaxConcurrentRuns' - The maximum number of concurrent runs allowed for a job.
+executionProperty
+    :: ExecutionProperty
+executionProperty = ExecutionProperty' {_epMaxConcurrentRuns = Nothing}
+
+
+-- | The maximum number of concurrent runs allowed for a job.
+epMaxConcurrentRuns :: Lens' ExecutionProperty (Maybe Int)
+epMaxConcurrentRuns = lens _epMaxConcurrentRuns (\ s a -> s{_epMaxConcurrentRuns = a});
+
+instance FromJSON ExecutionProperty where
+        parseJSON
+          = withObject "ExecutionProperty"
+              (\ x ->
+                 ExecutionProperty' <$> (x .:? "MaxConcurrentRuns"))
+
+instance Hashable ExecutionProperty where
+
+instance NFData ExecutionProperty where
+
+instance ToJSON ExecutionProperty where
+        toJSON ExecutionProperty'{..}
+          = object
+              (catMaybes
+                 [("MaxConcurrentRuns" .=) <$> _epMaxConcurrentRuns])
+
+-- | Filters the connection definitions returned by the @GetConnections@ API.
+--
+--
+--
+-- /See:/ 'getConnectionsFilter' smart constructor.
+data GetConnectionsFilter = GetConnectionsFilter'
+  { _gcfMatchCriteria  :: !(Maybe [Text])
+  , _gcfConnectionType :: !(Maybe ConnectionType)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GetConnectionsFilter' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcfMatchCriteria' - A criteria string that must match the criteria recorded in the connection definition for that connection definition to be returned.
+--
+-- * 'gcfConnectionType' - The type of connections to return. Currently, only JDBC is supported; SFTP is not supported.
+getConnectionsFilter
+    :: GetConnectionsFilter
+getConnectionsFilter =
+  GetConnectionsFilter'
+  {_gcfMatchCriteria = Nothing, _gcfConnectionType = Nothing}
+
+
+-- | A criteria string that must match the criteria recorded in the connection definition for that connection definition to be returned.
+gcfMatchCriteria :: Lens' GetConnectionsFilter [Text]
+gcfMatchCriteria = lens _gcfMatchCriteria (\ s a -> s{_gcfMatchCriteria = a}) . _Default . _Coerce;
+
+-- | The type of connections to return. Currently, only JDBC is supported; SFTP is not supported.
+gcfConnectionType :: Lens' GetConnectionsFilter (Maybe ConnectionType)
+gcfConnectionType = lens _gcfConnectionType (\ s a -> s{_gcfConnectionType = a});
+
+instance Hashable GetConnectionsFilter where
+
+instance NFData GetConnectionsFilter where
+
+instance ToJSON GetConnectionsFilter where
+        toJSON GetConnectionsFilter'{..}
+          = object
+              (catMaybes
+                 [("MatchCriteria" .=) <$> _gcfMatchCriteria,
+                  ("ConnectionType" .=) <$> _gcfConnectionType])
+
+-- | A classifier that uses @grok@ .
+--
+--
+--
+-- /See:/ 'grokClassifier' smart constructor.
+data GrokClassifier = GrokClassifier'
+  { _gcCreationTime   :: !(Maybe POSIX)
+  , _gcLastUpdated    :: !(Maybe POSIX)
+  , _gcVersion        :: !(Maybe Integer)
+  , _gcCustomPatterns :: !(Maybe Text)
+  , _gcName           :: !Text
+  , _gcClassification :: !Text
+  , _gcGrokPattern    :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'GrokClassifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gcCreationTime' - The time this classifier was registered.
+--
+-- * 'gcLastUpdated' - The time this classifier was last updated.
+--
+-- * 'gcVersion' - The version of this classifier.
+--
+-- * 'gcCustomPatterns' - Custom grok patterns used by this classifier.
+--
+-- * 'gcName' - The name of the classifier.
+--
+-- * 'gcClassification' - The data form that the classifier matches, such as Twitter, JSON, Omniture Logs, and so forth.
+--
+-- * 'gcGrokPattern' - The grok pattern used by this classifier.
+grokClassifier
+    :: Text -- ^ 'gcName'
+    -> Text -- ^ 'gcClassification'
+    -> Text -- ^ 'gcGrokPattern'
+    -> GrokClassifier
+grokClassifier pName_ pClassification_ pGrokPattern_ =
+  GrokClassifier'
+  { _gcCreationTime = Nothing
+  , _gcLastUpdated = Nothing
+  , _gcVersion = Nothing
+  , _gcCustomPatterns = Nothing
+  , _gcName = pName_
+  , _gcClassification = pClassification_
+  , _gcGrokPattern = pGrokPattern_
+  }
+
+
+-- | The time this classifier was registered.
+gcCreationTime :: Lens' GrokClassifier (Maybe UTCTime)
+gcCreationTime = lens _gcCreationTime (\ s a -> s{_gcCreationTime = a}) . mapping _Time;
+
+-- | The time this classifier was last updated.
+gcLastUpdated :: Lens' GrokClassifier (Maybe UTCTime)
+gcLastUpdated = lens _gcLastUpdated (\ s a -> s{_gcLastUpdated = a}) . mapping _Time;
+
+-- | The version of this classifier.
+gcVersion :: Lens' GrokClassifier (Maybe Integer)
+gcVersion = lens _gcVersion (\ s a -> s{_gcVersion = a});
+
+-- | Custom grok patterns used by this classifier.
+gcCustomPatterns :: Lens' GrokClassifier (Maybe Text)
+gcCustomPatterns = lens _gcCustomPatterns (\ s a -> s{_gcCustomPatterns = a});
+
+-- | The name of the classifier.
+gcName :: Lens' GrokClassifier Text
+gcName = lens _gcName (\ s a -> s{_gcName = a});
+
+-- | The data form that the classifier matches, such as Twitter, JSON, Omniture Logs, and so forth.
+gcClassification :: Lens' GrokClassifier Text
+gcClassification = lens _gcClassification (\ s a -> s{_gcClassification = a});
+
+-- | The grok pattern used by this classifier.
+gcGrokPattern :: Lens' GrokClassifier Text
+gcGrokPattern = lens _gcGrokPattern (\ s a -> s{_gcGrokPattern = a});
+
+instance FromJSON GrokClassifier where
+        parseJSON
+          = withObject "GrokClassifier"
+              (\ x ->
+                 GrokClassifier' <$>
+                   (x .:? "CreationTime") <*> (x .:? "LastUpdated") <*>
+                     (x .:? "Version")
+                     <*> (x .:? "CustomPatterns")
+                     <*> (x .: "Name")
+                     <*> (x .: "Classification")
+                     <*> (x .: "GrokPattern"))
+
+instance Hashable GrokClassifier where
+
+instance NFData GrokClassifier where
+
+-- | Specifies a JDBC target for a crawl.
+--
+--
+--
+-- /See:/ 'jdbcTarget' smart constructor.
+data JdbcTarget = JdbcTarget'
+  { _jtPath           :: !(Maybe Text)
+  , _jtConnectionName :: !(Maybe Text)
+  , _jtExclusions     :: !(Maybe [Text])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'JdbcTarget' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jtPath' - The path of the JDBC target.
+--
+-- * 'jtConnectionName' - The name of the connection to use for the JDBC target.
+--
+-- * 'jtExclusions' - A list of items to exclude from the crawl.
+jdbcTarget
+    :: JdbcTarget
+jdbcTarget =
+  JdbcTarget'
+  {_jtPath = Nothing, _jtConnectionName = Nothing, _jtExclusions = Nothing}
+
+
+-- | The path of the JDBC target.
+jtPath :: Lens' JdbcTarget (Maybe Text)
+jtPath = lens _jtPath (\ s a -> s{_jtPath = a});
+
+-- | The name of the connection to use for the JDBC target.
+jtConnectionName :: Lens' JdbcTarget (Maybe Text)
+jtConnectionName = lens _jtConnectionName (\ s a -> s{_jtConnectionName = a});
+
+-- | A list of items to exclude from the crawl.
+jtExclusions :: Lens' JdbcTarget [Text]
+jtExclusions = lens _jtExclusions (\ s a -> s{_jtExclusions = a}) . _Default . _Coerce;
+
+instance FromJSON JdbcTarget where
+        parseJSON
+          = withObject "JdbcTarget"
+              (\ x ->
+                 JdbcTarget' <$>
+                   (x .:? "Path") <*> (x .:? "ConnectionName") <*>
+                     (x .:? "Exclusions" .!= mempty))
+
+instance Hashable JdbcTarget where
+
+instance NFData JdbcTarget where
+
+instance ToJSON JdbcTarget where
+        toJSON JdbcTarget'{..}
+          = object
+              (catMaybes
+                 [("Path" .=) <$> _jtPath,
+                  ("ConnectionName" .=) <$> _jtConnectionName,
+                  ("Exclusions" .=) <$> _jtExclusions])
+
+-- | Specifies a job in the Data Catalog.
+--
+--
+--
+-- /See:/ 'job' smart constructor.
+data Job = Job'
+  { _jCommand           :: !(Maybe JobCommand)
+  , _jLastModifiedOn    :: !(Maybe POSIX)
+  , _jConnections       :: !(Maybe ConnectionsList)
+  , _jRole              :: !(Maybe Text)
+  , _jName              :: !(Maybe Text)
+  , _jLogURI            :: !(Maybe Text)
+  , _jMaxRetries        :: !(Maybe Int)
+  , _jExecutionProperty :: !(Maybe ExecutionProperty)
+  , _jAllocatedCapacity :: !(Maybe Int)
+  , _jDefaultArguments  :: !(Maybe (Map Text Text))
+  , _jDescription       :: !(Maybe Text)
+  , _jCreatedOn         :: !(Maybe POSIX)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Job' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jCommand' - The JobCommand that executes this job.
+--
+-- * 'jLastModifiedOn' - The last point in time when this job specification was modified.
+--
+-- * 'jConnections' - The connections used for this job.
+--
+-- * 'jRole' - The role associated with this job.
+--
+-- * 'jName' - The name you assign to this job.
+--
+-- * 'jLogURI' - This field is reserved for future use.
+--
+-- * 'jMaxRetries' - The maximum number of times to retry this job if it fails.
+--
+-- * 'jExecutionProperty' - An ExecutionProperty specifying the maximum number of concurrent runs allowed for this job.
+--
+-- * 'jAllocatedCapacity' - The number of capacity units allocated to this job.
+--
+-- * 'jDefaultArguments' - The default parameters for this job.
+--
+-- * 'jDescription' - Description of this job.
+--
+-- * 'jCreatedOn' - The time and date that this job specification was created.
+job
+    :: Job
+job =
+  Job'
+  { _jCommand = Nothing
+  , _jLastModifiedOn = Nothing
+  , _jConnections = Nothing
+  , _jRole = Nothing
+  , _jName = Nothing
+  , _jLogURI = Nothing
+  , _jMaxRetries = Nothing
+  , _jExecutionProperty = Nothing
+  , _jAllocatedCapacity = Nothing
+  , _jDefaultArguments = Nothing
+  , _jDescription = Nothing
+  , _jCreatedOn = Nothing
+  }
+
+
+-- | The JobCommand that executes this job.
+jCommand :: Lens' Job (Maybe JobCommand)
+jCommand = lens _jCommand (\ s a -> s{_jCommand = a});
+
+-- | The last point in time when this job specification was modified.
+jLastModifiedOn :: Lens' Job (Maybe UTCTime)
+jLastModifiedOn = lens _jLastModifiedOn (\ s a -> s{_jLastModifiedOn = a}) . mapping _Time;
+
+-- | The connections used for this job.
+jConnections :: Lens' Job (Maybe ConnectionsList)
+jConnections = lens _jConnections (\ s a -> s{_jConnections = a});
+
+-- | The role associated with this job.
+jRole :: Lens' Job (Maybe Text)
+jRole = lens _jRole (\ s a -> s{_jRole = a});
+
+-- | The name you assign to this job.
+jName :: Lens' Job (Maybe Text)
+jName = lens _jName (\ s a -> s{_jName = a});
+
+-- | This field is reserved for future use.
+jLogURI :: Lens' Job (Maybe Text)
+jLogURI = lens _jLogURI (\ s a -> s{_jLogURI = a});
+
+-- | The maximum number of times to retry this job if it fails.
+jMaxRetries :: Lens' Job (Maybe Int)
+jMaxRetries = lens _jMaxRetries (\ s a -> s{_jMaxRetries = a});
+
+-- | An ExecutionProperty specifying the maximum number of concurrent runs allowed for this job.
+jExecutionProperty :: Lens' Job (Maybe ExecutionProperty)
+jExecutionProperty = lens _jExecutionProperty (\ s a -> s{_jExecutionProperty = a});
+
+-- | The number of capacity units allocated to this job.
+jAllocatedCapacity :: Lens' Job (Maybe Int)
+jAllocatedCapacity = lens _jAllocatedCapacity (\ s a -> s{_jAllocatedCapacity = a});
+
+-- | The default parameters for this job.
+jDefaultArguments :: Lens' Job (HashMap Text Text)
+jDefaultArguments = lens _jDefaultArguments (\ s a -> s{_jDefaultArguments = a}) . _Default . _Map;
+
+-- | Description of this job.
+jDescription :: Lens' Job (Maybe Text)
+jDescription = lens _jDescription (\ s a -> s{_jDescription = a});
+
+-- | The time and date that this job specification was created.
+jCreatedOn :: Lens' Job (Maybe UTCTime)
+jCreatedOn = lens _jCreatedOn (\ s a -> s{_jCreatedOn = a}) . mapping _Time;
+
+instance FromJSON Job where
+        parseJSON
+          = withObject "Job"
+              (\ x ->
+                 Job' <$>
+                   (x .:? "Command") <*> (x .:? "LastModifiedOn") <*>
+                     (x .:? "Connections")
+                     <*> (x .:? "Role")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "LogUri")
+                     <*> (x .:? "MaxRetries")
+                     <*> (x .:? "ExecutionProperty")
+                     <*> (x .:? "AllocatedCapacity")
+                     <*> (x .:? "DefaultArguments" .!= mempty)
+                     <*> (x .:? "Description")
+                     <*> (x .:? "CreatedOn"))
+
+instance Hashable Job where
+
+instance NFData Job where
+
+-- | Defines a point which a job can resume processing.
+--
+--
+--
+-- /See:/ 'jobBookmarkEntry' smart constructor.
+data JobBookmarkEntry = JobBookmarkEntry'
+  { _jbeJobName     :: !(Maybe Text)
+  , _jbeRun         :: !(Maybe Int)
+  , _jbeVersion     :: !(Maybe Int)
+  , _jbeAttempt     :: !(Maybe Int)
+  , _jbeJobBookmark :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'JobBookmarkEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jbeJobName' - Name of the job in question.
+--
+-- * 'jbeRun' - The run ID number.
+--
+-- * 'jbeVersion' - Version of the job.
+--
+-- * 'jbeAttempt' - The attempt ID number.
+--
+-- * 'jbeJobBookmark' - The bookmark itself.
+jobBookmarkEntry
+    :: JobBookmarkEntry
+jobBookmarkEntry =
+  JobBookmarkEntry'
+  { _jbeJobName = Nothing
+  , _jbeRun = Nothing
+  , _jbeVersion = Nothing
+  , _jbeAttempt = Nothing
+  , _jbeJobBookmark = Nothing
+  }
+
+
+-- | Name of the job in question.
+jbeJobName :: Lens' JobBookmarkEntry (Maybe Text)
+jbeJobName = lens _jbeJobName (\ s a -> s{_jbeJobName = a});
+
+-- | The run ID number.
+jbeRun :: Lens' JobBookmarkEntry (Maybe Int)
+jbeRun = lens _jbeRun (\ s a -> s{_jbeRun = a});
+
+-- | Version of the job.
+jbeVersion :: Lens' JobBookmarkEntry (Maybe Int)
+jbeVersion = lens _jbeVersion (\ s a -> s{_jbeVersion = a});
+
+-- | The attempt ID number.
+jbeAttempt :: Lens' JobBookmarkEntry (Maybe Int)
+jbeAttempt = lens _jbeAttempt (\ s a -> s{_jbeAttempt = a});
+
+-- | The bookmark itself.
+jbeJobBookmark :: Lens' JobBookmarkEntry (Maybe Text)
+jbeJobBookmark = lens _jbeJobBookmark (\ s a -> s{_jbeJobBookmark = a});
+
+instance FromJSON JobBookmarkEntry where
+        parseJSON
+          = withObject "JobBookmarkEntry"
+              (\ x ->
+                 JobBookmarkEntry' <$>
+                   (x .:? "JobName") <*> (x .:? "Run") <*>
+                     (x .:? "Version")
+                     <*> (x .:? "Attempt")
+                     <*> (x .:? "JobBookmark"))
+
+instance Hashable JobBookmarkEntry where
+
+instance NFData JobBookmarkEntry where
+
+-- | Specifies code that executes a job.
+--
+--
+--
+-- /See:/ 'jobCommand' smart constructor.
+data JobCommand = JobCommand'
+  { _jcScriptLocation :: !(Maybe Text)
+  , _jcName           :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'JobCommand' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jcScriptLocation' - Specifies the location of a script that executes a job.
+--
+-- * 'jcName' - The name of this job command.
+jobCommand
+    :: JobCommand
+jobCommand = JobCommand' {_jcScriptLocation = Nothing, _jcName = Nothing}
+
+
+-- | Specifies the location of a script that executes a job.
+jcScriptLocation :: Lens' JobCommand (Maybe Text)
+jcScriptLocation = lens _jcScriptLocation (\ s a -> s{_jcScriptLocation = a});
+
+-- | The name of this job command.
+jcName :: Lens' JobCommand (Maybe Text)
+jcName = lens _jcName (\ s a -> s{_jcName = a});
+
+instance FromJSON JobCommand where
+        parseJSON
+          = withObject "JobCommand"
+              (\ x ->
+                 JobCommand' <$>
+                   (x .:? "ScriptLocation") <*> (x .:? "Name"))
+
+instance Hashable JobCommand where
+
+instance NFData JobCommand where
+
+instance ToJSON JobCommand where
+        toJSON JobCommand'{..}
+          = object
+              (catMaybes
+                 [("ScriptLocation" .=) <$> _jcScriptLocation,
+                  ("Name" .=) <$> _jcName])
+
+-- | Contains information about a job run.
+--
+--
+--
+-- /See:/ 'jobRun' smart constructor.
+data JobRun = JobRun'
+  { _jrCompletedOn       :: !(Maybe POSIX)
+  , _jrTriggerName       :: !(Maybe Text)
+  , _jrLastModifiedOn    :: !(Maybe POSIX)
+  , _jrArguments         :: !(Maybe (Map Text Text))
+  , _jrJobName           :: !(Maybe Text)
+  , _jrStartedOn         :: !(Maybe POSIX)
+  , _jrJobRunState       :: !(Maybe JobRunState)
+  , _jrPredecessorRuns   :: !(Maybe [Predecessor])
+  , _jrPreviousRunId     :: !(Maybe Text)
+  , _jrId                :: !(Maybe Text)
+  , _jrAttempt           :: !(Maybe Int)
+  , _jrAllocatedCapacity :: !(Maybe Int)
+  , _jrErrorMessage      :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'JobRun' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'jrCompletedOn' - The date and time this job run completed.
+--
+-- * 'jrTriggerName' - The name of the trigger for this job run.
+--
+-- * 'jrLastModifiedOn' - The last time this job run was modified.
+--
+-- * 'jrArguments' - The job arguments associated with this run.
+--
+-- * 'jrJobName' - The name of the job being run.
+--
+-- * 'jrStartedOn' - The date and time at which this job run was started.
+--
+-- * 'jrJobRunState' - The current state of the job run.
+--
+-- * 'jrPredecessorRuns' - A list of predecessors to this job run.
+--
+-- * 'jrPreviousRunId' - The ID of the previous run of this job.
+--
+-- * 'jrId' - The ID of this job run.
+--
+-- * 'jrAttempt' - The number or the attempt to run this job.
+--
+-- * 'jrAllocatedCapacity' - The amount of infrastructure capacity allocated to this job run.
+--
+-- * 'jrErrorMessage' - An error message associated with this job run.
+jobRun
+    :: JobRun
+jobRun =
+  JobRun'
+  { _jrCompletedOn = Nothing
+  , _jrTriggerName = Nothing
+  , _jrLastModifiedOn = Nothing
+  , _jrArguments = Nothing
+  , _jrJobName = Nothing
+  , _jrStartedOn = Nothing
+  , _jrJobRunState = Nothing
+  , _jrPredecessorRuns = Nothing
+  , _jrPreviousRunId = Nothing
+  , _jrId = Nothing
+  , _jrAttempt = Nothing
+  , _jrAllocatedCapacity = Nothing
+  , _jrErrorMessage = Nothing
+  }
+
+
+-- | The date and time this job run completed.
+jrCompletedOn :: Lens' JobRun (Maybe UTCTime)
+jrCompletedOn = lens _jrCompletedOn (\ s a -> s{_jrCompletedOn = a}) . mapping _Time;
+
+-- | The name of the trigger for this job run.
+jrTriggerName :: Lens' JobRun (Maybe Text)
+jrTriggerName = lens _jrTriggerName (\ s a -> s{_jrTriggerName = a});
+
+-- | The last time this job run was modified.
+jrLastModifiedOn :: Lens' JobRun (Maybe UTCTime)
+jrLastModifiedOn = lens _jrLastModifiedOn (\ s a -> s{_jrLastModifiedOn = a}) . mapping _Time;
+
+-- | The job arguments associated with this run.
+jrArguments :: Lens' JobRun (HashMap Text Text)
+jrArguments = lens _jrArguments (\ s a -> s{_jrArguments = a}) . _Default . _Map;
+
+-- | The name of the job being run.
+jrJobName :: Lens' JobRun (Maybe Text)
+jrJobName = lens _jrJobName (\ s a -> s{_jrJobName = a});
+
+-- | The date and time at which this job run was started.
+jrStartedOn :: Lens' JobRun (Maybe UTCTime)
+jrStartedOn = lens _jrStartedOn (\ s a -> s{_jrStartedOn = a}) . mapping _Time;
+
+-- | The current state of the job run.
+jrJobRunState :: Lens' JobRun (Maybe JobRunState)
+jrJobRunState = lens _jrJobRunState (\ s a -> s{_jrJobRunState = a});
+
+-- | A list of predecessors to this job run.
+jrPredecessorRuns :: Lens' JobRun [Predecessor]
+jrPredecessorRuns = lens _jrPredecessorRuns (\ s a -> s{_jrPredecessorRuns = a}) . _Default . _Coerce;
+
+-- | The ID of the previous run of this job.
+jrPreviousRunId :: Lens' JobRun (Maybe Text)
+jrPreviousRunId = lens _jrPreviousRunId (\ s a -> s{_jrPreviousRunId = a});
+
+-- | The ID of this job run.
+jrId :: Lens' JobRun (Maybe Text)
+jrId = lens _jrId (\ s a -> s{_jrId = a});
+
+-- | The number or the attempt to run this job.
+jrAttempt :: Lens' JobRun (Maybe Int)
+jrAttempt = lens _jrAttempt (\ s a -> s{_jrAttempt = a});
+
+-- | The amount of infrastructure capacity allocated to this job run.
+jrAllocatedCapacity :: Lens' JobRun (Maybe Int)
+jrAllocatedCapacity = lens _jrAllocatedCapacity (\ s a -> s{_jrAllocatedCapacity = a});
+
+-- | An error message associated with this job run.
+jrErrorMessage :: Lens' JobRun (Maybe Text)
+jrErrorMessage = lens _jrErrorMessage (\ s a -> s{_jrErrorMessage = a});
+
+instance FromJSON JobRun where
+        parseJSON
+          = withObject "JobRun"
+              (\ x ->
+                 JobRun' <$>
+                   (x .:? "CompletedOn") <*> (x .:? "TriggerName") <*>
+                     (x .:? "LastModifiedOn")
+                     <*> (x .:? "Arguments" .!= mempty)
+                     <*> (x .:? "JobName")
+                     <*> (x .:? "StartedOn")
+                     <*> (x .:? "JobRunState")
+                     <*> (x .:? "PredecessorRuns" .!= mempty)
+                     <*> (x .:? "PreviousRunId")
+                     <*> (x .:? "Id")
+                     <*> (x .:? "Attempt")
+                     <*> (x .:? "AllocatedCapacity")
+                     <*> (x .:? "ErrorMessage"))
+
+instance Hashable JobRun where
+
+instance NFData JobRun where
+
+-- | Specifies information used to update an existing job.
+--
+--
+--
+-- /See:/ 'jobUpdate' smart constructor.
+data JobUpdate = JobUpdate'
+  { _juCommand           :: !(Maybe JobCommand)
+  , _juConnections       :: !(Maybe ConnectionsList)
+  , _juRole              :: !(Maybe Text)
+  , _juLogURI            :: !(Maybe Text)
+  , _juMaxRetries        :: !(Maybe Int)
+  , _juExecutionProperty :: !(Maybe ExecutionProperty)
+  , _juAllocatedCapacity :: !(Maybe Int)
+  , _juDefaultArguments  :: !(Maybe (Map Text Text))
+  , _juDescription       :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'JobUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'juCommand' - The JobCommand that executes this job.
+--
+-- * 'juConnections' - The connections used for this job.
+--
+-- * 'juRole' - The role associated with this job.
+--
+-- * 'juLogURI' - This field is reserved for future use.
+--
+-- * 'juMaxRetries' - The maximum number of times to retry this job if it fails.
+--
+-- * 'juExecutionProperty' - An ExecutionProperty specifying the maximum number of concurrent runs allowed for this job.
+--
+-- * 'juAllocatedCapacity' - The number of capacity units allocated to this job.
+--
+-- * 'juDefaultArguments' - The default parameters for this job.
+--
+-- * 'juDescription' - Description of the job.
+jobUpdate
+    :: JobUpdate
+jobUpdate =
+  JobUpdate'
+  { _juCommand = Nothing
+  , _juConnections = Nothing
+  , _juRole = Nothing
+  , _juLogURI = Nothing
+  , _juMaxRetries = Nothing
+  , _juExecutionProperty = Nothing
+  , _juAllocatedCapacity = Nothing
+  , _juDefaultArguments = Nothing
+  , _juDescription = Nothing
+  }
+
+
+-- | The JobCommand that executes this job.
+juCommand :: Lens' JobUpdate (Maybe JobCommand)
+juCommand = lens _juCommand (\ s a -> s{_juCommand = a});
+
+-- | The connections used for this job.
+juConnections :: Lens' JobUpdate (Maybe ConnectionsList)
+juConnections = lens _juConnections (\ s a -> s{_juConnections = a});
+
+-- | The role associated with this job.
+juRole :: Lens' JobUpdate (Maybe Text)
+juRole = lens _juRole (\ s a -> s{_juRole = a});
+
+-- | This field is reserved for future use.
+juLogURI :: Lens' JobUpdate (Maybe Text)
+juLogURI = lens _juLogURI (\ s a -> s{_juLogURI = a});
+
+-- | The maximum number of times to retry this job if it fails.
+juMaxRetries :: Lens' JobUpdate (Maybe Int)
+juMaxRetries = lens _juMaxRetries (\ s a -> s{_juMaxRetries = a});
+
+-- | An ExecutionProperty specifying the maximum number of concurrent runs allowed for this job.
+juExecutionProperty :: Lens' JobUpdate (Maybe ExecutionProperty)
+juExecutionProperty = lens _juExecutionProperty (\ s a -> s{_juExecutionProperty = a});
+
+-- | The number of capacity units allocated to this job.
+juAllocatedCapacity :: Lens' JobUpdate (Maybe Int)
+juAllocatedCapacity = lens _juAllocatedCapacity (\ s a -> s{_juAllocatedCapacity = a});
+
+-- | The default parameters for this job.
+juDefaultArguments :: Lens' JobUpdate (HashMap Text Text)
+juDefaultArguments = lens _juDefaultArguments (\ s a -> s{_juDefaultArguments = a}) . _Default . _Map;
+
+-- | Description of the job.
+juDescription :: Lens' JobUpdate (Maybe Text)
+juDescription = lens _juDescription (\ s a -> s{_juDescription = a});
+
+instance Hashable JobUpdate where
+
+instance NFData JobUpdate where
+
+instance ToJSON JobUpdate where
+        toJSON JobUpdate'{..}
+          = object
+              (catMaybes
+                 [("Command" .=) <$> _juCommand,
+                  ("Connections" .=) <$> _juConnections,
+                  ("Role" .=) <$> _juRole, ("LogUri" .=) <$> _juLogURI,
+                  ("MaxRetries" .=) <$> _juMaxRetries,
+                  ("ExecutionProperty" .=) <$> _juExecutionProperty,
+                  ("AllocatedCapacity" .=) <$> _juAllocatedCapacity,
+                  ("DefaultArguments" .=) <$> _juDefaultArguments,
+                  ("Description" .=) <$> _juDescription])
+
+-- | Status and error information about the most recent crawl.
+--
+--
+--
+-- /See:/ 'lastCrawlInfo' smart constructor.
+data LastCrawlInfo = LastCrawlInfo'
+  { _lciStatus        :: !(Maybe LastCrawlStatus)
+  , _lciStartTime     :: !(Maybe POSIX)
+  , _lciLogStream     :: !(Maybe Text)
+  , _lciLogGroup      :: !(Maybe Text)
+  , _lciMessagePrefix :: !(Maybe Text)
+  , _lciErrorMessage  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'LastCrawlInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lciStatus' - Status of the last crawl.
+--
+-- * 'lciStartTime' - The time at which the crawl started.
+--
+-- * 'lciLogStream' - The log stream for the last crawl.
+--
+-- * 'lciLogGroup' - The log group for the last crawl.
+--
+-- * 'lciMessagePrefix' - The prefix for a message about this crawl.
+--
+-- * 'lciErrorMessage' - Error information about the last crawl, if an error occurred.
+lastCrawlInfo
+    :: LastCrawlInfo
+lastCrawlInfo =
+  LastCrawlInfo'
+  { _lciStatus = Nothing
+  , _lciStartTime = Nothing
+  , _lciLogStream = Nothing
+  , _lciLogGroup = Nothing
+  , _lciMessagePrefix = Nothing
+  , _lciErrorMessage = Nothing
+  }
+
+
+-- | Status of the last crawl.
+lciStatus :: Lens' LastCrawlInfo (Maybe LastCrawlStatus)
+lciStatus = lens _lciStatus (\ s a -> s{_lciStatus = a});
+
+-- | The time at which the crawl started.
+lciStartTime :: Lens' LastCrawlInfo (Maybe UTCTime)
+lciStartTime = lens _lciStartTime (\ s a -> s{_lciStartTime = a}) . mapping _Time;
+
+-- | The log stream for the last crawl.
+lciLogStream :: Lens' LastCrawlInfo (Maybe Text)
+lciLogStream = lens _lciLogStream (\ s a -> s{_lciLogStream = a});
+
+-- | The log group for the last crawl.
+lciLogGroup :: Lens' LastCrawlInfo (Maybe Text)
+lciLogGroup = lens _lciLogGroup (\ s a -> s{_lciLogGroup = a});
+
+-- | The prefix for a message about this crawl.
+lciMessagePrefix :: Lens' LastCrawlInfo (Maybe Text)
+lciMessagePrefix = lens _lciMessagePrefix (\ s a -> s{_lciMessagePrefix = a});
+
+-- | Error information about the last crawl, if an error occurred.
+lciErrorMessage :: Lens' LastCrawlInfo (Maybe Text)
+lciErrorMessage = lens _lciErrorMessage (\ s a -> s{_lciErrorMessage = a});
+
+instance FromJSON LastCrawlInfo where
+        parseJSON
+          = withObject "LastCrawlInfo"
+              (\ x ->
+                 LastCrawlInfo' <$>
+                   (x .:? "Status") <*> (x .:? "StartTime") <*>
+                     (x .:? "LogStream")
+                     <*> (x .:? "LogGroup")
+                     <*> (x .:? "MessagePrefix")
+                     <*> (x .:? "ErrorMessage"))
+
+instance Hashable LastCrawlInfo where
+
+instance NFData LastCrawlInfo where
+
+-- | The location of resources.
+--
+--
+--
+-- /See:/ 'location' smart constructor.
+data Location = Location'
+  { _lJdbc :: !(Maybe [CodeGenNodeArg])
+  , _lS3   :: !(Maybe [CodeGenNodeArg])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Location' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lJdbc' - A JDBC location.
+--
+-- * 'lS3' - An AWS S3 location.
+location
+    :: Location
+location = Location' {_lJdbc = Nothing, _lS3 = Nothing}
+
+
+-- | A JDBC location.
+lJdbc :: Lens' Location [CodeGenNodeArg]
+lJdbc = lens _lJdbc (\ s a -> s{_lJdbc = a}) . _Default . _Coerce;
+
+-- | An AWS S3 location.
+lS3 :: Lens' Location [CodeGenNodeArg]
+lS3 = lens _lS3 (\ s a -> s{_lS3 = a}) . _Default . _Coerce;
+
+instance Hashable Location where
+
+instance NFData Location where
+
+instance ToJSON Location where
+        toJSON Location'{..}
+          = object
+              (catMaybes
+                 [("Jdbc" .=) <$> _lJdbc, ("S3" .=) <$> _lS3])
+
+-- | Defines a mapping.
+--
+--
+--
+-- /See:/ 'mappingEntry' smart constructor.
+data MappingEntry = MappingEntry'
+  { _meTargetTable :: !(Maybe Text)
+  , _meSourceType  :: !(Maybe Text)
+  , _meSourceTable :: !(Maybe Text)
+  , _meTargetType  :: !(Maybe Text)
+  , _meTargetPath  :: !(Maybe Text)
+  , _meSourcePath  :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'MappingEntry' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'meTargetTable' - The target table.
+--
+-- * 'meSourceType' - The source type.
+--
+-- * 'meSourceTable' - The name of the source table.
+--
+-- * 'meTargetType' - The target type.
+--
+-- * 'meTargetPath' - The target path.
+--
+-- * 'meSourcePath' - The source path.
+mappingEntry
+    :: MappingEntry
+mappingEntry =
+  MappingEntry'
+  { _meTargetTable = Nothing
+  , _meSourceType = Nothing
+  , _meSourceTable = Nothing
+  , _meTargetType = Nothing
+  , _meTargetPath = Nothing
+  , _meSourcePath = Nothing
+  }
+
+
+-- | The target table.
+meTargetTable :: Lens' MappingEntry (Maybe Text)
+meTargetTable = lens _meTargetTable (\ s a -> s{_meTargetTable = a});
+
+-- | The source type.
+meSourceType :: Lens' MappingEntry (Maybe Text)
+meSourceType = lens _meSourceType (\ s a -> s{_meSourceType = a});
+
+-- | The name of the source table.
+meSourceTable :: Lens' MappingEntry (Maybe Text)
+meSourceTable = lens _meSourceTable (\ s a -> s{_meSourceTable = a});
+
+-- | The target type.
+meTargetType :: Lens' MappingEntry (Maybe Text)
+meTargetType = lens _meTargetType (\ s a -> s{_meTargetType = a});
+
+-- | The target path.
+meTargetPath :: Lens' MappingEntry (Maybe Text)
+meTargetPath = lens _meTargetPath (\ s a -> s{_meTargetPath = a});
+
+-- | The source path.
+meSourcePath :: Lens' MappingEntry (Maybe Text)
+meSourcePath = lens _meSourcePath (\ s a -> s{_meSourcePath = a});
+
+instance FromJSON MappingEntry where
+        parseJSON
+          = withObject "MappingEntry"
+              (\ x ->
+                 MappingEntry' <$>
+                   (x .:? "TargetTable") <*> (x .:? "SourceType") <*>
+                     (x .:? "SourceTable")
+                     <*> (x .:? "TargetType")
+                     <*> (x .:? "TargetPath")
+                     <*> (x .:? "SourcePath"))
+
+instance Hashable MappingEntry where
+
+instance NFData MappingEntry where
+
+instance ToJSON MappingEntry where
+        toJSON MappingEntry'{..}
+          = object
+              (catMaybes
+                 [("TargetTable" .=) <$> _meTargetTable,
+                  ("SourceType" .=) <$> _meSourceType,
+                  ("SourceTable" .=) <$> _meSourceTable,
+                  ("TargetType" .=) <$> _meTargetType,
+                  ("TargetPath" .=) <$> _meTargetPath,
+                  ("SourcePath" .=) <$> _meSourcePath])
+
+-- | Specifies the sort order of a sorted column.
+--
+--
+--
+-- /See:/ 'order' smart constructor.
+data Order = Order'
+  { _oColumn    :: !Text
+  , _oSortOrder :: !Nat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Order' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'oColumn' - The name of the column.
+--
+-- * 'oSortOrder' - Indicates that the column is sorted in ascending order (@== 1@ ), or in descending order (@==0@ ).
+order
+    :: Text -- ^ 'oColumn'
+    -> Natural -- ^ 'oSortOrder'
+    -> Order
+order pColumn_ pSortOrder_ =
+  Order' {_oColumn = pColumn_, _oSortOrder = _Nat # pSortOrder_}
+
+
+-- | The name of the column.
+oColumn :: Lens' Order Text
+oColumn = lens _oColumn (\ s a -> s{_oColumn = a});
+
+-- | Indicates that the column is sorted in ascending order (@== 1@ ), or in descending order (@==0@ ).
+oSortOrder :: Lens' Order Natural
+oSortOrder = lens _oSortOrder (\ s a -> s{_oSortOrder = a}) . _Nat;
+
+instance FromJSON Order where
+        parseJSON
+          = withObject "Order"
+              (\ x ->
+                 Order' <$> (x .: "Column") <*> (x .: "SortOrder"))
+
+instance Hashable Order where
+
+instance NFData Order where
+
+instance ToJSON Order where
+        toJSON Order'{..}
+          = object
+              (catMaybes
+                 [Just ("Column" .= _oColumn),
+                  Just ("SortOrder" .= _oSortOrder)])
+
+-- | Represents a slice of table data.
+--
+--
+--
+-- /See:/ 'partition' smart constructor.
+data Partition = Partition'
+  { _pCreationTime      :: !(Maybe POSIX)
+  , _pValues            :: !(Maybe [Text])
+  , _pLastAnalyzedTime  :: !(Maybe POSIX)
+  , _pStorageDescriptor :: !(Maybe StorageDescriptor)
+  , _pDatabaseName      :: !(Maybe Text)
+  , _pParameters        :: !(Maybe (Map Text Text))
+  , _pLastAccessTime    :: !(Maybe POSIX)
+  , _pTableName         :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Partition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pCreationTime' - The time at which the partition was created.
+--
+-- * 'pValues' - The values of the partition.
+--
+-- * 'pLastAnalyzedTime' - The last time at which column statistics were computed for this partition.
+--
+-- * 'pStorageDescriptor' - Provides information about the physical location where the partition is stored.
+--
+-- * 'pDatabaseName' - The name of the catalog database where the table in question is located.
+--
+-- * 'pParameters' - Partition parameters, in the form of a list of key-value pairs.
+--
+-- * 'pLastAccessTime' - The last time at which the partition was accessed.
+--
+-- * 'pTableName' - The name of the table in question.
+partition
+    :: Partition
+partition =
+  Partition'
+  { _pCreationTime = Nothing
+  , _pValues = Nothing
+  , _pLastAnalyzedTime = Nothing
+  , _pStorageDescriptor = Nothing
+  , _pDatabaseName = Nothing
+  , _pParameters = Nothing
+  , _pLastAccessTime = Nothing
+  , _pTableName = Nothing
+  }
+
+
+-- | The time at which the partition was created.
+pCreationTime :: Lens' Partition (Maybe UTCTime)
+pCreationTime = lens _pCreationTime (\ s a -> s{_pCreationTime = a}) . mapping _Time;
+
+-- | The values of the partition.
+pValues :: Lens' Partition [Text]
+pValues = lens _pValues (\ s a -> s{_pValues = a}) . _Default . _Coerce;
+
+-- | The last time at which column statistics were computed for this partition.
+pLastAnalyzedTime :: Lens' Partition (Maybe UTCTime)
+pLastAnalyzedTime = lens _pLastAnalyzedTime (\ s a -> s{_pLastAnalyzedTime = a}) . mapping _Time;
+
+-- | Provides information about the physical location where the partition is stored.
+pStorageDescriptor :: Lens' Partition (Maybe StorageDescriptor)
+pStorageDescriptor = lens _pStorageDescriptor (\ s a -> s{_pStorageDescriptor = a});
+
+-- | The name of the catalog database where the table in question is located.
+pDatabaseName :: Lens' Partition (Maybe Text)
+pDatabaseName = lens _pDatabaseName (\ s a -> s{_pDatabaseName = a});
+
+-- | Partition parameters, in the form of a list of key-value pairs.
+pParameters :: Lens' Partition (HashMap Text Text)
+pParameters = lens _pParameters (\ s a -> s{_pParameters = a}) . _Default . _Map;
+
+-- | The last time at which the partition was accessed.
+pLastAccessTime :: Lens' Partition (Maybe UTCTime)
+pLastAccessTime = lens _pLastAccessTime (\ s a -> s{_pLastAccessTime = a}) . mapping _Time;
+
+-- | The name of the table in question.
+pTableName :: Lens' Partition (Maybe Text)
+pTableName = lens _pTableName (\ s a -> s{_pTableName = a});
+
+instance FromJSON Partition where
+        parseJSON
+          = withObject "Partition"
+              (\ x ->
+                 Partition' <$>
+                   (x .:? "CreationTime") <*>
+                     (x .:? "Values" .!= mempty)
+                     <*> (x .:? "LastAnalyzedTime")
+                     <*> (x .:? "StorageDescriptor")
+                     <*> (x .:? "DatabaseName")
+                     <*> (x .:? "Parameters" .!= mempty)
+                     <*> (x .:? "LastAccessTime")
+                     <*> (x .:? "TableName"))
+
+instance Hashable Partition where
+
+instance NFData Partition where
+
+-- | Contains information about a partition error.
+--
+--
+--
+-- /See:/ 'partitionError' smart constructor.
+data PartitionError = PartitionError'
+  { _pePartitionValues :: !(Maybe [Text])
+  , _peErrorDetail     :: !(Maybe ErrorDetail)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PartitionError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pePartitionValues' - The values that define the partition.
+--
+-- * 'peErrorDetail' - Details about the partition error.
+partitionError
+    :: PartitionError
+partitionError =
+  PartitionError' {_pePartitionValues = Nothing, _peErrorDetail = Nothing}
+
+
+-- | The values that define the partition.
+pePartitionValues :: Lens' PartitionError [Text]
+pePartitionValues = lens _pePartitionValues (\ s a -> s{_pePartitionValues = a}) . _Default . _Coerce;
+
+-- | Details about the partition error.
+peErrorDetail :: Lens' PartitionError (Maybe ErrorDetail)
+peErrorDetail = lens _peErrorDetail (\ s a -> s{_peErrorDetail = a});
+
+instance FromJSON PartitionError where
+        parseJSON
+          = withObject "PartitionError"
+              (\ x ->
+                 PartitionError' <$>
+                   (x .:? "PartitionValues" .!= mempty) <*>
+                     (x .:? "ErrorDetail"))
+
+instance Hashable PartitionError where
+
+instance NFData PartitionError where
+
+-- | The structure used to create and update a partion.
+--
+--
+--
+-- /See:/ 'partitionInput' smart constructor.
+data PartitionInput = PartitionInput'
+  { _piValues            :: !(Maybe [Text])
+  , _piLastAnalyzedTime  :: !(Maybe POSIX)
+  , _piStorageDescriptor :: !(Maybe StorageDescriptor)
+  , _piParameters        :: !(Maybe (Map Text Text))
+  , _piLastAccessTime    :: !(Maybe POSIX)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PartitionInput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'piValues' - The values of the partition.
+--
+-- * 'piLastAnalyzedTime' - The last time at which column statistics were computed for this partition.
+--
+-- * 'piStorageDescriptor' - Provides information about the physical location where the partition is stored.
+--
+-- * 'piParameters' - Partition parameters, in the form of a list of key-value pairs.
+--
+-- * 'piLastAccessTime' - The last time at which the partition was accessed.
+partitionInput
+    :: PartitionInput
+partitionInput =
+  PartitionInput'
+  { _piValues = Nothing
+  , _piLastAnalyzedTime = Nothing
+  , _piStorageDescriptor = Nothing
+  , _piParameters = Nothing
+  , _piLastAccessTime = Nothing
+  }
+
+
+-- | The values of the partition.
+piValues :: Lens' PartitionInput [Text]
+piValues = lens _piValues (\ s a -> s{_piValues = a}) . _Default . _Coerce;
+
+-- | The last time at which column statistics were computed for this partition.
+piLastAnalyzedTime :: Lens' PartitionInput (Maybe UTCTime)
+piLastAnalyzedTime = lens _piLastAnalyzedTime (\ s a -> s{_piLastAnalyzedTime = a}) . mapping _Time;
+
+-- | Provides information about the physical location where the partition is stored.
+piStorageDescriptor :: Lens' PartitionInput (Maybe StorageDescriptor)
+piStorageDescriptor = lens _piStorageDescriptor (\ s a -> s{_piStorageDescriptor = a});
+
+-- | Partition parameters, in the form of a list of key-value pairs.
+piParameters :: Lens' PartitionInput (HashMap Text Text)
+piParameters = lens _piParameters (\ s a -> s{_piParameters = a}) . _Default . _Map;
+
+-- | The last time at which the partition was accessed.
+piLastAccessTime :: Lens' PartitionInput (Maybe UTCTime)
+piLastAccessTime = lens _piLastAccessTime (\ s a -> s{_piLastAccessTime = a}) . mapping _Time;
+
+instance Hashable PartitionInput where
+
+instance NFData PartitionInput where
+
+instance ToJSON PartitionInput where
+        toJSON PartitionInput'{..}
+          = object
+              (catMaybes
+                 [("Values" .=) <$> _piValues,
+                  ("LastAnalyzedTime" .=) <$> _piLastAnalyzedTime,
+                  ("StorageDescriptor" .=) <$> _piStorageDescriptor,
+                  ("Parameters" .=) <$> _piParameters,
+                  ("LastAccessTime" .=) <$> _piLastAccessTime])
+
+-- | Contains a list of values defining partitions.
+--
+--
+--
+-- /See:/ 'partitionValueList' smart constructor.
+newtype PartitionValueList = PartitionValueList'
+  { _pvlValues :: [Text]
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PartitionValueList' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pvlValues' - The list of values.
+partitionValueList
+    :: PartitionValueList
+partitionValueList = PartitionValueList' {_pvlValues = mempty}
+
+
+-- | The list of values.
+pvlValues :: Lens' PartitionValueList [Text]
+pvlValues = lens _pvlValues (\ s a -> s{_pvlValues = a}) . _Coerce;
+
+instance FromJSON PartitionValueList where
+        parseJSON
+          = withObject "PartitionValueList"
+              (\ x ->
+                 PartitionValueList' <$> (x .:? "Values" .!= mempty))
+
+instance Hashable PartitionValueList where
+
+instance NFData PartitionValueList where
+
+instance ToJSON PartitionValueList where
+        toJSON PartitionValueList'{..}
+          = object (catMaybes [Just ("Values" .= _pvlValues)])
+
+-- | Specifies the physical requirements for a connection.
+--
+--
+--
+-- /See:/ 'physicalConnectionRequirements' smart constructor.
+data PhysicalConnectionRequirements = PhysicalConnectionRequirements'
+  { _pcrSecurityGroupIdList :: !(Maybe [Text])
+  , _pcrSubnetId            :: !(Maybe Text)
+  , _pcrAvailabilityZone    :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'PhysicalConnectionRequirements' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pcrSecurityGroupIdList' - The security group ID list used by the connection.
+--
+-- * 'pcrSubnetId' - The subnet ID used by the connection.
+--
+-- * 'pcrAvailabilityZone' - The connection's availability zone.
+physicalConnectionRequirements
+    :: PhysicalConnectionRequirements
+physicalConnectionRequirements =
+  PhysicalConnectionRequirements'
+  { _pcrSecurityGroupIdList = Nothing
+  , _pcrSubnetId = Nothing
+  , _pcrAvailabilityZone = Nothing
+  }
+
+
+-- | The security group ID list used by the connection.
+pcrSecurityGroupIdList :: Lens' PhysicalConnectionRequirements [Text]
+pcrSecurityGroupIdList = lens _pcrSecurityGroupIdList (\ s a -> s{_pcrSecurityGroupIdList = a}) . _Default . _Coerce;
+
+-- | The subnet ID used by the connection.
+pcrSubnetId :: Lens' PhysicalConnectionRequirements (Maybe Text)
+pcrSubnetId = lens _pcrSubnetId (\ s a -> s{_pcrSubnetId = a});
+
+-- | The connection's availability zone.
+pcrAvailabilityZone :: Lens' PhysicalConnectionRequirements (Maybe Text)
+pcrAvailabilityZone = lens _pcrAvailabilityZone (\ s a -> s{_pcrAvailabilityZone = a});
+
+instance FromJSON PhysicalConnectionRequirements
+         where
+        parseJSON
+          = withObject "PhysicalConnectionRequirements"
+              (\ x ->
+                 PhysicalConnectionRequirements' <$>
+                   (x .:? "SecurityGroupIdList" .!= mempty) <*>
+                     (x .:? "SubnetId")
+                     <*> (x .:? "AvailabilityZone"))
+
+instance Hashable PhysicalConnectionRequirements
+         where
+
+instance NFData PhysicalConnectionRequirements where
+
+instance ToJSON PhysicalConnectionRequirements where
+        toJSON PhysicalConnectionRequirements'{..}
+          = object
+              (catMaybes
+                 [("SecurityGroupIdList" .=) <$>
+                    _pcrSecurityGroupIdList,
+                  ("SubnetId" .=) <$> _pcrSubnetId,
+                  ("AvailabilityZone" .=) <$> _pcrAvailabilityZone])
+
+-- | A job run that preceded this one.
+--
+--
+--
+-- /See:/ 'predecessor' smart constructor.
+data Predecessor = Predecessor'
+  { _pJobName :: !(Maybe Text)
+  , _pRunId   :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Predecessor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pJobName' - The name of the predecessor job.
+--
+-- * 'pRunId' - The job-run ID of the precessor job run.
+predecessor
+    :: Predecessor
+predecessor = Predecessor' {_pJobName = Nothing, _pRunId = Nothing}
+
+
+-- | The name of the predecessor job.
+pJobName :: Lens' Predecessor (Maybe Text)
+pJobName = lens _pJobName (\ s a -> s{_pJobName = a});
+
+-- | The job-run ID of the precessor job run.
+pRunId :: Lens' Predecessor (Maybe Text)
+pRunId = lens _pRunId (\ s a -> s{_pRunId = a});
+
+instance FromJSON Predecessor where
+        parseJSON
+          = withObject "Predecessor"
+              (\ x ->
+                 Predecessor' <$>
+                   (x .:? "JobName") <*> (x .:? "RunId"))
+
+instance Hashable Predecessor where
+
+instance NFData Predecessor where
+
+-- | Defines the predicate of the trigger, which determines when it fires.
+--
+--
+--
+-- /See:/ 'predicate' smart constructor.
+data Predicate = Predicate'
+  { _pLogical    :: !(Maybe Logical)
+  , _pConditions :: !(Maybe [Condition])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Predicate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pLogical' - Currently "OR" is not supported.
+--
+-- * 'pConditions' - A list of the conditions that determine when the trigger will fire.
+predicate
+    :: Predicate
+predicate = Predicate' {_pLogical = Nothing, _pConditions = Nothing}
+
+
+-- | Currently "OR" is not supported.
+pLogical :: Lens' Predicate (Maybe Logical)
+pLogical = lens _pLogical (\ s a -> s{_pLogical = a});
+
+-- | A list of the conditions that determine when the trigger will fire.
+pConditions :: Lens' Predicate [Condition]
+pConditions = lens _pConditions (\ s a -> s{_pConditions = a}) . _Default . _Coerce;
+
+instance FromJSON Predicate where
+        parseJSON
+          = withObject "Predicate"
+              (\ x ->
+                 Predicate' <$>
+                   (x .:? "Logical") <*>
+                     (x .:? "Conditions" .!= mempty))
+
+instance Hashable Predicate where
+
+instance NFData Predicate where
+
+instance ToJSON Predicate where
+        toJSON Predicate'{..}
+          = object
+              (catMaybes
+                 [("Logical" .=) <$> _pLogical,
+                  ("Conditions" .=) <$> _pConditions])
+
+-- | URIs for function resources.
+--
+--
+--
+-- /See:/ 'resourceURI' smart constructor.
+data ResourceURI = ResourceURI'
+  { _ruResourceType :: !(Maybe ResourceType)
+  , _ruURI          :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'ResourceURI' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ruResourceType' - The type of the resource.
+--
+-- * 'ruURI' - The URI for accessing the resource.
+resourceURI
+    :: ResourceURI
+resourceURI = ResourceURI' {_ruResourceType = Nothing, _ruURI = Nothing}
+
+
+-- | The type of the resource.
+ruResourceType :: Lens' ResourceURI (Maybe ResourceType)
+ruResourceType = lens _ruResourceType (\ s a -> s{_ruResourceType = a});
+
+-- | The URI for accessing the resource.
+ruURI :: Lens' ResourceURI (Maybe Text)
+ruURI = lens _ruURI (\ s a -> s{_ruURI = a});
+
+instance FromJSON ResourceURI where
+        parseJSON
+          = withObject "ResourceURI"
+              (\ x ->
+                 ResourceURI' <$>
+                   (x .:? "ResourceType") <*> (x .:? "Uri"))
+
+instance Hashable ResourceURI where
+
+instance NFData ResourceURI where
+
+instance ToJSON ResourceURI where
+        toJSON ResourceURI'{..}
+          = object
+              (catMaybes
+                 [("ResourceType" .=) <$> _ruResourceType,
+                  ("Uri" .=) <$> _ruURI])
+
+-- | Specifies a crawler target in AWS S3.
+--
+--
+--
+-- /See:/ 's3Target' smart constructor.
+data S3Target = S3Target'
+  { _stPath       :: !(Maybe Text)
+  , _stExclusions :: !(Maybe [Text])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'S3Target' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'stPath' - The path to the S3 target.
+--
+-- * 'stExclusions' - A list of S3 objects to exclude from the crawl.
+s3Target
+    :: S3Target
+s3Target = S3Target' {_stPath = Nothing, _stExclusions = Nothing}
+
+
+-- | The path to the S3 target.
+stPath :: Lens' S3Target (Maybe Text)
+stPath = lens _stPath (\ s a -> s{_stPath = a});
+
+-- | A list of S3 objects to exclude from the crawl.
+stExclusions :: Lens' S3Target [Text]
+stExclusions = lens _stExclusions (\ s a -> s{_stExclusions = a}) . _Default . _Coerce;
+
+instance FromJSON S3Target where
+        parseJSON
+          = withObject "S3Target"
+              (\ x ->
+                 S3Target' <$>
+                   (x .:? "Path") <*> (x .:? "Exclusions" .!= mempty))
+
+instance Hashable S3Target where
+
+instance NFData S3Target where
+
+instance ToJSON S3Target where
+        toJSON S3Target'{..}
+          = object
+              (catMaybes
+                 [("Path" .=) <$> _stPath,
+                  ("Exclusions" .=) <$> _stExclusions])
+
+-- | A scheduling object using a @cron@ statement to schedule an event.
+--
+--
+--
+-- /See:/ 'schedule' smart constructor.
+data Schedule = Schedule'
+  { _sState              :: !(Maybe ScheduleState)
+  , _sScheduleExpression :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Schedule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sState' - The state of the schedule.
+--
+-- * 'sScheduleExpression' - A @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+schedule
+    :: Schedule
+schedule = Schedule' {_sState = Nothing, _sScheduleExpression = Nothing}
+
+
+-- | The state of the schedule.
+sState :: Lens' Schedule (Maybe ScheduleState)
+sState = lens _sState (\ s a -> s{_sState = a});
+
+-- | A @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+sScheduleExpression :: Lens' Schedule (Maybe Text)
+sScheduleExpression = lens _sScheduleExpression (\ s a -> s{_sScheduleExpression = a});
+
+instance FromJSON Schedule where
+        parseJSON
+          = withObject "Schedule"
+              (\ x ->
+                 Schedule' <$>
+                   (x .:? "State") <*> (x .:? "ScheduleExpression"))
+
+instance Hashable Schedule where
+
+instance NFData Schedule where
+
+-- | Crawler policy for update and deletion behavior.
+--
+--
+--
+-- /See:/ 'schemaChangePolicy' smart constructor.
+data SchemaChangePolicy = SchemaChangePolicy'
+  { _scpDeleteBehavior :: !(Maybe DeleteBehavior)
+  , _scpUpdateBehavior :: !(Maybe UpdateBehavior)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SchemaChangePolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'scpDeleteBehavior' - The deletion behavior.
+--
+-- * 'scpUpdateBehavior' - The update behavior.
+schemaChangePolicy
+    :: SchemaChangePolicy
+schemaChangePolicy =
+  SchemaChangePolicy'
+  {_scpDeleteBehavior = Nothing, _scpUpdateBehavior = Nothing}
+
+
+-- | The deletion behavior.
+scpDeleteBehavior :: Lens' SchemaChangePolicy (Maybe DeleteBehavior)
+scpDeleteBehavior = lens _scpDeleteBehavior (\ s a -> s{_scpDeleteBehavior = a});
+
+-- | The update behavior.
+scpUpdateBehavior :: Lens' SchemaChangePolicy (Maybe UpdateBehavior)
+scpUpdateBehavior = lens _scpUpdateBehavior (\ s a -> s{_scpUpdateBehavior = a});
+
+instance FromJSON SchemaChangePolicy where
+        parseJSON
+          = withObject "SchemaChangePolicy"
+              (\ x ->
+                 SchemaChangePolicy' <$>
+                   (x .:? "DeleteBehavior") <*>
+                     (x .:? "UpdateBehavior"))
+
+instance Hashable SchemaChangePolicy where
+
+instance NFData SchemaChangePolicy where
+
+instance ToJSON SchemaChangePolicy where
+        toJSON SchemaChangePolicy'{..}
+          = object
+              (catMaybes
+                 [("DeleteBehavior" .=) <$> _scpDeleteBehavior,
+                  ("UpdateBehavior" .=) <$> _scpUpdateBehavior])
+
+-- | Defines a non-overlapping region of a table's partitions, allowing multiple requests to be executed in parallel.
+--
+--
+--
+-- /See:/ 'segment' smart constructor.
+data Segment = Segment'
+  { _sSegmentNumber :: !Nat
+  , _sTotalSegments :: !Nat
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Segment' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sSegmentNumber' - The zero-based index number of the this segment. For example, if the total number of segments is 4, SegmentNumber values will range from zero through three.
+--
+-- * 'sTotalSegments' - The total numer of segments.
+segment
+    :: Natural -- ^ 'sSegmentNumber'
+    -> Natural -- ^ 'sTotalSegments'
+    -> Segment
+segment pSegmentNumber_ pTotalSegments_ =
+  Segment'
+  { _sSegmentNumber = _Nat # pSegmentNumber_
+  , _sTotalSegments = _Nat # pTotalSegments_
+  }
+
+
+-- | The zero-based index number of the this segment. For example, if the total number of segments is 4, SegmentNumber values will range from zero through three.
+sSegmentNumber :: Lens' Segment Natural
+sSegmentNumber = lens _sSegmentNumber (\ s a -> s{_sSegmentNumber = a}) . _Nat;
+
+-- | The total numer of segments.
+sTotalSegments :: Lens' Segment Natural
+sTotalSegments = lens _sTotalSegments (\ s a -> s{_sTotalSegments = a}) . _Nat;
+
+instance Hashable Segment where
+
+instance NFData Segment where
+
+instance ToJSON Segment where
+        toJSON Segment'{..}
+          = object
+              (catMaybes
+                 [Just ("SegmentNumber" .= _sSegmentNumber),
+                  Just ("TotalSegments" .= _sTotalSegments)])
+
+-- | Information about a serialization/deserialization program (SerDe) which serves as an extractor and loader.
+--
+--
+--
+-- /See:/ 'serDeInfo' smart constructor.
+data SerDeInfo = SerDeInfo'
+  { _sdiSerializationLibrary :: !(Maybe Text)
+  , _sdiName                 :: !(Maybe Text)
+  , _sdiParameters           :: !(Maybe (Map Text Text))
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SerDeInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdiSerializationLibrary' - Usually the class that implements the SerDe. An example is: @org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe@ .
+--
+-- * 'sdiName' - Name of the SerDe.
+--
+-- * 'sdiParameters' - A list of initialization parameters for the SerDe, in key-value form.
+serDeInfo
+    :: SerDeInfo
+serDeInfo =
+  SerDeInfo'
+  { _sdiSerializationLibrary = Nothing
+  , _sdiName = Nothing
+  , _sdiParameters = Nothing
+  }
+
+
+-- | Usually the class that implements the SerDe. An example is: @org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe@ .
+sdiSerializationLibrary :: Lens' SerDeInfo (Maybe Text)
+sdiSerializationLibrary = lens _sdiSerializationLibrary (\ s a -> s{_sdiSerializationLibrary = a});
+
+-- | Name of the SerDe.
+sdiName :: Lens' SerDeInfo (Maybe Text)
+sdiName = lens _sdiName (\ s a -> s{_sdiName = a});
+
+-- | A list of initialization parameters for the SerDe, in key-value form.
+sdiParameters :: Lens' SerDeInfo (HashMap Text Text)
+sdiParameters = lens _sdiParameters (\ s a -> s{_sdiParameters = a}) . _Default . _Map;
+
+instance FromJSON SerDeInfo where
+        parseJSON
+          = withObject "SerDeInfo"
+              (\ x ->
+                 SerDeInfo' <$>
+                   (x .:? "SerializationLibrary") <*> (x .:? "Name") <*>
+                     (x .:? "Parameters" .!= mempty))
+
+instance Hashable SerDeInfo where
+
+instance NFData SerDeInfo where
+
+instance ToJSON SerDeInfo where
+        toJSON SerDeInfo'{..}
+          = object
+              (catMaybes
+                 [("SerializationLibrary" .=) <$>
+                    _sdiSerializationLibrary,
+                  ("Name" .=) <$> _sdiName,
+                  ("Parameters" .=) <$> _sdiParameters])
+
+-- | Specifies skewed values in a table. Skewed are ones that occur with very high frequency.
+--
+--
+--
+-- /See:/ 'skewedInfo' smart constructor.
+data SkewedInfo = SkewedInfo'
+  { _siSkewedColumnValueLocationMaps :: !(Maybe (Map Text Text))
+  , _siSkewedColumnValues            :: !(Maybe [Text])
+  , _siSkewedColumnNames             :: !(Maybe [Text])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'SkewedInfo' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'siSkewedColumnValueLocationMaps' - A mapping of skewed values to the columns that contain them.
+--
+-- * 'siSkewedColumnValues' - A list of values that appear so frequently as to be considered skewed.
+--
+-- * 'siSkewedColumnNames' - A list of names of columns that contain skewed values.
+skewedInfo
+    :: SkewedInfo
+skewedInfo =
+  SkewedInfo'
+  { _siSkewedColumnValueLocationMaps = Nothing
+  , _siSkewedColumnValues = Nothing
+  , _siSkewedColumnNames = Nothing
+  }
+
+
+-- | A mapping of skewed values to the columns that contain them.
+siSkewedColumnValueLocationMaps :: Lens' SkewedInfo (HashMap Text Text)
+siSkewedColumnValueLocationMaps = lens _siSkewedColumnValueLocationMaps (\ s a -> s{_siSkewedColumnValueLocationMaps = a}) . _Default . _Map;
+
+-- | A list of values that appear so frequently as to be considered skewed.
+siSkewedColumnValues :: Lens' SkewedInfo [Text]
+siSkewedColumnValues = lens _siSkewedColumnValues (\ s a -> s{_siSkewedColumnValues = a}) . _Default . _Coerce;
+
+-- | A list of names of columns that contain skewed values.
+siSkewedColumnNames :: Lens' SkewedInfo [Text]
+siSkewedColumnNames = lens _siSkewedColumnNames (\ s a -> s{_siSkewedColumnNames = a}) . _Default . _Coerce;
+
+instance FromJSON SkewedInfo where
+        parseJSON
+          = withObject "SkewedInfo"
+              (\ x ->
+                 SkewedInfo' <$>
+                   (x .:? "SkewedColumnValueLocationMaps" .!= mempty)
+                     <*> (x .:? "SkewedColumnValues" .!= mempty)
+                     <*> (x .:? "SkewedColumnNames" .!= mempty))
+
+instance Hashable SkewedInfo where
+
+instance NFData SkewedInfo where
+
+instance ToJSON SkewedInfo where
+        toJSON SkewedInfo'{..}
+          = object
+              (catMaybes
+                 [("SkewedColumnValueLocationMaps" .=) <$>
+                    _siSkewedColumnValueLocationMaps,
+                  ("SkewedColumnValues" .=) <$> _siSkewedColumnValues,
+                  ("SkewedColumnNames" .=) <$> _siSkewedColumnNames])
+
+-- | Describes the physical storage of table data.
+--
+--
+--
+-- /See:/ 'storageDescriptor' smart constructor.
+data StorageDescriptor = StorageDescriptor'
+  { _sdSortColumns            :: !(Maybe [Order])
+  , _sdCompressed             :: !(Maybe Bool)
+  , _sdLocation               :: !(Maybe Text)
+  , _sdBucketColumns          :: !(Maybe [Text])
+  , _sdSerdeInfo              :: !(Maybe SerDeInfo)
+  , _sdOutputFormat           :: !(Maybe Text)
+  , _sdNumberOfBuckets        :: !(Maybe Int)
+  , _sdStoredAsSubDirectories :: !(Maybe Bool)
+  , _sdParameters             :: !(Maybe (Map Text Text))
+  , _sdInputFormat            :: !(Maybe Text)
+  , _sdSkewedInfo             :: !(Maybe SkewedInfo)
+  , _sdColumns                :: !(Maybe [Column])
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'StorageDescriptor' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'sdSortColumns' - A list specifying the sort order of each bucket in the table.
+--
+-- * 'sdCompressed' - True if the data in the table is compressed, or False if not.
+--
+-- * 'sdLocation' - The physical location of the table. By default this takes the form of the warehouse location, followed by the database location in the warehouse, followed by the table name.
+--
+-- * 'sdBucketColumns' - A list of reducer grouping columns, clustering columns, and bucketing columns in the table.
+--
+-- * 'sdSerdeInfo' - Serialization/deserialization (SerDe) information.
+--
+-- * 'sdOutputFormat' - The output format: @SequenceFileOutputFormat@ (binary), or @IgnoreKeyTextOutputFormat@ , or a custom format.
+--
+-- * 'sdNumberOfBuckets' - Must be specified if the table contains any dimension columns.
+--
+-- * 'sdStoredAsSubDirectories' - True if the table data is stored in subdirectories, or False if not.
+--
+-- * 'sdParameters' - User-supplied properties in key-value form.
+--
+-- * 'sdInputFormat' - The input format: @SequenceFileInputFormat@ (binary), or @TextInputFormat@ , or a custom format.
+--
+-- * 'sdSkewedInfo' - Information about values that appear very frequently in a column (skewed values).
+--
+-- * 'sdColumns' - A list of the @Columns@ in the table.
+storageDescriptor
+    :: StorageDescriptor
+storageDescriptor =
+  StorageDescriptor'
+  { _sdSortColumns = Nothing
+  , _sdCompressed = Nothing
+  , _sdLocation = Nothing
+  , _sdBucketColumns = Nothing
+  , _sdSerdeInfo = Nothing
+  , _sdOutputFormat = Nothing
+  , _sdNumberOfBuckets = Nothing
+  , _sdStoredAsSubDirectories = Nothing
+  , _sdParameters = Nothing
+  , _sdInputFormat = Nothing
+  , _sdSkewedInfo = Nothing
+  , _sdColumns = Nothing
+  }
+
+
+-- | A list specifying the sort order of each bucket in the table.
+sdSortColumns :: Lens' StorageDescriptor [Order]
+sdSortColumns = lens _sdSortColumns (\ s a -> s{_sdSortColumns = a}) . _Default . _Coerce;
+
+-- | True if the data in the table is compressed, or False if not.
+sdCompressed :: Lens' StorageDescriptor (Maybe Bool)
+sdCompressed = lens _sdCompressed (\ s a -> s{_sdCompressed = a});
+
+-- | The physical location of the table. By default this takes the form of the warehouse location, followed by the database location in the warehouse, followed by the table name.
+sdLocation :: Lens' StorageDescriptor (Maybe Text)
+sdLocation = lens _sdLocation (\ s a -> s{_sdLocation = a});
+
+-- | A list of reducer grouping columns, clustering columns, and bucketing columns in the table.
+sdBucketColumns :: Lens' StorageDescriptor [Text]
+sdBucketColumns = lens _sdBucketColumns (\ s a -> s{_sdBucketColumns = a}) . _Default . _Coerce;
+
+-- | Serialization/deserialization (SerDe) information.
+sdSerdeInfo :: Lens' StorageDescriptor (Maybe SerDeInfo)
+sdSerdeInfo = lens _sdSerdeInfo (\ s a -> s{_sdSerdeInfo = a});
+
+-- | The output format: @SequenceFileOutputFormat@ (binary), or @IgnoreKeyTextOutputFormat@ , or a custom format.
+sdOutputFormat :: Lens' StorageDescriptor (Maybe Text)
+sdOutputFormat = lens _sdOutputFormat (\ s a -> s{_sdOutputFormat = a});
+
+-- | Must be specified if the table contains any dimension columns.
+sdNumberOfBuckets :: Lens' StorageDescriptor (Maybe Int)
+sdNumberOfBuckets = lens _sdNumberOfBuckets (\ s a -> s{_sdNumberOfBuckets = a});
+
+-- | True if the table data is stored in subdirectories, or False if not.
+sdStoredAsSubDirectories :: Lens' StorageDescriptor (Maybe Bool)
+sdStoredAsSubDirectories = lens _sdStoredAsSubDirectories (\ s a -> s{_sdStoredAsSubDirectories = a});
+
+-- | User-supplied properties in key-value form.
+sdParameters :: Lens' StorageDescriptor (HashMap Text Text)
+sdParameters = lens _sdParameters (\ s a -> s{_sdParameters = a}) . _Default . _Map;
+
+-- | The input format: @SequenceFileInputFormat@ (binary), or @TextInputFormat@ , or a custom format.
+sdInputFormat :: Lens' StorageDescriptor (Maybe Text)
+sdInputFormat = lens _sdInputFormat (\ s a -> s{_sdInputFormat = a});
+
+-- | Information about values that appear very frequently in a column (skewed values).
+sdSkewedInfo :: Lens' StorageDescriptor (Maybe SkewedInfo)
+sdSkewedInfo = lens _sdSkewedInfo (\ s a -> s{_sdSkewedInfo = a});
+
+-- | A list of the @Columns@ in the table.
+sdColumns :: Lens' StorageDescriptor [Column]
+sdColumns = lens _sdColumns (\ s a -> s{_sdColumns = a}) . _Default . _Coerce;
+
+instance FromJSON StorageDescriptor where
+        parseJSON
+          = withObject "StorageDescriptor"
+              (\ x ->
+                 StorageDescriptor' <$>
+                   (x .:? "SortColumns" .!= mempty) <*>
+                     (x .:? "Compressed")
+                     <*> (x .:? "Location")
+                     <*> (x .:? "BucketColumns" .!= mempty)
+                     <*> (x .:? "SerdeInfo")
+                     <*> (x .:? "OutputFormat")
+                     <*> (x .:? "NumberOfBuckets")
+                     <*> (x .:? "StoredAsSubDirectories")
+                     <*> (x .:? "Parameters" .!= mempty)
+                     <*> (x .:? "InputFormat")
+                     <*> (x .:? "SkewedInfo")
+                     <*> (x .:? "Columns" .!= mempty))
+
+instance Hashable StorageDescriptor where
+
+instance NFData StorageDescriptor where
+
+instance ToJSON StorageDescriptor where
+        toJSON StorageDescriptor'{..}
+          = object
+              (catMaybes
+                 [("SortColumns" .=) <$> _sdSortColumns,
+                  ("Compressed" .=) <$> _sdCompressed,
+                  ("Location" .=) <$> _sdLocation,
+                  ("BucketColumns" .=) <$> _sdBucketColumns,
+                  ("SerdeInfo" .=) <$> _sdSerdeInfo,
+                  ("OutputFormat" .=) <$> _sdOutputFormat,
+                  ("NumberOfBuckets" .=) <$> _sdNumberOfBuckets,
+                  ("StoredAsSubDirectories" .=) <$>
+                    _sdStoredAsSubDirectories,
+                  ("Parameters" .=) <$> _sdParameters,
+                  ("InputFormat" .=) <$> _sdInputFormat,
+                  ("SkewedInfo" .=) <$> _sdSkewedInfo,
+                  ("Columns" .=) <$> _sdColumns])
+
+-- | Represents a collection of related data organized in columns and rows.
+--
+--
+--
+-- /See:/ 'table' smart constructor.
+data Table = Table'
+  { _tRetention         :: !(Maybe Nat)
+  , _tCreatedBy         :: !(Maybe Text)
+  , _tTableType         :: !(Maybe Text)
+  , _tOwner             :: !(Maybe Text)
+  , _tViewOriginalText  :: !(Maybe Text)
+  , _tUpdateTime        :: !(Maybe POSIX)
+  , _tViewExpandedText  :: !(Maybe Text)
+  , _tLastAnalyzedTime  :: !(Maybe POSIX)
+  , _tStorageDescriptor :: !(Maybe StorageDescriptor)
+  , _tDatabaseName      :: !(Maybe Text)
+  , _tParameters        :: !(Maybe (Map Text Text))
+  , _tLastAccessTime    :: !(Maybe POSIX)
+  , _tDescription       :: !(Maybe Text)
+  , _tPartitionKeys     :: !(Maybe [Column])
+  , _tCreateTime        :: !(Maybe POSIX)
+  , _tName              :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Table' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tRetention' - Retention time for this table.
+--
+-- * 'tCreatedBy' - Person or entity who created the table.
+--
+-- * 'tTableType' - The type of this table (@EXTERNAL_TABLE@ , @VIRTUAL_VIEW@ , etc.).
+--
+-- * 'tOwner' - Owner of the table.
+--
+-- * 'tViewOriginalText' - If the table is a view, the original text of the view; otherwise @null@ .
+--
+-- * 'tUpdateTime' - Last time the table was updated.
+--
+-- * 'tViewExpandedText' - If the table is a view, the expanded text of the view; otherwise @null@ .
+--
+-- * 'tLastAnalyzedTime' - Last time column statistics were computed for this table.
+--
+-- * 'tStorageDescriptor' - A storage descriptor containing information about the physical storage of this table.
+--
+-- * 'tDatabaseName' - Name of the metadata database where the table metadata resides.
+--
+-- * 'tParameters' - Properties associated with this table, as a list of key-value pairs.
+--
+-- * 'tLastAccessTime' - Last time the table was accessed. This is usually taken from HDFS, and may not be reliable.
+--
+-- * 'tDescription' - Description of the table.
+--
+-- * 'tPartitionKeys' - A list of columns by which the table is partitioned. Only primitive types are supported as partition keys.
+--
+-- * 'tCreateTime' - Time when the table definition was created in the Data Catalog.
+--
+-- * 'tName' - Name of the table.
+table
+    :: Text -- ^ 'tName'
+    -> Table
+table pName_ =
+  Table'
+  { _tRetention = Nothing
+  , _tCreatedBy = Nothing
+  , _tTableType = Nothing
+  , _tOwner = Nothing
+  , _tViewOriginalText = Nothing
+  , _tUpdateTime = Nothing
+  , _tViewExpandedText = Nothing
+  , _tLastAnalyzedTime = Nothing
+  , _tStorageDescriptor = Nothing
+  , _tDatabaseName = Nothing
+  , _tParameters = Nothing
+  , _tLastAccessTime = Nothing
+  , _tDescription = Nothing
+  , _tPartitionKeys = Nothing
+  , _tCreateTime = Nothing
+  , _tName = pName_
+  }
+
+
+-- | Retention time for this table.
+tRetention :: Lens' Table (Maybe Natural)
+tRetention = lens _tRetention (\ s a -> s{_tRetention = a}) . mapping _Nat;
+
+-- | Person or entity who created the table.
+tCreatedBy :: Lens' Table (Maybe Text)
+tCreatedBy = lens _tCreatedBy (\ s a -> s{_tCreatedBy = a});
+
+-- | The type of this table (@EXTERNAL_TABLE@ , @VIRTUAL_VIEW@ , etc.).
+tTableType :: Lens' Table (Maybe Text)
+tTableType = lens _tTableType (\ s a -> s{_tTableType = a});
+
+-- | Owner of the table.
+tOwner :: Lens' Table (Maybe Text)
+tOwner = lens _tOwner (\ s a -> s{_tOwner = a});
+
+-- | If the table is a view, the original text of the view; otherwise @null@ .
+tViewOriginalText :: Lens' Table (Maybe Text)
+tViewOriginalText = lens _tViewOriginalText (\ s a -> s{_tViewOriginalText = a});
+
+-- | Last time the table was updated.
+tUpdateTime :: Lens' Table (Maybe UTCTime)
+tUpdateTime = lens _tUpdateTime (\ s a -> s{_tUpdateTime = a}) . mapping _Time;
+
+-- | If the table is a view, the expanded text of the view; otherwise @null@ .
+tViewExpandedText :: Lens' Table (Maybe Text)
+tViewExpandedText = lens _tViewExpandedText (\ s a -> s{_tViewExpandedText = a});
+
+-- | Last time column statistics were computed for this table.
+tLastAnalyzedTime :: Lens' Table (Maybe UTCTime)
+tLastAnalyzedTime = lens _tLastAnalyzedTime (\ s a -> s{_tLastAnalyzedTime = a}) . mapping _Time;
+
+-- | A storage descriptor containing information about the physical storage of this table.
+tStorageDescriptor :: Lens' Table (Maybe StorageDescriptor)
+tStorageDescriptor = lens _tStorageDescriptor (\ s a -> s{_tStorageDescriptor = a});
+
+-- | Name of the metadata database where the table metadata resides.
+tDatabaseName :: Lens' Table (Maybe Text)
+tDatabaseName = lens _tDatabaseName (\ s a -> s{_tDatabaseName = a});
+
+-- | Properties associated with this table, as a list of key-value pairs.
+tParameters :: Lens' Table (HashMap Text Text)
+tParameters = lens _tParameters (\ s a -> s{_tParameters = a}) . _Default . _Map;
+
+-- | Last time the table was accessed. This is usually taken from HDFS, and may not be reliable.
+tLastAccessTime :: Lens' Table (Maybe UTCTime)
+tLastAccessTime = lens _tLastAccessTime (\ s a -> s{_tLastAccessTime = a}) . mapping _Time;
+
+-- | Description of the table.
+tDescription :: Lens' Table (Maybe Text)
+tDescription = lens _tDescription (\ s a -> s{_tDescription = a});
+
+-- | A list of columns by which the table is partitioned. Only primitive types are supported as partition keys.
+tPartitionKeys :: Lens' Table [Column]
+tPartitionKeys = lens _tPartitionKeys (\ s a -> s{_tPartitionKeys = a}) . _Default . _Coerce;
+
+-- | Time when the table definition was created in the Data Catalog.
+tCreateTime :: Lens' Table (Maybe UTCTime)
+tCreateTime = lens _tCreateTime (\ s a -> s{_tCreateTime = a}) . mapping _Time;
+
+-- | Name of the table.
+tName :: Lens' Table Text
+tName = lens _tName (\ s a -> s{_tName = a});
+
+instance FromJSON Table where
+        parseJSON
+          = withObject "Table"
+              (\ x ->
+                 Table' <$>
+                   (x .:? "Retention") <*> (x .:? "CreatedBy") <*>
+                     (x .:? "TableType")
+                     <*> (x .:? "Owner")
+                     <*> (x .:? "ViewOriginalText")
+                     <*> (x .:? "UpdateTime")
+                     <*> (x .:? "ViewExpandedText")
+                     <*> (x .:? "LastAnalyzedTime")
+                     <*> (x .:? "StorageDescriptor")
+                     <*> (x .:? "DatabaseName")
+                     <*> (x .:? "Parameters" .!= mempty)
+                     <*> (x .:? "LastAccessTime")
+                     <*> (x .:? "Description")
+                     <*> (x .:? "PartitionKeys" .!= mempty)
+                     <*> (x .:? "CreateTime")
+                     <*> (x .: "Name"))
+
+instance Hashable Table where
+
+instance NFData Table where
+
+-- | An error record for table operations.
+--
+--
+--
+-- /See:/ 'tableError' smart constructor.
+data TableError = TableError'
+  { _teTableName   :: !(Maybe Text)
+  , _teErrorDetail :: !(Maybe ErrorDetail)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'TableError' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'teTableName' - Name of the table.
+--
+-- * 'teErrorDetail' - Detail about the error.
+tableError
+    :: TableError
+tableError = TableError' {_teTableName = Nothing, _teErrorDetail = Nothing}
+
+
+-- | Name of the table.
+teTableName :: Lens' TableError (Maybe Text)
+teTableName = lens _teTableName (\ s a -> s{_teTableName = a});
+
+-- | Detail about the error.
+teErrorDetail :: Lens' TableError (Maybe ErrorDetail)
+teErrorDetail = lens _teErrorDetail (\ s a -> s{_teErrorDetail = a});
+
+instance FromJSON TableError where
+        parseJSON
+          = withObject "TableError"
+              (\ x ->
+                 TableError' <$>
+                   (x .:? "TableName") <*> (x .:? "ErrorDetail"))
+
+instance Hashable TableError where
+
+instance NFData TableError where
+
+-- | Structure used to create or update the table.
+--
+--
+--
+-- /See:/ 'tableInput' smart constructor.
+data TableInput = TableInput'
+  { _tiRetention         :: !(Maybe Nat)
+  , _tiTableType         :: !(Maybe Text)
+  , _tiOwner             :: !(Maybe Text)
+  , _tiViewOriginalText  :: !(Maybe Text)
+  , _tiViewExpandedText  :: !(Maybe Text)
+  , _tiLastAnalyzedTime  :: !(Maybe POSIX)
+  , _tiStorageDescriptor :: !(Maybe StorageDescriptor)
+  , _tiParameters        :: !(Maybe (Map Text Text))
+  , _tiLastAccessTime    :: !(Maybe POSIX)
+  , _tiDescription       :: !(Maybe Text)
+  , _tiPartitionKeys     :: !(Maybe [Column])
+  , _tiName              :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'TableInput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tiRetention' - Retention time for this table.
+--
+-- * 'tiTableType' - The type of this table (@EXTERNAL_TABLE@ , @VIRTUAL_VIEW@ , etc.).
+--
+-- * 'tiOwner' - Owner of the table.
+--
+-- * 'tiViewOriginalText' - If the table is a view, the original text of the view; otherwise @null@ .
+--
+-- * 'tiViewExpandedText' - If the table is a view, the expanded text of the view; otherwise @null@ .
+--
+-- * 'tiLastAnalyzedTime' - Last time column statistics were computed for this table.
+--
+-- * 'tiStorageDescriptor' - A storage descriptor containing information about the physical storage of this table.
+--
+-- * 'tiParameters' - Properties associated with this table, as a list of key-value pairs.
+--
+-- * 'tiLastAccessTime' - Last time the table was accessed.
+--
+-- * 'tiDescription' - Description of the table.
+--
+-- * 'tiPartitionKeys' - A list of columns by which the table is partitioned. Only primitive types are supported as partition keys.
+--
+-- * 'tiName' - Name of the table.
+tableInput
+    :: Text -- ^ 'tiName'
+    -> TableInput
+tableInput pName_ =
+  TableInput'
+  { _tiRetention = Nothing
+  , _tiTableType = Nothing
+  , _tiOwner = Nothing
+  , _tiViewOriginalText = Nothing
+  , _tiViewExpandedText = Nothing
+  , _tiLastAnalyzedTime = Nothing
+  , _tiStorageDescriptor = Nothing
+  , _tiParameters = Nothing
+  , _tiLastAccessTime = Nothing
+  , _tiDescription = Nothing
+  , _tiPartitionKeys = Nothing
+  , _tiName = pName_
+  }
+
+
+-- | Retention time for this table.
+tiRetention :: Lens' TableInput (Maybe Natural)
+tiRetention = lens _tiRetention (\ s a -> s{_tiRetention = a}) . mapping _Nat;
+
+-- | The type of this table (@EXTERNAL_TABLE@ , @VIRTUAL_VIEW@ , etc.).
+tiTableType :: Lens' TableInput (Maybe Text)
+tiTableType = lens _tiTableType (\ s a -> s{_tiTableType = a});
+
+-- | Owner of the table.
+tiOwner :: Lens' TableInput (Maybe Text)
+tiOwner = lens _tiOwner (\ s a -> s{_tiOwner = a});
+
+-- | If the table is a view, the original text of the view; otherwise @null@ .
+tiViewOriginalText :: Lens' TableInput (Maybe Text)
+tiViewOriginalText = lens _tiViewOriginalText (\ s a -> s{_tiViewOriginalText = a});
+
+-- | If the table is a view, the expanded text of the view; otherwise @null@ .
+tiViewExpandedText :: Lens' TableInput (Maybe Text)
+tiViewExpandedText = lens _tiViewExpandedText (\ s a -> s{_tiViewExpandedText = a});
+
+-- | Last time column statistics were computed for this table.
+tiLastAnalyzedTime :: Lens' TableInput (Maybe UTCTime)
+tiLastAnalyzedTime = lens _tiLastAnalyzedTime (\ s a -> s{_tiLastAnalyzedTime = a}) . mapping _Time;
+
+-- | A storage descriptor containing information about the physical storage of this table.
+tiStorageDescriptor :: Lens' TableInput (Maybe StorageDescriptor)
+tiStorageDescriptor = lens _tiStorageDescriptor (\ s a -> s{_tiStorageDescriptor = a});
+
+-- | Properties associated with this table, as a list of key-value pairs.
+tiParameters :: Lens' TableInput (HashMap Text Text)
+tiParameters = lens _tiParameters (\ s a -> s{_tiParameters = a}) . _Default . _Map;
+
+-- | Last time the table was accessed.
+tiLastAccessTime :: Lens' TableInput (Maybe UTCTime)
+tiLastAccessTime = lens _tiLastAccessTime (\ s a -> s{_tiLastAccessTime = a}) . mapping _Time;
+
+-- | Description of the table.
+tiDescription :: Lens' TableInput (Maybe Text)
+tiDescription = lens _tiDescription (\ s a -> s{_tiDescription = a});
+
+-- | A list of columns by which the table is partitioned. Only primitive types are supported as partition keys.
+tiPartitionKeys :: Lens' TableInput [Column]
+tiPartitionKeys = lens _tiPartitionKeys (\ s a -> s{_tiPartitionKeys = a}) . _Default . _Coerce;
+
+-- | Name of the table.
+tiName :: Lens' TableInput Text
+tiName = lens _tiName (\ s a -> s{_tiName = a});
+
+instance Hashable TableInput where
+
+instance NFData TableInput where
+
+instance ToJSON TableInput where
+        toJSON TableInput'{..}
+          = object
+              (catMaybes
+                 [("Retention" .=) <$> _tiRetention,
+                  ("TableType" .=) <$> _tiTableType,
+                  ("Owner" .=) <$> _tiOwner,
+                  ("ViewOriginalText" .=) <$> _tiViewOriginalText,
+                  ("ViewExpandedText" .=) <$> _tiViewExpandedText,
+                  ("LastAnalyzedTime" .=) <$> _tiLastAnalyzedTime,
+                  ("StorageDescriptor" .=) <$> _tiStorageDescriptor,
+                  ("Parameters" .=) <$> _tiParameters,
+                  ("LastAccessTime" .=) <$> _tiLastAccessTime,
+                  ("Description" .=) <$> _tiDescription,
+                  ("PartitionKeys" .=) <$> _tiPartitionKeys,
+                  Just ("Name" .= _tiName)])
+
+-- | Specifies a version of a table.
+--
+--
+--
+-- /See:/ 'tableVersion' smart constructor.
+data TableVersion = TableVersion'
+  { _tvVersionId :: !(Maybe Text)
+  , _tvTable     :: !(Maybe Table)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'TableVersion' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tvVersionId' - The ID value that identifies this table version.
+--
+-- * 'tvTable' - The table in question
+tableVersion
+    :: TableVersion
+tableVersion = TableVersion' {_tvVersionId = Nothing, _tvTable = Nothing}
+
+
+-- | The ID value that identifies this table version.
+tvVersionId :: Lens' TableVersion (Maybe Text)
+tvVersionId = lens _tvVersionId (\ s a -> s{_tvVersionId = a});
+
+-- | The table in question
+tvTable :: Lens' TableVersion (Maybe Table)
+tvTable = lens _tvTable (\ s a -> s{_tvTable = a});
+
+instance FromJSON TableVersion where
+        parseJSON
+          = withObject "TableVersion"
+              (\ x ->
+                 TableVersion' <$>
+                   (x .:? "VersionId") <*> (x .:? "Table"))
+
+instance Hashable TableVersion where
+
+instance NFData TableVersion where
+
+-- | Information about a specific trigger.
+--
+--
+--
+-- /See:/ 'trigger' smart constructor.
+data Trigger = Trigger'
+  { _triState       :: !(Maybe TriggerState)
+  , _triActions     :: !(Maybe [Action])
+  , _triSchedule    :: !(Maybe Text)
+  , _triPredicate   :: !(Maybe Predicate)
+  , _triName        :: !(Maybe Text)
+  , _triId          :: !(Maybe Text)
+  , _triType        :: !(Maybe TriggerType)
+  , _triDescription :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'Trigger' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'triState' - The current state of the trigger.
+--
+-- * 'triActions' - The actions initiated by this trigger.
+--
+-- * 'triSchedule' - A @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+--
+-- * 'triPredicate' - The predicate of this trigger.
+--
+-- * 'triName' - Name of the trigger.
+--
+-- * 'triId' - The trigger ID.
+--
+-- * 'triType' - The type of trigger that this is.
+--
+-- * 'triDescription' - A description of this trigger.
+trigger
+    :: Trigger
+trigger =
+  Trigger'
+  { _triState = Nothing
+  , _triActions = Nothing
+  , _triSchedule = Nothing
+  , _triPredicate = Nothing
+  , _triName = Nothing
+  , _triId = Nothing
+  , _triType = Nothing
+  , _triDescription = Nothing
+  }
+
+
+-- | The current state of the trigger.
+triState :: Lens' Trigger (Maybe TriggerState)
+triState = lens _triState (\ s a -> s{_triState = a});
+
+-- | The actions initiated by this trigger.
+triActions :: Lens' Trigger [Action]
+triActions = lens _triActions (\ s a -> s{_triActions = a}) . _Default . _Coerce;
+
+-- | A @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+triSchedule :: Lens' Trigger (Maybe Text)
+triSchedule = lens _triSchedule (\ s a -> s{_triSchedule = a});
+
+-- | The predicate of this trigger.
+triPredicate :: Lens' Trigger (Maybe Predicate)
+triPredicate = lens _triPredicate (\ s a -> s{_triPredicate = a});
+
+-- | Name of the trigger.
+triName :: Lens' Trigger (Maybe Text)
+triName = lens _triName (\ s a -> s{_triName = a});
+
+-- | The trigger ID.
+triId :: Lens' Trigger (Maybe Text)
+triId = lens _triId (\ s a -> s{_triId = a});
+
+-- | The type of trigger that this is.
+triType :: Lens' Trigger (Maybe TriggerType)
+triType = lens _triType (\ s a -> s{_triType = a});
+
+-- | A description of this trigger.
+triDescription :: Lens' Trigger (Maybe Text)
+triDescription = lens _triDescription (\ s a -> s{_triDescription = a});
+
+instance FromJSON Trigger where
+        parseJSON
+          = withObject "Trigger"
+              (\ x ->
+                 Trigger' <$>
+                   (x .:? "State") <*> (x .:? "Actions" .!= mempty) <*>
+                     (x .:? "Schedule")
+                     <*> (x .:? "Predicate")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "Id")
+                     <*> (x .:? "Type")
+                     <*> (x .:? "Description"))
+
+instance Hashable Trigger where
+
+instance NFData Trigger where
+
+-- | A structure used to provide information used to updata a trigger.
+--
+--
+--
+-- /See:/ 'triggerUpdate' smart constructor.
+data TriggerUpdate = TriggerUpdate'
+  { _tuActions     :: !(Maybe [Action])
+  , _tuSchedule    :: !(Maybe Text)
+  , _tuPredicate   :: !(Maybe Predicate)
+  , _tuName        :: !(Maybe Text)
+  , _tuDescription :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'TriggerUpdate' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'tuActions' - The actions initiated by this trigger.
+--
+-- * 'tuSchedule' - An updated @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+--
+-- * 'tuPredicate' - The predicate of this trigger, which defines when it will fire.
+--
+-- * 'tuName' - The name of the trigger.
+--
+-- * 'tuDescription' - A description of this trigger.
+triggerUpdate
+    :: TriggerUpdate
+triggerUpdate =
+  TriggerUpdate'
+  { _tuActions = Nothing
+  , _tuSchedule = Nothing
+  , _tuPredicate = Nothing
+  , _tuName = Nothing
+  , _tuDescription = Nothing
+  }
+
+
+-- | The actions initiated by this trigger.
+tuActions :: Lens' TriggerUpdate [Action]
+tuActions = lens _tuActions (\ s a -> s{_tuActions = a}) . _Default . _Coerce;
+
+-- | An updated @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+tuSchedule :: Lens' TriggerUpdate (Maybe Text)
+tuSchedule = lens _tuSchedule (\ s a -> s{_tuSchedule = a});
+
+-- | The predicate of this trigger, which defines when it will fire.
+tuPredicate :: Lens' TriggerUpdate (Maybe Predicate)
+tuPredicate = lens _tuPredicate (\ s a -> s{_tuPredicate = a});
+
+-- | The name of the trigger.
+tuName :: Lens' TriggerUpdate (Maybe Text)
+tuName = lens _tuName (\ s a -> s{_tuName = a});
+
+-- | A description of this trigger.
+tuDescription :: Lens' TriggerUpdate (Maybe Text)
+tuDescription = lens _tuDescription (\ s a -> s{_tuDescription = a});
+
+instance Hashable TriggerUpdate where
+
+instance NFData TriggerUpdate where
+
+instance ToJSON TriggerUpdate where
+        toJSON TriggerUpdate'{..}
+          = object
+              (catMaybes
+                 [("Actions" .=) <$> _tuActions,
+                  ("Schedule" .=) <$> _tuSchedule,
+                  ("Predicate" .=) <$> _tuPredicate,
+                  ("Name" .=) <$> _tuName,
+                  ("Description" .=) <$> _tuDescription])
+
+-- | Specifies a Grok classifier to update when passed to UpdateClassifier.
+--
+--
+--
+-- /See:/ 'updateGrokClassifierRequest' smart constructor.
+data UpdateGrokClassifierRequest = UpdateGrokClassifierRequest'
+  { _ugcrClassification :: !(Maybe Text)
+  , _ugcrCustomPatterns :: !(Maybe Text)
+  , _ugcrGrokPattern    :: !(Maybe Text)
+  , _ugcrName           :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateGrokClassifierRequest' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugcrClassification' - The type of result that the classifier matches, such as Twitter Json, Omniture logs, Cloudwatch logs, and so forth.
+--
+-- * 'ugcrCustomPatterns' - Custom grok patterns used by this classifier.
+--
+-- * 'ugcrGrokPattern' - The grok pattern used by this classifier.
+--
+-- * 'ugcrName' - The name of the @GrokClassifier@ .
+updateGrokClassifierRequest
+    :: Text -- ^ 'ugcrName'
+    -> UpdateGrokClassifierRequest
+updateGrokClassifierRequest pName_ =
+  UpdateGrokClassifierRequest'
+  { _ugcrClassification = Nothing
+  , _ugcrCustomPatterns = Nothing
+  , _ugcrGrokPattern = Nothing
+  , _ugcrName = pName_
+  }
+
+
+-- | The type of result that the classifier matches, such as Twitter Json, Omniture logs, Cloudwatch logs, and so forth.
+ugcrClassification :: Lens' UpdateGrokClassifierRequest (Maybe Text)
+ugcrClassification = lens _ugcrClassification (\ s a -> s{_ugcrClassification = a});
+
+-- | Custom grok patterns used by this classifier.
+ugcrCustomPatterns :: Lens' UpdateGrokClassifierRequest (Maybe Text)
+ugcrCustomPatterns = lens _ugcrCustomPatterns (\ s a -> s{_ugcrCustomPatterns = a});
+
+-- | The grok pattern used by this classifier.
+ugcrGrokPattern :: Lens' UpdateGrokClassifierRequest (Maybe Text)
+ugcrGrokPattern = lens _ugcrGrokPattern (\ s a -> s{_ugcrGrokPattern = a});
+
+-- | The name of the @GrokClassifier@ .
+ugcrName :: Lens' UpdateGrokClassifierRequest Text
+ugcrName = lens _ugcrName (\ s a -> s{_ugcrName = a});
+
+instance Hashable UpdateGrokClassifierRequest where
+
+instance NFData UpdateGrokClassifierRequest where
+
+instance ToJSON UpdateGrokClassifierRequest where
+        toJSON UpdateGrokClassifierRequest'{..}
+          = object
+              (catMaybes
+                 [("Classification" .=) <$> _ugcrClassification,
+                  ("CustomPatterns" .=) <$> _ugcrCustomPatterns,
+                  ("GrokPattern" .=) <$> _ugcrGrokPattern,
+                  Just ("Name" .= _ugcrName)])
+
+-- | Represents the equivalent of a Hive user-defined function (@UDF@ ) definition.
+--
+--
+--
+-- /See:/ 'userDefinedFunction' smart constructor.
+data UserDefinedFunction = UserDefinedFunction'
+  { _udfOwnerName    :: !(Maybe Text)
+  , _udfResourceURIs :: !(Maybe [ResourceURI])
+  , _udfFunctionName :: !(Maybe Text)
+  , _udfOwnerType    :: !(Maybe PrincipalType)
+  , _udfCreateTime   :: !(Maybe POSIX)
+  , _udfClassName    :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UserDefinedFunction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udfOwnerName' - The owner of the function.
+--
+-- * 'udfResourceURIs' - The resource URIs for the function.
+--
+-- * 'udfFunctionName' - The name of the function.
+--
+-- * 'udfOwnerType' - The owner type.
+--
+-- * 'udfCreateTime' - The time at which the function was created.
+--
+-- * 'udfClassName' - The Java class that contains the function code.
+userDefinedFunction
+    :: UserDefinedFunction
+userDefinedFunction =
+  UserDefinedFunction'
+  { _udfOwnerName = Nothing
+  , _udfResourceURIs = Nothing
+  , _udfFunctionName = Nothing
+  , _udfOwnerType = Nothing
+  , _udfCreateTime = Nothing
+  , _udfClassName = Nothing
+  }
+
+
+-- | The owner of the function.
+udfOwnerName :: Lens' UserDefinedFunction (Maybe Text)
+udfOwnerName = lens _udfOwnerName (\ s a -> s{_udfOwnerName = a});
+
+-- | The resource URIs for the function.
+udfResourceURIs :: Lens' UserDefinedFunction [ResourceURI]
+udfResourceURIs = lens _udfResourceURIs (\ s a -> s{_udfResourceURIs = a}) . _Default . _Coerce;
+
+-- | The name of the function.
+udfFunctionName :: Lens' UserDefinedFunction (Maybe Text)
+udfFunctionName = lens _udfFunctionName (\ s a -> s{_udfFunctionName = a});
+
+-- | The owner type.
+udfOwnerType :: Lens' UserDefinedFunction (Maybe PrincipalType)
+udfOwnerType = lens _udfOwnerType (\ s a -> s{_udfOwnerType = a});
+
+-- | The time at which the function was created.
+udfCreateTime :: Lens' UserDefinedFunction (Maybe UTCTime)
+udfCreateTime = lens _udfCreateTime (\ s a -> s{_udfCreateTime = a}) . mapping _Time;
+
+-- | The Java class that contains the function code.
+udfClassName :: Lens' UserDefinedFunction (Maybe Text)
+udfClassName = lens _udfClassName (\ s a -> s{_udfClassName = a});
+
+instance FromJSON UserDefinedFunction where
+        parseJSON
+          = withObject "UserDefinedFunction"
+              (\ x ->
+                 UserDefinedFunction' <$>
+                   (x .:? "OwnerName") <*>
+                     (x .:? "ResourceUris" .!= mempty)
+                     <*> (x .:? "FunctionName")
+                     <*> (x .:? "OwnerType")
+                     <*> (x .:? "CreateTime")
+                     <*> (x .:? "ClassName"))
+
+instance Hashable UserDefinedFunction where
+
+instance NFData UserDefinedFunction where
+
+-- | A structure used to create or updata a user-defined function.
+--
+--
+--
+-- /See:/ 'userDefinedFunctionInput' smart constructor.
+data UserDefinedFunctionInput = UserDefinedFunctionInput'
+  { _udfiOwnerName    :: !(Maybe Text)
+  , _udfiResourceURIs :: !(Maybe [ResourceURI])
+  , _udfiFunctionName :: !(Maybe Text)
+  , _udfiOwnerType    :: !(Maybe PrincipalType)
+  , _udfiClassName    :: !(Maybe Text)
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UserDefinedFunctionInput' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udfiOwnerName' - The owner of the function.
+--
+-- * 'udfiResourceURIs' - The resource URIs for the function.
+--
+-- * 'udfiFunctionName' - The name of the function.
+--
+-- * 'udfiOwnerType' - The owner type.
+--
+-- * 'udfiClassName' - The Java class that contains the function code.
+userDefinedFunctionInput
+    :: UserDefinedFunctionInput
+userDefinedFunctionInput =
+  UserDefinedFunctionInput'
+  { _udfiOwnerName = Nothing
+  , _udfiResourceURIs = Nothing
+  , _udfiFunctionName = Nothing
+  , _udfiOwnerType = Nothing
+  , _udfiClassName = Nothing
+  }
+
+
+-- | The owner of the function.
+udfiOwnerName :: Lens' UserDefinedFunctionInput (Maybe Text)
+udfiOwnerName = lens _udfiOwnerName (\ s a -> s{_udfiOwnerName = a});
+
+-- | The resource URIs for the function.
+udfiResourceURIs :: Lens' UserDefinedFunctionInput [ResourceURI]
+udfiResourceURIs = lens _udfiResourceURIs (\ s a -> s{_udfiResourceURIs = a}) . _Default . _Coerce;
+
+-- | The name of the function.
+udfiFunctionName :: Lens' UserDefinedFunctionInput (Maybe Text)
+udfiFunctionName = lens _udfiFunctionName (\ s a -> s{_udfiFunctionName = a});
+
+-- | The owner type.
+udfiOwnerType :: Lens' UserDefinedFunctionInput (Maybe PrincipalType)
+udfiOwnerType = lens _udfiOwnerType (\ s a -> s{_udfiOwnerType = a});
+
+-- | The Java class that contains the function code.
+udfiClassName :: Lens' UserDefinedFunctionInput (Maybe Text)
+udfiClassName = lens _udfiClassName (\ s a -> s{_udfiClassName = a});
+
+instance Hashable UserDefinedFunctionInput where
+
+instance NFData UserDefinedFunctionInput where
+
+instance ToJSON UserDefinedFunctionInput where
+        toJSON UserDefinedFunctionInput'{..}
+          = object
+              (catMaybes
+                 [("OwnerName" .=) <$> _udfiOwnerName,
+                  ("ResourceUris" .=) <$> _udfiResourceURIs,
+                  ("FunctionName" .=) <$> _udfiFunctionName,
+                  ("OwnerType" .=) <$> _udfiOwnerType,
+                  ("ClassName" .=) <$> _udfiClassName])
diff --git a/gen/Network/AWS/Glue/Types/Sum.hs b/gen/Network/AWS/Glue/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/Types/Sum.hs
@@ -0,0 +1,500 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE LambdaCase         #-}
+{-# LANGUAGE OverloadedStrings  #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.Types.Sum
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Glue.Types.Sum where
+
+import Network.AWS.Prelude
+
+data ConnectionPropertyKey
+  = ConfigFiles
+  | Host
+  | InstanceId
+  | JdbcConnectionURL
+  | JdbcDriverClassName
+  | JdbcDriverJARURI
+  | JdbcEngine
+  | JdbcEngineVersion
+  | Password
+  | Port
+  | Username
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ConnectionPropertyKey where
+    parser = takeLowerText >>= \case
+        "config_files" -> pure ConfigFiles
+        "host" -> pure Host
+        "instance_id" -> pure InstanceId
+        "jdbc_connection_url" -> pure JdbcConnectionURL
+        "jdbc_driver_class_name" -> pure JdbcDriverClassName
+        "jdbc_driver_jar_uri" -> pure JdbcDriverJARURI
+        "jdbc_engine" -> pure JdbcEngine
+        "jdbc_engine_version" -> pure JdbcEngineVersion
+        "password" -> pure Password
+        "port" -> pure Port
+        "username" -> pure Username
+        e -> fromTextError $ "Failure parsing ConnectionPropertyKey from value: '" <> e
+           <> "'. Accepted values: config_files, host, instance_id, jdbc_connection_url, jdbc_driver_class_name, jdbc_driver_jar_uri, jdbc_engine, jdbc_engine_version, password, port, username"
+
+instance ToText ConnectionPropertyKey where
+    toText = \case
+        ConfigFiles -> "CONFIG_FILES"
+        Host -> "HOST"
+        InstanceId -> "INSTANCE_ID"
+        JdbcConnectionURL -> "JDBC_CONNECTION_URL"
+        JdbcDriverClassName -> "JDBC_DRIVER_CLASS_NAME"
+        JdbcDriverJARURI -> "JDBC_DRIVER_JAR_URI"
+        JdbcEngine -> "JDBC_ENGINE"
+        JdbcEngineVersion -> "JDBC_ENGINE_VERSION"
+        Password -> "PASSWORD"
+        Port -> "PORT"
+        Username -> "USERNAME"
+
+instance Hashable     ConnectionPropertyKey
+instance NFData       ConnectionPropertyKey
+instance ToByteString ConnectionPropertyKey
+instance ToQuery      ConnectionPropertyKey
+instance ToHeader     ConnectionPropertyKey
+
+instance ToJSON ConnectionPropertyKey where
+    toJSON = toJSONText
+
+instance FromJSON ConnectionPropertyKey where
+    parseJSON = parseJSONText "ConnectionPropertyKey"
+
+data ConnectionType
+  = Jdbc
+  | Sftp
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ConnectionType where
+    parser = takeLowerText >>= \case
+        "jdbc" -> pure Jdbc
+        "sftp" -> pure Sftp
+        e -> fromTextError $ "Failure parsing ConnectionType from value: '" <> e
+           <> "'. Accepted values: jdbc, sftp"
+
+instance ToText ConnectionType where
+    toText = \case
+        Jdbc -> "JDBC"
+        Sftp -> "SFTP"
+
+instance Hashable     ConnectionType
+instance NFData       ConnectionType
+instance ToByteString ConnectionType
+instance ToQuery      ConnectionType
+instance ToHeader     ConnectionType
+
+instance ToJSON ConnectionType where
+    toJSON = toJSONText
+
+instance FromJSON ConnectionType where
+    parseJSON = parseJSONText "ConnectionType"
+
+data CrawlerState
+  = CSReady
+  | CSRunning
+  | CSStopping
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText CrawlerState where
+    parser = takeLowerText >>= \case
+        "ready" -> pure CSReady
+        "running" -> pure CSRunning
+        "stopping" -> pure CSStopping
+        e -> fromTextError $ "Failure parsing CrawlerState from value: '" <> e
+           <> "'. Accepted values: ready, running, stopping"
+
+instance ToText CrawlerState where
+    toText = \case
+        CSReady -> "READY"
+        CSRunning -> "RUNNING"
+        CSStopping -> "STOPPING"
+
+instance Hashable     CrawlerState
+instance NFData       CrawlerState
+instance ToByteString CrawlerState
+instance ToQuery      CrawlerState
+instance ToHeader     CrawlerState
+
+instance FromJSON CrawlerState where
+    parseJSON = parseJSONText "CrawlerState"
+
+data DeleteBehavior
+  = DeleteFromDatabase
+  | DeprecateInDatabase
+  | Log
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText DeleteBehavior where
+    parser = takeLowerText >>= \case
+        "delete_from_database" -> pure DeleteFromDatabase
+        "deprecate_in_database" -> pure DeprecateInDatabase
+        "log" -> pure Log
+        e -> fromTextError $ "Failure parsing DeleteBehavior from value: '" <> e
+           <> "'. Accepted values: delete_from_database, deprecate_in_database, log"
+
+instance ToText DeleteBehavior where
+    toText = \case
+        DeleteFromDatabase -> "DELETE_FROM_DATABASE"
+        DeprecateInDatabase -> "DEPRECATE_IN_DATABASE"
+        Log -> "LOG"
+
+instance Hashable     DeleteBehavior
+instance NFData       DeleteBehavior
+instance ToByteString DeleteBehavior
+instance ToQuery      DeleteBehavior
+instance ToHeader     DeleteBehavior
+
+instance ToJSON DeleteBehavior where
+    toJSON = toJSONText
+
+instance FromJSON DeleteBehavior where
+    parseJSON = parseJSONText "DeleteBehavior"
+
+data JobRunState
+  = Failed
+  | Running
+  | Starting
+  | Stopped
+  | Stopping
+  | Succeeded
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText JobRunState where
+    parser = takeLowerText >>= \case
+        "failed" -> pure Failed
+        "running" -> pure Running
+        "starting" -> pure Starting
+        "stopped" -> pure Stopped
+        "stopping" -> pure Stopping
+        "succeeded" -> pure Succeeded
+        e -> fromTextError $ "Failure parsing JobRunState from value: '" <> e
+           <> "'. Accepted values: failed, running, starting, stopped, stopping, succeeded"
+
+instance ToText JobRunState where
+    toText = \case
+        Failed -> "FAILED"
+        Running -> "RUNNING"
+        Starting -> "STARTING"
+        Stopped -> "STOPPED"
+        Stopping -> "STOPPING"
+        Succeeded -> "SUCCEEDED"
+
+instance Hashable     JobRunState
+instance NFData       JobRunState
+instance ToByteString JobRunState
+instance ToQuery      JobRunState
+instance ToHeader     JobRunState
+
+instance ToJSON JobRunState where
+    toJSON = toJSONText
+
+instance FromJSON JobRunState where
+    parseJSON = parseJSONText "JobRunState"
+
+data LastCrawlStatus
+  = LCSCancelled
+  | LCSFailed
+  | LCSSucceeded
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText LastCrawlStatus where
+    parser = takeLowerText >>= \case
+        "cancelled" -> pure LCSCancelled
+        "failed" -> pure LCSFailed
+        "succeeded" -> pure LCSSucceeded
+        e -> fromTextError $ "Failure parsing LastCrawlStatus from value: '" <> e
+           <> "'. Accepted values: cancelled, failed, succeeded"
+
+instance ToText LastCrawlStatus where
+    toText = \case
+        LCSCancelled -> "CANCELLED"
+        LCSFailed -> "FAILED"
+        LCSSucceeded -> "SUCCEEDED"
+
+instance Hashable     LastCrawlStatus
+instance NFData       LastCrawlStatus
+instance ToByteString LastCrawlStatus
+instance ToQuery      LastCrawlStatus
+instance ToHeader     LastCrawlStatus
+
+instance FromJSON LastCrawlStatus where
+    parseJSON = parseJSONText "LastCrawlStatus"
+
+data Logical =
+  And
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText Logical where
+    parser = takeLowerText >>= \case
+        "and" -> pure And
+        e -> fromTextError $ "Failure parsing Logical from value: '" <> e
+           <> "'. Accepted values: and"
+
+instance ToText Logical where
+    toText = \case
+        And -> "AND"
+
+instance Hashable     Logical
+instance NFData       Logical
+instance ToByteString Logical
+instance ToQuery      Logical
+instance ToHeader     Logical
+
+instance ToJSON Logical where
+    toJSON = toJSONText
+
+instance FromJSON Logical where
+    parseJSON = parseJSONText "Logical"
+
+data LogicalOperator =
+  Equals
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText LogicalOperator where
+    parser = takeLowerText >>= \case
+        "equals" -> pure Equals
+        e -> fromTextError $ "Failure parsing LogicalOperator from value: '" <> e
+           <> "'. Accepted values: equals"
+
+instance ToText LogicalOperator where
+    toText = \case
+        Equals -> "EQUALS"
+
+instance Hashable     LogicalOperator
+instance NFData       LogicalOperator
+instance ToByteString LogicalOperator
+instance ToQuery      LogicalOperator
+instance ToHeader     LogicalOperator
+
+instance ToJSON LogicalOperator where
+    toJSON = toJSONText
+
+instance FromJSON LogicalOperator where
+    parseJSON = parseJSONText "LogicalOperator"
+
+data PrincipalType
+  = Group
+  | Role
+  | User
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText PrincipalType where
+    parser = takeLowerText >>= \case
+        "group" -> pure Group
+        "role" -> pure Role
+        "user" -> pure User
+        e -> fromTextError $ "Failure parsing PrincipalType from value: '" <> e
+           <> "'. Accepted values: group, role, user"
+
+instance ToText PrincipalType where
+    toText = \case
+        Group -> "GROUP"
+        Role -> "ROLE"
+        User -> "USER"
+
+instance Hashable     PrincipalType
+instance NFData       PrincipalType
+instance ToByteString PrincipalType
+instance ToQuery      PrincipalType
+instance ToHeader     PrincipalType
+
+instance ToJSON PrincipalType where
+    toJSON = toJSONText
+
+instance FromJSON PrincipalType where
+    parseJSON = parseJSONText "PrincipalType"
+
+data ResourceType
+  = Archive
+  | File
+  | JAR
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ResourceType where
+    parser = takeLowerText >>= \case
+        "archive" -> pure Archive
+        "file" -> pure File
+        "jar" -> pure JAR
+        e -> fromTextError $ "Failure parsing ResourceType from value: '" <> e
+           <> "'. Accepted values: archive, file, jar"
+
+instance ToText ResourceType where
+    toText = \case
+        Archive -> "ARCHIVE"
+        File -> "FILE"
+        JAR -> "JAR"
+
+instance Hashable     ResourceType
+instance NFData       ResourceType
+instance ToByteString ResourceType
+instance ToQuery      ResourceType
+instance ToHeader     ResourceType
+
+instance ToJSON ResourceType where
+    toJSON = toJSONText
+
+instance FromJSON ResourceType where
+    parseJSON = parseJSONText "ResourceType"
+
+data ScheduleState
+  = NotScheduled
+  | Scheduled
+  | Transitioning
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText ScheduleState where
+    parser = takeLowerText >>= \case
+        "not_scheduled" -> pure NotScheduled
+        "scheduled" -> pure Scheduled
+        "transitioning" -> pure Transitioning
+        e -> fromTextError $ "Failure parsing ScheduleState from value: '" <> e
+           <> "'. Accepted values: not_scheduled, scheduled, transitioning"
+
+instance ToText ScheduleState where
+    toText = \case
+        NotScheduled -> "NOT_SCHEDULED"
+        Scheduled -> "SCHEDULED"
+        Transitioning -> "TRANSITIONING"
+
+instance Hashable     ScheduleState
+instance NFData       ScheduleState
+instance ToByteString ScheduleState
+instance ToQuery      ScheduleState
+instance ToHeader     ScheduleState
+
+instance FromJSON ScheduleState where
+    parseJSON = parseJSONText "ScheduleState"
+
+data TriggerState
+  = Activated
+  | Activating
+  | Created
+  | Creating
+  | Deactivated
+  | Deactivating
+  | Deleting
+  | Updating
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText TriggerState where
+    parser = takeLowerText >>= \case
+        "activated" -> pure Activated
+        "activating" -> pure Activating
+        "created" -> pure Created
+        "creating" -> pure Creating
+        "deactivated" -> pure Deactivated
+        "deactivating" -> pure Deactivating
+        "deleting" -> pure Deleting
+        "updating" -> pure Updating
+        e -> fromTextError $ "Failure parsing TriggerState from value: '" <> e
+           <> "'. Accepted values: activated, activating, created, creating, deactivated, deactivating, deleting, updating"
+
+instance ToText TriggerState where
+    toText = \case
+        Activated -> "ACTIVATED"
+        Activating -> "ACTIVATING"
+        Created -> "CREATED"
+        Creating -> "CREATING"
+        Deactivated -> "DEACTIVATED"
+        Deactivating -> "DEACTIVATING"
+        Deleting -> "DELETING"
+        Updating -> "UPDATING"
+
+instance Hashable     TriggerState
+instance NFData       TriggerState
+instance ToByteString TriggerState
+instance ToQuery      TriggerState
+instance ToHeader     TriggerState
+
+instance FromJSON TriggerState where
+    parseJSON = parseJSONText "TriggerState"
+
+data TriggerType
+  = TTConditional
+  | TTOnDemand
+  | TTScheduled
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText TriggerType where
+    parser = takeLowerText >>= \case
+        "conditional" -> pure TTConditional
+        "on_demand" -> pure TTOnDemand
+        "scheduled" -> pure TTScheduled
+        e -> fromTextError $ "Failure parsing TriggerType from value: '" <> e
+           <> "'. Accepted values: conditional, on_demand, scheduled"
+
+instance ToText TriggerType where
+    toText = \case
+        TTConditional -> "CONDITIONAL"
+        TTOnDemand -> "ON_DEMAND"
+        TTScheduled -> "SCHEDULED"
+
+instance Hashable     TriggerType
+instance NFData       TriggerType
+instance ToByteString TriggerType
+instance ToQuery      TriggerType
+instance ToHeader     TriggerType
+
+instance ToJSON TriggerType where
+    toJSON = toJSONText
+
+instance FromJSON TriggerType where
+    parseJSON = parseJSONText "TriggerType"
+
+data UpdateBehavior
+  = UBLog
+  | UBUpdateInDatabase
+  deriving (Eq, Ord, Read, Show, Enum, Bounded, Data, Typeable, Generic)
+
+
+instance FromText UpdateBehavior where
+    parser = takeLowerText >>= \case
+        "log" -> pure UBLog
+        "update_in_database" -> pure UBUpdateInDatabase
+        e -> fromTextError $ "Failure parsing UpdateBehavior from value: '" <> e
+           <> "'. Accepted values: log, update_in_database"
+
+instance ToText UpdateBehavior where
+    toText = \case
+        UBLog -> "LOG"
+        UBUpdateInDatabase -> "UPDATE_IN_DATABASE"
+
+instance Hashable     UpdateBehavior
+instance NFData       UpdateBehavior
+instance ToByteString UpdateBehavior
+instance ToQuery      UpdateBehavior
+instance ToHeader     UpdateBehavior
+
+instance ToJSON UpdateBehavior where
+    toJSON = toJSONText
+
+instance FromJSON UpdateBehavior where
+    parseJSON = parseJSONText "UpdateBehavior"
diff --git a/gen/Network/AWS/Glue/UpdateClassifier.hs b/gen/Network/AWS/Glue/UpdateClassifier.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdateClassifier.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdateClassifier
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Modifies an existing @Classifier@ .
+--
+--
+module Network.AWS.Glue.UpdateClassifier
+    (
+    -- * Creating a Request
+      updateClassifier
+    , UpdateClassifier
+    -- * Request Lenses
+    , ucGrokClassifier
+
+    -- * Destructuring the Response
+    , updateClassifierResponse
+    , UpdateClassifierResponse
+    -- * Response Lenses
+    , ursResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateClassifier' smart constructor.
+newtype UpdateClassifier = UpdateClassifier'
+  { _ucGrokClassifier :: Maybe UpdateGrokClassifierRequest
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateClassifier' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucGrokClassifier' - A @GrokClassifier@ object with updated fields.
+updateClassifier
+    :: UpdateClassifier
+updateClassifier = UpdateClassifier' {_ucGrokClassifier = Nothing}
+
+
+-- | A @GrokClassifier@ object with updated fields.
+ucGrokClassifier :: Lens' UpdateClassifier (Maybe UpdateGrokClassifierRequest)
+ucGrokClassifier = lens _ucGrokClassifier (\ s a -> s{_ucGrokClassifier = a});
+
+instance AWSRequest UpdateClassifier where
+        type Rs UpdateClassifier = UpdateClassifierResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateClassifierResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UpdateClassifier where
+
+instance NFData UpdateClassifier where
+
+instance ToHeaders UpdateClassifier where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdateClassifier" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateClassifier where
+        toJSON UpdateClassifier'{..}
+          = object
+              (catMaybes
+                 [("GrokClassifier" .=) <$> _ucGrokClassifier])
+
+instance ToPath UpdateClassifier where
+        toPath = const "/"
+
+instance ToQuery UpdateClassifier where
+        toQuery = const mempty
+
+-- | /See:/ 'updateClassifierResponse' smart constructor.
+newtype UpdateClassifierResponse = UpdateClassifierResponse'
+  { _ursResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateClassifierResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ursResponseStatus' - -- | The response status code.
+updateClassifierResponse
+    :: Int -- ^ 'ursResponseStatus'
+    -> UpdateClassifierResponse
+updateClassifierResponse pResponseStatus_ =
+  UpdateClassifierResponse' {_ursResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+ursResponseStatus :: Lens' UpdateClassifierResponse Int
+ursResponseStatus = lens _ursResponseStatus (\ s a -> s{_ursResponseStatus = a});
+
+instance NFData UpdateClassifierResponse where
diff --git a/gen/Network/AWS/Glue/UpdateConnection.hs b/gen/Network/AWS/Glue/UpdateConnection.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdateConnection.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdateConnection
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a connection definition in the Data Catalog.
+--
+--
+module Network.AWS.Glue.UpdateConnection
+    (
+    -- * Creating a Request
+      updateConnection
+    , UpdateConnection
+    -- * Request Lenses
+    , ucCatalogId
+    , ucName
+    , ucConnectionInput
+
+    -- * Destructuring the Response
+    , updateConnectionResponse
+    , UpdateConnectionResponse
+    -- * Response Lenses
+    , ucrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateConnection' smart constructor.
+data UpdateConnection = UpdateConnection'
+  { _ucCatalogId       :: !(Maybe Text)
+  , _ucName            :: !Text
+  , _ucConnectionInput :: !ConnectionInput
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateConnection' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucCatalogId' - The ID of the Data Catalog in which the connection resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'ucName' - The name of the connection definition to update.
+--
+-- * 'ucConnectionInput' - A @ConnectionInput@ object that redefines the connection in question.
+updateConnection
+    :: Text -- ^ 'ucName'
+    -> ConnectionInput -- ^ 'ucConnectionInput'
+    -> UpdateConnection
+updateConnection pName_ pConnectionInput_ =
+  UpdateConnection'
+  { _ucCatalogId = Nothing
+  , _ucName = pName_
+  , _ucConnectionInput = pConnectionInput_
+  }
+
+
+-- | The ID of the Data Catalog in which the connection resides. If none is supplied, the AWS account ID is used by default.
+ucCatalogId :: Lens' UpdateConnection (Maybe Text)
+ucCatalogId = lens _ucCatalogId (\ s a -> s{_ucCatalogId = a});
+
+-- | The name of the connection definition to update.
+ucName :: Lens' UpdateConnection Text
+ucName = lens _ucName (\ s a -> s{_ucName = a});
+
+-- | A @ConnectionInput@ object that redefines the connection in question.
+ucConnectionInput :: Lens' UpdateConnection ConnectionInput
+ucConnectionInput = lens _ucConnectionInput (\ s a -> s{_ucConnectionInput = a});
+
+instance AWSRequest UpdateConnection where
+        type Rs UpdateConnection = UpdateConnectionResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateConnectionResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UpdateConnection where
+
+instance NFData UpdateConnection where
+
+instance ToHeaders UpdateConnection where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdateConnection" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateConnection where
+        toJSON UpdateConnection'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _ucCatalogId,
+                  Just ("Name" .= _ucName),
+                  Just ("ConnectionInput" .= _ucConnectionInput)])
+
+instance ToPath UpdateConnection where
+        toPath = const "/"
+
+instance ToQuery UpdateConnection where
+        toQuery = const mempty
+
+-- | /See:/ 'updateConnectionResponse' smart constructor.
+newtype UpdateConnectionResponse = UpdateConnectionResponse'
+  { _ucrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateConnectionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucrsResponseStatus' - -- | The response status code.
+updateConnectionResponse
+    :: Int -- ^ 'ucrsResponseStatus'
+    -> UpdateConnectionResponse
+updateConnectionResponse pResponseStatus_ =
+  UpdateConnectionResponse' {_ucrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+ucrsResponseStatus :: Lens' UpdateConnectionResponse Int
+ucrsResponseStatus = lens _ucrsResponseStatus (\ s a -> s{_ucrsResponseStatus = a});
+
+instance NFData UpdateConnectionResponse where
diff --git a/gen/Network/AWS/Glue/UpdateCrawler.hs b/gen/Network/AWS/Glue/UpdateCrawler.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdateCrawler.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdateCrawler
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a @Crawler@ . If a @Crawler@ is running, you must stop it using @StopCrawler@ before updating it.
+--
+--
+module Network.AWS.Glue.UpdateCrawler
+    (
+    -- * Creating a Request
+      updateCrawler
+    , UpdateCrawler
+    -- * Request Lenses
+    , uSchemaChangePolicy
+    , uSchedule
+    , uClassifiers
+    , uRole
+    , uTargets
+    , uDatabaseName
+    , uTablePrefix
+    , uDescription
+    , uName
+
+    -- * Destructuring the Response
+    , updateCrawlerResponse
+    , UpdateCrawlerResponse
+    -- * Response Lenses
+    , uccrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateCrawler' smart constructor.
+data UpdateCrawler = UpdateCrawler'
+  { _uSchemaChangePolicy :: !(Maybe SchemaChangePolicy)
+  , _uSchedule           :: !(Maybe Text)
+  , _uClassifiers        :: !(Maybe [Text])
+  , _uRole               :: !(Maybe Text)
+  , _uTargets            :: !(Maybe CrawlerTargets)
+  , _uDatabaseName       :: !(Maybe Text)
+  , _uTablePrefix        :: !(Maybe Text)
+  , _uDescription        :: !(Maybe Text)
+  , _uName               :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateCrawler' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uSchemaChangePolicy' - Policy for the crawler's update and deletion behavior.
+--
+-- * 'uSchedule' - A @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+--
+-- * 'uClassifiers' - A list of custom @Classifier@ names that the user has registered. By default, all AWS classifiers are included in a crawl, but these custom classifiers always override the default classifiers for a given classification.
+--
+-- * 'uRole' - The IAM role (or ARN of an IAM role) used by the new @Crawler@ to access customer resources.
+--
+-- * 'uTargets' - A list of collection of targets to crawl.
+--
+-- * 'uDatabaseName' - The Glue @Database@ where results will be stored, such as: @arn:aws:daylight:us-east-1::database/sometable/*@ .
+--
+-- * 'uTablePrefix' - The table prefix used for catalog tables created.
+--
+-- * 'uDescription' - A description of the new @Crawler@ .
+--
+-- * 'uName' - Name of the new @Crawler@ .
+updateCrawler
+    :: Text -- ^ 'uName'
+    -> UpdateCrawler
+updateCrawler pName_ =
+  UpdateCrawler'
+  { _uSchemaChangePolicy = Nothing
+  , _uSchedule = Nothing
+  , _uClassifiers = Nothing
+  , _uRole = Nothing
+  , _uTargets = Nothing
+  , _uDatabaseName = Nothing
+  , _uTablePrefix = Nothing
+  , _uDescription = Nothing
+  , _uName = pName_
+  }
+
+
+-- | Policy for the crawler's update and deletion behavior.
+uSchemaChangePolicy :: Lens' UpdateCrawler (Maybe SchemaChangePolicy)
+uSchemaChangePolicy = lens _uSchemaChangePolicy (\ s a -> s{_uSchemaChangePolicy = a});
+
+-- | A @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+uSchedule :: Lens' UpdateCrawler (Maybe Text)
+uSchedule = lens _uSchedule (\ s a -> s{_uSchedule = a});
+
+-- | A list of custom @Classifier@ names that the user has registered. By default, all AWS classifiers are included in a crawl, but these custom classifiers always override the default classifiers for a given classification.
+uClassifiers :: Lens' UpdateCrawler [Text]
+uClassifiers = lens _uClassifiers (\ s a -> s{_uClassifiers = a}) . _Default . _Coerce;
+
+-- | The IAM role (or ARN of an IAM role) used by the new @Crawler@ to access customer resources.
+uRole :: Lens' UpdateCrawler (Maybe Text)
+uRole = lens _uRole (\ s a -> s{_uRole = a});
+
+-- | A list of collection of targets to crawl.
+uTargets :: Lens' UpdateCrawler (Maybe CrawlerTargets)
+uTargets = lens _uTargets (\ s a -> s{_uTargets = a});
+
+-- | The Glue @Database@ where results will be stored, such as: @arn:aws:daylight:us-east-1::database/sometable/*@ .
+uDatabaseName :: Lens' UpdateCrawler (Maybe Text)
+uDatabaseName = lens _uDatabaseName (\ s a -> s{_uDatabaseName = a});
+
+-- | The table prefix used for catalog tables created.
+uTablePrefix :: Lens' UpdateCrawler (Maybe Text)
+uTablePrefix = lens _uTablePrefix (\ s a -> s{_uTablePrefix = a});
+
+-- | A description of the new @Crawler@ .
+uDescription :: Lens' UpdateCrawler (Maybe Text)
+uDescription = lens _uDescription (\ s a -> s{_uDescription = a});
+
+-- | Name of the new @Crawler@ .
+uName :: Lens' UpdateCrawler Text
+uName = lens _uName (\ s a -> s{_uName = a});
+
+instance AWSRequest UpdateCrawler where
+        type Rs UpdateCrawler = UpdateCrawlerResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateCrawlerResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UpdateCrawler where
+
+instance NFData UpdateCrawler where
+
+instance ToHeaders UpdateCrawler where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdateCrawler" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateCrawler where
+        toJSON UpdateCrawler'{..}
+          = object
+              (catMaybes
+                 [("SchemaChangePolicy" .=) <$> _uSchemaChangePolicy,
+                  ("Schedule" .=) <$> _uSchedule,
+                  ("Classifiers" .=) <$> _uClassifiers,
+                  ("Role" .=) <$> _uRole, ("Targets" .=) <$> _uTargets,
+                  ("DatabaseName" .=) <$> _uDatabaseName,
+                  ("TablePrefix" .=) <$> _uTablePrefix,
+                  ("Description" .=) <$> _uDescription,
+                  Just ("Name" .= _uName)])
+
+instance ToPath UpdateCrawler where
+        toPath = const "/"
+
+instance ToQuery UpdateCrawler where
+        toQuery = const mempty
+
+-- | /See:/ 'updateCrawlerResponse' smart constructor.
+newtype UpdateCrawlerResponse = UpdateCrawlerResponse'
+  { _uccrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateCrawlerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uccrsResponseStatus' - -- | The response status code.
+updateCrawlerResponse
+    :: Int -- ^ 'uccrsResponseStatus'
+    -> UpdateCrawlerResponse
+updateCrawlerResponse pResponseStatus_ =
+  UpdateCrawlerResponse' {_uccrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+uccrsResponseStatus :: Lens' UpdateCrawlerResponse Int
+uccrsResponseStatus = lens _uccrsResponseStatus (\ s a -> s{_uccrsResponseStatus = a});
+
+instance NFData UpdateCrawlerResponse where
diff --git a/gen/Network/AWS/Glue/UpdateCrawlerSchedule.hs b/gen/Network/AWS/Glue/UpdateCrawlerSchedule.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdateCrawlerSchedule.hs
@@ -0,0 +1,135 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdateCrawlerSchedule
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates the schedule of a crawler using a Cron expression.
+--
+--
+module Network.AWS.Glue.UpdateCrawlerSchedule
+    (
+    -- * Creating a Request
+      updateCrawlerSchedule
+    , UpdateCrawlerSchedule
+    -- * Request Lenses
+    , ucsSchedule
+    , ucsCrawlerName
+
+    -- * Destructuring the Response
+    , updateCrawlerScheduleResponse
+    , UpdateCrawlerScheduleResponse
+    -- * Response Lenses
+    , ucsrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateCrawlerSchedule' smart constructor.
+data UpdateCrawlerSchedule = UpdateCrawlerSchedule'
+  { _ucsSchedule    :: !(Maybe Text)
+  , _ucsCrawlerName :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateCrawlerSchedule' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucsSchedule' - The updated @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+--
+-- * 'ucsCrawlerName' - Name of the crawler whose schedule to update.
+updateCrawlerSchedule
+    :: Text -- ^ 'ucsCrawlerName'
+    -> UpdateCrawlerSchedule
+updateCrawlerSchedule pCrawlerName_ =
+  UpdateCrawlerSchedule'
+  {_ucsSchedule = Nothing, _ucsCrawlerName = pCrawlerName_}
+
+
+-- | The updated @cron@ expression used to specify the schedule (see <http://docs.aws.amazon.com/glue/latest/dg/monitor-data-warehouse-schedule.html Time-Based Schedules for Jobs and Crawlers> . For example, to run something every day at 12:15 UTC, you would specify: @cron(15 12 * * ? *)@ .
+ucsSchedule :: Lens' UpdateCrawlerSchedule (Maybe Text)
+ucsSchedule = lens _ucsSchedule (\ s a -> s{_ucsSchedule = a});
+
+-- | Name of the crawler whose schedule to update.
+ucsCrawlerName :: Lens' UpdateCrawlerSchedule Text
+ucsCrawlerName = lens _ucsCrawlerName (\ s a -> s{_ucsCrawlerName = a});
+
+instance AWSRequest UpdateCrawlerSchedule where
+        type Rs UpdateCrawlerSchedule =
+             UpdateCrawlerScheduleResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateCrawlerScheduleResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable UpdateCrawlerSchedule where
+
+instance NFData UpdateCrawlerSchedule where
+
+instance ToHeaders UpdateCrawlerSchedule where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdateCrawlerSchedule" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateCrawlerSchedule where
+        toJSON UpdateCrawlerSchedule'{..}
+          = object
+              (catMaybes
+                 [("Schedule" .=) <$> _ucsSchedule,
+                  Just ("CrawlerName" .= _ucsCrawlerName)])
+
+instance ToPath UpdateCrawlerSchedule where
+        toPath = const "/"
+
+instance ToQuery UpdateCrawlerSchedule where
+        toQuery = const mempty
+
+-- | /See:/ 'updateCrawlerScheduleResponse' smart constructor.
+newtype UpdateCrawlerScheduleResponse = UpdateCrawlerScheduleResponse'
+  { _ucsrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateCrawlerScheduleResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ucsrsResponseStatus' - -- | The response status code.
+updateCrawlerScheduleResponse
+    :: Int -- ^ 'ucsrsResponseStatus'
+    -> UpdateCrawlerScheduleResponse
+updateCrawlerScheduleResponse pResponseStatus_ =
+  UpdateCrawlerScheduleResponse' {_ucsrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+ucsrsResponseStatus :: Lens' UpdateCrawlerScheduleResponse Int
+ucsrsResponseStatus = lens _ucsrsResponseStatus (\ s a -> s{_ucsrsResponseStatus = a});
+
+instance NFData UpdateCrawlerScheduleResponse where
diff --git a/gen/Network/AWS/Glue/UpdateDatabase.hs b/gen/Network/AWS/Glue/UpdateDatabase.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdateDatabase.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdateDatabase
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing database definition in a Data Catalog.
+--
+--
+module Network.AWS.Glue.UpdateDatabase
+    (
+    -- * Creating a Request
+      updateDatabase
+    , UpdateDatabase
+    -- * Request Lenses
+    , udCatalogId
+    , udName
+    , udDatabaseInput
+
+    -- * Destructuring the Response
+    , updateDatabaseResponse
+    , UpdateDatabaseResponse
+    -- * Response Lenses
+    , udrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateDatabase' smart constructor.
+data UpdateDatabase = UpdateDatabase'
+  { _udCatalogId     :: !(Maybe Text)
+  , _udName          :: !Text
+  , _udDatabaseInput :: !DatabaseInput
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateDatabase' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udCatalogId' - The ID of the Data Catalog in which the metadata database resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'udName' - The name of the metadata database to update in the catalog.
+--
+-- * 'udDatabaseInput' - A @DatabaseInput@ object specifying the new definition of the metadata database in the catalog.
+updateDatabase
+    :: Text -- ^ 'udName'
+    -> DatabaseInput -- ^ 'udDatabaseInput'
+    -> UpdateDatabase
+updateDatabase pName_ pDatabaseInput_ =
+  UpdateDatabase'
+  {_udCatalogId = Nothing, _udName = pName_, _udDatabaseInput = pDatabaseInput_}
+
+
+-- | The ID of the Data Catalog in which the metadata database resides. If none is supplied, the AWS account ID is used by default.
+udCatalogId :: Lens' UpdateDatabase (Maybe Text)
+udCatalogId = lens _udCatalogId (\ s a -> s{_udCatalogId = a});
+
+-- | The name of the metadata database to update in the catalog.
+udName :: Lens' UpdateDatabase Text
+udName = lens _udName (\ s a -> s{_udName = a});
+
+-- | A @DatabaseInput@ object specifying the new definition of the metadata database in the catalog.
+udDatabaseInput :: Lens' UpdateDatabase DatabaseInput
+udDatabaseInput = lens _udDatabaseInput (\ s a -> s{_udDatabaseInput = a});
+
+instance AWSRequest UpdateDatabase where
+        type Rs UpdateDatabase = UpdateDatabaseResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateDatabaseResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UpdateDatabase where
+
+instance NFData UpdateDatabase where
+
+instance ToHeaders UpdateDatabase where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdateDatabase" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateDatabase where
+        toJSON UpdateDatabase'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _udCatalogId,
+                  Just ("Name" .= _udName),
+                  Just ("DatabaseInput" .= _udDatabaseInput)])
+
+instance ToPath UpdateDatabase where
+        toPath = const "/"
+
+instance ToQuery UpdateDatabase where
+        toQuery = const mempty
+
+-- | /See:/ 'updateDatabaseResponse' smart constructor.
+newtype UpdateDatabaseResponse = UpdateDatabaseResponse'
+  { _udrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateDatabaseResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udrsResponseStatus' - -- | The response status code.
+updateDatabaseResponse
+    :: Int -- ^ 'udrsResponseStatus'
+    -> UpdateDatabaseResponse
+updateDatabaseResponse pResponseStatus_ =
+  UpdateDatabaseResponse' {_udrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+udrsResponseStatus :: Lens' UpdateDatabaseResponse Int
+udrsResponseStatus = lens _udrsResponseStatus (\ s a -> s{_udrsResponseStatus = a});
+
+instance NFData UpdateDatabaseResponse where
diff --git a/gen/Network/AWS/Glue/UpdateDevEndpoint.hs b/gen/Network/AWS/Glue/UpdateDevEndpoint.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdateDevEndpoint.hs
@@ -0,0 +1,155 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdateDevEndpoint
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a specified DevEndpoint.
+--
+--
+module Network.AWS.Glue.UpdateDevEndpoint
+    (
+    -- * Creating a Request
+      updateDevEndpoint
+    , UpdateDevEndpoint
+    -- * Request Lenses
+    , udeCustomLibraries
+    , udePublicKey
+    , udeUpdateEtlLibraries
+    , udeEndpointName
+
+    -- * Destructuring the Response
+    , updateDevEndpointResponse
+    , UpdateDevEndpointResponse
+    -- * Response Lenses
+    , udersResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateDevEndpoint' smart constructor.
+data UpdateDevEndpoint = UpdateDevEndpoint'
+  { _udeCustomLibraries    :: !(Maybe DevEndpointCustomLibraries)
+  , _udePublicKey          :: !(Maybe Text)
+  , _udeUpdateEtlLibraries :: !(Maybe Bool)
+  , _udeEndpointName       :: !Text
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateDevEndpoint' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udeCustomLibraries' - Custom Python or Java libraries to be loaded in the DevEndpoint.
+--
+-- * 'udePublicKey' - The public key for the DevEndpoint to use.
+--
+-- * 'udeUpdateEtlLibraries' - True if the list of custom libraries to be loaded in the development endpoint needs to be updated, or False otherwise.
+--
+-- * 'udeEndpointName' - The name of the DevEndpoint to be updated.
+updateDevEndpoint
+    :: Text -- ^ 'udeEndpointName'
+    -> UpdateDevEndpoint
+updateDevEndpoint pEndpointName_ =
+  UpdateDevEndpoint'
+  { _udeCustomLibraries = Nothing
+  , _udePublicKey = Nothing
+  , _udeUpdateEtlLibraries = Nothing
+  , _udeEndpointName = pEndpointName_
+  }
+
+
+-- | Custom Python or Java libraries to be loaded in the DevEndpoint.
+udeCustomLibraries :: Lens' UpdateDevEndpoint (Maybe DevEndpointCustomLibraries)
+udeCustomLibraries = lens _udeCustomLibraries (\ s a -> s{_udeCustomLibraries = a});
+
+-- | The public key for the DevEndpoint to use.
+udePublicKey :: Lens' UpdateDevEndpoint (Maybe Text)
+udePublicKey = lens _udePublicKey (\ s a -> s{_udePublicKey = a});
+
+-- | True if the list of custom libraries to be loaded in the development endpoint needs to be updated, or False otherwise.
+udeUpdateEtlLibraries :: Lens' UpdateDevEndpoint (Maybe Bool)
+udeUpdateEtlLibraries = lens _udeUpdateEtlLibraries (\ s a -> s{_udeUpdateEtlLibraries = a});
+
+-- | The name of the DevEndpoint to be updated.
+udeEndpointName :: Lens' UpdateDevEndpoint Text
+udeEndpointName = lens _udeEndpointName (\ s a -> s{_udeEndpointName = a});
+
+instance AWSRequest UpdateDevEndpoint where
+        type Rs UpdateDevEndpoint = UpdateDevEndpointResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateDevEndpointResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UpdateDevEndpoint where
+
+instance NFData UpdateDevEndpoint where
+
+instance ToHeaders UpdateDevEndpoint where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdateDevEndpoint" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateDevEndpoint where
+        toJSON UpdateDevEndpoint'{..}
+          = object
+              (catMaybes
+                 [("CustomLibraries" .=) <$> _udeCustomLibraries,
+                  ("PublicKey" .=) <$> _udePublicKey,
+                  ("UpdateEtlLibraries" .=) <$> _udeUpdateEtlLibraries,
+                  Just ("EndpointName" .= _udeEndpointName)])
+
+instance ToPath UpdateDevEndpoint where
+        toPath = const "/"
+
+instance ToQuery UpdateDevEndpoint where
+        toQuery = const mempty
+
+-- | /See:/ 'updateDevEndpointResponse' smart constructor.
+newtype UpdateDevEndpointResponse = UpdateDevEndpointResponse'
+  { _udersResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateDevEndpointResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'udersResponseStatus' - -- | The response status code.
+updateDevEndpointResponse
+    :: Int -- ^ 'udersResponseStatus'
+    -> UpdateDevEndpointResponse
+updateDevEndpointResponse pResponseStatus_ =
+  UpdateDevEndpointResponse' {_udersResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+udersResponseStatus :: Lens' UpdateDevEndpointResponse Int
+udersResponseStatus = lens _udersResponseStatus (\ s a -> s{_udersResponseStatus = a});
+
+instance NFData UpdateDevEndpointResponse where
diff --git a/gen/Network/AWS/Glue/UpdateJob.hs b/gen/Network/AWS/Glue/UpdateJob.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdateJob.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdateJob
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing job definition.
+--
+--
+module Network.AWS.Glue.UpdateJob
+    (
+    -- * Creating a Request
+      updateJob
+    , UpdateJob
+    -- * Request Lenses
+    , ujJobName
+    , ujJobUpdate
+
+    -- * Destructuring the Response
+    , updateJobResponse
+    , UpdateJobResponse
+    -- * Response Lenses
+    , ujrsJobName
+    , ujrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateJob' smart constructor.
+data UpdateJob = UpdateJob'
+  { _ujJobName   :: !Text
+  , _ujJobUpdate :: !JobUpdate
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateJob' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ujJobName' - Name of the job definition to update.
+--
+-- * 'ujJobUpdate' - Specifies the values with which to update the job.
+updateJob
+    :: Text -- ^ 'ujJobName'
+    -> JobUpdate -- ^ 'ujJobUpdate'
+    -> UpdateJob
+updateJob pJobName_ pJobUpdate_ =
+  UpdateJob' {_ujJobName = pJobName_, _ujJobUpdate = pJobUpdate_}
+
+
+-- | Name of the job definition to update.
+ujJobName :: Lens' UpdateJob Text
+ujJobName = lens _ujJobName (\ s a -> s{_ujJobName = a});
+
+-- | Specifies the values with which to update the job.
+ujJobUpdate :: Lens' UpdateJob JobUpdate
+ujJobUpdate = lens _ujJobUpdate (\ s a -> s{_ujJobUpdate = a});
+
+instance AWSRequest UpdateJob where
+        type Rs UpdateJob = UpdateJobResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateJobResponse' <$>
+                   (x .?> "JobName") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateJob where
+
+instance NFData UpdateJob where
+
+instance ToHeaders UpdateJob where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdateJob" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateJob where
+        toJSON UpdateJob'{..}
+          = object
+              (catMaybes
+                 [Just ("JobName" .= _ujJobName),
+                  Just ("JobUpdate" .= _ujJobUpdate)])
+
+instance ToPath UpdateJob where
+        toPath = const "/"
+
+instance ToQuery UpdateJob where
+        toQuery = const mempty
+
+-- | /See:/ 'updateJobResponse' smart constructor.
+data UpdateJobResponse = UpdateJobResponse'
+  { _ujrsJobName        :: !(Maybe Text)
+  , _ujrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateJobResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ujrsJobName' - Returns the name of the updated job.
+--
+-- * 'ujrsResponseStatus' - -- | The response status code.
+updateJobResponse
+    :: Int -- ^ 'ujrsResponseStatus'
+    -> UpdateJobResponse
+updateJobResponse pResponseStatus_ =
+  UpdateJobResponse'
+  {_ujrsJobName = Nothing, _ujrsResponseStatus = pResponseStatus_}
+
+
+-- | Returns the name of the updated job.
+ujrsJobName :: Lens' UpdateJobResponse (Maybe Text)
+ujrsJobName = lens _ujrsJobName (\ s a -> s{_ujrsJobName = a});
+
+-- | -- | The response status code.
+ujrsResponseStatus :: Lens' UpdateJobResponse Int
+ujrsResponseStatus = lens _ujrsResponseStatus (\ s a -> s{_ujrsResponseStatus = a});
+
+instance NFData UpdateJobResponse where
diff --git a/gen/Network/AWS/Glue/UpdatePartition.hs b/gen/Network/AWS/Glue/UpdatePartition.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdatePartition.hs
@@ -0,0 +1,167 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdatePartition
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a partition.
+--
+--
+module Network.AWS.Glue.UpdatePartition
+    (
+    -- * Creating a Request
+      updatePartition
+    , UpdatePartition
+    -- * Request Lenses
+    , upCatalogId
+    , upDatabaseName
+    , upTableName
+    , upPartitionValueList
+    , upPartitionInput
+
+    -- * Destructuring the Response
+    , updatePartitionResponse
+    , UpdatePartitionResponse
+    -- * Response Lenses
+    , uprsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updatePartition' smart constructor.
+data UpdatePartition = UpdatePartition'
+  { _upCatalogId          :: !(Maybe Text)
+  , _upDatabaseName       :: !Text
+  , _upTableName          :: !Text
+  , _upPartitionValueList :: ![Text]
+  , _upPartitionInput     :: !PartitionInput
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdatePartition' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'upCatalogId' - The ID of the Data Catalog where the partition to be updated resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'upDatabaseName' - The name of the catalog database in which the table in question resides.
+--
+-- * 'upTableName' - The name of the table where the partition to be updated is located.
+--
+-- * 'upPartitionValueList' - A list of the values defining the partition.
+--
+-- * 'upPartitionInput' - The new partition object to which to update the partition.
+updatePartition
+    :: Text -- ^ 'upDatabaseName'
+    -> Text -- ^ 'upTableName'
+    -> PartitionInput -- ^ 'upPartitionInput'
+    -> UpdatePartition
+updatePartition pDatabaseName_ pTableName_ pPartitionInput_ =
+  UpdatePartition'
+  { _upCatalogId = Nothing
+  , _upDatabaseName = pDatabaseName_
+  , _upTableName = pTableName_
+  , _upPartitionValueList = mempty
+  , _upPartitionInput = pPartitionInput_
+  }
+
+
+-- | The ID of the Data Catalog where the partition to be updated resides. If none is supplied, the AWS account ID is used by default.
+upCatalogId :: Lens' UpdatePartition (Maybe Text)
+upCatalogId = lens _upCatalogId (\ s a -> s{_upCatalogId = a});
+
+-- | The name of the catalog database in which the table in question resides.
+upDatabaseName :: Lens' UpdatePartition Text
+upDatabaseName = lens _upDatabaseName (\ s a -> s{_upDatabaseName = a});
+
+-- | The name of the table where the partition to be updated is located.
+upTableName :: Lens' UpdatePartition Text
+upTableName = lens _upTableName (\ s a -> s{_upTableName = a});
+
+-- | A list of the values defining the partition.
+upPartitionValueList :: Lens' UpdatePartition [Text]
+upPartitionValueList = lens _upPartitionValueList (\ s a -> s{_upPartitionValueList = a}) . _Coerce;
+
+-- | The new partition object to which to update the partition.
+upPartitionInput :: Lens' UpdatePartition PartitionInput
+upPartitionInput = lens _upPartitionInput (\ s a -> s{_upPartitionInput = a});
+
+instance AWSRequest UpdatePartition where
+        type Rs UpdatePartition = UpdatePartitionResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdatePartitionResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UpdatePartition where
+
+instance NFData UpdatePartition where
+
+instance ToHeaders UpdatePartition where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdatePartition" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdatePartition where
+        toJSON UpdatePartition'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _upCatalogId,
+                  Just ("DatabaseName" .= _upDatabaseName),
+                  Just ("TableName" .= _upTableName),
+                  Just ("PartitionValueList" .= _upPartitionValueList),
+                  Just ("PartitionInput" .= _upPartitionInput)])
+
+instance ToPath UpdatePartition where
+        toPath = const "/"
+
+instance ToQuery UpdatePartition where
+        toQuery = const mempty
+
+-- | /See:/ 'updatePartitionResponse' smart constructor.
+newtype UpdatePartitionResponse = UpdatePartitionResponse'
+  { _uprsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdatePartitionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uprsResponseStatus' - -- | The response status code.
+updatePartitionResponse
+    :: Int -- ^ 'uprsResponseStatus'
+    -> UpdatePartitionResponse
+updatePartitionResponse pResponseStatus_ =
+  UpdatePartitionResponse' {_uprsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+uprsResponseStatus :: Lens' UpdatePartitionResponse Int
+uprsResponseStatus = lens _uprsResponseStatus (\ s a -> s{_uprsResponseStatus = a});
+
+instance NFData UpdatePartitionResponse where
diff --git a/gen/Network/AWS/Glue/UpdateTable.hs b/gen/Network/AWS/Glue/UpdateTable.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdateTable.hs
@@ -0,0 +1,146 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdateTable
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a metadata table in the Data Catalog.
+--
+--
+module Network.AWS.Glue.UpdateTable
+    (
+    -- * Creating a Request
+      updateTable
+    , UpdateTable
+    -- * Request Lenses
+    , utCatalogId
+    , utDatabaseName
+    , utTableInput
+
+    -- * Destructuring the Response
+    , updateTableResponse
+    , UpdateTableResponse
+    -- * Response Lenses
+    , utrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateTable' smart constructor.
+data UpdateTable = UpdateTable'
+  { _utCatalogId    :: !(Maybe Text)
+  , _utDatabaseName :: !Text
+  , _utTableInput   :: !TableInput
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateTable' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utCatalogId' - The ID of the Data Catalog where the table resides. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'utDatabaseName' - The name of the catalog database in which the table resides.
+--
+-- * 'utTableInput' - An updated @TableInput@ object to define the metadata table in the catalog.
+updateTable
+    :: Text -- ^ 'utDatabaseName'
+    -> TableInput -- ^ 'utTableInput'
+    -> UpdateTable
+updateTable pDatabaseName_ pTableInput_ =
+  UpdateTable'
+  { _utCatalogId = Nothing
+  , _utDatabaseName = pDatabaseName_
+  , _utTableInput = pTableInput_
+  }
+
+
+-- | The ID of the Data Catalog where the table resides. If none is supplied, the AWS account ID is used by default.
+utCatalogId :: Lens' UpdateTable (Maybe Text)
+utCatalogId = lens _utCatalogId (\ s a -> s{_utCatalogId = a});
+
+-- | The name of the catalog database in which the table resides.
+utDatabaseName :: Lens' UpdateTable Text
+utDatabaseName = lens _utDatabaseName (\ s a -> s{_utDatabaseName = a});
+
+-- | An updated @TableInput@ object to define the metadata table in the catalog.
+utTableInput :: Lens' UpdateTable TableInput
+utTableInput = lens _utTableInput (\ s a -> s{_utTableInput = a});
+
+instance AWSRequest UpdateTable where
+        type Rs UpdateTable = UpdateTableResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateTableResponse' <$> (pure (fromEnum s)))
+
+instance Hashable UpdateTable where
+
+instance NFData UpdateTable where
+
+instance ToHeaders UpdateTable where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdateTable" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateTable where
+        toJSON UpdateTable'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _utCatalogId,
+                  Just ("DatabaseName" .= _utDatabaseName),
+                  Just ("TableInput" .= _utTableInput)])
+
+instance ToPath UpdateTable where
+        toPath = const "/"
+
+instance ToQuery UpdateTable where
+        toQuery = const mempty
+
+-- | /See:/ 'updateTableResponse' smart constructor.
+newtype UpdateTableResponse = UpdateTableResponse'
+  { _utrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateTableResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utrsResponseStatus' - -- | The response status code.
+updateTableResponse
+    :: Int -- ^ 'utrsResponseStatus'
+    -> UpdateTableResponse
+updateTableResponse pResponseStatus_ =
+  UpdateTableResponse' {_utrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+utrsResponseStatus :: Lens' UpdateTableResponse Int
+utrsResponseStatus = lens _utrsResponseStatus (\ s a -> s{_utrsResponseStatus = a});
+
+instance NFData UpdateTableResponse where
diff --git a/gen/Network/AWS/Glue/UpdateTrigger.hs b/gen/Network/AWS/Glue/UpdateTrigger.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdateTrigger.hs
@@ -0,0 +1,143 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdateTrigger
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates a trigger definition.
+--
+--
+module Network.AWS.Glue.UpdateTrigger
+    (
+    -- * Creating a Request
+      updateTrigger
+    , UpdateTrigger
+    -- * Request Lenses
+    , utName
+    , utTriggerUpdate
+
+    -- * Destructuring the Response
+    , updateTriggerResponse
+    , UpdateTriggerResponse
+    -- * Response Lenses
+    , updrsTrigger
+    , updrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateTrigger' smart constructor.
+data UpdateTrigger = UpdateTrigger'
+  { _utName          :: !Text
+  , _utTriggerUpdate :: !TriggerUpdate
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateTrigger' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'utName' - The name of the trigger to update.
+--
+-- * 'utTriggerUpdate' - The new values with which to update the trigger.
+updateTrigger
+    :: Text -- ^ 'utName'
+    -> TriggerUpdate -- ^ 'utTriggerUpdate'
+    -> UpdateTrigger
+updateTrigger pName_ pTriggerUpdate_ =
+  UpdateTrigger' {_utName = pName_, _utTriggerUpdate = pTriggerUpdate_}
+
+
+-- | The name of the trigger to update.
+utName :: Lens' UpdateTrigger Text
+utName = lens _utName (\ s a -> s{_utName = a});
+
+-- | The new values with which to update the trigger.
+utTriggerUpdate :: Lens' UpdateTrigger TriggerUpdate
+utTriggerUpdate = lens _utTriggerUpdate (\ s a -> s{_utTriggerUpdate = a});
+
+instance AWSRequest UpdateTrigger where
+        type Rs UpdateTrigger = UpdateTriggerResponse
+        request = postJSON glue
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateTriggerResponse' <$>
+                   (x .?> "Trigger") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateTrigger where
+
+instance NFData UpdateTrigger where
+
+instance ToHeaders UpdateTrigger where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdateTrigger" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateTrigger where
+        toJSON UpdateTrigger'{..}
+          = object
+              (catMaybes
+                 [Just ("Name" .= _utName),
+                  Just ("TriggerUpdate" .= _utTriggerUpdate)])
+
+instance ToPath UpdateTrigger where
+        toPath = const "/"
+
+instance ToQuery UpdateTrigger where
+        toQuery = const mempty
+
+-- | /See:/ 'updateTriggerResponse' smart constructor.
+data UpdateTriggerResponse = UpdateTriggerResponse'
+  { _updrsTrigger        :: !(Maybe Trigger)
+  , _updrsResponseStatus :: !Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateTriggerResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'updrsTrigger' - The resulting trigger definition.
+--
+-- * 'updrsResponseStatus' - -- | The response status code.
+updateTriggerResponse
+    :: Int -- ^ 'updrsResponseStatus'
+    -> UpdateTriggerResponse
+updateTriggerResponse pResponseStatus_ =
+  UpdateTriggerResponse'
+  {_updrsTrigger = Nothing, _updrsResponseStatus = pResponseStatus_}
+
+
+-- | The resulting trigger definition.
+updrsTrigger :: Lens' UpdateTriggerResponse (Maybe Trigger)
+updrsTrigger = lens _updrsTrigger (\ s a -> s{_updrsTrigger = a});
+
+-- | -- | The response status code.
+updrsResponseStatus :: Lens' UpdateTriggerResponse Int
+updrsResponseStatus = lens _updrsResponseStatus (\ s a -> s{_updrsResponseStatus = a});
+
+instance NFData UpdateTriggerResponse where
diff --git a/gen/Network/AWS/Glue/UpdateUserDefinedFunction.hs b/gen/Network/AWS/Glue/UpdateUserDefinedFunction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/UpdateUserDefinedFunction.hs
@@ -0,0 +1,160 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.UpdateUserDefinedFunction
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Updates an existing function definition in the Data Catalog.
+--
+--
+module Network.AWS.Glue.UpdateUserDefinedFunction
+    (
+    -- * Creating a Request
+      updateUserDefinedFunction
+    , UpdateUserDefinedFunction
+    -- * Request Lenses
+    , uudfCatalogId
+    , uudfDatabaseName
+    , uudfFunctionName
+    , uudfFunctionInput
+
+    -- * Destructuring the Response
+    , updateUserDefinedFunctionResponse
+    , UpdateUserDefinedFunctionResponse
+    -- * Response Lenses
+    , uudfrsResponseStatus
+    ) where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Glue.Types.Product
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Request
+import Network.AWS.Response
+
+-- | /See:/ 'updateUserDefinedFunction' smart constructor.
+data UpdateUserDefinedFunction = UpdateUserDefinedFunction'
+  { _uudfCatalogId     :: !(Maybe Text)
+  , _uudfDatabaseName  :: !Text
+  , _uudfFunctionName  :: !Text
+  , _uudfFunctionInput :: !UserDefinedFunctionInput
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateUserDefinedFunction' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uudfCatalogId' - The ID of the Data Catalog where the function to be updated is located. If none is supplied, the AWS account ID is used by default.
+--
+-- * 'uudfDatabaseName' - The name of the catalog database where the function to be updated is located.
+--
+-- * 'uudfFunctionName' - The name of the function.
+--
+-- * 'uudfFunctionInput' - A @FunctionInput@ object that re-defines the function in the Data Catalog.
+updateUserDefinedFunction
+    :: Text -- ^ 'uudfDatabaseName'
+    -> Text -- ^ 'uudfFunctionName'
+    -> UserDefinedFunctionInput -- ^ 'uudfFunctionInput'
+    -> UpdateUserDefinedFunction
+updateUserDefinedFunction pDatabaseName_ pFunctionName_ pFunctionInput_ =
+  UpdateUserDefinedFunction'
+  { _uudfCatalogId = Nothing
+  , _uudfDatabaseName = pDatabaseName_
+  , _uudfFunctionName = pFunctionName_
+  , _uudfFunctionInput = pFunctionInput_
+  }
+
+
+-- | The ID of the Data Catalog where the function to be updated is located. If none is supplied, the AWS account ID is used by default.
+uudfCatalogId :: Lens' UpdateUserDefinedFunction (Maybe Text)
+uudfCatalogId = lens _uudfCatalogId (\ s a -> s{_uudfCatalogId = a});
+
+-- | The name of the catalog database where the function to be updated is located.
+uudfDatabaseName :: Lens' UpdateUserDefinedFunction Text
+uudfDatabaseName = lens _uudfDatabaseName (\ s a -> s{_uudfDatabaseName = a});
+
+-- | The name of the function.
+uudfFunctionName :: Lens' UpdateUserDefinedFunction Text
+uudfFunctionName = lens _uudfFunctionName (\ s a -> s{_uudfFunctionName = a});
+
+-- | A @FunctionInput@ object that re-defines the function in the Data Catalog.
+uudfFunctionInput :: Lens' UpdateUserDefinedFunction UserDefinedFunctionInput
+uudfFunctionInput = lens _uudfFunctionInput (\ s a -> s{_uudfFunctionInput = a});
+
+instance AWSRequest UpdateUserDefinedFunction where
+        type Rs UpdateUserDefinedFunction =
+             UpdateUserDefinedFunctionResponse
+        request = postJSON glue
+        response
+          = receiveEmpty
+              (\ s h x ->
+                 UpdateUserDefinedFunctionResponse' <$>
+                   (pure (fromEnum s)))
+
+instance Hashable UpdateUserDefinedFunction where
+
+instance NFData UpdateUserDefinedFunction where
+
+instance ToHeaders UpdateUserDefinedFunction where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("AWSGlue.UpdateUserDefinedFunction" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateUserDefinedFunction where
+        toJSON UpdateUserDefinedFunction'{..}
+          = object
+              (catMaybes
+                 [("CatalogId" .=) <$> _uudfCatalogId,
+                  Just ("DatabaseName" .= _uudfDatabaseName),
+                  Just ("FunctionName" .= _uudfFunctionName),
+                  Just ("FunctionInput" .= _uudfFunctionInput)])
+
+instance ToPath UpdateUserDefinedFunction where
+        toPath = const "/"
+
+instance ToQuery UpdateUserDefinedFunction where
+        toQuery = const mempty
+
+-- | /See:/ 'updateUserDefinedFunctionResponse' smart constructor.
+newtype UpdateUserDefinedFunctionResponse = UpdateUserDefinedFunctionResponse'
+  { _uudfrsResponseStatus :: Int
+  } deriving (Eq, Read, Show, Data, Typeable, Generic)
+
+
+-- | Creates a value of 'UpdateUserDefinedFunctionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uudfrsResponseStatus' - -- | The response status code.
+updateUserDefinedFunctionResponse
+    :: Int -- ^ 'uudfrsResponseStatus'
+    -> UpdateUserDefinedFunctionResponse
+updateUserDefinedFunctionResponse pResponseStatus_ =
+  UpdateUserDefinedFunctionResponse' {_uudfrsResponseStatus = pResponseStatus_}
+
+
+-- | -- | The response status code.
+uudfrsResponseStatus :: Lens' UpdateUserDefinedFunctionResponse Int
+uudfrsResponseStatus = lens _uudfrsResponseStatus (\ s a -> s{_uudfrsResponseStatus = a});
+
+instance NFData UpdateUserDefinedFunctionResponse
+         where
diff --git a/gen/Network/AWS/Glue/Waiters.hs b/gen/Network/AWS/Glue/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Glue/Waiters.hs
@@ -0,0 +1,21 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.Glue.Waiters
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.Glue.Waiters where
+
+import Network.AWS.Glue.Types
+import Network.AWS.Lens
+import Network.AWS.Prelude
+import Network.AWS.Waiter
diff --git a/src/.gitkeep b/src/.gitkeep
new file mode 100644
--- /dev/null
+++ b/src/.gitkeep
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.Glue
+import Test.AWS.Glue.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "Glue"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/Gen/Glue.hs b/test/Test/AWS/Gen/Glue.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/Glue.hs
@@ -0,0 +1,1389 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-orphans        #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Test.AWS.Gen.Glue
+-- Copyright   : (c) 2013-2017 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.Glue where
+
+import Data.Proxy
+import Network.AWS.Glue
+import Test.AWS.Fixture
+import Test.AWS.Glue.Internal
+import Test.AWS.Prelude
+import Test.Tasty
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ requestStartCrawler $
+--             startCrawler
+--
+--         , requestGetCatalogImportStatus $
+--             getCatalogImportStatus
+--
+--         , requestGetPartition $
+--             getPartition
+--
+--         , requestCreateTrigger $
+--             createTrigger
+--
+--         , requestDeleteTable $
+--             deleteTable
+--
+--         , requestUpdateTable $
+--             updateTable
+--
+--         , requestDeleteConnection $
+--             deleteConnection
+--
+--         , requestUpdateConnection $
+--             updateConnection
+--
+--         , requestGetUserDefinedFunctions $
+--             getUserDefinedFunctions
+--
+--         , requestBatchCreatePartition $
+--             batchCreatePartition
+--
+--         , requestGetMapping $
+--             getMapping
+--
+--         , requestGetJobs $
+--             getJobs
+--
+--         , requestGetClassifiers $
+--             getClassifiers
+--
+--         , requestCreateConnection $
+--             createConnection
+--
+--         , requestDeleteDevEndpoint $
+--             deleteDevEndpoint
+--
+--         , requestUpdateDevEndpoint $
+--             updateDevEndpoint
+--
+--         , requestDeleteCrawler $
+--             deleteCrawler
+--
+--         , requestUpdateCrawler $
+--             updateCrawler
+--
+--         , requestGetConnection $
+--             getConnection
+--
+--         , requestBatchGetPartition $
+--             batchGetPartition
+--
+--         , requestStopTrigger $
+--             stopTrigger
+--
+--         , requestUpdateCrawlerSchedule $
+--             updateCrawlerSchedule
+--
+--         , requestDeleteUserDefinedFunction $
+--             deleteUserDefinedFunction
+--
+--         , requestUpdateUserDefinedFunction $
+--             updateUserDefinedFunction
+--
+--         , requestBatchDeleteTable $
+--             batchDeleteTable
+--
+--         , requestGetTables $
+--             getTables
+--
+--         , requestCreateClassifier $
+--             createClassifier
+--
+--         , requestBatchDeleteConnection $
+--             batchDeleteConnection
+--
+--         , requestCreateJob $
+--             createJob
+--
+--         , requestGetJobRuns $
+--             getJobRuns
+--
+--         , requestCreateUserDefinedFunction $
+--             createUserDefinedFunction
+--
+--         , requestResetJobBookmark $
+--             resetJobBookmark
+--
+--         , requestDeleteJob $
+--             deleteJob
+--
+--         , requestUpdateJob $
+--             updateJob
+--
+--         , requestGetCrawlers $
+--             getCrawlers
+--
+--         , requestGetClassifier $
+--             getClassifier
+--
+--         , requestGetJob $
+--             getJob
+--
+--         , requestGetDevEndpoints $
+--             getDevEndpoints
+--
+--         , requestStartCrawlerSchedule $
+--             startCrawlerSchedule
+--
+--         , requestGetUserDefinedFunction $
+--             getUserDefinedFunction
+--
+--         , requestDeleteDatabase $
+--             deleteDatabase
+--
+--         , requestUpdateDatabase $
+--             updateDatabase
+--
+--         , requestStopCrawler $
+--             stopCrawler
+--
+--         , requestGetPartitions $
+--             getPartitions
+--
+--         , requestBatchDeletePartition $
+--             batchDeletePartition
+--
+--         , requestGetCrawler $
+--             getCrawler
+--
+--         , requestBatchStopJobRun $
+--             batchStopJobRun
+--
+--         , requestGetDevEndpoint $
+--             getDevEndpoint
+--
+--         , requestCreateTable $
+--             createTable
+--
+--         , requestGetCrawlerMetrics $
+--             getCrawlerMetrics
+--
+--         , requestGetPlan $
+--             getPlan
+--
+--         , requestGetTriggers $
+--             getTriggers
+--
+--         , requestStartTrigger $
+--             startTrigger
+--
+--         , requestGetDataflowGraph $
+--             getDataflowGraph
+--
+--         , requestGetDatabases $
+--             getDatabases
+--
+--         , requestGetTable $
+--             getTable
+--
+--         , requestCreateCrawler $
+--             createCrawler
+--
+--         , requestGetJobRun $
+--             getJobRun
+--
+--         , requestCreateDevEndpoint $
+--             createDevEndpoint
+--
+--         , requestGetDatabase $
+--             getDatabase
+--
+--         , requestDeletePartition $
+--             deletePartition
+--
+--         , requestUpdatePartition $
+--             updatePartition
+--
+--         , requestCreateScript $
+--             createScript
+--
+--         , requestGetConnections $
+--             getConnections
+--
+--         , requestGetTrigger $
+--             getTrigger
+--
+--         , requestImportCatalogToGlue $
+--             importCatalogToGlue
+--
+--         , requestDeleteClassifier $
+--             deleteClassifier
+--
+--         , requestUpdateClassifier $
+--             updateClassifier
+--
+--         , requestStartJobRun $
+--             startJobRun
+--
+--         , requestCreatePartition $
+--             createPartition
+--
+--         , requestStopCrawlerSchedule $
+--             stopCrawlerSchedule
+--
+--         , requestCreateDatabase $
+--             createDatabase
+--
+--         , requestGetTableVersions $
+--             getTableVersions
+--
+--         , requestDeleteTrigger $
+--             deleteTrigger
+--
+--         , requestUpdateTrigger $
+--             updateTrigger
+--
+--           ]
+
+--     , testGroup "response"
+--         [ responseStartCrawler $
+--             startCrawlerResponse
+--
+--         , responseGetCatalogImportStatus $
+--             getCatalogImportStatusResponse
+--
+--         , responseGetPartition $
+--             getPartitionResponse
+--
+--         , responseCreateTrigger $
+--             createTriggerResponse
+--
+--         , responseDeleteTable $
+--             deleteTableResponse
+--
+--         , responseUpdateTable $
+--             updateTableResponse
+--
+--         , responseDeleteConnection $
+--             deleteConnectionResponse
+--
+--         , responseUpdateConnection $
+--             updateConnectionResponse
+--
+--         , responseGetUserDefinedFunctions $
+--             getUserDefinedFunctionsResponse
+--
+--         , responseBatchCreatePartition $
+--             batchCreatePartitionResponse
+--
+--         , responseGetMapping $
+--             getMappingResponse
+--
+--         , responseGetJobs $
+--             getJobsResponse
+--
+--         , responseGetClassifiers $
+--             getClassifiersResponse
+--
+--         , responseCreateConnection $
+--             createConnectionResponse
+--
+--         , responseDeleteDevEndpoint $
+--             deleteDevEndpointResponse
+--
+--         , responseUpdateDevEndpoint $
+--             updateDevEndpointResponse
+--
+--         , responseDeleteCrawler $
+--             deleteCrawlerResponse
+--
+--         , responseUpdateCrawler $
+--             updateCrawlerResponse
+--
+--         , responseGetConnection $
+--             getConnectionResponse
+--
+--         , responseBatchGetPartition $
+--             batchGetPartitionResponse
+--
+--         , responseStopTrigger $
+--             stopTriggerResponse
+--
+--         , responseUpdateCrawlerSchedule $
+--             updateCrawlerScheduleResponse
+--
+--         , responseDeleteUserDefinedFunction $
+--             deleteUserDefinedFunctionResponse
+--
+--         , responseUpdateUserDefinedFunction $
+--             updateUserDefinedFunctionResponse
+--
+--         , responseBatchDeleteTable $
+--             batchDeleteTableResponse
+--
+--         , responseGetTables $
+--             getTablesResponse
+--
+--         , responseCreateClassifier $
+--             createClassifierResponse
+--
+--         , responseBatchDeleteConnection $
+--             batchDeleteConnectionResponse
+--
+--         , responseCreateJob $
+--             createJobResponse
+--
+--         , responseGetJobRuns $
+--             getJobRunsResponse
+--
+--         , responseCreateUserDefinedFunction $
+--             createUserDefinedFunctionResponse
+--
+--         , responseResetJobBookmark $
+--             resetJobBookmarkResponse
+--
+--         , responseDeleteJob $
+--             deleteJobResponse
+--
+--         , responseUpdateJob $
+--             updateJobResponse
+--
+--         , responseGetCrawlers $
+--             getCrawlersResponse
+--
+--         , responseGetClassifier $
+--             getClassifierResponse
+--
+--         , responseGetJob $
+--             getJobResponse
+--
+--         , responseGetDevEndpoints $
+--             getDevEndpointsResponse
+--
+--         , responseStartCrawlerSchedule $
+--             startCrawlerScheduleResponse
+--
+--         , responseGetUserDefinedFunction $
+--             getUserDefinedFunctionResponse
+--
+--         , responseDeleteDatabase $
+--             deleteDatabaseResponse
+--
+--         , responseUpdateDatabase $
+--             updateDatabaseResponse
+--
+--         , responseStopCrawler $
+--             stopCrawlerResponse
+--
+--         , responseGetPartitions $
+--             getPartitionsResponse
+--
+--         , responseBatchDeletePartition $
+--             batchDeletePartitionResponse
+--
+--         , responseGetCrawler $
+--             getCrawlerResponse
+--
+--         , responseBatchStopJobRun $
+--             batchStopJobRunResponse
+--
+--         , responseGetDevEndpoint $
+--             getDevEndpointResponse
+--
+--         , responseCreateTable $
+--             createTableResponse
+--
+--         , responseGetCrawlerMetrics $
+--             getCrawlerMetricsResponse
+--
+--         , responseGetPlan $
+--             getPlanResponse
+--
+--         , responseGetTriggers $
+--             getTriggersResponse
+--
+--         , responseStartTrigger $
+--             startTriggerResponse
+--
+--         , responseGetDataflowGraph $
+--             getDataflowGraphResponse
+--
+--         , responseGetDatabases $
+--             getDatabasesResponse
+--
+--         , responseGetTable $
+--             getTableResponse
+--
+--         , responseCreateCrawler $
+--             createCrawlerResponse
+--
+--         , responseGetJobRun $
+--             getJobRunResponse
+--
+--         , responseCreateDevEndpoint $
+--             createDevEndpointResponse
+--
+--         , responseGetDatabase $
+--             getDatabaseResponse
+--
+--         , responseDeletePartition $
+--             deletePartitionResponse
+--
+--         , responseUpdatePartition $
+--             updatePartitionResponse
+--
+--         , responseCreateScript $
+--             createScriptResponse
+--
+--         , responseGetConnections $
+--             getConnectionsResponse
+--
+--         , responseGetTrigger $
+--             getTriggerResponse
+--
+--         , responseImportCatalogToGlue $
+--             importCatalogToGlueResponse
+--
+--         , responseDeleteClassifier $
+--             deleteClassifierResponse
+--
+--         , responseUpdateClassifier $
+--             updateClassifierResponse
+--
+--         , responseStartJobRun $
+--             startJobRunResponse
+--
+--         , responseCreatePartition $
+--             createPartitionResponse
+--
+--         , responseStopCrawlerSchedule $
+--             stopCrawlerScheduleResponse
+--
+--         , responseCreateDatabase $
+--             createDatabaseResponse
+--
+--         , responseGetTableVersions $
+--             getTableVersionsResponse
+--
+--         , responseDeleteTrigger $
+--             deleteTriggerResponse
+--
+--         , responseUpdateTrigger $
+--             updateTriggerResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+requestStartCrawler :: StartCrawler -> TestTree
+requestStartCrawler = req
+    "StartCrawler"
+    "fixture/StartCrawler.yaml"
+
+requestGetCatalogImportStatus :: GetCatalogImportStatus -> TestTree
+requestGetCatalogImportStatus = req
+    "GetCatalogImportStatus"
+    "fixture/GetCatalogImportStatus.yaml"
+
+requestGetPartition :: GetPartition -> TestTree
+requestGetPartition = req
+    "GetPartition"
+    "fixture/GetPartition.yaml"
+
+requestCreateTrigger :: CreateTrigger -> TestTree
+requestCreateTrigger = req
+    "CreateTrigger"
+    "fixture/CreateTrigger.yaml"
+
+requestDeleteTable :: DeleteTable -> TestTree
+requestDeleteTable = req
+    "DeleteTable"
+    "fixture/DeleteTable.yaml"
+
+requestUpdateTable :: UpdateTable -> TestTree
+requestUpdateTable = req
+    "UpdateTable"
+    "fixture/UpdateTable.yaml"
+
+requestDeleteConnection :: DeleteConnection -> TestTree
+requestDeleteConnection = req
+    "DeleteConnection"
+    "fixture/DeleteConnection.yaml"
+
+requestUpdateConnection :: UpdateConnection -> TestTree
+requestUpdateConnection = req
+    "UpdateConnection"
+    "fixture/UpdateConnection.yaml"
+
+requestGetUserDefinedFunctions :: GetUserDefinedFunctions -> TestTree
+requestGetUserDefinedFunctions = req
+    "GetUserDefinedFunctions"
+    "fixture/GetUserDefinedFunctions.yaml"
+
+requestBatchCreatePartition :: BatchCreatePartition -> TestTree
+requestBatchCreatePartition = req
+    "BatchCreatePartition"
+    "fixture/BatchCreatePartition.yaml"
+
+requestGetMapping :: GetMapping -> TestTree
+requestGetMapping = req
+    "GetMapping"
+    "fixture/GetMapping.yaml"
+
+requestGetJobs :: GetJobs -> TestTree
+requestGetJobs = req
+    "GetJobs"
+    "fixture/GetJobs.yaml"
+
+requestGetClassifiers :: GetClassifiers -> TestTree
+requestGetClassifiers = req
+    "GetClassifiers"
+    "fixture/GetClassifiers.yaml"
+
+requestCreateConnection :: CreateConnection -> TestTree
+requestCreateConnection = req
+    "CreateConnection"
+    "fixture/CreateConnection.yaml"
+
+requestDeleteDevEndpoint :: DeleteDevEndpoint -> TestTree
+requestDeleteDevEndpoint = req
+    "DeleteDevEndpoint"
+    "fixture/DeleteDevEndpoint.yaml"
+
+requestUpdateDevEndpoint :: UpdateDevEndpoint -> TestTree
+requestUpdateDevEndpoint = req
+    "UpdateDevEndpoint"
+    "fixture/UpdateDevEndpoint.yaml"
+
+requestDeleteCrawler :: DeleteCrawler -> TestTree
+requestDeleteCrawler = req
+    "DeleteCrawler"
+    "fixture/DeleteCrawler.yaml"
+
+requestUpdateCrawler :: UpdateCrawler -> TestTree
+requestUpdateCrawler = req
+    "UpdateCrawler"
+    "fixture/UpdateCrawler.yaml"
+
+requestGetConnection :: GetConnection -> TestTree
+requestGetConnection = req
+    "GetConnection"
+    "fixture/GetConnection.yaml"
+
+requestBatchGetPartition :: BatchGetPartition -> TestTree
+requestBatchGetPartition = req
+    "BatchGetPartition"
+    "fixture/BatchGetPartition.yaml"
+
+requestStopTrigger :: StopTrigger -> TestTree
+requestStopTrigger = req
+    "StopTrigger"
+    "fixture/StopTrigger.yaml"
+
+requestUpdateCrawlerSchedule :: UpdateCrawlerSchedule -> TestTree
+requestUpdateCrawlerSchedule = req
+    "UpdateCrawlerSchedule"
+    "fixture/UpdateCrawlerSchedule.yaml"
+
+requestDeleteUserDefinedFunction :: DeleteUserDefinedFunction -> TestTree
+requestDeleteUserDefinedFunction = req
+    "DeleteUserDefinedFunction"
+    "fixture/DeleteUserDefinedFunction.yaml"
+
+requestUpdateUserDefinedFunction :: UpdateUserDefinedFunction -> TestTree
+requestUpdateUserDefinedFunction = req
+    "UpdateUserDefinedFunction"
+    "fixture/UpdateUserDefinedFunction.yaml"
+
+requestBatchDeleteTable :: BatchDeleteTable -> TestTree
+requestBatchDeleteTable = req
+    "BatchDeleteTable"
+    "fixture/BatchDeleteTable.yaml"
+
+requestGetTables :: GetTables -> TestTree
+requestGetTables = req
+    "GetTables"
+    "fixture/GetTables.yaml"
+
+requestCreateClassifier :: CreateClassifier -> TestTree
+requestCreateClassifier = req
+    "CreateClassifier"
+    "fixture/CreateClassifier.yaml"
+
+requestBatchDeleteConnection :: BatchDeleteConnection -> TestTree
+requestBatchDeleteConnection = req
+    "BatchDeleteConnection"
+    "fixture/BatchDeleteConnection.yaml"
+
+requestCreateJob :: CreateJob -> TestTree
+requestCreateJob = req
+    "CreateJob"
+    "fixture/CreateJob.yaml"
+
+requestGetJobRuns :: GetJobRuns -> TestTree
+requestGetJobRuns = req
+    "GetJobRuns"
+    "fixture/GetJobRuns.yaml"
+
+requestCreateUserDefinedFunction :: CreateUserDefinedFunction -> TestTree
+requestCreateUserDefinedFunction = req
+    "CreateUserDefinedFunction"
+    "fixture/CreateUserDefinedFunction.yaml"
+
+requestResetJobBookmark :: ResetJobBookmark -> TestTree
+requestResetJobBookmark = req
+    "ResetJobBookmark"
+    "fixture/ResetJobBookmark.yaml"
+
+requestDeleteJob :: DeleteJob -> TestTree
+requestDeleteJob = req
+    "DeleteJob"
+    "fixture/DeleteJob.yaml"
+
+requestUpdateJob :: UpdateJob -> TestTree
+requestUpdateJob = req
+    "UpdateJob"
+    "fixture/UpdateJob.yaml"
+
+requestGetCrawlers :: GetCrawlers -> TestTree
+requestGetCrawlers = req
+    "GetCrawlers"
+    "fixture/GetCrawlers.yaml"
+
+requestGetClassifier :: GetClassifier -> TestTree
+requestGetClassifier = req
+    "GetClassifier"
+    "fixture/GetClassifier.yaml"
+
+requestGetJob :: GetJob -> TestTree
+requestGetJob = req
+    "GetJob"
+    "fixture/GetJob.yaml"
+
+requestGetDevEndpoints :: GetDevEndpoints -> TestTree
+requestGetDevEndpoints = req
+    "GetDevEndpoints"
+    "fixture/GetDevEndpoints.yaml"
+
+requestStartCrawlerSchedule :: StartCrawlerSchedule -> TestTree
+requestStartCrawlerSchedule = req
+    "StartCrawlerSchedule"
+    "fixture/StartCrawlerSchedule.yaml"
+
+requestGetUserDefinedFunction :: GetUserDefinedFunction -> TestTree
+requestGetUserDefinedFunction = req
+    "GetUserDefinedFunction"
+    "fixture/GetUserDefinedFunction.yaml"
+
+requestDeleteDatabase :: DeleteDatabase -> TestTree
+requestDeleteDatabase = req
+    "DeleteDatabase"
+    "fixture/DeleteDatabase.yaml"
+
+requestUpdateDatabase :: UpdateDatabase -> TestTree
+requestUpdateDatabase = req
+    "UpdateDatabase"
+    "fixture/UpdateDatabase.yaml"
+
+requestStopCrawler :: StopCrawler -> TestTree
+requestStopCrawler = req
+    "StopCrawler"
+    "fixture/StopCrawler.yaml"
+
+requestGetPartitions :: GetPartitions -> TestTree
+requestGetPartitions = req
+    "GetPartitions"
+    "fixture/GetPartitions.yaml"
+
+requestBatchDeletePartition :: BatchDeletePartition -> TestTree
+requestBatchDeletePartition = req
+    "BatchDeletePartition"
+    "fixture/BatchDeletePartition.yaml"
+
+requestGetCrawler :: GetCrawler -> TestTree
+requestGetCrawler = req
+    "GetCrawler"
+    "fixture/GetCrawler.yaml"
+
+requestBatchStopJobRun :: BatchStopJobRun -> TestTree
+requestBatchStopJobRun = req
+    "BatchStopJobRun"
+    "fixture/BatchStopJobRun.yaml"
+
+requestGetDevEndpoint :: GetDevEndpoint -> TestTree
+requestGetDevEndpoint = req
+    "GetDevEndpoint"
+    "fixture/GetDevEndpoint.yaml"
+
+requestCreateTable :: CreateTable -> TestTree
+requestCreateTable = req
+    "CreateTable"
+    "fixture/CreateTable.yaml"
+
+requestGetCrawlerMetrics :: GetCrawlerMetrics -> TestTree
+requestGetCrawlerMetrics = req
+    "GetCrawlerMetrics"
+    "fixture/GetCrawlerMetrics.yaml"
+
+requestGetPlan :: GetPlan -> TestTree
+requestGetPlan = req
+    "GetPlan"
+    "fixture/GetPlan.yaml"
+
+requestGetTriggers :: GetTriggers -> TestTree
+requestGetTriggers = req
+    "GetTriggers"
+    "fixture/GetTriggers.yaml"
+
+requestStartTrigger :: StartTrigger -> TestTree
+requestStartTrigger = req
+    "StartTrigger"
+    "fixture/StartTrigger.yaml"
+
+requestGetDataflowGraph :: GetDataflowGraph -> TestTree
+requestGetDataflowGraph = req
+    "GetDataflowGraph"
+    "fixture/GetDataflowGraph.yaml"
+
+requestGetDatabases :: GetDatabases -> TestTree
+requestGetDatabases = req
+    "GetDatabases"
+    "fixture/GetDatabases.yaml"
+
+requestGetTable :: GetTable -> TestTree
+requestGetTable = req
+    "GetTable"
+    "fixture/GetTable.yaml"
+
+requestCreateCrawler :: CreateCrawler -> TestTree
+requestCreateCrawler = req
+    "CreateCrawler"
+    "fixture/CreateCrawler.yaml"
+
+requestGetJobRun :: GetJobRun -> TestTree
+requestGetJobRun = req
+    "GetJobRun"
+    "fixture/GetJobRun.yaml"
+
+requestCreateDevEndpoint :: CreateDevEndpoint -> TestTree
+requestCreateDevEndpoint = req
+    "CreateDevEndpoint"
+    "fixture/CreateDevEndpoint.yaml"
+
+requestGetDatabase :: GetDatabase -> TestTree
+requestGetDatabase = req
+    "GetDatabase"
+    "fixture/GetDatabase.yaml"
+
+requestDeletePartition :: DeletePartition -> TestTree
+requestDeletePartition = req
+    "DeletePartition"
+    "fixture/DeletePartition.yaml"
+
+requestUpdatePartition :: UpdatePartition -> TestTree
+requestUpdatePartition = req
+    "UpdatePartition"
+    "fixture/UpdatePartition.yaml"
+
+requestCreateScript :: CreateScript -> TestTree
+requestCreateScript = req
+    "CreateScript"
+    "fixture/CreateScript.yaml"
+
+requestGetConnections :: GetConnections -> TestTree
+requestGetConnections = req
+    "GetConnections"
+    "fixture/GetConnections.yaml"
+
+requestGetTrigger :: GetTrigger -> TestTree
+requestGetTrigger = req
+    "GetTrigger"
+    "fixture/GetTrigger.yaml"
+
+requestImportCatalogToGlue :: ImportCatalogToGlue -> TestTree
+requestImportCatalogToGlue = req
+    "ImportCatalogToGlue"
+    "fixture/ImportCatalogToGlue.yaml"
+
+requestDeleteClassifier :: DeleteClassifier -> TestTree
+requestDeleteClassifier = req
+    "DeleteClassifier"
+    "fixture/DeleteClassifier.yaml"
+
+requestUpdateClassifier :: UpdateClassifier -> TestTree
+requestUpdateClassifier = req
+    "UpdateClassifier"
+    "fixture/UpdateClassifier.yaml"
+
+requestStartJobRun :: StartJobRun -> TestTree
+requestStartJobRun = req
+    "StartJobRun"
+    "fixture/StartJobRun.yaml"
+
+requestCreatePartition :: CreatePartition -> TestTree
+requestCreatePartition = req
+    "CreatePartition"
+    "fixture/CreatePartition.yaml"
+
+requestStopCrawlerSchedule :: StopCrawlerSchedule -> TestTree
+requestStopCrawlerSchedule = req
+    "StopCrawlerSchedule"
+    "fixture/StopCrawlerSchedule.yaml"
+
+requestCreateDatabase :: CreateDatabase -> TestTree
+requestCreateDatabase = req
+    "CreateDatabase"
+    "fixture/CreateDatabase.yaml"
+
+requestGetTableVersions :: GetTableVersions -> TestTree
+requestGetTableVersions = req
+    "GetTableVersions"
+    "fixture/GetTableVersions.yaml"
+
+requestDeleteTrigger :: DeleteTrigger -> TestTree
+requestDeleteTrigger = req
+    "DeleteTrigger"
+    "fixture/DeleteTrigger.yaml"
+
+requestUpdateTrigger :: UpdateTrigger -> TestTree
+requestUpdateTrigger = req
+    "UpdateTrigger"
+    "fixture/UpdateTrigger.yaml"
+
+-- Responses
+
+responseStartCrawler :: StartCrawlerResponse -> TestTree
+responseStartCrawler = res
+    "StartCrawlerResponse"
+    "fixture/StartCrawlerResponse.proto"
+    glue
+    (Proxy :: Proxy StartCrawler)
+
+responseGetCatalogImportStatus :: GetCatalogImportStatusResponse -> TestTree
+responseGetCatalogImportStatus = res
+    "GetCatalogImportStatusResponse"
+    "fixture/GetCatalogImportStatusResponse.proto"
+    glue
+    (Proxy :: Proxy GetCatalogImportStatus)
+
+responseGetPartition :: GetPartitionResponse -> TestTree
+responseGetPartition = res
+    "GetPartitionResponse"
+    "fixture/GetPartitionResponse.proto"
+    glue
+    (Proxy :: Proxy GetPartition)
+
+responseCreateTrigger :: CreateTriggerResponse -> TestTree
+responseCreateTrigger = res
+    "CreateTriggerResponse"
+    "fixture/CreateTriggerResponse.proto"
+    glue
+    (Proxy :: Proxy CreateTrigger)
+
+responseDeleteTable :: DeleteTableResponse -> TestTree
+responseDeleteTable = res
+    "DeleteTableResponse"
+    "fixture/DeleteTableResponse.proto"
+    glue
+    (Proxy :: Proxy DeleteTable)
+
+responseUpdateTable :: UpdateTableResponse -> TestTree
+responseUpdateTable = res
+    "UpdateTableResponse"
+    "fixture/UpdateTableResponse.proto"
+    glue
+    (Proxy :: Proxy UpdateTable)
+
+responseDeleteConnection :: DeleteConnectionResponse -> TestTree
+responseDeleteConnection = res
+    "DeleteConnectionResponse"
+    "fixture/DeleteConnectionResponse.proto"
+    glue
+    (Proxy :: Proxy DeleteConnection)
+
+responseUpdateConnection :: UpdateConnectionResponse -> TestTree
+responseUpdateConnection = res
+    "UpdateConnectionResponse"
+    "fixture/UpdateConnectionResponse.proto"
+    glue
+    (Proxy :: Proxy UpdateConnection)
+
+responseGetUserDefinedFunctions :: GetUserDefinedFunctionsResponse -> TestTree
+responseGetUserDefinedFunctions = res
+    "GetUserDefinedFunctionsResponse"
+    "fixture/GetUserDefinedFunctionsResponse.proto"
+    glue
+    (Proxy :: Proxy GetUserDefinedFunctions)
+
+responseBatchCreatePartition :: BatchCreatePartitionResponse -> TestTree
+responseBatchCreatePartition = res
+    "BatchCreatePartitionResponse"
+    "fixture/BatchCreatePartitionResponse.proto"
+    glue
+    (Proxy :: Proxy BatchCreatePartition)
+
+responseGetMapping :: GetMappingResponse -> TestTree
+responseGetMapping = res
+    "GetMappingResponse"
+    "fixture/GetMappingResponse.proto"
+    glue
+    (Proxy :: Proxy GetMapping)
+
+responseGetJobs :: GetJobsResponse -> TestTree
+responseGetJobs = res
+    "GetJobsResponse"
+    "fixture/GetJobsResponse.proto"
+    glue
+    (Proxy :: Proxy GetJobs)
+
+responseGetClassifiers :: GetClassifiersResponse -> TestTree
+responseGetClassifiers = res
+    "GetClassifiersResponse"
+    "fixture/GetClassifiersResponse.proto"
+    glue
+    (Proxy :: Proxy GetClassifiers)
+
+responseCreateConnection :: CreateConnectionResponse -> TestTree
+responseCreateConnection = res
+    "CreateConnectionResponse"
+    "fixture/CreateConnectionResponse.proto"
+    glue
+    (Proxy :: Proxy CreateConnection)
+
+responseDeleteDevEndpoint :: DeleteDevEndpointResponse -> TestTree
+responseDeleteDevEndpoint = res
+    "DeleteDevEndpointResponse"
+    "fixture/DeleteDevEndpointResponse.proto"
+    glue
+    (Proxy :: Proxy DeleteDevEndpoint)
+
+responseUpdateDevEndpoint :: UpdateDevEndpointResponse -> TestTree
+responseUpdateDevEndpoint = res
+    "UpdateDevEndpointResponse"
+    "fixture/UpdateDevEndpointResponse.proto"
+    glue
+    (Proxy :: Proxy UpdateDevEndpoint)
+
+responseDeleteCrawler :: DeleteCrawlerResponse -> TestTree
+responseDeleteCrawler = res
+    "DeleteCrawlerResponse"
+    "fixture/DeleteCrawlerResponse.proto"
+    glue
+    (Proxy :: Proxy DeleteCrawler)
+
+responseUpdateCrawler :: UpdateCrawlerResponse -> TestTree
+responseUpdateCrawler = res
+    "UpdateCrawlerResponse"
+    "fixture/UpdateCrawlerResponse.proto"
+    glue
+    (Proxy :: Proxy UpdateCrawler)
+
+responseGetConnection :: GetConnectionResponse -> TestTree
+responseGetConnection = res
+    "GetConnectionResponse"
+    "fixture/GetConnectionResponse.proto"
+    glue
+    (Proxy :: Proxy GetConnection)
+
+responseBatchGetPartition :: BatchGetPartitionResponse -> TestTree
+responseBatchGetPartition = res
+    "BatchGetPartitionResponse"
+    "fixture/BatchGetPartitionResponse.proto"
+    glue
+    (Proxy :: Proxy BatchGetPartition)
+
+responseStopTrigger :: StopTriggerResponse -> TestTree
+responseStopTrigger = res
+    "StopTriggerResponse"
+    "fixture/StopTriggerResponse.proto"
+    glue
+    (Proxy :: Proxy StopTrigger)
+
+responseUpdateCrawlerSchedule :: UpdateCrawlerScheduleResponse -> TestTree
+responseUpdateCrawlerSchedule = res
+    "UpdateCrawlerScheduleResponse"
+    "fixture/UpdateCrawlerScheduleResponse.proto"
+    glue
+    (Proxy :: Proxy UpdateCrawlerSchedule)
+
+responseDeleteUserDefinedFunction :: DeleteUserDefinedFunctionResponse -> TestTree
+responseDeleteUserDefinedFunction = res
+    "DeleteUserDefinedFunctionResponse"
+    "fixture/DeleteUserDefinedFunctionResponse.proto"
+    glue
+    (Proxy :: Proxy DeleteUserDefinedFunction)
+
+responseUpdateUserDefinedFunction :: UpdateUserDefinedFunctionResponse -> TestTree
+responseUpdateUserDefinedFunction = res
+    "UpdateUserDefinedFunctionResponse"
+    "fixture/UpdateUserDefinedFunctionResponse.proto"
+    glue
+    (Proxy :: Proxy UpdateUserDefinedFunction)
+
+responseBatchDeleteTable :: BatchDeleteTableResponse -> TestTree
+responseBatchDeleteTable = res
+    "BatchDeleteTableResponse"
+    "fixture/BatchDeleteTableResponse.proto"
+    glue
+    (Proxy :: Proxy BatchDeleteTable)
+
+responseGetTables :: GetTablesResponse -> TestTree
+responseGetTables = res
+    "GetTablesResponse"
+    "fixture/GetTablesResponse.proto"
+    glue
+    (Proxy :: Proxy GetTables)
+
+responseCreateClassifier :: CreateClassifierResponse -> TestTree
+responseCreateClassifier = res
+    "CreateClassifierResponse"
+    "fixture/CreateClassifierResponse.proto"
+    glue
+    (Proxy :: Proxy CreateClassifier)
+
+responseBatchDeleteConnection :: BatchDeleteConnectionResponse -> TestTree
+responseBatchDeleteConnection = res
+    "BatchDeleteConnectionResponse"
+    "fixture/BatchDeleteConnectionResponse.proto"
+    glue
+    (Proxy :: Proxy BatchDeleteConnection)
+
+responseCreateJob :: CreateJobResponse -> TestTree
+responseCreateJob = res
+    "CreateJobResponse"
+    "fixture/CreateJobResponse.proto"
+    glue
+    (Proxy :: Proxy CreateJob)
+
+responseGetJobRuns :: GetJobRunsResponse -> TestTree
+responseGetJobRuns = res
+    "GetJobRunsResponse"
+    "fixture/GetJobRunsResponse.proto"
+    glue
+    (Proxy :: Proxy GetJobRuns)
+
+responseCreateUserDefinedFunction :: CreateUserDefinedFunctionResponse -> TestTree
+responseCreateUserDefinedFunction = res
+    "CreateUserDefinedFunctionResponse"
+    "fixture/CreateUserDefinedFunctionResponse.proto"
+    glue
+    (Proxy :: Proxy CreateUserDefinedFunction)
+
+responseResetJobBookmark :: ResetJobBookmarkResponse -> TestTree
+responseResetJobBookmark = res
+    "ResetJobBookmarkResponse"
+    "fixture/ResetJobBookmarkResponse.proto"
+    glue
+    (Proxy :: Proxy ResetJobBookmark)
+
+responseDeleteJob :: DeleteJobResponse -> TestTree
+responseDeleteJob = res
+    "DeleteJobResponse"
+    "fixture/DeleteJobResponse.proto"
+    glue
+    (Proxy :: Proxy DeleteJob)
+
+responseUpdateJob :: UpdateJobResponse -> TestTree
+responseUpdateJob = res
+    "UpdateJobResponse"
+    "fixture/UpdateJobResponse.proto"
+    glue
+    (Proxy :: Proxy UpdateJob)
+
+responseGetCrawlers :: GetCrawlersResponse -> TestTree
+responseGetCrawlers = res
+    "GetCrawlersResponse"
+    "fixture/GetCrawlersResponse.proto"
+    glue
+    (Proxy :: Proxy GetCrawlers)
+
+responseGetClassifier :: GetClassifierResponse -> TestTree
+responseGetClassifier = res
+    "GetClassifierResponse"
+    "fixture/GetClassifierResponse.proto"
+    glue
+    (Proxy :: Proxy GetClassifier)
+
+responseGetJob :: GetJobResponse -> TestTree
+responseGetJob = res
+    "GetJobResponse"
+    "fixture/GetJobResponse.proto"
+    glue
+    (Proxy :: Proxy GetJob)
+
+responseGetDevEndpoints :: GetDevEndpointsResponse -> TestTree
+responseGetDevEndpoints = res
+    "GetDevEndpointsResponse"
+    "fixture/GetDevEndpointsResponse.proto"
+    glue
+    (Proxy :: Proxy GetDevEndpoints)
+
+responseStartCrawlerSchedule :: StartCrawlerScheduleResponse -> TestTree
+responseStartCrawlerSchedule = res
+    "StartCrawlerScheduleResponse"
+    "fixture/StartCrawlerScheduleResponse.proto"
+    glue
+    (Proxy :: Proxy StartCrawlerSchedule)
+
+responseGetUserDefinedFunction :: GetUserDefinedFunctionResponse -> TestTree
+responseGetUserDefinedFunction = res
+    "GetUserDefinedFunctionResponse"
+    "fixture/GetUserDefinedFunctionResponse.proto"
+    glue
+    (Proxy :: Proxy GetUserDefinedFunction)
+
+responseDeleteDatabase :: DeleteDatabaseResponse -> TestTree
+responseDeleteDatabase = res
+    "DeleteDatabaseResponse"
+    "fixture/DeleteDatabaseResponse.proto"
+    glue
+    (Proxy :: Proxy DeleteDatabase)
+
+responseUpdateDatabase :: UpdateDatabaseResponse -> TestTree
+responseUpdateDatabase = res
+    "UpdateDatabaseResponse"
+    "fixture/UpdateDatabaseResponse.proto"
+    glue
+    (Proxy :: Proxy UpdateDatabase)
+
+responseStopCrawler :: StopCrawlerResponse -> TestTree
+responseStopCrawler = res
+    "StopCrawlerResponse"
+    "fixture/StopCrawlerResponse.proto"
+    glue
+    (Proxy :: Proxy StopCrawler)
+
+responseGetPartitions :: GetPartitionsResponse -> TestTree
+responseGetPartitions = res
+    "GetPartitionsResponse"
+    "fixture/GetPartitionsResponse.proto"
+    glue
+    (Proxy :: Proxy GetPartitions)
+
+responseBatchDeletePartition :: BatchDeletePartitionResponse -> TestTree
+responseBatchDeletePartition = res
+    "BatchDeletePartitionResponse"
+    "fixture/BatchDeletePartitionResponse.proto"
+    glue
+    (Proxy :: Proxy BatchDeletePartition)
+
+responseGetCrawler :: GetCrawlerResponse -> TestTree
+responseGetCrawler = res
+    "GetCrawlerResponse"
+    "fixture/GetCrawlerResponse.proto"
+    glue
+    (Proxy :: Proxy GetCrawler)
+
+responseBatchStopJobRun :: BatchStopJobRunResponse -> TestTree
+responseBatchStopJobRun = res
+    "BatchStopJobRunResponse"
+    "fixture/BatchStopJobRunResponse.proto"
+    glue
+    (Proxy :: Proxy BatchStopJobRun)
+
+responseGetDevEndpoint :: GetDevEndpointResponse -> TestTree
+responseGetDevEndpoint = res
+    "GetDevEndpointResponse"
+    "fixture/GetDevEndpointResponse.proto"
+    glue
+    (Proxy :: Proxy GetDevEndpoint)
+
+responseCreateTable :: CreateTableResponse -> TestTree
+responseCreateTable = res
+    "CreateTableResponse"
+    "fixture/CreateTableResponse.proto"
+    glue
+    (Proxy :: Proxy CreateTable)
+
+responseGetCrawlerMetrics :: GetCrawlerMetricsResponse -> TestTree
+responseGetCrawlerMetrics = res
+    "GetCrawlerMetricsResponse"
+    "fixture/GetCrawlerMetricsResponse.proto"
+    glue
+    (Proxy :: Proxy GetCrawlerMetrics)
+
+responseGetPlan :: GetPlanResponse -> TestTree
+responseGetPlan = res
+    "GetPlanResponse"
+    "fixture/GetPlanResponse.proto"
+    glue
+    (Proxy :: Proxy GetPlan)
+
+responseGetTriggers :: GetTriggersResponse -> TestTree
+responseGetTriggers = res
+    "GetTriggersResponse"
+    "fixture/GetTriggersResponse.proto"
+    glue
+    (Proxy :: Proxy GetTriggers)
+
+responseStartTrigger :: StartTriggerResponse -> TestTree
+responseStartTrigger = res
+    "StartTriggerResponse"
+    "fixture/StartTriggerResponse.proto"
+    glue
+    (Proxy :: Proxy StartTrigger)
+
+responseGetDataflowGraph :: GetDataflowGraphResponse -> TestTree
+responseGetDataflowGraph = res
+    "GetDataflowGraphResponse"
+    "fixture/GetDataflowGraphResponse.proto"
+    glue
+    (Proxy :: Proxy GetDataflowGraph)
+
+responseGetDatabases :: GetDatabasesResponse -> TestTree
+responseGetDatabases = res
+    "GetDatabasesResponse"
+    "fixture/GetDatabasesResponse.proto"
+    glue
+    (Proxy :: Proxy GetDatabases)
+
+responseGetTable :: GetTableResponse -> TestTree
+responseGetTable = res
+    "GetTableResponse"
+    "fixture/GetTableResponse.proto"
+    glue
+    (Proxy :: Proxy GetTable)
+
+responseCreateCrawler :: CreateCrawlerResponse -> TestTree
+responseCreateCrawler = res
+    "CreateCrawlerResponse"
+    "fixture/CreateCrawlerResponse.proto"
+    glue
+    (Proxy :: Proxy CreateCrawler)
+
+responseGetJobRun :: GetJobRunResponse -> TestTree
+responseGetJobRun = res
+    "GetJobRunResponse"
+    "fixture/GetJobRunResponse.proto"
+    glue
+    (Proxy :: Proxy GetJobRun)
+
+responseCreateDevEndpoint :: CreateDevEndpointResponse -> TestTree
+responseCreateDevEndpoint = res
+    "CreateDevEndpointResponse"
+    "fixture/CreateDevEndpointResponse.proto"
+    glue
+    (Proxy :: Proxy CreateDevEndpoint)
+
+responseGetDatabase :: GetDatabaseResponse -> TestTree
+responseGetDatabase = res
+    "GetDatabaseResponse"
+    "fixture/GetDatabaseResponse.proto"
+    glue
+    (Proxy :: Proxy GetDatabase)
+
+responseDeletePartition :: DeletePartitionResponse -> TestTree
+responseDeletePartition = res
+    "DeletePartitionResponse"
+    "fixture/DeletePartitionResponse.proto"
+    glue
+    (Proxy :: Proxy DeletePartition)
+
+responseUpdatePartition :: UpdatePartitionResponse -> TestTree
+responseUpdatePartition = res
+    "UpdatePartitionResponse"
+    "fixture/UpdatePartitionResponse.proto"
+    glue
+    (Proxy :: Proxy UpdatePartition)
+
+responseCreateScript :: CreateScriptResponse -> TestTree
+responseCreateScript = res
+    "CreateScriptResponse"
+    "fixture/CreateScriptResponse.proto"
+    glue
+    (Proxy :: Proxy CreateScript)
+
+responseGetConnections :: GetConnectionsResponse -> TestTree
+responseGetConnections = res
+    "GetConnectionsResponse"
+    "fixture/GetConnectionsResponse.proto"
+    glue
+    (Proxy :: Proxy GetConnections)
+
+responseGetTrigger :: GetTriggerResponse -> TestTree
+responseGetTrigger = res
+    "GetTriggerResponse"
+    "fixture/GetTriggerResponse.proto"
+    glue
+    (Proxy :: Proxy GetTrigger)
+
+responseImportCatalogToGlue :: ImportCatalogToGlueResponse -> TestTree
+responseImportCatalogToGlue = res
+    "ImportCatalogToGlueResponse"
+    "fixture/ImportCatalogToGlueResponse.proto"
+    glue
+    (Proxy :: Proxy ImportCatalogToGlue)
+
+responseDeleteClassifier :: DeleteClassifierResponse -> TestTree
+responseDeleteClassifier = res
+    "DeleteClassifierResponse"
+    "fixture/DeleteClassifierResponse.proto"
+    glue
+    (Proxy :: Proxy DeleteClassifier)
+
+responseUpdateClassifier :: UpdateClassifierResponse -> TestTree
+responseUpdateClassifier = res
+    "UpdateClassifierResponse"
+    "fixture/UpdateClassifierResponse.proto"
+    glue
+    (Proxy :: Proxy UpdateClassifier)
+
+responseStartJobRun :: StartJobRunResponse -> TestTree
+responseStartJobRun = res
+    "StartJobRunResponse"
+    "fixture/StartJobRunResponse.proto"
+    glue
+    (Proxy :: Proxy StartJobRun)
+
+responseCreatePartition :: CreatePartitionResponse -> TestTree
+responseCreatePartition = res
+    "CreatePartitionResponse"
+    "fixture/CreatePartitionResponse.proto"
+    glue
+    (Proxy :: Proxy CreatePartition)
+
+responseStopCrawlerSchedule :: StopCrawlerScheduleResponse -> TestTree
+responseStopCrawlerSchedule = res
+    "StopCrawlerScheduleResponse"
+    "fixture/StopCrawlerScheduleResponse.proto"
+    glue
+    (Proxy :: Proxy StopCrawlerSchedule)
+
+responseCreateDatabase :: CreateDatabaseResponse -> TestTree
+responseCreateDatabase = res
+    "CreateDatabaseResponse"
+    "fixture/CreateDatabaseResponse.proto"
+    glue
+    (Proxy :: Proxy CreateDatabase)
+
+responseGetTableVersions :: GetTableVersionsResponse -> TestTree
+responseGetTableVersions = res
+    "GetTableVersionsResponse"
+    "fixture/GetTableVersionsResponse.proto"
+    glue
+    (Proxy :: Proxy GetTableVersions)
+
+responseDeleteTrigger :: DeleteTriggerResponse -> TestTree
+responseDeleteTrigger = res
+    "DeleteTriggerResponse"
+    "fixture/DeleteTriggerResponse.proto"
+    glue
+    (Proxy :: Proxy DeleteTrigger)
+
+responseUpdateTrigger :: UpdateTriggerResponse -> TestTree
+responseUpdateTrigger = res
+    "UpdateTriggerResponse"
+    "fixture/UpdateTriggerResponse.proto"
+    glue
+    (Proxy :: Proxy UpdateTrigger)
diff --git a/test/Test/AWS/Glue.hs b/test/Test/AWS/Glue.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Glue.hs
@@ -0,0 +1,20 @@
+-- |
+-- Module      : Test.AWS.Glue
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Glue
+    ( tests
+    , fixtures
+    ) where
+
+import Test.Tasty (TestTree)
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/Glue/Internal.hs b/test/Test/AWS/Glue/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Glue/Internal.hs
@@ -0,0 +1,9 @@
+-- |
+-- Module      : Test.AWS.Glue.Internal
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Glue.Internal where
