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,118 @@
+# Amazon GameLift SDK
+
+* [Version](#version)
+* [Description](#description)
+* [Contribute](#contribute)
+* [Licence](#licence)
+
+
+## Version
+
+`1.4.0`
+
+
+## Description
+
+Amazon GameLift Service
+
+Welcome to the /Amazon GameLift API Reference/. Amazon GameLift is a
+managed Amazon Web Services (AWS) service for developers who need a
+scalable, server-based solution for multiplayer games. Amazon GameLift
+provides setup and deployment of game servers, and handles
+infrastructure scaling and session management. For more information
+about the GameLift service, including a feature overview, getting
+started guide, and tutorial, see the accompanying
+<http://docs.aws.amazon.com/gamelift/latest/developerguide/ Amazon GameLift Developer Guide>.
+
+This reference describes the low-level service API for GameLift. You can
+call this API directly or use the
+<https://aws.amazon.com/tools/ AWS SDK> for your preferred language. The
+AWS SDK includes a set of high-level GameLift actions multiplayer game
+sessions. Alternatively, you can use the
+<https://aws.amazon.com/cli/ AWS command-line interface> (CLI) tool,
+which includes commands for GameLift. For administrative actions, you
+can use the Amazon GameLift console.
+
+__Managing Game and Player Sessions Through GameLift__
+
+Call these actions from your game clients and\/or services to create and
+manage multiplayer game sessions.
+
+-   __Game sessions__
+    -   < CreateGameSession>
+    -   < DescribeGameSessions>
+    -   < DescribeGameSessionDetails>
+    -   < UpdateGameSession>
+-   __Player sessions__
+    -   < CreatePlayerSession>
+    -   < CreatePlayerSessions>
+    -   < DescribePlayerSessions>
+-   __Other actions:__
+    -   < GetGameSessionLogUrl>
+
+__Setting Up Game Servers__
+
+Use these administrative actions to configure GameLift to host your game
+servers. When configuring GameLift, you\'ll need to (1) configure a
+build for your game and provide build files, and (2) set up one or more
+fleets to host game sessions.
+
+-   __Build actions:__
+    -   < ListBuilds>
+    -   < CreateBuild>
+    -   < DescribeBuild>
+    -   < UpdateBuild>
+    -   < DeleteBuild>
+    -   < RequestUploadCredentials>
+-   __Fleet actions:__
+    -   < ListFleets>
+    -   < CreateFleet>
+    -   Describe fleet actions:
+        -   < DescribeFleetAttributes>
+        -   < DescribeFleetCapacity>
+        -   < DescribeFleetPortSettings>
+        -   < DescribeFleetUtilization>
+        -   < DescribeEC2InstanceLimits>
+        -   < DescribeFleetEvents>
+    -   Update fleet actions:
+        -   < UpdateFleetAttributes>
+        -   < UpdateFleetCapacity>
+        -   < UpdateFleetPortSettings>
+    -   < DeleteFleet>
+-   __Alias actions:__
+    -   < ListAliases>
+    -   < CreateAlias>
+    -   < DescribeAlias>
+    -   < UpdateAlias>
+    -   < DeleteAlias>
+    -   < ResolveAlias>
+-   __Scaling policy actions:__
+    -   < PutScalingPolicy>
+    -   < DescribeScalingPolicies>
+    -   < DeleteScalingPolicy>
+
+Documentation is available via [Hackage](http://hackage.haskell.org/package/amazonka-gamelift)
+and the [AWS API Reference](https://aws.amazon.com/documentation/).
+
+The types from this library are intended to be used with [amazonka](http://hackage.haskell.org/package/amazonka),
+which provides mechanisms for specifying AuthN/AuthZ information and sending requests.
+
+Use of lenses is required for constructing and manipulating types.
+This is due to the amount of nesting of AWS types and transparency regarding
+de/serialisation into more palatable Haskell values.
+The provided lenses should be compatible with any of the major lens libraries
+[lens](http://hackage.haskell.org/package/lens) or [lens-family-core](http://hackage.haskell.org/package/lens-family-core).
+
+## Contribute
+
+For any problems, comments, or feedback please create an issue [here on GitHub](https://github.com/brendanhay/amazonka/issues).
+
+> _Note:_ this library is an auto-generated Haskell package. Please see `amazonka-gen` for more information.
+
+
+## Licence
+
+`amazonka-gamelift` 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-gamelift.cabal b/amazonka-gamelift.cabal
new file mode 100644
--- /dev/null
+++ b/amazonka-gamelift.cabal
@@ -0,0 +1,192 @@
+name:                  amazonka-gamelift
+version:               1.4.0
+synopsis:              Amazon GameLift SDK.
+homepage:              https://github.com/brendanhay/amazonka
+bug-reports:           https://github.com/brendanhay/amazonka/issues
+license:               OtherLicense
+license-file:          LICENSE
+author:                Brendan Hay
+maintainer:            Brendan Hay <brendan.g.hay@gmail.com>
+copyright:             Copyright (c) 2013-2016 Brendan Hay
+category:              Network, AWS, Cloud, Distributed Computing
+build-type:            Simple
+cabal-version:         >= 1.10
+extra-source-files:    README.md fixture/*.yaml fixture/*.proto
+description:
+    Amazon GameLift Service
+
+    Welcome to the /Amazon GameLift API Reference/. Amazon GameLift is a
+    managed Amazon Web Services (AWS) service for developers who need a
+    scalable, server-based solution for multiplayer games. Amazon GameLift
+    provides setup and deployment of game servers, and handles
+    infrastructure scaling and session management. For more information
+    about the GameLift service, including a feature overview, getting
+    started guide, and tutorial, see the accompanying
+    <http://docs.aws.amazon.com/gamelift/latest/developerguide/ Amazon GameLift Developer Guide>.
+
+    This reference describes the low-level service API for GameLift. You can
+    call this API directly or use the
+    <https://aws.amazon.com/tools/ AWS SDK> for your preferred language. The
+    AWS SDK includes a set of high-level GameLift actions multiplayer game
+    sessions. Alternatively, you can use the
+    <https://aws.amazon.com/cli/ AWS command-line interface> (CLI) tool,
+    which includes commands for GameLift. For administrative actions, you
+    can use the Amazon GameLift console.
+
+    __Managing Game and Player Sessions Through GameLift__
+
+    Call these actions from your game clients and\/or services to create and
+    manage multiplayer game sessions.
+
+    -   __Game sessions__
+        -   < CreateGameSession>
+        -   < DescribeGameSessions>
+        -   < DescribeGameSessionDetails>
+        -   < UpdateGameSession>
+    -   __Player sessions__
+        -   < CreatePlayerSession>
+        -   < CreatePlayerSessions>
+        -   < DescribePlayerSessions>
+    -   __Other actions:__
+        -   < GetGameSessionLogUrl>
+
+    __Setting Up Game Servers__
+
+    Use these administrative actions to configure GameLift to host your game
+    servers. When configuring GameLift, you\'ll need to (1) configure a
+    build for your game and provide build files, and (2) set up one or more
+    fleets to host game sessions.
+
+    -   __Build actions:__
+        -   < ListBuilds>
+        -   < CreateBuild>
+        -   < DescribeBuild>
+        -   < UpdateBuild>
+        -   < DeleteBuild>
+        -   < RequestUploadCredentials>
+    -   __Fleet actions:__
+        -   < ListFleets>
+        -   < CreateFleet>
+        -   Describe fleet actions:
+            -   < DescribeFleetAttributes>
+            -   < DescribeFleetCapacity>
+            -   < DescribeFleetPortSettings>
+            -   < DescribeFleetUtilization>
+            -   < DescribeEC2InstanceLimits>
+            -   < DescribeFleetEvents>
+        -   Update fleet actions:
+            -   < UpdateFleetAttributes>
+            -   < UpdateFleetCapacity>
+            -   < UpdateFleetPortSettings>
+        -   < DeleteFleet>
+    -   __Alias actions:__
+        -   < ListAliases>
+        -   < CreateAlias>
+        -   < DescribeAlias>
+        -   < UpdateAlias>
+        -   < DeleteAlias>
+        -   < ResolveAlias>
+    -   __Scaling policy actions:__
+        -   < PutScalingPolicy>
+        -   < DescribeScalingPolicies>
+        -   < DeleteScalingPolicy>
+    .
+    The types from this library are intended to be used with
+    <http://hackage.haskell.org/package/amazonka amazonka>, which provides
+    mechanisms for specifying AuthN/AuthZ information and sending requests.
+    .
+    Use of lenses is required for constructing and manipulating types.
+    This is due to the amount of nesting of AWS types and transparency regarding
+    de/serialisation into more palatable Haskell values.
+    The provided lenses should be compatible with any of the major lens libraries
+    such as <http://hackage.haskell.org/package/lens lens> or
+    <http://hackage.haskell.org/package/lens-family-core lens-family-core>.
+    .
+    See "Network.AWS.GameLift" or <https://aws.amazon.com/documentation/ the AWS Documentation>
+    to get started.
+
+source-repository head
+    type:     git
+    location: git://github.com/brendanhay/amazonka.git
+
+library
+    default-language:  Haskell2010
+    hs-source-dirs:    src gen
+
+    ghc-options:       -Wall
+
+    exposed-modules:
+          Network.AWS.GameLift
+        , Network.AWS.GameLift.CreateAlias
+        , Network.AWS.GameLift.CreateBuild
+        , Network.AWS.GameLift.CreateFleet
+        , Network.AWS.GameLift.CreateGameSession
+        , Network.AWS.GameLift.CreatePlayerSession
+        , Network.AWS.GameLift.CreatePlayerSessions
+        , Network.AWS.GameLift.DeleteAlias
+        , Network.AWS.GameLift.DeleteBuild
+        , Network.AWS.GameLift.DeleteFleet
+        , Network.AWS.GameLift.DeleteScalingPolicy
+        , Network.AWS.GameLift.DescribeAlias
+        , Network.AWS.GameLift.DescribeBuild
+        , Network.AWS.GameLift.DescribeEC2InstanceLimits
+        , Network.AWS.GameLift.DescribeFleetAttributes
+        , Network.AWS.GameLift.DescribeFleetCapacity
+        , Network.AWS.GameLift.DescribeFleetEvents
+        , Network.AWS.GameLift.DescribeFleetPortSettings
+        , Network.AWS.GameLift.DescribeFleetUtilization
+        , Network.AWS.GameLift.DescribeGameSessionDetails
+        , Network.AWS.GameLift.DescribeGameSessions
+        , Network.AWS.GameLift.DescribePlayerSessions
+        , Network.AWS.GameLift.DescribeScalingPolicies
+        , Network.AWS.GameLift.GetGameSessionLogURL
+        , Network.AWS.GameLift.ListAliases
+        , Network.AWS.GameLift.ListBuilds
+        , Network.AWS.GameLift.ListFleets
+        , Network.AWS.GameLift.PutScalingPolicy
+        , Network.AWS.GameLift.RequestUploadCredentials
+        , Network.AWS.GameLift.ResolveAlias
+        , Network.AWS.GameLift.Types
+        , Network.AWS.GameLift.UpdateAlias
+        , Network.AWS.GameLift.UpdateBuild
+        , Network.AWS.GameLift.UpdateFleetAttributes
+        , Network.AWS.GameLift.UpdateFleetCapacity
+        , Network.AWS.GameLift.UpdateFleetPortSettings
+        , Network.AWS.GameLift.UpdateGameSession
+        , Network.AWS.GameLift.Waiters
+
+    other-modules:
+          Network.AWS.GameLift.Types.Product
+        , Network.AWS.GameLift.Types.Sum
+
+    build-depends:
+          amazonka-core == 1.4.0.*
+        , base          >= 4.7     && < 5
+
+test-suite amazonka-gamelift-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.GameLift
+        , Test.AWS.Gen.GameLift
+        , Test.AWS.GameLift.Internal
+
+    build-depends:
+          amazonka-core == 1.4.0.*
+        , amazonka-test == 1.4.0.*
+        , amazonka-gamelift == 1.4.0.*
+        , base
+        , bytestring
+        , tasty
+        , tasty-hunit
+        , text
+        , time
+        , unordered-containers
diff --git a/fixture/CreateAlias.yaml b/fixture/CreateAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAlias.yaml
diff --git a/fixture/CreateAliasResponse.proto b/fixture/CreateAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateAliasResponse.proto
diff --git a/fixture/CreateBuild.yaml b/fixture/CreateBuild.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBuild.yaml
diff --git a/fixture/CreateBuildResponse.proto b/fixture/CreateBuildResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateBuildResponse.proto
diff --git a/fixture/CreateFleet.yaml b/fixture/CreateFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFleet.yaml
diff --git a/fixture/CreateFleetResponse.proto b/fixture/CreateFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateFleetResponse.proto
diff --git a/fixture/CreateGameSession.yaml b/fixture/CreateGameSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreateGameSession.yaml
diff --git a/fixture/CreateGameSessionResponse.proto b/fixture/CreateGameSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreateGameSessionResponse.proto
diff --git a/fixture/CreatePlayerSession.yaml b/fixture/CreatePlayerSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePlayerSession.yaml
diff --git a/fixture/CreatePlayerSessionResponse.proto b/fixture/CreatePlayerSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePlayerSessionResponse.proto
diff --git a/fixture/CreatePlayerSessions.yaml b/fixture/CreatePlayerSessions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePlayerSessions.yaml
diff --git a/fixture/CreatePlayerSessionsResponse.proto b/fixture/CreatePlayerSessionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/CreatePlayerSessionsResponse.proto
diff --git a/fixture/DeleteAlias.yaml b/fixture/DeleteAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAlias.yaml
diff --git a/fixture/DeleteAliasResponse.proto b/fixture/DeleteAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteAliasResponse.proto
diff --git a/fixture/DeleteBuild.yaml b/fixture/DeleteBuild.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBuild.yaml
diff --git a/fixture/DeleteBuildResponse.proto b/fixture/DeleteBuildResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteBuildResponse.proto
diff --git a/fixture/DeleteFleet.yaml b/fixture/DeleteFleet.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFleet.yaml
diff --git a/fixture/DeleteFleetResponse.proto b/fixture/DeleteFleetResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteFleetResponse.proto
diff --git a/fixture/DeleteScalingPolicy.yaml b/fixture/DeleteScalingPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteScalingPolicy.yaml
diff --git a/fixture/DeleteScalingPolicyResponse.proto b/fixture/DeleteScalingPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DeleteScalingPolicyResponse.proto
diff --git a/fixture/DescribeAlias.yaml b/fixture/DescribeAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAlias.yaml
diff --git a/fixture/DescribeAliasResponse.proto b/fixture/DescribeAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeAliasResponse.proto
diff --git a/fixture/DescribeBuild.yaml b/fixture/DescribeBuild.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBuild.yaml
diff --git a/fixture/DescribeBuildResponse.proto b/fixture/DescribeBuildResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeBuildResponse.proto
diff --git a/fixture/DescribeEC2InstanceLimits.yaml b/fixture/DescribeEC2InstanceLimits.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEC2InstanceLimits.yaml
diff --git a/fixture/DescribeEC2InstanceLimitsResponse.proto b/fixture/DescribeEC2InstanceLimitsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeEC2InstanceLimitsResponse.proto
diff --git a/fixture/DescribeFleetAttributes.yaml b/fixture/DescribeFleetAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetAttributes.yaml
diff --git a/fixture/DescribeFleetAttributesResponse.proto b/fixture/DescribeFleetAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetAttributesResponse.proto
diff --git a/fixture/DescribeFleetCapacity.yaml b/fixture/DescribeFleetCapacity.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetCapacity.yaml
diff --git a/fixture/DescribeFleetCapacityResponse.proto b/fixture/DescribeFleetCapacityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetCapacityResponse.proto
diff --git a/fixture/DescribeFleetEvents.yaml b/fixture/DescribeFleetEvents.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetEvents.yaml
diff --git a/fixture/DescribeFleetEventsResponse.proto b/fixture/DescribeFleetEventsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetEventsResponse.proto
diff --git a/fixture/DescribeFleetPortSettings.yaml b/fixture/DescribeFleetPortSettings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetPortSettings.yaml
diff --git a/fixture/DescribeFleetPortSettingsResponse.proto b/fixture/DescribeFleetPortSettingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetPortSettingsResponse.proto
diff --git a/fixture/DescribeFleetUtilization.yaml b/fixture/DescribeFleetUtilization.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetUtilization.yaml
diff --git a/fixture/DescribeFleetUtilizationResponse.proto b/fixture/DescribeFleetUtilizationResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeFleetUtilizationResponse.proto
diff --git a/fixture/DescribeGameSessionDetails.yaml b/fixture/DescribeGameSessionDetails.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeGameSessionDetails.yaml
diff --git a/fixture/DescribeGameSessionDetailsResponse.proto b/fixture/DescribeGameSessionDetailsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeGameSessionDetailsResponse.proto
diff --git a/fixture/DescribeGameSessions.yaml b/fixture/DescribeGameSessions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeGameSessions.yaml
diff --git a/fixture/DescribeGameSessionsResponse.proto b/fixture/DescribeGameSessionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeGameSessionsResponse.proto
diff --git a/fixture/DescribePlayerSessions.yaml b/fixture/DescribePlayerSessions.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePlayerSessions.yaml
diff --git a/fixture/DescribePlayerSessionsResponse.proto b/fixture/DescribePlayerSessionsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribePlayerSessionsResponse.proto
diff --git a/fixture/DescribeScalingPolicies.yaml b/fixture/DescribeScalingPolicies.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeScalingPolicies.yaml
diff --git a/fixture/DescribeScalingPoliciesResponse.proto b/fixture/DescribeScalingPoliciesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/DescribeScalingPoliciesResponse.proto
diff --git a/fixture/GetGameSessionLogURL.yaml b/fixture/GetGameSessionLogURL.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/GetGameSessionLogURL.yaml
diff --git a/fixture/GetGameSessionLogURLResponse.proto b/fixture/GetGameSessionLogURLResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/GetGameSessionLogURLResponse.proto
diff --git a/fixture/ListAliases.yaml b/fixture/ListAliases.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListAliases.yaml
diff --git a/fixture/ListAliasesResponse.proto b/fixture/ListAliasesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListAliasesResponse.proto
diff --git a/fixture/ListBuilds.yaml b/fixture/ListBuilds.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListBuilds.yaml
diff --git a/fixture/ListBuildsResponse.proto b/fixture/ListBuildsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListBuildsResponse.proto
diff --git a/fixture/ListFleets.yaml b/fixture/ListFleets.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ListFleets.yaml
diff --git a/fixture/ListFleetsResponse.proto b/fixture/ListFleetsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ListFleetsResponse.proto
diff --git a/fixture/PutScalingPolicy.yaml b/fixture/PutScalingPolicy.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/PutScalingPolicy.yaml
diff --git a/fixture/PutScalingPolicyResponse.proto b/fixture/PutScalingPolicyResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/PutScalingPolicyResponse.proto
diff --git a/fixture/RequestUploadCredentials.yaml b/fixture/RequestUploadCredentials.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/RequestUploadCredentials.yaml
diff --git a/fixture/RequestUploadCredentialsResponse.proto b/fixture/RequestUploadCredentialsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/RequestUploadCredentialsResponse.proto
diff --git a/fixture/ResolveAlias.yaml b/fixture/ResolveAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/ResolveAlias.yaml
diff --git a/fixture/ResolveAliasResponse.proto b/fixture/ResolveAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/ResolveAliasResponse.proto
diff --git a/fixture/UpdateAlias.yaml b/fixture/UpdateAlias.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAlias.yaml
diff --git a/fixture/UpdateAliasResponse.proto b/fixture/UpdateAliasResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateAliasResponse.proto
diff --git a/fixture/UpdateBuild.yaml b/fixture/UpdateBuild.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBuild.yaml
diff --git a/fixture/UpdateBuildResponse.proto b/fixture/UpdateBuildResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateBuildResponse.proto
diff --git a/fixture/UpdateFleetAttributes.yaml b/fixture/UpdateFleetAttributes.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFleetAttributes.yaml
diff --git a/fixture/UpdateFleetAttributesResponse.proto b/fixture/UpdateFleetAttributesResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFleetAttributesResponse.proto
diff --git a/fixture/UpdateFleetCapacity.yaml b/fixture/UpdateFleetCapacity.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFleetCapacity.yaml
diff --git a/fixture/UpdateFleetCapacityResponse.proto b/fixture/UpdateFleetCapacityResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFleetCapacityResponse.proto
diff --git a/fixture/UpdateFleetPortSettings.yaml b/fixture/UpdateFleetPortSettings.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFleetPortSettings.yaml
diff --git a/fixture/UpdateFleetPortSettingsResponse.proto b/fixture/UpdateFleetPortSettingsResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateFleetPortSettingsResponse.proto
diff --git a/fixture/UpdateGameSession.yaml b/fixture/UpdateGameSession.yaml
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGameSession.yaml
diff --git a/fixture/UpdateGameSessionResponse.proto b/fixture/UpdateGameSessionResponse.proto
new file mode 100644
--- /dev/null
+++ b/fixture/UpdateGameSessionResponse.proto
diff --git a/gen/Network/AWS/GameLift.hs b/gen/Network/AWS/GameLift.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift.hs
@@ -0,0 +1,512 @@
+{-# 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.GameLift
+-- 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)
+--
+-- Amazon GameLift Service
+--
+-- Welcome to the /Amazon GameLift API Reference/. Amazon GameLift is a
+-- managed Amazon Web Services (AWS) service for developers who need a
+-- scalable, server-based solution for multiplayer games. Amazon GameLift
+-- provides setup and deployment of game servers, and handles
+-- infrastructure scaling and session management. For more information
+-- about the GameLift service, including a feature overview, getting
+-- started guide, and tutorial, see the accompanying
+-- <http://docs.aws.amazon.com/gamelift/latest/developerguide/ Amazon GameLift Developer Guide>.
+--
+-- This reference describes the low-level service API for GameLift. You can
+-- call this API directly or use the
+-- <https://aws.amazon.com/tools/ AWS SDK> for your preferred language. The
+-- AWS SDK includes a set of high-level GameLift actions multiplayer game
+-- sessions. Alternatively, you can use the
+-- <https://aws.amazon.com/cli/ AWS command-line interface> (CLI) tool,
+-- which includes commands for GameLift. For administrative actions, you
+-- can use the Amazon GameLift console.
+--
+-- __Managing Game and Player Sessions Through GameLift__
+--
+-- Call these actions from your game clients and\/or services to create and
+-- manage multiplayer game sessions.
+--
+-- -   __Game sessions__
+--     -   < CreateGameSession>
+--     -   < DescribeGameSessions>
+--     -   < DescribeGameSessionDetails>
+--     -   < UpdateGameSession>
+-- -   __Player sessions__
+--     -   < CreatePlayerSession>
+--     -   < CreatePlayerSessions>
+--     -   < DescribePlayerSessions>
+-- -   __Other actions:__
+--     -   < GetGameSessionLogUrl>
+--
+-- __Setting Up Game Servers__
+--
+-- Use these administrative actions to configure GameLift to host your game
+-- servers. When configuring GameLift, you\'ll need to (1) configure a
+-- build for your game and provide build files, and (2) set up one or more
+-- fleets to host game sessions.
+--
+-- -   __Build actions:__
+--     -   < ListBuilds>
+--     -   < CreateBuild>
+--     -   < DescribeBuild>
+--     -   < UpdateBuild>
+--     -   < DeleteBuild>
+--     -   < RequestUploadCredentials>
+-- -   __Fleet actions:__
+--     -   < ListFleets>
+--     -   < CreateFleet>
+--     -   Describe fleet actions:
+--         -   < DescribeFleetAttributes>
+--         -   < DescribeFleetCapacity>
+--         -   < DescribeFleetPortSettings>
+--         -   < DescribeFleetUtilization>
+--         -   < DescribeEC2InstanceLimits>
+--         -   < DescribeFleetEvents>
+--     -   Update fleet actions:
+--         -   < UpdateFleetAttributes>
+--         -   < UpdateFleetCapacity>
+--         -   < UpdateFleetPortSettings>
+--     -   < DeleteFleet>
+-- -   __Alias actions:__
+--     -   < ListAliases>
+--     -   < CreateAlias>
+--     -   < DescribeAlias>
+--     -   < UpdateAlias>
+--     -   < DeleteAlias>
+--     -   < ResolveAlias>
+-- -   __Scaling policy actions:__
+--     -   < PutScalingPolicy>
+--     -   < DescribeScalingPolicies>
+--     -   < DeleteScalingPolicy>
+module Network.AWS.GameLift
+    (
+    -- * Service Configuration
+      gameLift
+
+    -- * Errors
+    -- $errors
+
+    -- ** InvalidFleetStatusException
+    , _InvalidFleetStatusException
+
+    -- ** InvalidRequestException
+    , _InvalidRequestException
+
+    -- ** ConflictException
+    , _ConflictException
+
+    -- ** TerminalRoutingStrategyException
+    , _TerminalRoutingStrategyException
+
+    -- ** NotFoundException
+    , _NotFoundException
+
+    -- ** GameSessionFullException
+    , _GameSessionFullException
+
+    -- ** InvalidGameSessionStatusException
+    , _InvalidGameSessionStatusException
+
+    -- ** InternalServiceException
+    , _InternalServiceException
+
+    -- ** UnauthorizedException
+    , _UnauthorizedException
+
+    -- ** FleetCapacityExceededException
+    , _FleetCapacityExceededException
+
+    -- ** LimitExceededException
+    , _LimitExceededException
+
+    -- * Waiters
+    -- $waiters
+
+    -- * Operations
+    -- $operations
+
+    -- ** CreateGameSession
+    , module Network.AWS.GameLift.CreateGameSession
+
+    -- ** DeleteScalingPolicy
+    , module Network.AWS.GameLift.DeleteScalingPolicy
+
+    -- ** PutScalingPolicy
+    , module Network.AWS.GameLift.PutScalingPolicy
+
+    -- ** ListBuilds
+    , module Network.AWS.GameLift.ListBuilds
+
+    -- ** DeleteFleet
+    , module Network.AWS.GameLift.DeleteFleet
+
+    -- ** CreateBuild
+    , module Network.AWS.GameLift.CreateBuild
+
+    -- ** RequestUploadCredentials
+    , module Network.AWS.GameLift.RequestUploadCredentials
+
+    -- ** CreateAlias
+    , module Network.AWS.GameLift.CreateAlias
+
+    -- ** ResolveAlias
+    , module Network.AWS.GameLift.ResolveAlias
+
+    -- ** ListAliases
+    , module Network.AWS.GameLift.ListAliases
+
+    -- ** DescribeScalingPolicies
+    , module Network.AWS.GameLift.DescribeScalingPolicies
+
+    -- ** DescribeGameSessions
+    , module Network.AWS.GameLift.DescribeGameSessions
+
+    -- ** DescribeFleetUtilization
+    , module Network.AWS.GameLift.DescribeFleetUtilization
+
+    -- ** GetGameSessionLogURL
+    , module Network.AWS.GameLift.GetGameSessionLogURL
+
+    -- ** DescribeFleetAttributes
+    , module Network.AWS.GameLift.DescribeFleetAttributes
+
+    -- ** DescribeFleetEvents
+    , module Network.AWS.GameLift.DescribeFleetEvents
+
+    -- ** DescribeFleetCapacity
+    , module Network.AWS.GameLift.DescribeFleetCapacity
+
+    -- ** DeleteBuild
+    , module Network.AWS.GameLift.DeleteBuild
+
+    -- ** UpdateBuild
+    , module Network.AWS.GameLift.UpdateBuild
+
+    -- ** ListFleets
+    , module Network.AWS.GameLift.ListFleets
+
+    -- ** DeleteAlias
+    , module Network.AWS.GameLift.DeleteAlias
+
+    -- ** UpdateAlias
+    , module Network.AWS.GameLift.UpdateAlias
+
+    -- ** DescribeGameSessionDetails
+    , module Network.AWS.GameLift.DescribeGameSessionDetails
+
+    -- ** DescribeFleetPortSettings
+    , module Network.AWS.GameLift.DescribeFleetPortSettings
+
+    -- ** CreatePlayerSessions
+    , module Network.AWS.GameLift.CreatePlayerSessions
+
+    -- ** CreateFleet
+    , module Network.AWS.GameLift.CreateFleet
+
+    -- ** UpdateFleetAttributes
+    , module Network.AWS.GameLift.UpdateFleetAttributes
+
+    -- ** DescribePlayerSessions
+    , module Network.AWS.GameLift.DescribePlayerSessions
+
+    -- ** DescribeBuild
+    , module Network.AWS.GameLift.DescribeBuild
+
+    -- ** UpdateFleetPortSettings
+    , module Network.AWS.GameLift.UpdateFleetPortSettings
+
+    -- ** UpdateFleetCapacity
+    , module Network.AWS.GameLift.UpdateFleetCapacity
+
+    -- ** DescribeAlias
+    , module Network.AWS.GameLift.DescribeAlias
+
+    -- ** DescribeEC2InstanceLimits
+    , module Network.AWS.GameLift.DescribeEC2InstanceLimits
+
+    -- ** UpdateGameSession
+    , module Network.AWS.GameLift.UpdateGameSession
+
+    -- ** CreatePlayerSession
+    , module Network.AWS.GameLift.CreatePlayerSession
+
+    -- * Types
+
+    -- ** BuildStatus
+    , BuildStatus (..)
+
+    -- ** ComparisonOperatorType
+    , ComparisonOperatorType (..)
+
+    -- ** EC2InstanceType
+    , EC2InstanceType (..)
+
+    -- ** EventCode
+    , EventCode (..)
+
+    -- ** FleetStatus
+    , FleetStatus (..)
+
+    -- ** GameSessionStatus
+    , GameSessionStatus (..)
+
+    -- ** IPProtocol
+    , IPProtocol (..)
+
+    -- ** MetricName
+    , MetricName (..)
+
+    -- ** PlayerSessionCreationPolicy
+    , PlayerSessionCreationPolicy (..)
+
+    -- ** PlayerSessionStatus
+    , PlayerSessionStatus (..)
+
+    -- ** ProtectionPolicy
+    , ProtectionPolicy (..)
+
+    -- ** RoutingStrategyType
+    , RoutingStrategyType (..)
+
+    -- ** ScalingAdjustmentType
+    , ScalingAdjustmentType (..)
+
+    -- ** ScalingStatusType
+    , ScalingStatusType (..)
+
+    -- ** AWSCredentials
+    , AWSCredentials
+    , awsCredentials
+    , acSecretAccessKey
+    , acSessionToken
+    , acAccessKeyId
+
+    -- ** Alias
+    , Alias
+    , alias
+    , aCreationTime
+    , aLastUpdatedTime
+    , aAliasId
+    , aRoutingStrategy
+    , aName
+    , aDescription
+
+    -- ** Build
+    , Build
+    , build
+    , bCreationTime
+    , bStatus
+    , bBuildId
+    , bName
+    , bVersion
+    , bSizeOnDisk
+
+    -- ** EC2InstanceCounts
+    , EC2InstanceCounts
+    , ec2InstanceCounts
+    , eicIdLE
+    , eicTERMINATING
+    , eicPENDING
+    , eicMAXIMUM
+    , eicDESIRED
+    , eicMINIMUM
+    , eicACTIVE
+
+    -- ** EC2InstanceLimit
+    , EC2InstanceLimit
+    , ec2InstanceLimit
+    , eilEC2InstanceType
+    , eilCurrentInstances
+    , eilInstanceLimit
+
+    -- ** Event
+    , Event
+    , event
+    , eResourceId
+    , eEventTime
+    , eMessage
+    , eEventCode
+    , eEventId
+
+    -- ** FleetAttributes
+    , FleetAttributes
+    , fleetAttributes
+    , faCreationTime
+    , faStatus
+    , faServerLaunchParameters
+    , faLogPaths
+    , faBuildId
+    , faTerminationTime
+    , faNewGameSessionProtectionPolicy
+    , faName
+    , faServerLaunchPath
+    , faFleetId
+    , faDescription
+
+    -- ** FleetCapacity
+    , FleetCapacity
+    , fleetCapacity
+    , fcInstanceType
+    , fcFleetId
+    , fcInstanceCounts
+
+    -- ** FleetUtilization
+    , FleetUtilization
+    , fleetUtilization
+    , fuActiveGameSessionCount
+    , fuMaximumPlayerSessionCount
+    , fuCurrentPlayerSessionCount
+    , fuFleetId
+
+    -- ** GameProperty
+    , GameProperty
+    , gameProperty
+    , gpKey
+    , gpValue
+
+    -- ** GameSession
+    , GameSession
+    , gameSession
+    , gsCreationTime
+    , gsStatus
+    , gsGameProperties
+    , gsIPAddress
+    , gsGameSessionId
+    , gsMaximumPlayerSessionCount
+    , gsTerminationTime
+    , gsPlayerSessionCreationPolicy
+    , gsName
+    , gsCurrentPlayerSessionCount
+    , gsFleetId
+
+    -- ** GameSessionDetail
+    , GameSessionDetail
+    , gameSessionDetail
+    , gsdGameSession
+    , gsdProtectionPolicy
+
+    -- ** IPPermission
+    , IPPermission
+    , ipPermission
+    , ipFromPort
+    , ipToPort
+    , ipIPRange
+    , ipProtocol
+
+    -- ** PlayerSession
+    , PlayerSession
+    , playerSession
+    , psCreationTime
+    , psStatus
+    , psIPAddress
+    , psGameSessionId
+    , psTerminationTime
+    , psPlayerSessionId
+    , psFleetId
+    , psPlayerId
+
+    -- ** RoutingStrategy
+    , RoutingStrategy
+    , routingStrategy
+    , rsType
+    , rsMessage
+    , rsFleetId
+
+    -- ** S3Location
+    , S3Location
+    , s3Location
+    , slBucket
+    , slKey
+    , slRoleARN
+
+    -- ** ScalingPolicy
+    , ScalingPolicy
+    , scalingPolicy
+    , spStatus
+    , spScalingAdjustmentType
+    , spEvaluationPeriods
+    , spMetricName
+    , spComparisonOperator
+    , spName
+    , spThreshold
+    , spScalingAdjustment
+    , spFleetId
+    ) where
+
+import           Network.AWS.GameLift.CreateAlias
+import           Network.AWS.GameLift.CreateBuild
+import           Network.AWS.GameLift.CreateFleet
+import           Network.AWS.GameLift.CreateGameSession
+import           Network.AWS.GameLift.CreatePlayerSession
+import           Network.AWS.GameLift.CreatePlayerSessions
+import           Network.AWS.GameLift.DeleteAlias
+import           Network.AWS.GameLift.DeleteBuild
+import           Network.AWS.GameLift.DeleteFleet
+import           Network.AWS.GameLift.DeleteScalingPolicy
+import           Network.AWS.GameLift.DescribeAlias
+import           Network.AWS.GameLift.DescribeBuild
+import           Network.AWS.GameLift.DescribeEC2InstanceLimits
+import           Network.AWS.GameLift.DescribeFleetAttributes
+import           Network.AWS.GameLift.DescribeFleetCapacity
+import           Network.AWS.GameLift.DescribeFleetEvents
+import           Network.AWS.GameLift.DescribeFleetPortSettings
+import           Network.AWS.GameLift.DescribeFleetUtilization
+import           Network.AWS.GameLift.DescribeGameSessionDetails
+import           Network.AWS.GameLift.DescribeGameSessions
+import           Network.AWS.GameLift.DescribePlayerSessions
+import           Network.AWS.GameLift.DescribeScalingPolicies
+import           Network.AWS.GameLift.GetGameSessionLogURL
+import           Network.AWS.GameLift.ListAliases
+import           Network.AWS.GameLift.ListBuilds
+import           Network.AWS.GameLift.ListFleets
+import           Network.AWS.GameLift.PutScalingPolicy
+import           Network.AWS.GameLift.RequestUploadCredentials
+import           Network.AWS.GameLift.ResolveAlias
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.UpdateAlias
+import           Network.AWS.GameLift.UpdateBuild
+import           Network.AWS.GameLift.UpdateFleetAttributes
+import           Network.AWS.GameLift.UpdateFleetCapacity
+import           Network.AWS.GameLift.UpdateFleetPortSettings
+import           Network.AWS.GameLift.UpdateGameSession
+import           Network.AWS.GameLift.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 'GameLift'.
+-}
+
+{- $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/GameLift/CreateAlias.hs b/gen/Network/AWS/GameLift/CreateAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/CreateAlias.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.GameLift.CreateAlias
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates an alias for a fleet. You can use an alias to anonymize your
+-- fleet by referencing an alias instead of a specific fleet when you
+-- create game sessions. Amazon GameLift supports two types of routing
+-- strategies for aliases: simple and terminal. Use a simple alias to point
+-- to an active fleet. Use a terminal alias to display a message to
+-- incoming traffic instead of routing players to an active fleet. This
+-- option is useful when a game server is no longer supported but you want
+-- to provide better messaging than a standard 404 error.
+--
+-- To create a fleet alias, specify an alias name, routing strategy, and
+-- optional description. If successful, a new alias record is returned,
+-- including an alias ID, which you can reference when creating a game
+-- session. To reassign the alias to another fleet ID, call < UpdateAlias>.
+module Network.AWS.GameLift.CreateAlias
+    (
+    -- * Creating a Request
+      createAlias
+    , CreateAlias
+    -- * Request Lenses
+    , caDescription
+    , caName
+    , caRoutingStrategy
+
+    -- * Destructuring the Response
+    , createAliasResponse
+    , CreateAliasResponse
+    -- * Response Lenses
+    , carsAlias
+    , carsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'createAlias' smart constructor.
+data CreateAlias = CreateAlias'
+    { _caDescription     :: !(Maybe Text)
+    , _caName            :: !Text
+    , _caRoutingStrategy :: !RoutingStrategy
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'caDescription'
+--
+-- * 'caName'
+--
+-- * 'caRoutingStrategy'
+createAlias
+    :: Text -- ^ 'caName'
+    -> RoutingStrategy -- ^ 'caRoutingStrategy'
+    -> CreateAlias
+createAlias pName_ pRoutingStrategy_ =
+    CreateAlias'
+    { _caDescription = Nothing
+    , _caName = pName_
+    , _caRoutingStrategy = pRoutingStrategy_
+    }
+
+-- | Human-readable description of the alias.
+caDescription :: Lens' CreateAlias (Maybe Text)
+caDescription = lens _caDescription (\ s a -> s{_caDescription = a});
+
+-- | Descriptive label associated with this alias. Alias names do not need to
+-- be unique.
+caName :: Lens' CreateAlias Text
+caName = lens _caName (\ s a -> s{_caName = a});
+
+-- | Object specifying the fleet and routing type to use for the alias.
+caRoutingStrategy :: Lens' CreateAlias RoutingStrategy
+caRoutingStrategy = lens _caRoutingStrategy (\ s a -> s{_caRoutingStrategy = a});
+
+instance AWSRequest CreateAlias where
+        type Rs CreateAlias = CreateAliasResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateAliasResponse' <$>
+                   (x .?> "Alias") <*> (pure (fromEnum s)))
+
+instance Hashable CreateAlias
+
+instance ToHeaders CreateAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.CreateAlias" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateAlias where
+        toJSON CreateAlias'{..}
+          = object
+              (catMaybes
+                 [("Description" .=) <$> _caDescription,
+                  Just ("Name" .= _caName),
+                  Just ("RoutingStrategy" .= _caRoutingStrategy)])
+
+instance ToPath CreateAlias where
+        toPath = const "/"
+
+instance ToQuery CreateAlias where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'createAliasResponse' smart constructor.
+data CreateAliasResponse = CreateAliasResponse'
+    { _carsAlias          :: !(Maybe Alias)
+    , _carsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateAliasResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'carsAlias'
+--
+-- * 'carsResponseStatus'
+createAliasResponse
+    :: Int -- ^ 'carsResponseStatus'
+    -> CreateAliasResponse
+createAliasResponse pResponseStatus_ =
+    CreateAliasResponse'
+    { _carsAlias = Nothing
+    , _carsResponseStatus = pResponseStatus_
+    }
+
+-- | Object containing the newly created alias record.
+carsAlias :: Lens' CreateAliasResponse (Maybe Alias)
+carsAlias = lens _carsAlias (\ s a -> s{_carsAlias = a});
+
+-- | The response status code.
+carsResponseStatus :: Lens' CreateAliasResponse Int
+carsResponseStatus = lens _carsResponseStatus (\ s a -> s{_carsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/CreateBuild.hs b/gen/Network/AWS/GameLift/CreateBuild.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/CreateBuild.hs
@@ -0,0 +1,194 @@
+{-# 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.GameLift.CreateBuild
+-- 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)
+--
+-- Initializes a new build record and generates information required to
+-- upload a game build to Amazon GameLift. Once the build record has been
+-- created and is in an INITIALIZED state, you can upload your game build.
+--
+-- To create a build, use the CLI command 'upload-build', which creates a
+-- new build record and uploads the build files in one step. (See the
+-- <http://docs.aws.amazon.com/gamelift/latest/developerguide/ Amazon GameLift Developer Guide>
+-- for more details on the CLI and the upload process.) Call the
+-- 'CreateBuild' action only if you have your own Amazon Simple Storage
+-- Service (Amazon S3) client and need to manually upload your build files.
+--
+-- To create a new build, optionally specify a build name and version. This
+-- metadata is stored with other properties in the build record and is
+-- displayed in the GameLift console (but not visible to players). If
+-- successful, this action returns the newly created build record along
+-- with an Amazon S3 storage location and AWS account credentials. Use the
+-- location and credentials to upload your game build.
+module Network.AWS.GameLift.CreateBuild
+    (
+    -- * Creating a Request
+      createBuild
+    , CreateBuild
+    -- * Request Lenses
+    , cbStorageLocation
+    , cbName
+    , cbVersion
+
+    -- * Destructuring the Response
+    , createBuildResponse
+    , CreateBuildResponse
+    -- * Response Lenses
+    , cbrsStorageLocation
+    , cbrsUploadCredentials
+    , cbrsBuild
+    , cbrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'createBuild' smart constructor.
+data CreateBuild = CreateBuild'
+    { _cbStorageLocation :: !(Maybe S3Location)
+    , _cbName            :: !(Maybe Text)
+    , _cbVersion         :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateBuild' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbStorageLocation'
+--
+-- * 'cbName'
+--
+-- * 'cbVersion'
+createBuild
+    :: CreateBuild
+createBuild =
+    CreateBuild'
+    { _cbStorageLocation = Nothing
+    , _cbName = Nothing
+    , _cbVersion = Nothing
+    }
+
+-- | Undocumented member.
+cbStorageLocation :: Lens' CreateBuild (Maybe S3Location)
+cbStorageLocation = lens _cbStorageLocation (\ s a -> s{_cbStorageLocation = a});
+
+-- | Descriptive label associated with this build. Build names do not need to
+-- be unique. A build name can be changed later using < UpdateBuild>.
+cbName :: Lens' CreateBuild (Maybe Text)
+cbName = lens _cbName (\ s a -> s{_cbName = a});
+
+-- | Version associated with this build. Version strings do not need to be
+-- unique to a build. A build version can be changed later using
+-- < UpdateBuild>.
+cbVersion :: Lens' CreateBuild (Maybe Text)
+cbVersion = lens _cbVersion (\ s a -> s{_cbVersion = a});
+
+instance AWSRequest CreateBuild where
+        type Rs CreateBuild = CreateBuildResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateBuildResponse' <$>
+                   (x .?> "StorageLocation") <*>
+                     (x .?> "UploadCredentials")
+                     <*> (x .?> "Build")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable CreateBuild
+
+instance ToHeaders CreateBuild where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.CreateBuild" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateBuild where
+        toJSON CreateBuild'{..}
+          = object
+              (catMaybes
+                 [("StorageLocation" .=) <$> _cbStorageLocation,
+                  ("Name" .=) <$> _cbName,
+                  ("Version" .=) <$> _cbVersion])
+
+instance ToPath CreateBuild where
+        toPath = const "/"
+
+instance ToQuery CreateBuild where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'createBuildResponse' smart constructor.
+data CreateBuildResponse = CreateBuildResponse'
+    { _cbrsStorageLocation   :: !(Maybe S3Location)
+    , _cbrsUploadCredentials :: !(Maybe (Sensitive AWSCredentials))
+    , _cbrsBuild             :: !(Maybe Build)
+    , _cbrsResponseStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateBuildResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cbrsStorageLocation'
+--
+-- * 'cbrsUploadCredentials'
+--
+-- * 'cbrsBuild'
+--
+-- * 'cbrsResponseStatus'
+createBuildResponse
+    :: Int -- ^ 'cbrsResponseStatus'
+    -> CreateBuildResponse
+createBuildResponse pResponseStatus_ =
+    CreateBuildResponse'
+    { _cbrsStorageLocation = Nothing
+    , _cbrsUploadCredentials = Nothing
+    , _cbrsBuild = Nothing
+    , _cbrsResponseStatus = pResponseStatus_
+    }
+
+-- | Amazon S3 path and key, identifying where the game build files are
+-- stored.
+cbrsStorageLocation :: Lens' CreateBuildResponse (Maybe S3Location)
+cbrsStorageLocation = lens _cbrsStorageLocation (\ s a -> s{_cbrsStorageLocation = a});
+
+-- | AWS credentials required when uploading a game build to the storage
+-- location. These credentials have a limited lifespan and are valid only
+-- for the build they were issued for. If you need to get fresh
+-- credentials, call < RequestUploadCredentials>.
+cbrsUploadCredentials :: Lens' CreateBuildResponse (Maybe AWSCredentials)
+cbrsUploadCredentials = lens _cbrsUploadCredentials (\ s a -> s{_cbrsUploadCredentials = a}) . mapping _Sensitive;
+
+-- | Set of properties for the newly created build.
+cbrsBuild :: Lens' CreateBuildResponse (Maybe Build)
+cbrsBuild = lens _cbrsBuild (\ s a -> s{_cbrsBuild = a});
+
+-- | The response status code.
+cbrsResponseStatus :: Lens' CreateBuildResponse Int
+cbrsResponseStatus = lens _cbrsResponseStatus (\ s a -> s{_cbrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/CreateFleet.hs b/gen/Network/AWS/GameLift/CreateFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/CreateFleet.hs
@@ -0,0 +1,279 @@
+{-# 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.GameLift.CreateFleet
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a new fleet to host game servers. A fleet consists of a set of
+-- Amazon Elastic Compute Cloud (Amazon EC2) instances of a certain type,
+-- which defines the CPU, memory, storage, and networking capacity of each
+-- host in the fleet. See
+-- <https://aws.amazon.com/ec2/instance-types/ Amazon EC2 Instance Types>
+-- for more information. Each instance in the fleet hosts a game server
+-- created from the specified game build. Once a fleet is in an ACTIVE
+-- state, it can begin hosting game sessions.
+--
+-- To create a new fleet, provide a name and the EC2 instance type for the
+-- new fleet, and specify the build and server launch path. Builds must be
+-- in a READY state before they can be used to build fleets. When
+-- configuring the new fleet, you can optionally (1) provide a set of
+-- launch parameters to be passed to a game server when activated; (2)
+-- limit incoming traffic to a specified range of IP addresses and port
+-- numbers; (3) set game session protection for all instances in the fleet,
+-- and (4) configure Amazon GameLift to store game session logs by
+-- specifying the path to the logs stored in your game server files. If the
+-- call is successful, Amazon GameLift performs the following tasks:
+--
+-- -   Creates a fleet record and sets the state to NEW.
+-- -   Sets the fleet\'s capacity to 1 \"desired\" and 1 \"active\" EC2
+--     instance count.
+-- -   Creates an EC2 instance and begins the process of initializing the
+--     fleet and activating a game server on the instance.
+-- -   Begins writing events to the fleet event log, which can be accessed
+--     in the GameLift console.
+--
+-- Once a fleet is created, use the following actions to change certain
+-- fleet properties (server launch parameters and log paths cannot be
+-- changed):
+--
+-- -   < UpdateFleetAttributes> -- Update fleet metadata, including name
+--     and description.
+-- -   < UpdateFleetCapacity> -- Increase or decrease the number of
+--     instances you want the fleet to maintain.
+-- -   < UpdateFleetPortSettings> -- Change the IP addresses and ports that
+--     allow access to incoming traffic.
+module Network.AWS.GameLift.CreateFleet
+    (
+    -- * Creating a Request
+      createFleet
+    , CreateFleet
+    -- * Request Lenses
+    , cfServerLaunchParameters
+    , cfLogPaths
+    , cfEC2InboundPermissions
+    , cfNewGameSessionProtectionPolicy
+    , cfDescription
+    , cfName
+    , cfBuildId
+    , cfServerLaunchPath
+    , cfEC2InstanceType
+
+    -- * Destructuring the Response
+    , createFleetResponse
+    , CreateFleetResponse
+    -- * Response Lenses
+    , cfrsFleetAttributes
+    , cfrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'createFleet' smart constructor.
+data CreateFleet = CreateFleet'
+    { _cfServerLaunchParameters         :: !(Maybe Text)
+    , _cfLogPaths                       :: !(Maybe [Text])
+    , _cfEC2InboundPermissions          :: !(Maybe [IPPermission])
+    , _cfNewGameSessionProtectionPolicy :: !(Maybe ProtectionPolicy)
+    , _cfDescription                    :: !(Maybe Text)
+    , _cfName                           :: !Text
+    , _cfBuildId                        :: !Text
+    , _cfServerLaunchPath               :: !Text
+    , _cfEC2InstanceType                :: !EC2InstanceType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateFleet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfServerLaunchParameters'
+--
+-- * 'cfLogPaths'
+--
+-- * 'cfEC2InboundPermissions'
+--
+-- * 'cfNewGameSessionProtectionPolicy'
+--
+-- * 'cfDescription'
+--
+-- * 'cfName'
+--
+-- * 'cfBuildId'
+--
+-- * 'cfServerLaunchPath'
+--
+-- * 'cfEC2InstanceType'
+createFleet
+    :: Text -- ^ 'cfName'
+    -> Text -- ^ 'cfBuildId'
+    -> Text -- ^ 'cfServerLaunchPath'
+    -> EC2InstanceType -- ^ 'cfEC2InstanceType'
+    -> CreateFleet
+createFleet pName_ pBuildId_ pServerLaunchPath_ pEC2InstanceType_ =
+    CreateFleet'
+    { _cfServerLaunchParameters = Nothing
+    , _cfLogPaths = Nothing
+    , _cfEC2InboundPermissions = Nothing
+    , _cfNewGameSessionProtectionPolicy = Nothing
+    , _cfDescription = Nothing
+    , _cfName = pName_
+    , _cfBuildId = pBuildId_
+    , _cfServerLaunchPath = pServerLaunchPath_
+    , _cfEC2InstanceType = pEC2InstanceType_
+    }
+
+-- | Parameters required to launch your game server. These parameters should
+-- be expressed as a string of command-line parameters. Example: \"+sv_port
+-- 33435 +start_lobby\".
+cfServerLaunchParameters :: Lens' CreateFleet (Maybe Text)
+cfServerLaunchParameters = lens _cfServerLaunchParameters (\ s a -> s{_cfServerLaunchParameters = a});
+
+-- | Path to game-session log files generated by your game server. Once a
+-- game session has been terminated, Amazon GameLift captures and stores
+-- the logs on Amazon S3. Use the GameLift console to access the stored
+-- logs.
+cfLogPaths :: Lens' CreateFleet [Text]
+cfLogPaths = lens _cfLogPaths (\ s a -> s{_cfLogPaths = a}) . _Default . _Coerce;
+
+-- | Access limits for incoming traffic. Setting these values limits game
+-- server access to incoming traffic using specified IP ranges and port
+-- numbers. Some ports in a range may be restricted. You can provide one or
+-- more sets of permissions for the fleet.
+cfEC2InboundPermissions :: Lens' CreateFleet [IPPermission]
+cfEC2InboundPermissions = lens _cfEC2InboundPermissions (\ s a -> s{_cfEC2InboundPermissions = a}) . _Default . _Coerce;
+
+-- | Game session protection policy to apply to all instances created in this
+-- fleet. If this parameter is not set, new instances in this fleet will
+-- default to no protection. Protection can be set for individual instances
+-- using < UpdateGameSession>.
+--
+-- -   NoProtection: The game session can be terminated during a scale-down
+--     event.
+-- -   FullProtection: If the game session is in an ACTIVE status, it
+--     cannot be terminated during a scale-down event.
+cfNewGameSessionProtectionPolicy :: Lens' CreateFleet (Maybe ProtectionPolicy)
+cfNewGameSessionProtectionPolicy = lens _cfNewGameSessionProtectionPolicy (\ s a -> s{_cfNewGameSessionProtectionPolicy = a});
+
+-- | Human-readable description of the fleet.
+cfDescription :: Lens' CreateFleet (Maybe Text)
+cfDescription = lens _cfDescription (\ s a -> s{_cfDescription = a});
+
+-- | Descriptive label associated with this fleet. Fleet names do not need to
+-- be unique.
+cfName :: Lens' CreateFleet Text
+cfName = lens _cfName (\ s a -> s{_cfName = a});
+
+-- | Unique identifier for the build you want the new fleet to use.
+cfBuildId :: Lens' CreateFleet Text
+cfBuildId = lens _cfBuildId (\ s a -> s{_cfBuildId = a});
+
+-- | Path to the launch executable for the game server. A game server is
+-- built into a 'C:\\game' drive. This value must be expressed as
+-- 'C:\\game\\[launchpath]'. Example: If, when built, your game server
+-- files are in a folder called \"MyGame\", your log path should be
+-- 'C:\\game\\MyGame\\server.exe'.
+cfServerLaunchPath :: Lens' CreateFleet Text
+cfServerLaunchPath = lens _cfServerLaunchPath (\ s a -> s{_cfServerLaunchPath = a});
+
+-- | Type of EC2 instances used in the fleet. EC2 instance types define the
+-- CPU, memory, storage, and networking capacity of the fleetaposs hosts.
+-- Amazon GameLift supports the EC2 instance types listed below. See
+-- <https://aws.amazon.com/ec2/instance-types/ Amazon EC2 Instance Types>
+-- for detailed descriptions of each.
+cfEC2InstanceType :: Lens' CreateFleet EC2InstanceType
+cfEC2InstanceType = lens _cfEC2InstanceType (\ s a -> s{_cfEC2InstanceType = a});
+
+instance AWSRequest CreateFleet where
+        type Rs CreateFleet = CreateFleetResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateFleetResponse' <$>
+                   (x .?> "FleetAttributes") <*> (pure (fromEnum s)))
+
+instance Hashable CreateFleet
+
+instance ToHeaders CreateFleet where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.CreateFleet" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateFleet where
+        toJSON CreateFleet'{..}
+          = object
+              (catMaybes
+                 [("ServerLaunchParameters" .=) <$>
+                    _cfServerLaunchParameters,
+                  ("LogPaths" .=) <$> _cfLogPaths,
+                  ("EC2InboundPermissions" .=) <$>
+                    _cfEC2InboundPermissions,
+                  ("NewGameSessionProtectionPolicy" .=) <$>
+                    _cfNewGameSessionProtectionPolicy,
+                  ("Description" .=) <$> _cfDescription,
+                  Just ("Name" .= _cfName),
+                  Just ("BuildId" .= _cfBuildId),
+                  Just ("ServerLaunchPath" .= _cfServerLaunchPath),
+                  Just ("EC2InstanceType" .= _cfEC2InstanceType)])
+
+instance ToPath CreateFleet where
+        toPath = const "/"
+
+instance ToQuery CreateFleet where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'createFleetResponse' smart constructor.
+data CreateFleetResponse = CreateFleetResponse'
+    { _cfrsFleetAttributes :: !(Maybe FleetAttributes)
+    , _cfrsResponseStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateFleetResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cfrsFleetAttributes'
+--
+-- * 'cfrsResponseStatus'
+createFleetResponse
+    :: Int -- ^ 'cfrsResponseStatus'
+    -> CreateFleetResponse
+createFleetResponse pResponseStatus_ =
+    CreateFleetResponse'
+    { _cfrsFleetAttributes = Nothing
+    , _cfrsResponseStatus = pResponseStatus_
+    }
+
+-- | Properties for the newly created fleet.
+cfrsFleetAttributes :: Lens' CreateFleetResponse (Maybe FleetAttributes)
+cfrsFleetAttributes = lens _cfrsFleetAttributes (\ s a -> s{_cfrsFleetAttributes = a});
+
+-- | The response status code.
+cfrsResponseStatus :: Lens' CreateFleetResponse Int
+cfrsResponseStatus = lens _cfrsResponseStatus (\ s a -> s{_cfrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/CreateGameSession.hs b/gen/Network/AWS/GameLift/CreateGameSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/CreateGameSession.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.GameLift.CreateGameSession
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates a multiplayer game session for players. This action creates a
+-- game session record and assigns the new session to an instance in the
+-- specified fleet, which activates the server initialization process in
+-- your game server. A fleet must be in an ACTIVE state before a game
+-- session can be created for it.
+--
+-- To create a game session, specify either a fleet ID or an alias ID and
+-- indicate the maximum number of players the game session allows. You can
+-- also provide a name and a set of properties for your game (optional). If
+-- successful, a < GameSession> object is returned containing session
+-- properties, including an IP address. By default, newly created game
+-- sessions are set to accept adding any new players to the game session.
+-- Use < UpdateGameSession> to change the creation policy.
+module Network.AWS.GameLift.CreateGameSession
+    (
+    -- * Creating a Request
+      createGameSession
+    , CreateGameSession
+    -- * Request Lenses
+    , cgsGameProperties
+    , cgsAliasId
+    , cgsName
+    , cgsFleetId
+    , cgsMaximumPlayerSessionCount
+
+    -- * Destructuring the Response
+    , createGameSessionResponse
+    , CreateGameSessionResponse
+    -- * Response Lenses
+    , cgsrsGameSession
+    , cgsrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'createGameSession' smart constructor.
+data CreateGameSession = CreateGameSession'
+    { _cgsGameProperties            :: !(Maybe [GameProperty])
+    , _cgsAliasId                   :: !(Maybe Text)
+    , _cgsName                      :: !(Maybe Text)
+    , _cgsFleetId                   :: !(Maybe Text)
+    , _cgsMaximumPlayerSessionCount :: !Nat
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateGameSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgsGameProperties'
+--
+-- * 'cgsAliasId'
+--
+-- * 'cgsName'
+--
+-- * 'cgsFleetId'
+--
+-- * 'cgsMaximumPlayerSessionCount'
+createGameSession
+    :: Natural -- ^ 'cgsMaximumPlayerSessionCount'
+    -> CreateGameSession
+createGameSession pMaximumPlayerSessionCount_ =
+    CreateGameSession'
+    { _cgsGameProperties = Nothing
+    , _cgsAliasId = Nothing
+    , _cgsName = Nothing
+    , _cgsFleetId = Nothing
+    , _cgsMaximumPlayerSessionCount = _Nat # pMaximumPlayerSessionCount_
+    }
+
+-- | Set of properties used to administer a game session. These properties
+-- are passed to your game server.
+cgsGameProperties :: Lens' CreateGameSession [GameProperty]
+cgsGameProperties = lens _cgsGameProperties (\ s a -> s{_cgsGameProperties = a}) . _Default . _Coerce;
+
+-- | Unique identifier for a fleet alias. Each request must reference either
+-- a fleet ID or alias ID, but not both.
+cgsAliasId :: Lens' CreateGameSession (Maybe Text)
+cgsAliasId = lens _cgsAliasId (\ s a -> s{_cgsAliasId = a});
+
+-- | Descriptive label associated with this game session. Session names do
+-- not need to be unique.
+cgsName :: Lens' CreateGameSession (Maybe Text)
+cgsName = lens _cgsName (\ s a -> s{_cgsName = a});
+
+-- | Unique identifier for a fleet. Each request must reference either a
+-- fleet ID or alias ID, but not both.
+cgsFleetId :: Lens' CreateGameSession (Maybe Text)
+cgsFleetId = lens _cgsFleetId (\ s a -> s{_cgsFleetId = a});
+
+-- | Maximum number of players that can be connected simultaneously to the
+-- game session.
+cgsMaximumPlayerSessionCount :: Lens' CreateGameSession Natural
+cgsMaximumPlayerSessionCount = lens _cgsMaximumPlayerSessionCount (\ s a -> s{_cgsMaximumPlayerSessionCount = a}) . _Nat;
+
+instance AWSRequest CreateGameSession where
+        type Rs CreateGameSession = CreateGameSessionResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreateGameSessionResponse' <$>
+                   (x .?> "GameSession") <*> (pure (fromEnum s)))
+
+instance Hashable CreateGameSession
+
+instance ToHeaders CreateGameSession where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.CreateGameSession" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreateGameSession where
+        toJSON CreateGameSession'{..}
+          = object
+              (catMaybes
+                 [("GameProperties" .=) <$> _cgsGameProperties,
+                  ("AliasId" .=) <$> _cgsAliasId,
+                  ("Name" .=) <$> _cgsName,
+                  ("FleetId" .=) <$> _cgsFleetId,
+                  Just
+                    ("MaximumPlayerSessionCount" .=
+                       _cgsMaximumPlayerSessionCount)])
+
+instance ToPath CreateGameSession where
+        toPath = const "/"
+
+instance ToQuery CreateGameSession where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'createGameSessionResponse' smart constructor.
+data CreateGameSessionResponse = CreateGameSessionResponse'
+    { _cgsrsGameSession    :: !(Maybe GameSession)
+    , _cgsrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreateGameSessionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cgsrsGameSession'
+--
+-- * 'cgsrsResponseStatus'
+createGameSessionResponse
+    :: Int -- ^ 'cgsrsResponseStatus'
+    -> CreateGameSessionResponse
+createGameSessionResponse pResponseStatus_ =
+    CreateGameSessionResponse'
+    { _cgsrsGameSession = Nothing
+    , _cgsrsResponseStatus = pResponseStatus_
+    }
+
+-- | Object containing the newly created game session record.
+cgsrsGameSession :: Lens' CreateGameSessionResponse (Maybe GameSession)
+cgsrsGameSession = lens _cgsrsGameSession (\ s a -> s{_cgsrsGameSession = a});
+
+-- | The response status code.
+cgsrsResponseStatus :: Lens' CreateGameSessionResponse Int
+cgsrsResponseStatus = lens _cgsrsResponseStatus (\ s a -> s{_cgsrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/CreatePlayerSession.hs b/gen/Network/AWS/GameLift/CreatePlayerSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/CreatePlayerSession.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.GameLift.CreatePlayerSession
+-- 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)
+--
+-- Adds a player to a game session and creates a player session record. A
+-- game session must be in an ACTIVE state, have a creation policy of
+-- ALLOW_ALL, and have an open player slot before players can be added to
+-- the session.
+--
+-- To create a player session, specify a game session ID and player ID. If
+-- successful, the player is added to the game session and a new
+-- < PlayerSession> object is returned.
+module Network.AWS.GameLift.CreatePlayerSession
+    (
+    -- * Creating a Request
+      createPlayerSession
+    , CreatePlayerSession
+    -- * Request Lenses
+    , cGameSessionId
+    , cPlayerId
+
+    -- * Destructuring the Response
+    , createPlayerSessionResponse
+    , CreatePlayerSessionResponse
+    -- * Response Lenses
+    , cpsrsPlayerSession
+    , cpsrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'createPlayerSession' smart constructor.
+data CreatePlayerSession = CreatePlayerSession'
+    { _cGameSessionId :: !Text
+    , _cPlayerId      :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreatePlayerSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cGameSessionId'
+--
+-- * 'cPlayerId'
+createPlayerSession
+    :: Text -- ^ 'cGameSessionId'
+    -> Text -- ^ 'cPlayerId'
+    -> CreatePlayerSession
+createPlayerSession pGameSessionId_ pPlayerId_ =
+    CreatePlayerSession'
+    { _cGameSessionId = pGameSessionId_
+    , _cPlayerId = pPlayerId_
+    }
+
+-- | Unique identifier for a game session. Specify the game session you want
+-- to add a player to.
+cGameSessionId :: Lens' CreatePlayerSession Text
+cGameSessionId = lens _cGameSessionId (\ s a -> s{_cGameSessionId = a});
+
+-- | Unique identifier for the player to be added.
+cPlayerId :: Lens' CreatePlayerSession Text
+cPlayerId = lens _cPlayerId (\ s a -> s{_cPlayerId = a});
+
+instance AWSRequest CreatePlayerSession where
+        type Rs CreatePlayerSession =
+             CreatePlayerSessionResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreatePlayerSessionResponse' <$>
+                   (x .?> "PlayerSession") <*> (pure (fromEnum s)))
+
+instance Hashable CreatePlayerSession
+
+instance ToHeaders CreatePlayerSession where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.CreatePlayerSession" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreatePlayerSession where
+        toJSON CreatePlayerSession'{..}
+          = object
+              (catMaybes
+                 [Just ("GameSessionId" .= _cGameSessionId),
+                  Just ("PlayerId" .= _cPlayerId)])
+
+instance ToPath CreatePlayerSession where
+        toPath = const "/"
+
+instance ToQuery CreatePlayerSession where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'createPlayerSessionResponse' smart constructor.
+data CreatePlayerSessionResponse = CreatePlayerSessionResponse'
+    { _cpsrsPlayerSession  :: !(Maybe PlayerSession)
+    , _cpsrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreatePlayerSessionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpsrsPlayerSession'
+--
+-- * 'cpsrsResponseStatus'
+createPlayerSessionResponse
+    :: Int -- ^ 'cpsrsResponseStatus'
+    -> CreatePlayerSessionResponse
+createPlayerSessionResponse pResponseStatus_ =
+    CreatePlayerSessionResponse'
+    { _cpsrsPlayerSession = Nothing
+    , _cpsrsResponseStatus = pResponseStatus_
+    }
+
+-- | Object containing the newly created player session record.
+cpsrsPlayerSession :: Lens' CreatePlayerSessionResponse (Maybe PlayerSession)
+cpsrsPlayerSession = lens _cpsrsPlayerSession (\ s a -> s{_cpsrsPlayerSession = a});
+
+-- | The response status code.
+cpsrsResponseStatus :: Lens' CreatePlayerSessionResponse Int
+cpsrsResponseStatus = lens _cpsrsResponseStatus (\ s a -> s{_cpsrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/CreatePlayerSessions.hs b/gen/Network/AWS/GameLift/CreatePlayerSessions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/CreatePlayerSessions.hs
@@ -0,0 +1,153 @@
+{-# 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.GameLift.CreatePlayerSessions
+-- 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)
+--
+-- Adds a group of players to a game session. Similar to
+-- < CreatePlayerSession>, this action allows you to add multiple players
+-- in a single call, which is useful for games that provide party and\/or
+-- matchmaking features. A game session must be in an ACTIVE state, have a
+-- creation policy of ALLOW_ALL, and have an open player slot before
+-- players can be added to the session.
+--
+-- To create player sessions, specify a game session ID and a list of
+-- player IDs. If successful, the players are added to the game session and
+-- a set of new < PlayerSession> objects is returned.
+module Network.AWS.GameLift.CreatePlayerSessions
+    (
+    -- * Creating a Request
+      createPlayerSessions
+    , CreatePlayerSessions
+    -- * Request Lenses
+    , cpsGameSessionId
+    , cpsPlayerIds
+
+    -- * Destructuring the Response
+    , createPlayerSessionsResponse
+    , CreatePlayerSessionsResponse
+    -- * Response Lenses
+    , crsPlayerSessions
+    , crsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'createPlayerSessions' smart constructor.
+data CreatePlayerSessions = CreatePlayerSessions'
+    { _cpsGameSessionId :: !Text
+    , _cpsPlayerIds     :: !(List1 Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreatePlayerSessions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'cpsGameSessionId'
+--
+-- * 'cpsPlayerIds'
+createPlayerSessions
+    :: Text -- ^ 'cpsGameSessionId'
+    -> NonEmpty Text -- ^ 'cpsPlayerIds'
+    -> CreatePlayerSessions
+createPlayerSessions pGameSessionId_ pPlayerIds_ =
+    CreatePlayerSessions'
+    { _cpsGameSessionId = pGameSessionId_
+    , _cpsPlayerIds = _List1 # pPlayerIds_
+    }
+
+-- | Unique identifier for a game session.
+cpsGameSessionId :: Lens' CreatePlayerSessions Text
+cpsGameSessionId = lens _cpsGameSessionId (\ s a -> s{_cpsGameSessionId = a});
+
+-- | List of unique identifiers for the players to be added.
+cpsPlayerIds :: Lens' CreatePlayerSessions (NonEmpty Text)
+cpsPlayerIds = lens _cpsPlayerIds (\ s a -> s{_cpsPlayerIds = a}) . _List1;
+
+instance AWSRequest CreatePlayerSessions where
+        type Rs CreatePlayerSessions =
+             CreatePlayerSessionsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 CreatePlayerSessionsResponse' <$>
+                   (x .?> "PlayerSessions" .!@ mempty) <*>
+                     (pure (fromEnum s)))
+
+instance Hashable CreatePlayerSessions
+
+instance ToHeaders CreatePlayerSessions where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.CreatePlayerSessions" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON CreatePlayerSessions where
+        toJSON CreatePlayerSessions'{..}
+          = object
+              (catMaybes
+                 [Just ("GameSessionId" .= _cpsGameSessionId),
+                  Just ("PlayerIds" .= _cpsPlayerIds)])
+
+instance ToPath CreatePlayerSessions where
+        toPath = const "/"
+
+instance ToQuery CreatePlayerSessions where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'createPlayerSessionsResponse' smart constructor.
+data CreatePlayerSessionsResponse = CreatePlayerSessionsResponse'
+    { _crsPlayerSessions :: !(Maybe [PlayerSession])
+    , _crsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'CreatePlayerSessionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'crsPlayerSessions'
+--
+-- * 'crsResponseStatus'
+createPlayerSessionsResponse
+    :: Int -- ^ 'crsResponseStatus'
+    -> CreatePlayerSessionsResponse
+createPlayerSessionsResponse pResponseStatus_ =
+    CreatePlayerSessionsResponse'
+    { _crsPlayerSessions = Nothing
+    , _crsResponseStatus = pResponseStatus_
+    }
+
+-- | Collection of player session objects created for the added players.
+crsPlayerSessions :: Lens' CreatePlayerSessionsResponse [PlayerSession]
+crsPlayerSessions = lens _crsPlayerSessions (\ s a -> s{_crsPlayerSessions = a}) . _Default . _Coerce;
+
+-- | The response status code.
+crsResponseStatus :: Lens' CreatePlayerSessionsResponse Int
+crsResponseStatus = lens _crsResponseStatus (\ s a -> s{_crsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DeleteAlias.hs b/gen/Network/AWS/GameLift/DeleteAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DeleteAlias.hs
@@ -0,0 +1,105 @@
+{-# 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.GameLift.DeleteAlias
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes an alias. This action removes all record of the alias; game
+-- clients attempting to access a game server using the deleted alias
+-- receive an error. To delete an alias, specify the alias ID to be
+-- deleted.
+module Network.AWS.GameLift.DeleteAlias
+    (
+    -- * Creating a Request
+      deleteAlias
+    , DeleteAlias
+    -- * Request Lenses
+    , daAliasId
+
+    -- * Destructuring the Response
+    , deleteAliasResponse
+    , DeleteAliasResponse
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'deleteAlias' smart constructor.
+newtype DeleteAlias = DeleteAlias'
+    { _daAliasId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'daAliasId'
+deleteAlias
+    :: Text -- ^ 'daAliasId'
+    -> DeleteAlias
+deleteAlias pAliasId_ =
+    DeleteAlias'
+    { _daAliasId = pAliasId_
+    }
+
+-- | Unique identifier for a fleet alias. Specify the alias you want to
+-- delete.
+daAliasId :: Lens' DeleteAlias Text
+daAliasId = lens _daAliasId (\ s a -> s{_daAliasId = a});
+
+instance AWSRequest DeleteAlias where
+        type Rs DeleteAlias = DeleteAliasResponse
+        request = postJSON gameLift
+        response = receiveNull DeleteAliasResponse'
+
+instance Hashable DeleteAlias
+
+instance ToHeaders DeleteAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DeleteAlias" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteAlias where
+        toJSON DeleteAlias'{..}
+          = object (catMaybes [Just ("AliasId" .= _daAliasId)])
+
+instance ToPath DeleteAlias where
+        toPath = const "/"
+
+instance ToQuery DeleteAlias where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteAliasResponse' smart constructor.
+data DeleteAliasResponse =
+    DeleteAliasResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteAliasResponse' with the minimum fields required to make a request.
+--
+deleteAliasResponse
+    :: DeleteAliasResponse
+deleteAliasResponse = DeleteAliasResponse'
diff --git a/gen/Network/AWS/GameLift/DeleteBuild.hs b/gen/Network/AWS/GameLift/DeleteBuild.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DeleteBuild.hs
@@ -0,0 +1,106 @@
+{-# 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.GameLift.DeleteBuild
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a build. This action permanently deletes the build record and
+-- any uploaded build files.
+--
+-- To delete a build, specify its ID. Deleting a build does not affect the
+-- status of any active fleets, but you can no longer create new fleets for
+-- the deleted build.
+module Network.AWS.GameLift.DeleteBuild
+    (
+    -- * Creating a Request
+      deleteBuild
+    , DeleteBuild
+    -- * Request Lenses
+    , dbBuildId
+
+    -- * Destructuring the Response
+    , deleteBuildResponse
+    , DeleteBuildResponse
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'deleteBuild' smart constructor.
+newtype DeleteBuild = DeleteBuild'
+    { _dbBuildId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBuild' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbBuildId'
+deleteBuild
+    :: Text -- ^ 'dbBuildId'
+    -> DeleteBuild
+deleteBuild pBuildId_ =
+    DeleteBuild'
+    { _dbBuildId = pBuildId_
+    }
+
+-- | Unique identifier for the build you want to delete.
+dbBuildId :: Lens' DeleteBuild Text
+dbBuildId = lens _dbBuildId (\ s a -> s{_dbBuildId = a});
+
+instance AWSRequest DeleteBuild where
+        type Rs DeleteBuild = DeleteBuildResponse
+        request = postJSON gameLift
+        response = receiveNull DeleteBuildResponse'
+
+instance Hashable DeleteBuild
+
+instance ToHeaders DeleteBuild where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DeleteBuild" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteBuild where
+        toJSON DeleteBuild'{..}
+          = object (catMaybes [Just ("BuildId" .= _dbBuildId)])
+
+instance ToPath DeleteBuild where
+        toPath = const "/"
+
+instance ToQuery DeleteBuild where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteBuildResponse' smart constructor.
+data DeleteBuildResponse =
+    DeleteBuildResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteBuildResponse' with the minimum fields required to make a request.
+--
+deleteBuildResponse
+    :: DeleteBuildResponse
+deleteBuildResponse = DeleteBuildResponse'
diff --git a/gen/Network/AWS/GameLift/DeleteFleet.hs b/gen/Network/AWS/GameLift/DeleteFleet.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DeleteFleet.hs
@@ -0,0 +1,105 @@
+{-# 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.GameLift.DeleteFleet
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes everything related to a fleet. Before deleting a fleet, you must
+-- set the fleet\'s desired capacity to zero. See < UpdateFleetCapacity>.
+--
+-- This action removes the fleet\'s resources and the fleet record. Once a
+-- fleet is deleted, you can no longer use that fleet.
+module Network.AWS.GameLift.DeleteFleet
+    (
+    -- * Creating a Request
+      deleteFleet
+    , DeleteFleet
+    -- * Request Lenses
+    , dfFleetId
+
+    -- * Destructuring the Response
+    , deleteFleetResponse
+    , DeleteFleetResponse
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'deleteFleet' smart constructor.
+newtype DeleteFleet = DeleteFleet'
+    { _dfFleetId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteFleet' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfFleetId'
+deleteFleet
+    :: Text -- ^ 'dfFleetId'
+    -> DeleteFleet
+deleteFleet pFleetId_ =
+    DeleteFleet'
+    { _dfFleetId = pFleetId_
+    }
+
+-- | Unique identifier for the fleet you want to delete.
+dfFleetId :: Lens' DeleteFleet Text
+dfFleetId = lens _dfFleetId (\ s a -> s{_dfFleetId = a});
+
+instance AWSRequest DeleteFleet where
+        type Rs DeleteFleet = DeleteFleetResponse
+        request = postJSON gameLift
+        response = receiveNull DeleteFleetResponse'
+
+instance Hashable DeleteFleet
+
+instance ToHeaders DeleteFleet where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DeleteFleet" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteFleet where
+        toJSON DeleteFleet'{..}
+          = object (catMaybes [Just ("FleetId" .= _dfFleetId)])
+
+instance ToPath DeleteFleet where
+        toPath = const "/"
+
+instance ToQuery DeleteFleet where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteFleetResponse' smart constructor.
+data DeleteFleetResponse =
+    DeleteFleetResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteFleetResponse' with the minimum fields required to make a request.
+--
+deleteFleetResponse
+    :: DeleteFleetResponse
+deleteFleetResponse = DeleteFleetResponse'
diff --git a/gen/Network/AWS/GameLift/DeleteScalingPolicy.hs b/gen/Network/AWS/GameLift/DeleteScalingPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DeleteScalingPolicy.hs
@@ -0,0 +1,119 @@
+{-# 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.GameLift.DeleteScalingPolicy
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Deletes a fleet scaling policy. This action means that the policy is no
+-- longer in force and removes all record of it. To delete a scaling
+-- policy, specify both the scaling policy name and the fleet ID it is
+-- associated with.
+module Network.AWS.GameLift.DeleteScalingPolicy
+    (
+    -- * Creating a Request
+      deleteScalingPolicy
+    , DeleteScalingPolicy
+    -- * Request Lenses
+    , dspName
+    , dspFleetId
+
+    -- * Destructuring the Response
+    , deleteScalingPolicyResponse
+    , DeleteScalingPolicyResponse
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'deleteScalingPolicy' smart constructor.
+data DeleteScalingPolicy = DeleteScalingPolicy'
+    { _dspName    :: !Text
+    , _dspFleetId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteScalingPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dspName'
+--
+-- * 'dspFleetId'
+deleteScalingPolicy
+    :: Text -- ^ 'dspName'
+    -> Text -- ^ 'dspFleetId'
+    -> DeleteScalingPolicy
+deleteScalingPolicy pName_ pFleetId_ =
+    DeleteScalingPolicy'
+    { _dspName = pName_
+    , _dspFleetId = pFleetId_
+    }
+
+-- | Descriptive label associated with this scaling policy. Policy names do
+-- not need to be unique.
+dspName :: Lens' DeleteScalingPolicy Text
+dspName = lens _dspName (\ s a -> s{_dspName = a});
+
+-- | Unique identifier for a fleet.
+dspFleetId :: Lens' DeleteScalingPolicy Text
+dspFleetId = lens _dspFleetId (\ s a -> s{_dspFleetId = a});
+
+instance AWSRequest DeleteScalingPolicy where
+        type Rs DeleteScalingPolicy =
+             DeleteScalingPolicyResponse
+        request = postJSON gameLift
+        response = receiveNull DeleteScalingPolicyResponse'
+
+instance Hashable DeleteScalingPolicy
+
+instance ToHeaders DeleteScalingPolicy where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DeleteScalingPolicy" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DeleteScalingPolicy where
+        toJSON DeleteScalingPolicy'{..}
+          = object
+              (catMaybes
+                 [Just ("Name" .= _dspName),
+                  Just ("FleetId" .= _dspFleetId)])
+
+instance ToPath DeleteScalingPolicy where
+        toPath = const "/"
+
+instance ToQuery DeleteScalingPolicy where
+        toQuery = const mempty
+
+-- | /See:/ 'deleteScalingPolicyResponse' smart constructor.
+data DeleteScalingPolicyResponse =
+    DeleteScalingPolicyResponse'
+    deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DeleteScalingPolicyResponse' with the minimum fields required to make a request.
+--
+deleteScalingPolicyResponse
+    :: DeleteScalingPolicyResponse
+deleteScalingPolicyResponse = DeleteScalingPolicyResponse'
diff --git a/gen/Network/AWS/GameLift/DescribeAlias.hs b/gen/Network/AWS/GameLift/DescribeAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeAlias.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.GameLift.DescribeAlias
+-- 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)
+--
+-- Retrieves properties for a specified alias. To get the alias, specify an
+-- alias ID. If successful, an < Alias> object is returned.
+module Network.AWS.GameLift.DescribeAlias
+    (
+    -- * Creating a Request
+      describeAlias
+    , DescribeAlias
+    -- * Request Lenses
+    , dAliasId
+
+    -- * Destructuring the Response
+    , describeAliasResponse
+    , DescribeAliasResponse
+    -- * Response Lenses
+    , darsAlias
+    , darsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeAlias' smart constructor.
+newtype DescribeAlias = DescribeAlias'
+    { _dAliasId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dAliasId'
+describeAlias
+    :: Text -- ^ 'dAliasId'
+    -> DescribeAlias
+describeAlias pAliasId_ =
+    DescribeAlias'
+    { _dAliasId = pAliasId_
+    }
+
+-- | Unique identifier for a fleet alias. Specify the alias you want to
+-- retrieve.
+dAliasId :: Lens' DescribeAlias Text
+dAliasId = lens _dAliasId (\ s a -> s{_dAliasId = a});
+
+instance AWSRequest DescribeAlias where
+        type Rs DescribeAlias = DescribeAliasResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeAliasResponse' <$>
+                   (x .?> "Alias") <*> (pure (fromEnum s)))
+
+instance Hashable DescribeAlias
+
+instance ToHeaders DescribeAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeAlias" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeAlias where
+        toJSON DescribeAlias'{..}
+          = object (catMaybes [Just ("AliasId" .= _dAliasId)])
+
+instance ToPath DescribeAlias where
+        toPath = const "/"
+
+instance ToQuery DescribeAlias where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeAliasResponse' smart constructor.
+data DescribeAliasResponse = DescribeAliasResponse'
+    { _darsAlias          :: !(Maybe Alias)
+    , _darsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeAliasResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'darsAlias'
+--
+-- * 'darsResponseStatus'
+describeAliasResponse
+    :: Int -- ^ 'darsResponseStatus'
+    -> DescribeAliasResponse
+describeAliasResponse pResponseStatus_ =
+    DescribeAliasResponse'
+    { _darsAlias = Nothing
+    , _darsResponseStatus = pResponseStatus_
+    }
+
+-- | Object containing the requested alias.
+darsAlias :: Lens' DescribeAliasResponse (Maybe Alias)
+darsAlias = lens _darsAlias (\ s a -> s{_darsAlias = a});
+
+-- | The response status code.
+darsResponseStatus :: Lens' DescribeAliasResponse Int
+darsResponseStatus = lens _darsResponseStatus (\ s a -> s{_darsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribeBuild.hs b/gen/Network/AWS/GameLift/DescribeBuild.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeBuild.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.GameLift.DescribeBuild
+-- 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)
+--
+-- Retrieves properties for a build. To get a build record, specify a build
+-- ID. If successful, an object containing the build properties is
+-- returned.
+module Network.AWS.GameLift.DescribeBuild
+    (
+    -- * Creating a Request
+      describeBuild
+    , DescribeBuild
+    -- * Request Lenses
+    , dBuildId
+
+    -- * Destructuring the Response
+    , describeBuildResponse
+    , DescribeBuildResponse
+    -- * Response Lenses
+    , dbrsBuild
+    , dbrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeBuild' smart constructor.
+newtype DescribeBuild = DescribeBuild'
+    { _dBuildId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeBuild' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dBuildId'
+describeBuild
+    :: Text -- ^ 'dBuildId'
+    -> DescribeBuild
+describeBuild pBuildId_ =
+    DescribeBuild'
+    { _dBuildId = pBuildId_
+    }
+
+-- | Unique identifier for the build you want to retrieve properties for.
+dBuildId :: Lens' DescribeBuild Text
+dBuildId = lens _dBuildId (\ s a -> s{_dBuildId = a});
+
+instance AWSRequest DescribeBuild where
+        type Rs DescribeBuild = DescribeBuildResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeBuildResponse' <$>
+                   (x .?> "Build") <*> (pure (fromEnum s)))
+
+instance Hashable DescribeBuild
+
+instance ToHeaders DescribeBuild where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeBuild" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeBuild where
+        toJSON DescribeBuild'{..}
+          = object (catMaybes [Just ("BuildId" .= _dBuildId)])
+
+instance ToPath DescribeBuild where
+        toPath = const "/"
+
+instance ToQuery DescribeBuild where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeBuildResponse' smart constructor.
+data DescribeBuildResponse = DescribeBuildResponse'
+    { _dbrsBuild          :: !(Maybe Build)
+    , _dbrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeBuildResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dbrsBuild'
+--
+-- * 'dbrsResponseStatus'
+describeBuildResponse
+    :: Int -- ^ 'dbrsResponseStatus'
+    -> DescribeBuildResponse
+describeBuildResponse pResponseStatus_ =
+    DescribeBuildResponse'
+    { _dbrsBuild = Nothing
+    , _dbrsResponseStatus = pResponseStatus_
+    }
+
+-- | Set of properties describing the requested build.
+dbrsBuild :: Lens' DescribeBuildResponse (Maybe Build)
+dbrsBuild = lens _dbrsBuild (\ s a -> s{_dbrsBuild = a});
+
+-- | The response status code.
+dbrsResponseStatus :: Lens' DescribeBuildResponse Int
+dbrsResponseStatus = lens _dbrsResponseStatus (\ s a -> s{_dbrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribeEC2InstanceLimits.hs b/gen/Network/AWS/GameLift/DescribeEC2InstanceLimits.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeEC2InstanceLimits.hs
@@ -0,0 +1,145 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.GameLift.DescribeEC2InstanceLimits
+-- 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)
+--
+-- Retrieves the following information for the specified EC2 instance type:
+--
+-- -   maximum number of instances allowed per AWS account (service limit)
+-- -   current usage level for the AWS account
+--
+-- Service limits vary depending on region. Available regions for GameLift
+-- can be found in the AWS Management Console for GameLift (see the
+-- drop-down list in the upper right corner).
+module Network.AWS.GameLift.DescribeEC2InstanceLimits
+    (
+    -- * Creating a Request
+      describeEC2InstanceLimits
+    , DescribeEC2InstanceLimits
+    -- * Request Lenses
+    , deilEC2InstanceType
+
+    -- * Destructuring the Response
+    , describeEC2InstanceLimitsResponse
+    , DescribeEC2InstanceLimitsResponse
+    -- * Response Lenses
+    , deilrsEC2InstanceLimits
+    , deilrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeEC2InstanceLimits' smart constructor.
+newtype DescribeEC2InstanceLimits = DescribeEC2InstanceLimits'
+    { _deilEC2InstanceType :: Maybe EC2InstanceType
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeEC2InstanceLimits' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'deilEC2InstanceType'
+describeEC2InstanceLimits
+    :: DescribeEC2InstanceLimits
+describeEC2InstanceLimits =
+    DescribeEC2InstanceLimits'
+    { _deilEC2InstanceType = Nothing
+    }
+
+-- | Type of EC2 instances used in the fleet. EC2 instance types define the
+-- CPU, memory, storage, and networking capacity of the fleetaposs hosts.
+-- Amazon GameLift supports the EC2 instance types listed below. See
+-- <https://aws.amazon.com/ec2/instance-types/ Amazon EC2 Instance Types>
+-- for detailed descriptions of each. Leave this parameter blank to
+-- retrieve limits for all types.
+deilEC2InstanceType :: Lens' DescribeEC2InstanceLimits (Maybe EC2InstanceType)
+deilEC2InstanceType = lens _deilEC2InstanceType (\ s a -> s{_deilEC2InstanceType = a});
+
+instance AWSRequest DescribeEC2InstanceLimits where
+        type Rs DescribeEC2InstanceLimits =
+             DescribeEC2InstanceLimitsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeEC2InstanceLimitsResponse' <$>
+                   (x .?> "EC2InstanceLimits" .!@ mempty) <*>
+                     (pure (fromEnum s)))
+
+instance Hashable DescribeEC2InstanceLimits
+
+instance ToHeaders DescribeEC2InstanceLimits where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeEC2InstanceLimits" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeEC2InstanceLimits where
+        toJSON DescribeEC2InstanceLimits'{..}
+          = object
+              (catMaybes
+                 [("EC2InstanceType" .=) <$> _deilEC2InstanceType])
+
+instance ToPath DescribeEC2InstanceLimits where
+        toPath = const "/"
+
+instance ToQuery DescribeEC2InstanceLimits where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeEC2InstanceLimitsResponse' smart constructor.
+data DescribeEC2InstanceLimitsResponse = DescribeEC2InstanceLimitsResponse'
+    { _deilrsEC2InstanceLimits :: !(Maybe [EC2InstanceLimit])
+    , _deilrsResponseStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeEC2InstanceLimitsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'deilrsEC2InstanceLimits'
+--
+-- * 'deilrsResponseStatus'
+describeEC2InstanceLimitsResponse
+    :: Int -- ^ 'deilrsResponseStatus'
+    -> DescribeEC2InstanceLimitsResponse
+describeEC2InstanceLimitsResponse pResponseStatus_ =
+    DescribeEC2InstanceLimitsResponse'
+    { _deilrsEC2InstanceLimits = Nothing
+    , _deilrsResponseStatus = pResponseStatus_
+    }
+
+-- | Object containing the maximum number of instances for the specified
+-- instance type.
+deilrsEC2InstanceLimits :: Lens' DescribeEC2InstanceLimitsResponse [EC2InstanceLimit]
+deilrsEC2InstanceLimits = lens _deilrsEC2InstanceLimits (\ s a -> s{_deilrsEC2InstanceLimits = a}) . _Default . _Coerce;
+
+-- | The response status code.
+deilrsResponseStatus :: Lens' DescribeEC2InstanceLimitsResponse Int
+deilrsResponseStatus = lens _deilrsResponseStatus (\ s a -> s{_deilrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribeFleetAttributes.hs b/gen/Network/AWS/GameLift/DescribeFleetAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeFleetAttributes.hs
@@ -0,0 +1,187 @@
+{-# 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.GameLift.DescribeFleetAttributes
+-- 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)
+--
+-- Retrieves fleet properties, including metadata, status, and
+-- configuration, for one or more fleets. You can request attributes for
+-- all fleets, or specify a list of one or more fleet IDs. When requesting
+-- all fleets, use the pagination parameters to retrieve results as a set
+-- of sequential pages. If successful, a < FleetAttributes> object is
+-- returned for each requested fleet ID. When specifying a list of fleet
+-- IDs, attribute objects are returned only for fleets that currently
+-- exist.
+--
+-- Some API actions may limit the number of fleet IDs allowed in one
+-- request. If a request exceeds this limit, the request fails and the
+-- error message includes the maximum allowed.
+module Network.AWS.GameLift.DescribeFleetAttributes
+    (
+    -- * Creating a Request
+      describeFleetAttributes
+    , DescribeFleetAttributes
+    -- * Request Lenses
+    , dfaNextToken
+    , dfaLimit
+    , dfaFleetIds
+
+    -- * Destructuring the Response
+    , describeFleetAttributesResponse
+    , DescribeFleetAttributesResponse
+    -- * Response Lenses
+    , dfarsNextToken
+    , dfarsFleetAttributes
+    , dfarsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeFleetAttributes' smart constructor.
+data DescribeFleetAttributes = DescribeFleetAttributes'
+    { _dfaNextToken :: !(Maybe Text)
+    , _dfaLimit     :: !(Maybe Nat)
+    , _dfaFleetIds  :: !(Maybe (List1 Text))
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeFleetAttributes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfaNextToken'
+--
+-- * 'dfaLimit'
+--
+-- * 'dfaFleetIds'
+describeFleetAttributes
+    :: DescribeFleetAttributes
+describeFleetAttributes =
+    DescribeFleetAttributes'
+    { _dfaNextToken = Nothing
+    , _dfaLimit = Nothing
+    , _dfaFleetIds = Nothing
+    }
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value. This
+-- parameter is ignored when the request specifies one or a list of fleet
+-- IDs.
+dfaNextToken :: Lens' DescribeFleetAttributes (Maybe Text)
+dfaNextToken = lens _dfaNextToken (\ s a -> s{_dfaNextToken = a});
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages. This parameter
+-- is ignored when the request specifies one or a list of fleet IDs.
+dfaLimit :: Lens' DescribeFleetAttributes (Maybe Natural)
+dfaLimit = lens _dfaLimit (\ s a -> s{_dfaLimit = a}) . mapping _Nat;
+
+-- | Unique identifiers for the fleet(s) that you want to retrieve attributes
+-- for. Leave this parameter empty to retrieve attributes for all fleets.
+dfaFleetIds :: Lens' DescribeFleetAttributes (Maybe (NonEmpty Text))
+dfaFleetIds = lens _dfaFleetIds (\ s a -> s{_dfaFleetIds = a}) . mapping _List1;
+
+instance AWSRequest DescribeFleetAttributes where
+        type Rs DescribeFleetAttributes =
+             DescribeFleetAttributesResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeFleetAttributesResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "FleetAttributes" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeFleetAttributes
+
+instance ToHeaders DescribeFleetAttributes where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeFleetAttributes" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeFleetAttributes where
+        toJSON DescribeFleetAttributes'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _dfaNextToken,
+                  ("Limit" .=) <$> _dfaLimit,
+                  ("FleetIds" .=) <$> _dfaFleetIds])
+
+instance ToPath DescribeFleetAttributes where
+        toPath = const "/"
+
+instance ToQuery DescribeFleetAttributes where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeFleetAttributesResponse' smart constructor.
+data DescribeFleetAttributesResponse = DescribeFleetAttributesResponse'
+    { _dfarsNextToken       :: !(Maybe Text)
+    , _dfarsFleetAttributes :: !(Maybe [FleetAttributes])
+    , _dfarsResponseStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeFleetAttributesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfarsNextToken'
+--
+-- * 'dfarsFleetAttributes'
+--
+-- * 'dfarsResponseStatus'
+describeFleetAttributesResponse
+    :: Int -- ^ 'dfarsResponseStatus'
+    -> DescribeFleetAttributesResponse
+describeFleetAttributesResponse pResponseStatus_ =
+    DescribeFleetAttributesResponse'
+    { _dfarsNextToken = Nothing
+    , _dfarsFleetAttributes = Nothing
+    , _dfarsResponseStatus = pResponseStatus_
+    }
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+dfarsNextToken :: Lens' DescribeFleetAttributesResponse (Maybe Text)
+dfarsNextToken = lens _dfarsNextToken (\ s a -> s{_dfarsNextToken = a});
+
+-- | Collection of objects containing attribute metadata for each requested
+-- fleet ID.
+dfarsFleetAttributes :: Lens' DescribeFleetAttributesResponse [FleetAttributes]
+dfarsFleetAttributes = lens _dfarsFleetAttributes (\ s a -> s{_dfarsFleetAttributes = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dfarsResponseStatus :: Lens' DescribeFleetAttributesResponse Int
+dfarsResponseStatus = lens _dfarsResponseStatus (\ s a -> s{_dfarsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribeFleetCapacity.hs b/gen/Network/AWS/GameLift/DescribeFleetCapacity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeFleetCapacity.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.GameLift.DescribeFleetCapacity
+-- 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)
+--
+-- Retrieves the current status of fleet capacity for one or more fleets.
+-- This information includes the number of instances that have been
+-- requested for the fleet and the number currently active. You can request
+-- capacity for all fleets, or specify a list of one or more fleet IDs.
+-- When requesting all fleets, use the pagination parameters to retrieve
+-- results as a set of sequential pages. If successful, a < FleetCapacity>
+-- object is returned for each requested fleet ID. When specifying a list
+-- of fleet IDs, attribute objects are returned only for fleets that
+-- currently exist.
+--
+-- Some API actions may limit the number of fleet IDs allowed in one
+-- request. If a request exceeds this limit, the request fails and the
+-- error message includes the maximum allowed.
+module Network.AWS.GameLift.DescribeFleetCapacity
+    (
+    -- * Creating a Request
+      describeFleetCapacity
+    , DescribeFleetCapacity
+    -- * Request Lenses
+    , dfcNextToken
+    , dfcLimit
+    , dfcFleetIds
+
+    -- * Destructuring the Response
+    , describeFleetCapacityResponse
+    , DescribeFleetCapacityResponse
+    -- * Response Lenses
+    , dfcrsNextToken
+    , dfcrsFleetCapacity
+    , dfcrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeFleetCapacity' smart constructor.
+data DescribeFleetCapacity = DescribeFleetCapacity'
+    { _dfcNextToken :: !(Maybe Text)
+    , _dfcLimit     :: !(Maybe Nat)
+    , _dfcFleetIds  :: !(Maybe (List1 Text))
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeFleetCapacity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfcNextToken'
+--
+-- * 'dfcLimit'
+--
+-- * 'dfcFleetIds'
+describeFleetCapacity
+    :: DescribeFleetCapacity
+describeFleetCapacity =
+    DescribeFleetCapacity'
+    { _dfcNextToken = Nothing
+    , _dfcLimit = Nothing
+    , _dfcFleetIds = Nothing
+    }
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value. This
+-- parameter is ignored when the request specifies one or a list of fleet
+-- IDs.
+dfcNextToken :: Lens' DescribeFleetCapacity (Maybe Text)
+dfcNextToken = lens _dfcNextToken (\ s a -> s{_dfcNextToken = a});
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages. This parameter
+-- is ignored when the request specifies one or a list of fleet IDs.
+dfcLimit :: Lens' DescribeFleetCapacity (Maybe Natural)
+dfcLimit = lens _dfcLimit (\ s a -> s{_dfcLimit = a}) . mapping _Nat;
+
+-- | Unique identifier for the fleet(s) you want to retrieve capacity
+-- information for.
+dfcFleetIds :: Lens' DescribeFleetCapacity (Maybe (NonEmpty Text))
+dfcFleetIds = lens _dfcFleetIds (\ s a -> s{_dfcFleetIds = a}) . mapping _List1;
+
+instance AWSRequest DescribeFleetCapacity where
+        type Rs DescribeFleetCapacity =
+             DescribeFleetCapacityResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeFleetCapacityResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "FleetCapacity" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeFleetCapacity
+
+instance ToHeaders DescribeFleetCapacity where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeFleetCapacity" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeFleetCapacity where
+        toJSON DescribeFleetCapacity'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _dfcNextToken,
+                  ("Limit" .=) <$> _dfcLimit,
+                  ("FleetIds" .=) <$> _dfcFleetIds])
+
+instance ToPath DescribeFleetCapacity where
+        toPath = const "/"
+
+instance ToQuery DescribeFleetCapacity where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeFleetCapacityResponse' smart constructor.
+data DescribeFleetCapacityResponse = DescribeFleetCapacityResponse'
+    { _dfcrsNextToken      :: !(Maybe Text)
+    , _dfcrsFleetCapacity  :: !(Maybe [FleetCapacity])
+    , _dfcrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeFleetCapacityResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfcrsNextToken'
+--
+-- * 'dfcrsFleetCapacity'
+--
+-- * 'dfcrsResponseStatus'
+describeFleetCapacityResponse
+    :: Int -- ^ 'dfcrsResponseStatus'
+    -> DescribeFleetCapacityResponse
+describeFleetCapacityResponse pResponseStatus_ =
+    DescribeFleetCapacityResponse'
+    { _dfcrsNextToken = Nothing
+    , _dfcrsFleetCapacity = Nothing
+    , _dfcrsResponseStatus = pResponseStatus_
+    }
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+dfcrsNextToken :: Lens' DescribeFleetCapacityResponse (Maybe Text)
+dfcrsNextToken = lens _dfcrsNextToken (\ s a -> s{_dfcrsNextToken = a});
+
+-- | Collection of objects containing capacity information for each requested
+-- fleet ID. Leave this parameter empty to retrieve capacity information
+-- for all fleets.
+dfcrsFleetCapacity :: Lens' DescribeFleetCapacityResponse [FleetCapacity]
+dfcrsFleetCapacity = lens _dfcrsFleetCapacity (\ s a -> s{_dfcrsFleetCapacity = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dfcrsResponseStatus :: Lens' DescribeFleetCapacityResponse Int
+dfcrsResponseStatus = lens _dfcrsResponseStatus (\ s a -> s{_dfcrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribeFleetEvents.hs b/gen/Network/AWS/GameLift/DescribeFleetEvents.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeFleetEvents.hs
@@ -0,0 +1,201 @@
+{-# 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.GameLift.DescribeFleetEvents
+-- 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)
+--
+-- Retrieves entries from the fleet event log. You can specify a time range
+-- to limit the result set. Use the pagination parameters to retrieve
+-- results as a set of sequential pages. If successful, a collection of
+-- event log entries matching the request are returned.
+module Network.AWS.GameLift.DescribeFleetEvents
+    (
+    -- * Creating a Request
+      describeFleetEvents
+    , DescribeFleetEvents
+    -- * Request Lenses
+    , dfeStartTime
+    , dfeNextToken
+    , dfeEndTime
+    , dfeLimit
+    , dfeFleetId
+
+    -- * Destructuring the Response
+    , describeFleetEventsResponse
+    , DescribeFleetEventsResponse
+    -- * Response Lenses
+    , dfersNextToken
+    , dfersEvents
+    , dfersResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeFleetEvents' smart constructor.
+data DescribeFleetEvents = DescribeFleetEvents'
+    { _dfeStartTime :: !(Maybe POSIX)
+    , _dfeNextToken :: !(Maybe Text)
+    , _dfeEndTime   :: !(Maybe POSIX)
+    , _dfeLimit     :: !(Maybe Nat)
+    , _dfeFleetId   :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeFleetEvents' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfeStartTime'
+--
+-- * 'dfeNextToken'
+--
+-- * 'dfeEndTime'
+--
+-- * 'dfeLimit'
+--
+-- * 'dfeFleetId'
+describeFleetEvents
+    :: Text -- ^ 'dfeFleetId'
+    -> DescribeFleetEvents
+describeFleetEvents pFleetId_ =
+    DescribeFleetEvents'
+    { _dfeStartTime = Nothing
+    , _dfeNextToken = Nothing
+    , _dfeEndTime = Nothing
+    , _dfeLimit = Nothing
+    , _dfeFleetId = pFleetId_
+    }
+
+-- | Earliest date to retrieve event logs for. If no start time is specified,
+-- this call returns entries starting from when the fleet was created to
+-- the specified end time. Format is an integer representing the number of
+-- seconds since the Unix epoch (Unix time).
+dfeStartTime :: Lens' DescribeFleetEvents (Maybe UTCTime)
+dfeStartTime = lens _dfeStartTime (\ s a -> s{_dfeStartTime = a}) . mapping _Time;
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value.
+dfeNextToken :: Lens' DescribeFleetEvents (Maybe Text)
+dfeNextToken = lens _dfeNextToken (\ s a -> s{_dfeNextToken = a});
+
+-- | Most recent date to retrieve event logs for. If no end time is
+-- specified, this call returns entries from the specified start time up to
+-- the present. Format is an integer representing the number of seconds
+-- since the Unix epoch (Unix time).
+dfeEndTime :: Lens' DescribeFleetEvents (Maybe UTCTime)
+dfeEndTime = lens _dfeEndTime (\ s a -> s{_dfeEndTime = a}) . mapping _Time;
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages.
+dfeLimit :: Lens' DescribeFleetEvents (Maybe Natural)
+dfeLimit = lens _dfeLimit (\ s a -> s{_dfeLimit = a}) . mapping _Nat;
+
+-- | Unique identifier for the fleet to get event logs for.
+dfeFleetId :: Lens' DescribeFleetEvents Text
+dfeFleetId = lens _dfeFleetId (\ s a -> s{_dfeFleetId = a});
+
+instance AWSRequest DescribeFleetEvents where
+        type Rs DescribeFleetEvents =
+             DescribeFleetEventsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeFleetEventsResponse' <$>
+                   (x .?> "NextToken") <*> (x .?> "Events" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeFleetEvents
+
+instance ToHeaders DescribeFleetEvents where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeFleetEvents" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeFleetEvents where
+        toJSON DescribeFleetEvents'{..}
+          = object
+              (catMaybes
+                 [("StartTime" .=) <$> _dfeStartTime,
+                  ("NextToken" .=) <$> _dfeNextToken,
+                  ("EndTime" .=) <$> _dfeEndTime,
+                  ("Limit" .=) <$> _dfeLimit,
+                  Just ("FleetId" .= _dfeFleetId)])
+
+instance ToPath DescribeFleetEvents where
+        toPath = const "/"
+
+instance ToQuery DescribeFleetEvents where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeFleetEventsResponse' smart constructor.
+data DescribeFleetEventsResponse = DescribeFleetEventsResponse'
+    { _dfersNextToken      :: !(Maybe Text)
+    , _dfersEvents         :: !(Maybe [Event])
+    , _dfersResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeFleetEventsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfersNextToken'
+--
+-- * 'dfersEvents'
+--
+-- * 'dfersResponseStatus'
+describeFleetEventsResponse
+    :: Int -- ^ 'dfersResponseStatus'
+    -> DescribeFleetEventsResponse
+describeFleetEventsResponse pResponseStatus_ =
+    DescribeFleetEventsResponse'
+    { _dfersNextToken = Nothing
+    , _dfersEvents = Nothing
+    , _dfersResponseStatus = pResponseStatus_
+    }
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+dfersNextToken :: Lens' DescribeFleetEventsResponse (Maybe Text)
+dfersNextToken = lens _dfersNextToken (\ s a -> s{_dfersNextToken = a});
+
+-- | Collection of objects containing event log entries for the specified
+-- fleet.
+dfersEvents :: Lens' DescribeFleetEventsResponse [Event]
+dfersEvents = lens _dfersEvents (\ s a -> s{_dfersEvents = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dfersResponseStatus :: Lens' DescribeFleetEventsResponse Int
+dfersResponseStatus = lens _dfersResponseStatus (\ s a -> s{_dfersResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribeFleetPortSettings.hs b/gen/Network/AWS/GameLift/DescribeFleetPortSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeFleetPortSettings.hs
@@ -0,0 +1,136 @@
+{-# 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.GameLift.DescribeFleetPortSettings
+-- 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)
+--
+-- Retrieves the port settings for a fleet. Port settings are used to limit
+-- incoming traffic access to game servers in the fleet. To get a fleet\'s
+-- port settings, specify a fleet ID. If successful, an < IpPermission>
+-- object is returned for the requested fleet ID. If the requested fleet
+-- has been deleted, the result set will be empty.
+module Network.AWS.GameLift.DescribeFleetPortSettings
+    (
+    -- * Creating a Request
+      describeFleetPortSettings
+    , DescribeFleetPortSettings
+    -- * Request Lenses
+    , dfpsFleetId
+
+    -- * Destructuring the Response
+    , describeFleetPortSettingsResponse
+    , DescribeFleetPortSettingsResponse
+    -- * Response Lenses
+    , dfpsrsInboundPermissions
+    , dfpsrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeFleetPortSettings' smart constructor.
+newtype DescribeFleetPortSettings = DescribeFleetPortSettings'
+    { _dfpsFleetId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeFleetPortSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfpsFleetId'
+describeFleetPortSettings
+    :: Text -- ^ 'dfpsFleetId'
+    -> DescribeFleetPortSettings
+describeFleetPortSettings pFleetId_ =
+    DescribeFleetPortSettings'
+    { _dfpsFleetId = pFleetId_
+    }
+
+-- | Unique identifier for the fleet you want to retrieve port settings for.
+dfpsFleetId :: Lens' DescribeFleetPortSettings Text
+dfpsFleetId = lens _dfpsFleetId (\ s a -> s{_dfpsFleetId = a});
+
+instance AWSRequest DescribeFleetPortSettings where
+        type Rs DescribeFleetPortSettings =
+             DescribeFleetPortSettingsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeFleetPortSettingsResponse' <$>
+                   (x .?> "InboundPermissions" .!@ mempty) <*>
+                     (pure (fromEnum s)))
+
+instance Hashable DescribeFleetPortSettings
+
+instance ToHeaders DescribeFleetPortSettings where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeFleetPortSettings" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeFleetPortSettings where
+        toJSON DescribeFleetPortSettings'{..}
+          = object
+              (catMaybes [Just ("FleetId" .= _dfpsFleetId)])
+
+instance ToPath DescribeFleetPortSettings where
+        toPath = const "/"
+
+instance ToQuery DescribeFleetPortSettings where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeFleetPortSettingsResponse' smart constructor.
+data DescribeFleetPortSettingsResponse = DescribeFleetPortSettingsResponse'
+    { _dfpsrsInboundPermissions :: !(Maybe [IPPermission])
+    , _dfpsrsResponseStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeFleetPortSettingsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfpsrsInboundPermissions'
+--
+-- * 'dfpsrsResponseStatus'
+describeFleetPortSettingsResponse
+    :: Int -- ^ 'dfpsrsResponseStatus'
+    -> DescribeFleetPortSettingsResponse
+describeFleetPortSettingsResponse pResponseStatus_ =
+    DescribeFleetPortSettingsResponse'
+    { _dfpsrsInboundPermissions = Nothing
+    , _dfpsrsResponseStatus = pResponseStatus_
+    }
+
+-- | Object containing port settings for the requested fleet ID.
+dfpsrsInboundPermissions :: Lens' DescribeFleetPortSettingsResponse [IPPermission]
+dfpsrsInboundPermissions = lens _dfpsrsInboundPermissions (\ s a -> s{_dfpsrsInboundPermissions = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dfpsrsResponseStatus :: Lens' DescribeFleetPortSettingsResponse Int
+dfpsrsResponseStatus = lens _dfpsrsResponseStatus (\ s a -> s{_dfpsrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribeFleetUtilization.hs b/gen/Network/AWS/GameLift/DescribeFleetUtilization.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeFleetUtilization.hs
@@ -0,0 +1,187 @@
+{-# 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.GameLift.DescribeFleetUtilization
+-- 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)
+--
+-- Retrieves utilization statistics for one or more fleets. You can request
+-- utilization data for all fleets, or specify a list of one or more fleet
+-- IDs. When requesting all fleets, use the pagination parameters to
+-- retrieve results as a set of sequential pages. If successful, a
+-- < FleetUtilization> object is returned for each requested fleet ID. When
+-- specifying a list of fleet IDs, utilization objects are returned only
+-- for fleets that currently exist.
+--
+-- Some API actions may limit the number of fleet IDs allowed in one
+-- request. If a request exceeds this limit, the request fails and the
+-- error message includes the maximum allowed.
+module Network.AWS.GameLift.DescribeFleetUtilization
+    (
+    -- * Creating a Request
+      describeFleetUtilization
+    , DescribeFleetUtilization
+    -- * Request Lenses
+    , dfuNextToken
+    , dfuLimit
+    , dfuFleetIds
+
+    -- * Destructuring the Response
+    , describeFleetUtilizationResponse
+    , DescribeFleetUtilizationResponse
+    -- * Response Lenses
+    , dfursNextToken
+    , dfursFleetUtilization
+    , dfursResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeFleetUtilization' smart constructor.
+data DescribeFleetUtilization = DescribeFleetUtilization'
+    { _dfuNextToken :: !(Maybe Text)
+    , _dfuLimit     :: !(Maybe Nat)
+    , _dfuFleetIds  :: !(Maybe (List1 Text))
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeFleetUtilization' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfuNextToken'
+--
+-- * 'dfuLimit'
+--
+-- * 'dfuFleetIds'
+describeFleetUtilization
+    :: DescribeFleetUtilization
+describeFleetUtilization =
+    DescribeFleetUtilization'
+    { _dfuNextToken = Nothing
+    , _dfuLimit = Nothing
+    , _dfuFleetIds = Nothing
+    }
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value. This
+-- parameter is ignored when the request specifies one or a list of fleet
+-- IDs.
+dfuNextToken :: Lens' DescribeFleetUtilization (Maybe Text)
+dfuNextToken = lens _dfuNextToken (\ s a -> s{_dfuNextToken = a});
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages. This parameter
+-- is ignored when the request specifies one or a list of fleet IDs.
+dfuLimit :: Lens' DescribeFleetUtilization (Maybe Natural)
+dfuLimit = lens _dfuLimit (\ s a -> s{_dfuLimit = a}) . mapping _Nat;
+
+-- | Unique identifier for the fleet(s) you want to retrieve utilization data
+-- for. Leave this parameter empty to retrieve utilization data for all
+-- fleets.
+dfuFleetIds :: Lens' DescribeFleetUtilization (Maybe (NonEmpty Text))
+dfuFleetIds = lens _dfuFleetIds (\ s a -> s{_dfuFleetIds = a}) . mapping _List1;
+
+instance AWSRequest DescribeFleetUtilization where
+        type Rs DescribeFleetUtilization =
+             DescribeFleetUtilizationResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeFleetUtilizationResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "FleetUtilization" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeFleetUtilization
+
+instance ToHeaders DescribeFleetUtilization where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeFleetUtilization" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeFleetUtilization where
+        toJSON DescribeFleetUtilization'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _dfuNextToken,
+                  ("Limit" .=) <$> _dfuLimit,
+                  ("FleetIds" .=) <$> _dfuFleetIds])
+
+instance ToPath DescribeFleetUtilization where
+        toPath = const "/"
+
+instance ToQuery DescribeFleetUtilization where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeFleetUtilizationResponse' smart constructor.
+data DescribeFleetUtilizationResponse = DescribeFleetUtilizationResponse'
+    { _dfursNextToken        :: !(Maybe Text)
+    , _dfursFleetUtilization :: !(Maybe [FleetUtilization])
+    , _dfursResponseStatus   :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeFleetUtilizationResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dfursNextToken'
+--
+-- * 'dfursFleetUtilization'
+--
+-- * 'dfursResponseStatus'
+describeFleetUtilizationResponse
+    :: Int -- ^ 'dfursResponseStatus'
+    -> DescribeFleetUtilizationResponse
+describeFleetUtilizationResponse pResponseStatus_ =
+    DescribeFleetUtilizationResponse'
+    { _dfursNextToken = Nothing
+    , _dfursFleetUtilization = Nothing
+    , _dfursResponseStatus = pResponseStatus_
+    }
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+dfursNextToken :: Lens' DescribeFleetUtilizationResponse (Maybe Text)
+dfursNextToken = lens _dfursNextToken (\ s a -> s{_dfursNextToken = a});
+
+-- | Collection of objects containing utilization information for each
+-- requested fleet ID.
+dfursFleetUtilization :: Lens' DescribeFleetUtilizationResponse [FleetUtilization]
+dfursFleetUtilization = lens _dfursFleetUtilization (\ s a -> s{_dfursFleetUtilization = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dfursResponseStatus :: Lens' DescribeFleetUtilizationResponse Int
+dfursResponseStatus = lens _dfursResponseStatus (\ s a -> s{_dfursResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribeGameSessionDetails.hs b/gen/Network/AWS/GameLift/DescribeGameSessionDetails.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeGameSessionDetails.hs
@@ -0,0 +1,219 @@
+{-# 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.GameLift.DescribeGameSessionDetails
+-- 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)
+--
+-- Retrieves properties, including the protection policy in force, for one
+-- or more game sessions. This action can be used in several ways: (1)
+-- provide a /GameSessionId/ to request details for a specific game
+-- session; (2) provide either a /FleetId/ or an /AliasId/ to request
+-- properties for all game sessions running on a fleet.
+--
+-- To get game session record(s), specify just one of the following: game
+-- session ID, fleet ID, or alias ID. You can filter this request by game
+-- session status. Use the pagination parameters to retrieve results as a
+-- set of sequential pages. If successful, a < GameSessionDetail> object is
+-- returned for each session matching the request.
+module Network.AWS.GameLift.DescribeGameSessionDetails
+    (
+    -- * Creating a Request
+      describeGameSessionDetails
+    , DescribeGameSessionDetails
+    -- * Request Lenses
+    , dgsdGameSessionId
+    , dgsdAliasId
+    , dgsdNextToken
+    , dgsdStatusFilter
+    , dgsdLimit
+    , dgsdFleetId
+
+    -- * Destructuring the Response
+    , describeGameSessionDetailsResponse
+    , DescribeGameSessionDetailsResponse
+    -- * Response Lenses
+    , dgsdrsGameSessionDetails
+    , dgsdrsNextToken
+    , dgsdrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeGameSessionDetails' smart constructor.
+data DescribeGameSessionDetails = DescribeGameSessionDetails'
+    { _dgsdGameSessionId :: !(Maybe Text)
+    , _dgsdAliasId       :: !(Maybe Text)
+    , _dgsdNextToken     :: !(Maybe Text)
+    , _dgsdStatusFilter  :: !(Maybe Text)
+    , _dgsdLimit         :: !(Maybe Nat)
+    , _dgsdFleetId       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeGameSessionDetails' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dgsdGameSessionId'
+--
+-- * 'dgsdAliasId'
+--
+-- * 'dgsdNextToken'
+--
+-- * 'dgsdStatusFilter'
+--
+-- * 'dgsdLimit'
+--
+-- * 'dgsdFleetId'
+describeGameSessionDetails
+    :: DescribeGameSessionDetails
+describeGameSessionDetails =
+    DescribeGameSessionDetails'
+    { _dgsdGameSessionId = Nothing
+    , _dgsdAliasId = Nothing
+    , _dgsdNextToken = Nothing
+    , _dgsdStatusFilter = Nothing
+    , _dgsdLimit = Nothing
+    , _dgsdFleetId = Nothing
+    }
+
+-- | Unique identifier for a game session. Specify the game session to
+-- retrieve information on.
+dgsdGameSessionId :: Lens' DescribeGameSessionDetails (Maybe Text)
+dgsdGameSessionId = lens _dgsdGameSessionId (\ s a -> s{_dgsdGameSessionId = a});
+
+-- | Unique identifier for a fleet alias. Specify an alias to retrieve
+-- information on all game sessions active on the fleet.
+dgsdAliasId :: Lens' DescribeGameSessionDetails (Maybe Text)
+dgsdAliasId = lens _dgsdAliasId (\ s a -> s{_dgsdAliasId = a});
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value.
+dgsdNextToken :: Lens' DescribeGameSessionDetails (Maybe Text)
+dgsdNextToken = lens _dgsdNextToken (\ s a -> s{_dgsdNextToken = a});
+
+-- | Game session status to filter results on. Possible game session states
+-- include ACTIVE, TERMINATED, ACTIVATING and TERMINATING (the last two are
+-- transitory).
+dgsdStatusFilter :: Lens' DescribeGameSessionDetails (Maybe Text)
+dgsdStatusFilter = lens _dgsdStatusFilter (\ s a -> s{_dgsdStatusFilter = a});
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages.
+dgsdLimit :: Lens' DescribeGameSessionDetails (Maybe Natural)
+dgsdLimit = lens _dgsdLimit (\ s a -> s{_dgsdLimit = a}) . mapping _Nat;
+
+-- | Unique identifier for a fleet. Specify a fleet to retrieve information
+-- on all game sessions active on the fleet.
+dgsdFleetId :: Lens' DescribeGameSessionDetails (Maybe Text)
+dgsdFleetId = lens _dgsdFleetId (\ s a -> s{_dgsdFleetId = a});
+
+instance AWSRequest DescribeGameSessionDetails where
+        type Rs DescribeGameSessionDetails =
+             DescribeGameSessionDetailsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeGameSessionDetailsResponse' <$>
+                   (x .?> "GameSessionDetails" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeGameSessionDetails
+
+instance ToHeaders DescribeGameSessionDetails where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeGameSessionDetails" ::
+                       ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeGameSessionDetails where
+        toJSON DescribeGameSessionDetails'{..}
+          = object
+              (catMaybes
+                 [("GameSessionId" .=) <$> _dgsdGameSessionId,
+                  ("AliasId" .=) <$> _dgsdAliasId,
+                  ("NextToken" .=) <$> _dgsdNextToken,
+                  ("StatusFilter" .=) <$> _dgsdStatusFilter,
+                  ("Limit" .=) <$> _dgsdLimit,
+                  ("FleetId" .=) <$> _dgsdFleetId])
+
+instance ToPath DescribeGameSessionDetails where
+        toPath = const "/"
+
+instance ToQuery DescribeGameSessionDetails where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeGameSessionDetailsResponse' smart constructor.
+data DescribeGameSessionDetailsResponse = DescribeGameSessionDetailsResponse'
+    { _dgsdrsGameSessionDetails :: !(Maybe [GameSessionDetail])
+    , _dgsdrsNextToken          :: !(Maybe Text)
+    , _dgsdrsResponseStatus     :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeGameSessionDetailsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dgsdrsGameSessionDetails'
+--
+-- * 'dgsdrsNextToken'
+--
+-- * 'dgsdrsResponseStatus'
+describeGameSessionDetailsResponse
+    :: Int -- ^ 'dgsdrsResponseStatus'
+    -> DescribeGameSessionDetailsResponse
+describeGameSessionDetailsResponse pResponseStatus_ =
+    DescribeGameSessionDetailsResponse'
+    { _dgsdrsGameSessionDetails = Nothing
+    , _dgsdrsNextToken = Nothing
+    , _dgsdrsResponseStatus = pResponseStatus_
+    }
+
+-- | Collection of objects containing game session properties and the
+-- protection policy currently in force for each session matching the
+-- request.
+dgsdrsGameSessionDetails :: Lens' DescribeGameSessionDetailsResponse [GameSessionDetail]
+dgsdrsGameSessionDetails = lens _dgsdrsGameSessionDetails (\ s a -> s{_dgsdrsGameSessionDetails = a}) . _Default . _Coerce;
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+dgsdrsNextToken :: Lens' DescribeGameSessionDetailsResponse (Maybe Text)
+dgsdrsNextToken = lens _dgsdrsNextToken (\ s a -> s{_dgsdrsNextToken = a});
+
+-- | The response status code.
+dgsdrsResponseStatus :: Lens' DescribeGameSessionDetailsResponse Int
+dgsdrsResponseStatus = lens _dgsdrsResponseStatus (\ s a -> s{_dgsdrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribeGameSessions.hs b/gen/Network/AWS/GameLift/DescribeGameSessions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeGameSessions.hs
@@ -0,0 +1,217 @@
+{-# 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.GameLift.DescribeGameSessions
+-- 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)
+--
+-- Retrieves properties for one or more game sessions. This action can be
+-- used in several ways: (1) provide a /GameSessionId/ to request
+-- properties for a specific game session; (2) provide a /FleetId/ or an
+-- /AliasId/ to request properties for all game sessions running on a
+-- fleet.
+--
+-- To get game session record(s), specify just one of the following: game
+-- session ID, fleet ID, or alias ID. You can filter this request by game
+-- session status. Use the pagination parameters to retrieve results as a
+-- set of sequential pages. If successful, a < GameSession> object is
+-- returned for each session matching the request.
+module Network.AWS.GameLift.DescribeGameSessions
+    (
+    -- * Creating a Request
+      describeGameSessions
+    , DescribeGameSessions
+    -- * Request Lenses
+    , dgsGameSessionId
+    , dgsAliasId
+    , dgsNextToken
+    , dgsStatusFilter
+    , dgsLimit
+    , dgsFleetId
+
+    -- * Destructuring the Response
+    , describeGameSessionsResponse
+    , DescribeGameSessionsResponse
+    -- * Response Lenses
+    , dgsrsGameSessions
+    , dgsrsNextToken
+    , dgsrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeGameSessions' smart constructor.
+data DescribeGameSessions = DescribeGameSessions'
+    { _dgsGameSessionId :: !(Maybe Text)
+    , _dgsAliasId       :: !(Maybe Text)
+    , _dgsNextToken     :: !(Maybe Text)
+    , _dgsStatusFilter  :: !(Maybe Text)
+    , _dgsLimit         :: !(Maybe Nat)
+    , _dgsFleetId       :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeGameSessions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dgsGameSessionId'
+--
+-- * 'dgsAliasId'
+--
+-- * 'dgsNextToken'
+--
+-- * 'dgsStatusFilter'
+--
+-- * 'dgsLimit'
+--
+-- * 'dgsFleetId'
+describeGameSessions
+    :: DescribeGameSessions
+describeGameSessions =
+    DescribeGameSessions'
+    { _dgsGameSessionId = Nothing
+    , _dgsAliasId = Nothing
+    , _dgsNextToken = Nothing
+    , _dgsStatusFilter = Nothing
+    , _dgsLimit = Nothing
+    , _dgsFleetId = Nothing
+    }
+
+-- | Unique identifier for a game session. Specify the game session to
+-- retrieve information on.
+dgsGameSessionId :: Lens' DescribeGameSessions (Maybe Text)
+dgsGameSessionId = lens _dgsGameSessionId (\ s a -> s{_dgsGameSessionId = a});
+
+-- | Unique identifier for a fleet alias. Specify an alias to retrieve
+-- information on all game sessions active on the fleet.
+dgsAliasId :: Lens' DescribeGameSessions (Maybe Text)
+dgsAliasId = lens _dgsAliasId (\ s a -> s{_dgsAliasId = a});
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value.
+dgsNextToken :: Lens' DescribeGameSessions (Maybe Text)
+dgsNextToken = lens _dgsNextToken (\ s a -> s{_dgsNextToken = a});
+
+-- | Game session status to filter results on. Possible game session states
+-- include ACTIVE, TERMINATED, ACTIVATING and TERMINATING (the last two are
+-- transitory).
+dgsStatusFilter :: Lens' DescribeGameSessions (Maybe Text)
+dgsStatusFilter = lens _dgsStatusFilter (\ s a -> s{_dgsStatusFilter = a});
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages.
+dgsLimit :: Lens' DescribeGameSessions (Maybe Natural)
+dgsLimit = lens _dgsLimit (\ s a -> s{_dgsLimit = a}) . mapping _Nat;
+
+-- | Unique identifier for a fleet. Specify a fleet to retrieve information
+-- on all game sessions active on the fleet.
+dgsFleetId :: Lens' DescribeGameSessions (Maybe Text)
+dgsFleetId = lens _dgsFleetId (\ s a -> s{_dgsFleetId = a});
+
+instance AWSRequest DescribeGameSessions where
+        type Rs DescribeGameSessions =
+             DescribeGameSessionsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeGameSessionsResponse' <$>
+                   (x .?> "GameSessions" .!@ mempty) <*>
+                     (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeGameSessions
+
+instance ToHeaders DescribeGameSessions where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeGameSessions" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeGameSessions where
+        toJSON DescribeGameSessions'{..}
+          = object
+              (catMaybes
+                 [("GameSessionId" .=) <$> _dgsGameSessionId,
+                  ("AliasId" .=) <$> _dgsAliasId,
+                  ("NextToken" .=) <$> _dgsNextToken,
+                  ("StatusFilter" .=) <$> _dgsStatusFilter,
+                  ("Limit" .=) <$> _dgsLimit,
+                  ("FleetId" .=) <$> _dgsFleetId])
+
+instance ToPath DescribeGameSessions where
+        toPath = const "/"
+
+instance ToQuery DescribeGameSessions where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeGameSessionsResponse' smart constructor.
+data DescribeGameSessionsResponse = DescribeGameSessionsResponse'
+    { _dgsrsGameSessions   :: !(Maybe [GameSession])
+    , _dgsrsNextToken      :: !(Maybe Text)
+    , _dgsrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeGameSessionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dgsrsGameSessions'
+--
+-- * 'dgsrsNextToken'
+--
+-- * 'dgsrsResponseStatus'
+describeGameSessionsResponse
+    :: Int -- ^ 'dgsrsResponseStatus'
+    -> DescribeGameSessionsResponse
+describeGameSessionsResponse pResponseStatus_ =
+    DescribeGameSessionsResponse'
+    { _dgsrsGameSessions = Nothing
+    , _dgsrsNextToken = Nothing
+    , _dgsrsResponseStatus = pResponseStatus_
+    }
+
+-- | Collection of objects containing game session properties for each
+-- session matching the request.
+dgsrsGameSessions :: Lens' DescribeGameSessionsResponse [GameSession]
+dgsrsGameSessions = lens _dgsrsGameSessions (\ s a -> s{_dgsrsGameSessions = a}) . _Default . _Coerce;
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+dgsrsNextToken :: Lens' DescribeGameSessionsResponse (Maybe Text)
+dgsrsNextToken = lens _dgsrsNextToken (\ s a -> s{_dgsrsNextToken = a});
+
+-- | The response status code.
+dgsrsResponseStatus :: Lens' DescribeGameSessionsResponse Int
+dgsrsResponseStatus = lens _dgsrsResponseStatus (\ s a -> s{_dgsrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribePlayerSessions.hs b/gen/Network/AWS/GameLift/DescribePlayerSessions.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribePlayerSessions.hs
@@ -0,0 +1,228 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.GameLift.DescribePlayerSessions
+-- 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)
+--
+-- Retrieves properties for one or more player sessions. This action can be
+-- used in several ways: (1) provide a /PlayerSessionId/ parameter to
+-- request properties for a specific player session; (2) provide a
+-- /GameSessionId/ parameter to request properties for all player sessions
+-- in the specified game session; (3) provide a /PlayerId/ parameter to
+-- request properties for all player sessions of a specified player.
+--
+-- To get game session record(s), specify only one of the following: a
+-- player session ID, a game session ID, or a player ID. You can filter
+-- this request by player session status. Use the pagination parameters to
+-- retrieve results as a set of sequential pages. If successful, a
+-- < PlayerSession> object is returned for each session matching the
+-- request.
+module Network.AWS.GameLift.DescribePlayerSessions
+    (
+    -- * Creating a Request
+      describePlayerSessions
+    , DescribePlayerSessions
+    -- * Request Lenses
+    , dpsGameSessionId
+    , dpsNextToken
+    , dpsLimit
+    , dpsPlayerSessionId
+    , dpsPlayerId
+    , dpsPlayerSessionStatusFilter
+
+    -- * Destructuring the Response
+    , describePlayerSessionsResponse
+    , DescribePlayerSessionsResponse
+    -- * Response Lenses
+    , dpsrsNextToken
+    , dpsrsPlayerSessions
+    , dpsrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describePlayerSessions' smart constructor.
+data DescribePlayerSessions = DescribePlayerSessions'
+    { _dpsGameSessionId             :: !(Maybe Text)
+    , _dpsNextToken                 :: !(Maybe Text)
+    , _dpsLimit                     :: !(Maybe Nat)
+    , _dpsPlayerSessionId           :: !(Maybe Text)
+    , _dpsPlayerId                  :: !(Maybe Text)
+    , _dpsPlayerSessionStatusFilter :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribePlayerSessions' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dpsGameSessionId'
+--
+-- * 'dpsNextToken'
+--
+-- * 'dpsLimit'
+--
+-- * 'dpsPlayerSessionId'
+--
+-- * 'dpsPlayerId'
+--
+-- * 'dpsPlayerSessionStatusFilter'
+describePlayerSessions
+    :: DescribePlayerSessions
+describePlayerSessions =
+    DescribePlayerSessions'
+    { _dpsGameSessionId = Nothing
+    , _dpsNextToken = Nothing
+    , _dpsLimit = Nothing
+    , _dpsPlayerSessionId = Nothing
+    , _dpsPlayerId = Nothing
+    , _dpsPlayerSessionStatusFilter = Nothing
+    }
+
+-- | Unique identifier for a game session.
+dpsGameSessionId :: Lens' DescribePlayerSessions (Maybe Text)
+dpsGameSessionId = lens _dpsGameSessionId (\ s a -> s{_dpsGameSessionId = a});
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value. If a player
+-- session ID is specified, this parameter is ignored.
+dpsNextToken :: Lens' DescribePlayerSessions (Maybe Text)
+dpsNextToken = lens _dpsNextToken (\ s a -> s{_dpsNextToken = a});
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages. If a player
+-- session ID is specified, this parameter is ignored.
+dpsLimit :: Lens' DescribePlayerSessions (Maybe Natural)
+dpsLimit = lens _dpsLimit (\ s a -> s{_dpsLimit = a}) . mapping _Nat;
+
+-- | Unique identifier for a player session.
+dpsPlayerSessionId :: Lens' DescribePlayerSessions (Maybe Text)
+dpsPlayerSessionId = lens _dpsPlayerSessionId (\ s a -> s{_dpsPlayerSessionId = a});
+
+-- | Unique identifier for a player.
+dpsPlayerId :: Lens' DescribePlayerSessions (Maybe Text)
+dpsPlayerId = lens _dpsPlayerId (\ s a -> s{_dpsPlayerId = a});
+
+-- | Player session status to filter results on. Possible player session
+-- states include:
+--
+-- -   RESERVED: The player session request has been received, but the
+--     player has not yet connected to the game server and\/or been
+--     validated.
+-- -   ACTIVE: The player has been validated by the game server and is
+--     currently connected.
+-- -   COMPLETED: The player connection has been dropped.
+-- -   TIMEDOUT: A player session request was received, but the player did
+--     not connect and\/or was not validated within the time-out limit (60
+--     seconds).
+dpsPlayerSessionStatusFilter :: Lens' DescribePlayerSessions (Maybe Text)
+dpsPlayerSessionStatusFilter = lens _dpsPlayerSessionStatusFilter (\ s a -> s{_dpsPlayerSessionStatusFilter = a});
+
+instance AWSRequest DescribePlayerSessions where
+        type Rs DescribePlayerSessions =
+             DescribePlayerSessionsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribePlayerSessionsResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "PlayerSessions" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribePlayerSessions
+
+instance ToHeaders DescribePlayerSessions where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribePlayerSessions" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribePlayerSessions where
+        toJSON DescribePlayerSessions'{..}
+          = object
+              (catMaybes
+                 [("GameSessionId" .=) <$> _dpsGameSessionId,
+                  ("NextToken" .=) <$> _dpsNextToken,
+                  ("Limit" .=) <$> _dpsLimit,
+                  ("PlayerSessionId" .=) <$> _dpsPlayerSessionId,
+                  ("PlayerId" .=) <$> _dpsPlayerId,
+                  ("PlayerSessionStatusFilter" .=) <$>
+                    _dpsPlayerSessionStatusFilter])
+
+instance ToPath DescribePlayerSessions where
+        toPath = const "/"
+
+instance ToQuery DescribePlayerSessions where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describePlayerSessionsResponse' smart constructor.
+data DescribePlayerSessionsResponse = DescribePlayerSessionsResponse'
+    { _dpsrsNextToken      :: !(Maybe Text)
+    , _dpsrsPlayerSessions :: !(Maybe [PlayerSession])
+    , _dpsrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribePlayerSessionsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dpsrsNextToken'
+--
+-- * 'dpsrsPlayerSessions'
+--
+-- * 'dpsrsResponseStatus'
+describePlayerSessionsResponse
+    :: Int -- ^ 'dpsrsResponseStatus'
+    -> DescribePlayerSessionsResponse
+describePlayerSessionsResponse pResponseStatus_ =
+    DescribePlayerSessionsResponse'
+    { _dpsrsNextToken = Nothing
+    , _dpsrsPlayerSessions = Nothing
+    , _dpsrsResponseStatus = pResponseStatus_
+    }
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+dpsrsNextToken :: Lens' DescribePlayerSessionsResponse (Maybe Text)
+dpsrsNextToken = lens _dpsrsNextToken (\ s a -> s{_dpsrsNextToken = a});
+
+-- | Collection of objects containing properties for each player session that
+-- matches the request.
+dpsrsPlayerSessions :: Lens' DescribePlayerSessionsResponse [PlayerSession]
+dpsrsPlayerSessions = lens _dpsrsPlayerSessions (\ s a -> s{_dpsrsPlayerSessions = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dpsrsResponseStatus :: Lens' DescribePlayerSessionsResponse Int
+dpsrsResponseStatus = lens _dpsrsResponseStatus (\ s a -> s{_dpsrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/DescribeScalingPolicies.hs b/gen/Network/AWS/GameLift/DescribeScalingPolicies.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/DescribeScalingPolicies.hs
@@ -0,0 +1,202 @@
+{-# 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.GameLift.DescribeScalingPolicies
+-- 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)
+--
+-- Retrieves all scaling policies applied to a fleet.
+--
+-- To get a fleet\'s scaling policies, specify the fleet ID. You can filter
+-- this request by policy status, such as to retrieve only active scaling
+-- policies. Use the pagination parameters to retrieve results as a set of
+-- sequential pages. If successful, set of < ScalingPolicy> objects is
+-- returned for the fleet.
+module Network.AWS.GameLift.DescribeScalingPolicies
+    (
+    -- * Creating a Request
+      describeScalingPolicies
+    , DescribeScalingPolicies
+    -- * Request Lenses
+    , dNextToken
+    , dStatusFilter
+    , dLimit
+    , dFleetId
+
+    -- * Destructuring the Response
+    , describeScalingPoliciesResponse
+    , DescribeScalingPoliciesResponse
+    -- * Response Lenses
+    , dsprsNextToken
+    , dsprsScalingPolicies
+    , dsprsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'describeScalingPolicies' smart constructor.
+data DescribeScalingPolicies = DescribeScalingPolicies'
+    { _dNextToken    :: !(Maybe Text)
+    , _dStatusFilter :: !(Maybe ScalingStatusType)
+    , _dLimit        :: !(Maybe Nat)
+    , _dFleetId      :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeScalingPolicies' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dNextToken'
+--
+-- * 'dStatusFilter'
+--
+-- * 'dLimit'
+--
+-- * 'dFleetId'
+describeScalingPolicies
+    :: Text -- ^ 'dFleetId'
+    -> DescribeScalingPolicies
+describeScalingPolicies pFleetId_ =
+    DescribeScalingPolicies'
+    { _dNextToken = Nothing
+    , _dStatusFilter = Nothing
+    , _dLimit = Nothing
+    , _dFleetId = pFleetId_
+    }
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value.
+dNextToken :: Lens' DescribeScalingPolicies (Maybe Text)
+dNextToken = lens _dNextToken (\ s a -> s{_dNextToken = a});
+
+-- | Game session status to filter results on. A scaling policy is only in
+-- force when in an Active state.
+--
+-- -   ACTIVE: The scaling policy is currently in force.
+-- -   UPDATEREQUESTED: A request to update the scaling policy has been
+--     received.
+-- -   UPDATING: A change is being made to the scaling policy.
+-- -   DELETEREQUESTED: A request to delete the scaling policy has been
+--     received.
+-- -   DELETING: The scaling policy is being deleted.
+-- -   DELETED: The scaling policy has been deleted.
+-- -   ERROR: An error occurred in creating the policy. It should be
+--     removed and recreated.
+dStatusFilter :: Lens' DescribeScalingPolicies (Maybe ScalingStatusType)
+dStatusFilter = lens _dStatusFilter (\ s a -> s{_dStatusFilter = a});
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages.
+dLimit :: Lens' DescribeScalingPolicies (Maybe Natural)
+dLimit = lens _dLimit (\ s a -> s{_dLimit = a}) . mapping _Nat;
+
+-- | Unique identifier for a fleet. Specify the fleet to retrieve scaling
+-- policies for.
+dFleetId :: Lens' DescribeScalingPolicies Text
+dFleetId = lens _dFleetId (\ s a -> s{_dFleetId = a});
+
+instance AWSRequest DescribeScalingPolicies where
+        type Rs DescribeScalingPolicies =
+             DescribeScalingPoliciesResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 DescribeScalingPoliciesResponse' <$>
+                   (x .?> "NextToken") <*>
+                     (x .?> "ScalingPolicies" .!@ mempty)
+                     <*> (pure (fromEnum s)))
+
+instance Hashable DescribeScalingPolicies
+
+instance ToHeaders DescribeScalingPolicies where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.DescribeScalingPolicies" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON DescribeScalingPolicies where
+        toJSON DescribeScalingPolicies'{..}
+          = object
+              (catMaybes
+                 [("NextToken" .=) <$> _dNextToken,
+                  ("StatusFilter" .=) <$> _dStatusFilter,
+                  ("Limit" .=) <$> _dLimit,
+                  Just ("FleetId" .= _dFleetId)])
+
+instance ToPath DescribeScalingPolicies where
+        toPath = const "/"
+
+instance ToQuery DescribeScalingPolicies where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'describeScalingPoliciesResponse' smart constructor.
+data DescribeScalingPoliciesResponse = DescribeScalingPoliciesResponse'
+    { _dsprsNextToken       :: !(Maybe Text)
+    , _dsprsScalingPolicies :: !(Maybe [ScalingPolicy])
+    , _dsprsResponseStatus  :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'DescribeScalingPoliciesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'dsprsNextToken'
+--
+-- * 'dsprsScalingPolicies'
+--
+-- * 'dsprsResponseStatus'
+describeScalingPoliciesResponse
+    :: Int -- ^ 'dsprsResponseStatus'
+    -> DescribeScalingPoliciesResponse
+describeScalingPoliciesResponse pResponseStatus_ =
+    DescribeScalingPoliciesResponse'
+    { _dsprsNextToken = Nothing
+    , _dsprsScalingPolicies = Nothing
+    , _dsprsResponseStatus = pResponseStatus_
+    }
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+dsprsNextToken :: Lens' DescribeScalingPoliciesResponse (Maybe Text)
+dsprsNextToken = lens _dsprsNextToken (\ s a -> s{_dsprsNextToken = a});
+
+-- | Collection of objects containing the scaling policies matching the
+-- request.
+dsprsScalingPolicies :: Lens' DescribeScalingPoliciesResponse [ScalingPolicy]
+dsprsScalingPolicies = lens _dsprsScalingPolicies (\ s a -> s{_dsprsScalingPolicies = a}) . _Default . _Coerce;
+
+-- | The response status code.
+dsprsResponseStatus :: Lens' DescribeScalingPoliciesResponse Int
+dsprsResponseStatus = lens _dsprsResponseStatus (\ s a -> s{_dsprsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/GetGameSessionLogURL.hs b/gen/Network/AWS/GameLift/GetGameSessionLogURL.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/GetGameSessionLogURL.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.GameLift.GetGameSessionLogURL
+-- 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)
+--
+-- Retrieves the location of stored game session logs for a specified game
+-- session. When a game session is terminated, Amazon GameLift
+-- automatically stores the logs in Amazon S3. Use this URL to download the
+-- logs.
+--
+-- See the
+-- <http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_gamelift AWS Service Limits>
+-- page for maximum log file sizes. Log files that exceed this limit are
+-- not saved.
+module Network.AWS.GameLift.GetGameSessionLogURL
+    (
+    -- * Creating a Request
+      getGameSessionLogURL
+    , GetGameSessionLogURL
+    -- * Request Lenses
+    , ggsluGameSessionId
+
+    -- * Destructuring the Response
+    , getGameSessionLogURLResponse
+    , GetGameSessionLogURLResponse
+    -- * Response Lenses
+    , ggslursPreSignedURL
+    , ggslursResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'getGameSessionLogURL' smart constructor.
+newtype GetGameSessionLogURL = GetGameSessionLogURL'
+    { _ggsluGameSessionId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetGameSessionLogURL' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ggsluGameSessionId'
+getGameSessionLogURL
+    :: Text -- ^ 'ggsluGameSessionId'
+    -> GetGameSessionLogURL
+getGameSessionLogURL pGameSessionId_ =
+    GetGameSessionLogURL'
+    { _ggsluGameSessionId = pGameSessionId_
+    }
+
+-- | Unique identifier for a game session. Specify the game session you want
+-- to get logs for.
+ggsluGameSessionId :: Lens' GetGameSessionLogURL Text
+ggsluGameSessionId = lens _ggsluGameSessionId (\ s a -> s{_ggsluGameSessionId = a});
+
+instance AWSRequest GetGameSessionLogURL where
+        type Rs GetGameSessionLogURL =
+             GetGameSessionLogURLResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 GetGameSessionLogURLResponse' <$>
+                   (x .?> "PreSignedUrl") <*> (pure (fromEnum s)))
+
+instance Hashable GetGameSessionLogURL
+
+instance ToHeaders GetGameSessionLogURL where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.GetGameSessionLogUrl" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON GetGameSessionLogURL where
+        toJSON GetGameSessionLogURL'{..}
+          = object
+              (catMaybes
+                 [Just ("GameSessionId" .= _ggsluGameSessionId)])
+
+instance ToPath GetGameSessionLogURL where
+        toPath = const "/"
+
+instance ToQuery GetGameSessionLogURL where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'getGameSessionLogURLResponse' smart constructor.
+data GetGameSessionLogURLResponse = GetGameSessionLogURLResponse'
+    { _ggslursPreSignedURL   :: !(Maybe Text)
+    , _ggslursResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GetGameSessionLogURLResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ggslursPreSignedURL'
+--
+-- * 'ggslursResponseStatus'
+getGameSessionLogURLResponse
+    :: Int -- ^ 'ggslursResponseStatus'
+    -> GetGameSessionLogURLResponse
+getGameSessionLogURLResponse pResponseStatus_ =
+    GetGameSessionLogURLResponse'
+    { _ggslursPreSignedURL = Nothing
+    , _ggslursResponseStatus = pResponseStatus_
+    }
+
+-- | Location of the requested game session logs, available for download.
+ggslursPreSignedURL :: Lens' GetGameSessionLogURLResponse (Maybe Text)
+ggslursPreSignedURL = lens _ggslursPreSignedURL (\ s a -> s{_ggslursPreSignedURL = a});
+
+-- | The response status code.
+ggslursResponseStatus :: Lens' GetGameSessionLogURLResponse Int
+ggslursResponseStatus = lens _ggslursResponseStatus (\ s a -> s{_ggslursResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/ListAliases.hs b/gen/Network/AWS/GameLift/ListAliases.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/ListAliases.hs
@@ -0,0 +1,193 @@
+{-# 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.GameLift.ListAliases
+-- 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)
+--
+-- Retrieves a collection of alias records for this AWS account. You can
+-- filter the result set by alias name and\/or routing strategy type. Use
+-- the pagination parameters to retrieve results in sequential pages.
+--
+-- Aliases are not listed in any particular order.
+module Network.AWS.GameLift.ListAliases
+    (
+    -- * Creating a Request
+      listAliases
+    , ListAliases
+    -- * Request Lenses
+    , laRoutingStrategyType
+    , laNextToken
+    , laName
+    , laLimit
+
+    -- * Destructuring the Response
+    , listAliasesResponse
+    , ListAliasesResponse
+    -- * Response Lenses
+    , larsAliases
+    , larsNextToken
+    , larsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'listAliases' smart constructor.
+data ListAliases = ListAliases'
+    { _laRoutingStrategyType :: !(Maybe RoutingStrategyType)
+    , _laNextToken           :: !(Maybe Text)
+    , _laName                :: !(Maybe Text)
+    , _laLimit               :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListAliases' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'laRoutingStrategyType'
+--
+-- * 'laNextToken'
+--
+-- * 'laName'
+--
+-- * 'laLimit'
+listAliases
+    :: ListAliases
+listAliases =
+    ListAliases'
+    { _laRoutingStrategyType = Nothing
+    , _laNextToken = Nothing
+    , _laName = Nothing
+    , _laLimit = Nothing
+    }
+
+-- | Type of routing to filter results on. Use this parameter to retrieve
+-- only aliases of a certain type. To retrieve all aliases, leave this
+-- parameter empty. Possible routing types include:
+--
+-- -   SIMPLE: The alias resolves to one specific fleet. Use this type when
+--     routing to active fleets.
+-- -   TERMINAL: The alias does not resolve to a fleet but instead can be
+--     used to display a message to the user. A terminal alias throws a
+--     TerminalRoutingStrategyException with the < RoutingStrategy> message
+--     embedded.
+laRoutingStrategyType :: Lens' ListAliases (Maybe RoutingStrategyType)
+laRoutingStrategyType = lens _laRoutingStrategyType (\ s a -> s{_laRoutingStrategyType = a});
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value.
+laNextToken :: Lens' ListAliases (Maybe Text)
+laNextToken = lens _laNextToken (\ s a -> s{_laNextToken = a});
+
+-- | Descriptive label associated with this alias. Alias names do not need to
+-- be unique.
+laName :: Lens' ListAliases (Maybe Text)
+laName = lens _laName (\ s a -> s{_laName = a});
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages.
+laLimit :: Lens' ListAliases (Maybe Natural)
+laLimit = lens _laLimit (\ s a -> s{_laLimit = a}) . mapping _Nat;
+
+instance AWSRequest ListAliases where
+        type Rs ListAliases = ListAliasesResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListAliasesResponse' <$>
+                   (x .?> "Aliases" .!@ mempty) <*> (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListAliases
+
+instance ToHeaders ListAliases where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.ListAliases" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListAliases where
+        toJSON ListAliases'{..}
+          = object
+              (catMaybes
+                 [("RoutingStrategyType" .=) <$>
+                    _laRoutingStrategyType,
+                  ("NextToken" .=) <$> _laNextToken,
+                  ("Name" .=) <$> _laName, ("Limit" .=) <$> _laLimit])
+
+instance ToPath ListAliases where
+        toPath = const "/"
+
+instance ToQuery ListAliases where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'listAliasesResponse' smart constructor.
+data ListAliasesResponse = ListAliasesResponse'
+    { _larsAliases        :: !(Maybe [Alias])
+    , _larsNextToken      :: !(Maybe Text)
+    , _larsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListAliasesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'larsAliases'
+--
+-- * 'larsNextToken'
+--
+-- * 'larsResponseStatus'
+listAliasesResponse
+    :: Int -- ^ 'larsResponseStatus'
+    -> ListAliasesResponse
+listAliasesResponse pResponseStatus_ =
+    ListAliasesResponse'
+    { _larsAliases = Nothing
+    , _larsNextToken = Nothing
+    , _larsResponseStatus = pResponseStatus_
+    }
+
+-- | Collection of alias records that match the list request.
+larsAliases :: Lens' ListAliasesResponse [Alias]
+larsAliases = lens _larsAliases (\ s a -> s{_larsAliases = a}) . _Default . _Coerce;
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+larsNextToken :: Lens' ListAliasesResponse (Maybe Text)
+larsNextToken = lens _larsNextToken (\ s a -> s{_larsNextToken = a});
+
+-- | The response status code.
+larsResponseStatus :: Lens' ListAliasesResponse Int
+larsResponseStatus = lens _larsResponseStatus (\ s a -> s{_larsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/ListBuilds.hs b/gen/Network/AWS/GameLift/ListBuilds.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/ListBuilds.hs
@@ -0,0 +1,184 @@
+{-# 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.GameLift.ListBuilds
+-- 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)
+--
+-- Retrieves build records for all builds associated with an AWS account.
+-- You can filter the result set by build status. Use the pagination
+-- parameters to retrieve results in a set of sequential pages.
+--
+-- Build records are not listed in any particular order.
+module Network.AWS.GameLift.ListBuilds
+    (
+    -- * Creating a Request
+      listBuilds
+    , ListBuilds
+    -- * Request Lenses
+    , lbStatus
+    , lbNextToken
+    , lbLimit
+
+    -- * Destructuring the Response
+    , listBuildsResponse
+    , ListBuildsResponse
+    -- * Response Lenses
+    , lbrsBuilds
+    , lbrsNextToken
+    , lbrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'listBuilds' smart constructor.
+data ListBuilds = ListBuilds'
+    { _lbStatus    :: !(Maybe BuildStatus)
+    , _lbNextToken :: !(Maybe Text)
+    , _lbLimit     :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListBuilds' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbStatus'
+--
+-- * 'lbNextToken'
+--
+-- * 'lbLimit'
+listBuilds
+    :: ListBuilds
+listBuilds =
+    ListBuilds'
+    { _lbStatus = Nothing
+    , _lbNextToken = Nothing
+    , _lbLimit = Nothing
+    }
+
+-- | Build state to filter results on. Use this parameter to retrieve builds
+-- in a certain state. To retrieve all builds, leave this parameter empty.
+-- Possible build states include:
+--
+-- -   INITIALIZED: A new build has been defined, but no files have been
+--     uploaded. You cannot create fleets for builds that are in this
+--     state. When a build is successfully created, the build state is set
+--     to this value.
+-- -   READY: The game build has been successfully uploaded. You can now
+--     create new fleets for this build.
+-- -   FAILED: The game build upload failed. You cannot create new fleets
+--     for this build.
+lbStatus :: Lens' ListBuilds (Maybe BuildStatus)
+lbStatus = lens _lbStatus (\ s a -> s{_lbStatus = a});
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value.
+lbNextToken :: Lens' ListBuilds (Maybe Text)
+lbNextToken = lens _lbNextToken (\ s a -> s{_lbNextToken = a});
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages.
+lbLimit :: Lens' ListBuilds (Maybe Natural)
+lbLimit = lens _lbLimit (\ s a -> s{_lbLimit = a}) . mapping _Nat;
+
+instance AWSRequest ListBuilds where
+        type Rs ListBuilds = ListBuildsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListBuildsResponse' <$>
+                   (x .?> "Builds" .!@ mempty) <*> (x .?> "NextToken")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable ListBuilds
+
+instance ToHeaders ListBuilds where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.ListBuilds" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListBuilds where
+        toJSON ListBuilds'{..}
+          = object
+              (catMaybes
+                 [("Status" .=) <$> _lbStatus,
+                  ("NextToken" .=) <$> _lbNextToken,
+                  ("Limit" .=) <$> _lbLimit])
+
+instance ToPath ListBuilds where
+        toPath = const "/"
+
+instance ToQuery ListBuilds where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'listBuildsResponse' smart constructor.
+data ListBuildsResponse = ListBuildsResponse'
+    { _lbrsBuilds         :: !(Maybe [Build])
+    , _lbrsNextToken      :: !(Maybe Text)
+    , _lbrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListBuildsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lbrsBuilds'
+--
+-- * 'lbrsNextToken'
+--
+-- * 'lbrsResponseStatus'
+listBuildsResponse
+    :: Int -- ^ 'lbrsResponseStatus'
+    -> ListBuildsResponse
+listBuildsResponse pResponseStatus_ =
+    ListBuildsResponse'
+    { _lbrsBuilds = Nothing
+    , _lbrsNextToken = Nothing
+    , _lbrsResponseStatus = pResponseStatus_
+    }
+
+-- | Collection of build records that match the request.
+lbrsBuilds :: Lens' ListBuildsResponse [Build]
+lbrsBuilds = lens _lbrsBuilds (\ s a -> s{_lbrsBuilds = a}) . _Default . _Coerce;
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+lbrsNextToken :: Lens' ListBuildsResponse (Maybe Text)
+lbrsNextToken = lens _lbrsNextToken (\ s a -> s{_lbrsNextToken = a});
+
+-- | The response status code.
+lbrsResponseStatus :: Lens' ListBuildsResponse Int
+lbrsResponseStatus = lens _lbrsResponseStatus (\ s a -> s{_lbrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/ListFleets.hs b/gen/Network/AWS/GameLift/ListFleets.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/ListFleets.hs
@@ -0,0 +1,178 @@
+{-# 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.GameLift.ListFleets
+-- 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)
+--
+-- Retrieves a collection of fleet records for this AWS account. You can
+-- filter the result set by build ID. Use the pagination parameters to
+-- retrieve results in sequential pages.
+--
+-- Fleet records are not listed in any particular order.
+module Network.AWS.GameLift.ListFleets
+    (
+    -- * Creating a Request
+      listFleets
+    , ListFleets
+    -- * Request Lenses
+    , lfBuildId
+    , lfNextToken
+    , lfLimit
+
+    -- * Destructuring the Response
+    , listFleetsResponse
+    , ListFleetsResponse
+    -- * Response Lenses
+    , lfrsNextToken
+    , lfrsFleetIds
+    , lfrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'listFleets' smart constructor.
+data ListFleets = ListFleets'
+    { _lfBuildId   :: !(Maybe Text)
+    , _lfNextToken :: !(Maybe Text)
+    , _lfLimit     :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListFleets' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lfBuildId'
+--
+-- * 'lfNextToken'
+--
+-- * 'lfLimit'
+listFleets
+    :: ListFleets
+listFleets =
+    ListFleets'
+    { _lfBuildId = Nothing
+    , _lfNextToken = Nothing
+    , _lfLimit = Nothing
+    }
+
+-- | Unique identifier of the build to return fleets for. Use this parameter
+-- to return only fleets using the specified build. To retrieve all fleets,
+-- leave this parameter empty.
+lfBuildId :: Lens' ListFleets (Maybe Text)
+lfBuildId = lens _lfBuildId (\ s a -> s{_lfBuildId = a});
+
+-- | Token indicating the start of the next sequential page of results. Use
+-- the token that is returned with a previous call to this action. To
+-- specify the start of the result set, do not specify a value.
+lfNextToken :: Lens' ListFleets (Maybe Text)
+lfNextToken = lens _lfNextToken (\ s a -> s{_lfNextToken = a});
+
+-- | Maximum number of results to return. You can use this parameter with
+-- /NextToken/ to get results as a set of sequential pages.
+lfLimit :: Lens' ListFleets (Maybe Natural)
+lfLimit = lens _lfLimit (\ s a -> s{_lfLimit = a}) . mapping _Nat;
+
+instance AWSRequest ListFleets where
+        type Rs ListFleets = ListFleetsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ListFleetsResponse' <$>
+                   (x .?> "NextToken") <*> (x .?> "FleetIds") <*>
+                     (pure (fromEnum s)))
+
+instance Hashable ListFleets
+
+instance ToHeaders ListFleets where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.ListFleets" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ListFleets where
+        toJSON ListFleets'{..}
+          = object
+              (catMaybes
+                 [("BuildId" .=) <$> _lfBuildId,
+                  ("NextToken" .=) <$> _lfNextToken,
+                  ("Limit" .=) <$> _lfLimit])
+
+instance ToPath ListFleets where
+        toPath = const "/"
+
+instance ToQuery ListFleets where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'listFleetsResponse' smart constructor.
+data ListFleetsResponse = ListFleetsResponse'
+    { _lfrsNextToken      :: !(Maybe Text)
+    , _lfrsFleetIds       :: !(Maybe (List1 Text))
+    , _lfrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ListFleetsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'lfrsNextToken'
+--
+-- * 'lfrsFleetIds'
+--
+-- * 'lfrsResponseStatus'
+listFleetsResponse
+    :: Int -- ^ 'lfrsResponseStatus'
+    -> ListFleetsResponse
+listFleetsResponse pResponseStatus_ =
+    ListFleetsResponse'
+    { _lfrsNextToken = Nothing
+    , _lfrsFleetIds = Nothing
+    , _lfrsResponseStatus = pResponseStatus_
+    }
+
+-- | Token indicating where to resume retrieving results on the next call to
+-- this action. If no token is returned, these results represent the end of
+-- the list.
+--
+-- If a request has a limit that exactly matches the number of remaining
+-- results, a token is returned even though there are no more results to
+-- retrieve.
+lfrsNextToken :: Lens' ListFleetsResponse (Maybe Text)
+lfrsNextToken = lens _lfrsNextToken (\ s a -> s{_lfrsNextToken = a});
+
+-- | Set of fleet IDs matching the list request. You can retrieve additional
+-- information about all returned fleets by passing this result set to a
+-- call to < DescribeFleetAttributes>, < DescribeFleetCapacity>, and
+-- < DescribeFleetUtilization>.
+lfrsFleetIds :: Lens' ListFleetsResponse (Maybe (NonEmpty Text))
+lfrsFleetIds = lens _lfrsFleetIds (\ s a -> s{_lfrsFleetIds = a}) . mapping _List1;
+
+-- | The response status code.
+lfrsResponseStatus :: Lens' ListFleetsResponse Int
+lfrsResponseStatus = lens _lfrsResponseStatus (\ s a -> s{_lfrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/PutScalingPolicy.hs b/gen/Network/AWS/GameLift/PutScalingPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/PutScalingPolicy.hs
@@ -0,0 +1,268 @@
+{-# 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.GameLift.PutScalingPolicy
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+-- Creates or updates a scaling policy for a fleet. An active scaling
+-- policy prompts GameLift to track a certain metric for a fleet and
+-- automatically change the fleet\'s capacity in specific circumstances.
+-- Each scaling policy contains one rule statement. Fleets can have
+-- multiple scaling policies in force simultaneously.
+--
+-- A scaling policy rule statement has the following structure:
+--
+-- If /[MetricName]/ is /[ComparisonOperator]/ /[Threshold]/ for
+-- /[EvaluationPeriods]/ minutes, then /[ScalingAdjustmentType]/ to\/by
+-- /[ScalingAdjustment]/.
+--
+-- For example, this policy: \"If the number of idle instances exceeds 20
+-- for more than 15 minutes, then reduce the fleet capacity by 10
+-- instances\" could be implemented as the following rule statement:
+--
+-- If [IdleInstances] is [GreaterThanOrEqualToThreshold] [20] for [15]
+-- minutes, then [ChangeInCapacity] by [-10].
+--
+-- To create or update a scaling policy, specify a unique combination of
+-- name and fleet ID, and set the rule values. All parameters for this
+-- action are required. If successful, the policy name is returned. Scaling
+-- policies cannot be suspended or made inactive. To stop enforcing a
+-- scaling policy, call < DeleteScalingPolicy>.
+module Network.AWS.GameLift.PutScalingPolicy
+    (
+    -- * Creating a Request
+      putScalingPolicy
+    , PutScalingPolicy
+    -- * Request Lenses
+    , pspName
+    , pspFleetId
+    , pspScalingAdjustment
+    , pspScalingAdjustmentType
+    , pspThreshold
+    , pspComparisonOperator
+    , pspEvaluationPeriods
+    , pspMetricName
+
+    -- * Destructuring the Response
+    , putScalingPolicyResponse
+    , PutScalingPolicyResponse
+    -- * Response Lenses
+    , psprsName
+    , psprsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'putScalingPolicy' smart constructor.
+data PutScalingPolicy = PutScalingPolicy'
+    { _pspName                  :: !Text
+    , _pspFleetId               :: !Text
+    , _pspScalingAdjustment     :: !Int
+    , _pspScalingAdjustmentType :: !ScalingAdjustmentType
+    , _pspThreshold             :: !Double
+    , _pspComparisonOperator    :: !ComparisonOperatorType
+    , _pspEvaluationPeriods     :: !Nat
+    , _pspMetricName            :: !MetricName
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutScalingPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'pspName'
+--
+-- * 'pspFleetId'
+--
+-- * 'pspScalingAdjustment'
+--
+-- * 'pspScalingAdjustmentType'
+--
+-- * 'pspThreshold'
+--
+-- * 'pspComparisonOperator'
+--
+-- * 'pspEvaluationPeriods'
+--
+-- * 'pspMetricName'
+putScalingPolicy
+    :: Text -- ^ 'pspName'
+    -> Text -- ^ 'pspFleetId'
+    -> Int -- ^ 'pspScalingAdjustment'
+    -> ScalingAdjustmentType -- ^ 'pspScalingAdjustmentType'
+    -> Double -- ^ 'pspThreshold'
+    -> ComparisonOperatorType -- ^ 'pspComparisonOperator'
+    -> Natural -- ^ 'pspEvaluationPeriods'
+    -> MetricName -- ^ 'pspMetricName'
+    -> PutScalingPolicy
+putScalingPolicy pName_ pFleetId_ pScalingAdjustment_ pScalingAdjustmentType_ pThreshold_ pComparisonOperator_ pEvaluationPeriods_ pMetricName_ =
+    PutScalingPolicy'
+    { _pspName = pName_
+    , _pspFleetId = pFleetId_
+    , _pspScalingAdjustment = pScalingAdjustment_
+    , _pspScalingAdjustmentType = pScalingAdjustmentType_
+    , _pspThreshold = pThreshold_
+    , _pspComparisonOperator = pComparisonOperator_
+    , _pspEvaluationPeriods = _Nat # pEvaluationPeriods_
+    , _pspMetricName = pMetricName_
+    }
+
+-- | Descriptive label associated with this scaling policy. Policy names do
+-- not need to be unique. A fleet can have only one scaling policy with the
+-- same name.
+pspName :: Lens' PutScalingPolicy Text
+pspName = lens _pspName (\ s a -> s{_pspName = a});
+
+-- | Unique identity for the fleet to scale with this policy.
+pspFleetId :: Lens' PutScalingPolicy Text
+pspFleetId = lens _pspFleetId (\ s a -> s{_pspFleetId = a});
+
+-- | Amount of adjustment to make, based on the scaling adjustment type.
+pspScalingAdjustment :: Lens' PutScalingPolicy Int
+pspScalingAdjustment = lens _pspScalingAdjustment (\ s a -> s{_pspScalingAdjustment = a});
+
+-- | Type of adjustment to make to a fleet\'s instance count (see
+-- < FleetCapacity>):
+--
+-- -   ChangeInCapacity: add (or subtract) the scaling adjustment value
+--     from the current instance count. Positive values scale up while
+--     negative values scale down.
+-- -   ExactCapacity: set the instance count to the scaling adjustment
+--     value.
+-- -   PercentChangeInCapacity: increase or reduce the current instance
+--     count by the scaling adjustment, read as a percentage. Positive
+--     values scale up while negative values scale down; for example, a
+--     value of \"-10\" scales the fleet down by 10%.
+pspScalingAdjustmentType :: Lens' PutScalingPolicy ScalingAdjustmentType
+pspScalingAdjustmentType = lens _pspScalingAdjustmentType (\ s a -> s{_pspScalingAdjustmentType = a});
+
+-- | Metric value used to trigger a scaling event.
+pspThreshold :: Lens' PutScalingPolicy Double
+pspThreshold = lens _pspThreshold (\ s a -> s{_pspThreshold = a});
+
+-- | Comparison operator to use when measuring the metric against the
+-- threshold value.
+pspComparisonOperator :: Lens' PutScalingPolicy ComparisonOperatorType
+pspComparisonOperator = lens _pspComparisonOperator (\ s a -> s{_pspComparisonOperator = a});
+
+-- | Length of time (in minutes) the metric must be at or beyond the
+-- threshold before a scaling event is triggered.
+pspEvaluationPeriods :: Lens' PutScalingPolicy Natural
+pspEvaluationPeriods = lens _pspEvaluationPeriods (\ s a -> s{_pspEvaluationPeriods = a}) . _Nat;
+
+-- | Name of the Service-defined metric that is used to trigger an
+-- adjustment.
+--
+-- -   ActivatingGameSessions: number of game sessions in the process of
+--     being created (game session status = ACTIVATING).
+-- -   ActiveGameSessions: number of game sessions currently running (game
+--     session status = ACTIVE).
+-- -   CurrentPlayerSessions: number of active or reserved player sessions
+--     (player session status = ACTIVE or RESERVED).
+-- -   AvailablePlayerSessions: number of player session slots currently
+--     available in active game sessions across the fleet, calculated by
+--     subtracting a game session\'s current player session count from its
+--     maximum player session count. This number includes game sessions
+--     that are not currently accepting players (game session
+--     PlayerSessionCreationPolicy = DENY_ALL).
+-- -   ActiveInstances: number of instances currently running a game
+--     session.
+-- -   IdleInstances: number of instances not currently running a game
+--     session.
+pspMetricName :: Lens' PutScalingPolicy MetricName
+pspMetricName = lens _pspMetricName (\ s a -> s{_pspMetricName = a});
+
+instance AWSRequest PutScalingPolicy where
+        type Rs PutScalingPolicy = PutScalingPolicyResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 PutScalingPolicyResponse' <$>
+                   (x .?> "Name") <*> (pure (fromEnum s)))
+
+instance Hashable PutScalingPolicy
+
+instance ToHeaders PutScalingPolicy where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.PutScalingPolicy" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON PutScalingPolicy where
+        toJSON PutScalingPolicy'{..}
+          = object
+              (catMaybes
+                 [Just ("Name" .= _pspName),
+                  Just ("FleetId" .= _pspFleetId),
+                  Just ("ScalingAdjustment" .= _pspScalingAdjustment),
+                  Just
+                    ("ScalingAdjustmentType" .=
+                       _pspScalingAdjustmentType),
+                  Just ("Threshold" .= _pspThreshold),
+                  Just
+                    ("ComparisonOperator" .= _pspComparisonOperator),
+                  Just ("EvaluationPeriods" .= _pspEvaluationPeriods),
+                  Just ("MetricName" .= _pspMetricName)])
+
+instance ToPath PutScalingPolicy where
+        toPath = const "/"
+
+instance ToQuery PutScalingPolicy where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'putScalingPolicyResponse' smart constructor.
+data PutScalingPolicyResponse = PutScalingPolicyResponse'
+    { _psprsName           :: !(Maybe Text)
+    , _psprsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PutScalingPolicyResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psprsName'
+--
+-- * 'psprsResponseStatus'
+putScalingPolicyResponse
+    :: Int -- ^ 'psprsResponseStatus'
+    -> PutScalingPolicyResponse
+putScalingPolicyResponse pResponseStatus_ =
+    PutScalingPolicyResponse'
+    { _psprsName = Nothing
+    , _psprsResponseStatus = pResponseStatus_
+    }
+
+-- | Descriptive label associated with this scaling policy. Policy names do
+-- not need to be unique.
+psprsName :: Lens' PutScalingPolicyResponse (Maybe Text)
+psprsName = lens _psprsName (\ s a -> s{_psprsName = a});
+
+-- | The response status code.
+psprsResponseStatus :: Lens' PutScalingPolicyResponse Int
+psprsResponseStatus = lens _psprsResponseStatus (\ s a -> s{_psprsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/RequestUploadCredentials.hs b/gen/Network/AWS/GameLift/RequestUploadCredentials.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/RequestUploadCredentials.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.GameLift.RequestUploadCredentials
+-- 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)
+--
+-- Retrieves a fresh set of upload credentials and the assigned Amazon S3
+-- storage location for a specific build. Valid credentials are required to
+-- upload your game build files to Amazon S3.
+--
+-- Call this action only if you need credentials for a build created with
+-- < CreateBuild>. This is a rare situation; in most cases, builds are
+-- created using the CLI command 'upload-build', which creates a build
+-- record and also uploads build files.
+--
+-- Upload credentials are returned when you create the build, but they have
+-- a limited lifespan. You can get fresh credentials and use them to
+-- re-upload game files until the state of that build changes to READY.
+-- Once this happens, you must create a brand new build.
+module Network.AWS.GameLift.RequestUploadCredentials
+    (
+    -- * Creating a Request
+      requestUploadCredentials
+    , RequestUploadCredentials
+    -- * Request Lenses
+    , rucBuildId
+
+    -- * Destructuring the Response
+    , requestUploadCredentialsResponse
+    , RequestUploadCredentialsResponse
+    -- * Response Lenses
+    , rucrsStorageLocation
+    , rucrsUploadCredentials
+    , rucrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'requestUploadCredentials' smart constructor.
+newtype RequestUploadCredentials = RequestUploadCredentials'
+    { _rucBuildId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RequestUploadCredentials' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rucBuildId'
+requestUploadCredentials
+    :: Text -- ^ 'rucBuildId'
+    -> RequestUploadCredentials
+requestUploadCredentials pBuildId_ =
+    RequestUploadCredentials'
+    { _rucBuildId = pBuildId_
+    }
+
+-- | Unique identifier for the build you want to get credentials for.
+rucBuildId :: Lens' RequestUploadCredentials Text
+rucBuildId = lens _rucBuildId (\ s a -> s{_rucBuildId = a});
+
+instance AWSRequest RequestUploadCredentials where
+        type Rs RequestUploadCredentials =
+             RequestUploadCredentialsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 RequestUploadCredentialsResponse' <$>
+                   (x .?> "StorageLocation") <*>
+                     (x .?> "UploadCredentials")
+                     <*> (pure (fromEnum s)))
+
+instance Hashable RequestUploadCredentials
+
+instance ToHeaders RequestUploadCredentials where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.RequestUploadCredentials" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON RequestUploadCredentials where
+        toJSON RequestUploadCredentials'{..}
+          = object
+              (catMaybes [Just ("BuildId" .= _rucBuildId)])
+
+instance ToPath RequestUploadCredentials where
+        toPath = const "/"
+
+instance ToQuery RequestUploadCredentials where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'requestUploadCredentialsResponse' smart constructor.
+data RequestUploadCredentialsResponse = RequestUploadCredentialsResponse'
+    { _rucrsStorageLocation   :: !(Maybe S3Location)
+    , _rucrsUploadCredentials :: !(Maybe (Sensitive AWSCredentials))
+    , _rucrsResponseStatus    :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RequestUploadCredentialsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rucrsStorageLocation'
+--
+-- * 'rucrsUploadCredentials'
+--
+-- * 'rucrsResponseStatus'
+requestUploadCredentialsResponse
+    :: Int -- ^ 'rucrsResponseStatus'
+    -> RequestUploadCredentialsResponse
+requestUploadCredentialsResponse pResponseStatus_ =
+    RequestUploadCredentialsResponse'
+    { _rucrsStorageLocation = Nothing
+    , _rucrsUploadCredentials = Nothing
+    , _rucrsResponseStatus = pResponseStatus_
+    }
+
+-- | Amazon S3 path and key, identifying where the game build files are
+-- stored.
+rucrsStorageLocation :: Lens' RequestUploadCredentialsResponse (Maybe S3Location)
+rucrsStorageLocation = lens _rucrsStorageLocation (\ s a -> s{_rucrsStorageLocation = a});
+
+-- | AWS credentials required when uploading a game build to the storage
+-- location. These credentials have a limited lifespan and are valid only
+-- for the build they were issued for.
+rucrsUploadCredentials :: Lens' RequestUploadCredentialsResponse (Maybe AWSCredentials)
+rucrsUploadCredentials = lens _rucrsUploadCredentials (\ s a -> s{_rucrsUploadCredentials = a}) . mapping _Sensitive;
+
+-- | The response status code.
+rucrsResponseStatus :: Lens' RequestUploadCredentialsResponse Int
+rucrsResponseStatus = lens _rucrsResponseStatus (\ s a -> s{_rucrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/ResolveAlias.hs b/gen/Network/AWS/GameLift/ResolveAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/ResolveAlias.hs
@@ -0,0 +1,129 @@
+{-# 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.GameLift.ResolveAlias
+-- 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)
+--
+-- Retrieves the fleet ID that a specified alias is currently pointing to.
+module Network.AWS.GameLift.ResolveAlias
+    (
+    -- * Creating a Request
+      resolveAlias
+    , ResolveAlias
+    -- * Request Lenses
+    , raAliasId
+
+    -- * Destructuring the Response
+    , resolveAliasResponse
+    , ResolveAliasResponse
+    -- * Response Lenses
+    , rarsFleetId
+    , rarsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'resolveAlias' smart constructor.
+newtype ResolveAlias = ResolveAlias'
+    { _raAliasId :: Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResolveAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'raAliasId'
+resolveAlias
+    :: Text -- ^ 'raAliasId'
+    -> ResolveAlias
+resolveAlias pAliasId_ =
+    ResolveAlias'
+    { _raAliasId = pAliasId_
+    }
+
+-- | Unique identifier for the alias you want to resolve.
+raAliasId :: Lens' ResolveAlias Text
+raAliasId = lens _raAliasId (\ s a -> s{_raAliasId = a});
+
+instance AWSRequest ResolveAlias where
+        type Rs ResolveAlias = ResolveAliasResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 ResolveAliasResponse' <$>
+                   (x .?> "FleetId") <*> (pure (fromEnum s)))
+
+instance Hashable ResolveAlias
+
+instance ToHeaders ResolveAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.ResolveAlias" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON ResolveAlias where
+        toJSON ResolveAlias'{..}
+          = object (catMaybes [Just ("AliasId" .= _raAliasId)])
+
+instance ToPath ResolveAlias where
+        toPath = const "/"
+
+instance ToQuery ResolveAlias where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'resolveAliasResponse' smart constructor.
+data ResolveAliasResponse = ResolveAliasResponse'
+    { _rarsFleetId        :: !(Maybe Text)
+    , _rarsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ResolveAliasResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rarsFleetId'
+--
+-- * 'rarsResponseStatus'
+resolveAliasResponse
+    :: Int -- ^ 'rarsResponseStatus'
+    -> ResolveAliasResponse
+resolveAliasResponse pResponseStatus_ =
+    ResolveAliasResponse'
+    { _rarsFleetId = Nothing
+    , _rarsResponseStatus = pResponseStatus_
+    }
+
+-- | Fleet ID associated with the requested alias.
+rarsFleetId :: Lens' ResolveAliasResponse (Maybe Text)
+rarsFleetId = lens _rarsFleetId (\ s a -> s{_rarsFleetId = a});
+
+-- | The response status code.
+rarsResponseStatus :: Lens' ResolveAliasResponse Int
+rarsResponseStatus = lens _rarsResponseStatus (\ s a -> s{_rarsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/Types.hs b/gen/Network/AWS/GameLift/Types.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/Types.hs
@@ -0,0 +1,337 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.GameLift.Types
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.GameLift.Types
+    (
+    -- * Service Configuration
+      gameLift
+
+    -- * Errors
+    , _InvalidFleetStatusException
+    , _InvalidRequestException
+    , _ConflictException
+    , _TerminalRoutingStrategyException
+    , _NotFoundException
+    , _GameSessionFullException
+    , _InvalidGameSessionStatusException
+    , _InternalServiceException
+    , _UnauthorizedException
+    , _FleetCapacityExceededException
+    , _LimitExceededException
+
+    -- * BuildStatus
+    , BuildStatus (..)
+
+    -- * ComparisonOperatorType
+    , ComparisonOperatorType (..)
+
+    -- * EC2InstanceType
+    , EC2InstanceType (..)
+
+    -- * EventCode
+    , EventCode (..)
+
+    -- * FleetStatus
+    , FleetStatus (..)
+
+    -- * GameSessionStatus
+    , GameSessionStatus (..)
+
+    -- * IPProtocol
+    , IPProtocol (..)
+
+    -- * MetricName
+    , MetricName (..)
+
+    -- * PlayerSessionCreationPolicy
+    , PlayerSessionCreationPolicy (..)
+
+    -- * PlayerSessionStatus
+    , PlayerSessionStatus (..)
+
+    -- * ProtectionPolicy
+    , ProtectionPolicy (..)
+
+    -- * RoutingStrategyType
+    , RoutingStrategyType (..)
+
+    -- * ScalingAdjustmentType
+    , ScalingAdjustmentType (..)
+
+    -- * ScalingStatusType
+    , ScalingStatusType (..)
+
+    -- * AWSCredentials
+    , AWSCredentials
+    , awsCredentials
+    , acSecretAccessKey
+    , acSessionToken
+    , acAccessKeyId
+
+    -- * Alias
+    , Alias
+    , alias
+    , aCreationTime
+    , aLastUpdatedTime
+    , aAliasId
+    , aRoutingStrategy
+    , aName
+    , aDescription
+
+    -- * Build
+    , Build
+    , build
+    , bCreationTime
+    , bStatus
+    , bBuildId
+    , bName
+    , bVersion
+    , bSizeOnDisk
+
+    -- * EC2InstanceCounts
+    , EC2InstanceCounts
+    , ec2InstanceCounts
+    , eicIdLE
+    , eicTERMINATING
+    , eicPENDING
+    , eicMAXIMUM
+    , eicDESIRED
+    , eicMINIMUM
+    , eicACTIVE
+
+    -- * EC2InstanceLimit
+    , EC2InstanceLimit
+    , ec2InstanceLimit
+    , eilEC2InstanceType
+    , eilCurrentInstances
+    , eilInstanceLimit
+
+    -- * Event
+    , Event
+    , event
+    , eResourceId
+    , eEventTime
+    , eMessage
+    , eEventCode
+    , eEventId
+
+    -- * FleetAttributes
+    , FleetAttributes
+    , fleetAttributes
+    , faCreationTime
+    , faStatus
+    , faServerLaunchParameters
+    , faLogPaths
+    , faBuildId
+    , faTerminationTime
+    , faNewGameSessionProtectionPolicy
+    , faName
+    , faServerLaunchPath
+    , faFleetId
+    , faDescription
+
+    -- * FleetCapacity
+    , FleetCapacity
+    , fleetCapacity
+    , fcInstanceType
+    , fcFleetId
+    , fcInstanceCounts
+
+    -- * FleetUtilization
+    , FleetUtilization
+    , fleetUtilization
+    , fuActiveGameSessionCount
+    , fuMaximumPlayerSessionCount
+    , fuCurrentPlayerSessionCount
+    , fuFleetId
+
+    -- * GameProperty
+    , GameProperty
+    , gameProperty
+    , gpKey
+    , gpValue
+
+    -- * GameSession
+    , GameSession
+    , gameSession
+    , gsCreationTime
+    , gsStatus
+    , gsGameProperties
+    , gsIPAddress
+    , gsGameSessionId
+    , gsMaximumPlayerSessionCount
+    , gsTerminationTime
+    , gsPlayerSessionCreationPolicy
+    , gsName
+    , gsCurrentPlayerSessionCount
+    , gsFleetId
+
+    -- * GameSessionDetail
+    , GameSessionDetail
+    , gameSessionDetail
+    , gsdGameSession
+    , gsdProtectionPolicy
+
+    -- * IPPermission
+    , IPPermission
+    , ipPermission
+    , ipFromPort
+    , ipToPort
+    , ipIPRange
+    , ipProtocol
+
+    -- * PlayerSession
+    , PlayerSession
+    , playerSession
+    , psCreationTime
+    , psStatus
+    , psIPAddress
+    , psGameSessionId
+    , psTerminationTime
+    , psPlayerSessionId
+    , psFleetId
+    , psPlayerId
+
+    -- * RoutingStrategy
+    , RoutingStrategy
+    , routingStrategy
+    , rsType
+    , rsMessage
+    , rsFleetId
+
+    -- * S3Location
+    , S3Location
+    , s3Location
+    , slBucket
+    , slKey
+    , slRoleARN
+
+    -- * ScalingPolicy
+    , ScalingPolicy
+    , scalingPolicy
+    , spStatus
+    , spScalingAdjustmentType
+    , spEvaluationPeriods
+    , spMetricName
+    , spComparisonOperator
+    , spName
+    , spThreshold
+    , spScalingAdjustment
+    , spFleetId
+    ) where
+
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.GameLift.Types.Sum
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Sign.V4
+
+-- | API version '2015-10-01' of the Amazon GameLift SDK configuration.
+gameLift :: Service
+gameLift =
+    Service
+    { _svcAbbrev = "GameLift"
+    , _svcSigner = v4
+    , _svcPrefix = "gamelift"
+    , _svcVersion = "2015-10-01"
+    , _svcEndpoint = defaultEndpoint gameLift
+    , _svcTimeout = Just 70
+    , _svcCheck = statusSuccess
+    , _svcError = parseJSONError
+    , _svcRetry = retry
+    }
+  where
+    retry =
+        Exponential
+        { _retryBase = 5.0e-2
+        , _retryGrowth = 2
+        , _retryAttempts = 5
+        , _retryCheck = check
+        }
+    check e
+      | has (hasStatus 429) e = Just "too_many_requests"
+      | has (hasCode "ThrottlingException" . hasStatus 400) e =
+          Just "throttling_exception"
+      | has (hasCode "Throttling" . hasStatus 400) e = Just "throttling"
+      | has (hasStatus 503) e = Just "service_unavailable"
+      | has (hasStatus 500) e = Just "general_server_error"
+      | has (hasStatus 509) e = Just "limit_exceeded"
+      | otherwise = Nothing
+
+-- | The requested operation would cause a conflict with the current state of
+-- a resource associated with the request and\/or the fleet. Please resolve
+-- the conflict before retrying.
+_InvalidFleetStatusException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidFleetStatusException =
+    _ServiceError . hasCode "InvalidFleetStatusException"
+
+-- | One or more parameters specified as part of the request are invalid.
+-- Please correct the invalid parameters before retrying.
+_InvalidRequestException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidRequestException = _ServiceError . hasCode "InvalidRequestException"
+
+-- | The requested operation would cause a conflict with the current state of
+-- a service resource associated with the request. Please resolve the
+-- conflict before retrying this request.
+_ConflictException :: AsError a => Getting (First ServiceError) a ServiceError
+_ConflictException = _ServiceError . hasCode "ConflictException"
+
+-- | The service is unable to resolve the routing for a particular alias
+-- because it has a terminal < RoutingStrategy> associated with it. The
+-- message returned in this exception is the message defined in the
+-- TerminalRoutingStrategy itself. Such requests should only be retried if
+-- the routing strategy for the specified alias is modified.
+_TerminalRoutingStrategyException :: AsError a => Getting (First ServiceError) a ServiceError
+_TerminalRoutingStrategyException =
+    _ServiceError . hasCode "TerminalRoutingStrategyException"
+
+-- | A service resource associated with the request could not be found. Such
+-- requests should not be retried by clients.
+_NotFoundException :: AsError a => Getting (First ServiceError) a ServiceError
+_NotFoundException = _ServiceError . hasCode "NotFoundException"
+
+-- | The game instance is currently full and cannot allow the requested
+-- player(s) to join. This exception occurs in response to a
+-- < CreatePlayerSession> request.
+_GameSessionFullException :: AsError a => Getting (First ServiceError) a ServiceError
+_GameSessionFullException = _ServiceError . hasCode "GameSessionFullException"
+
+-- | The requested operation would cause a conflict with the current state of
+-- a resource associated with the request and\/or the game instance. Such
+-- requests should not be retried by clients without resolving the
+-- conflict.
+_InvalidGameSessionStatusException :: AsError a => Getting (First ServiceError) a ServiceError
+_InvalidGameSessionStatusException =
+    _ServiceError . hasCode "InvalidGameSessionStatusException"
+
+-- | The service encountered an unrecoverable internal failure while
+-- processing the request. Such requests can be retried by clients, either
+-- immediately or after a back-off period.
+_InternalServiceException :: AsError a => Getting (First ServiceError) a ServiceError
+_InternalServiceException = _ServiceError . hasCode "InternalServiceException"
+
+-- | The client failed authentication. Such requests should not be retried
+-- without valid authentication credentials.
+_UnauthorizedException :: AsError a => Getting (First ServiceError) a ServiceError
+_UnauthorizedException = _ServiceError . hasCode "UnauthorizedException"
+
+-- | The specified fleet has no available instances to fulfill a request to
+-- create a new game session. Such requests should only be retried once the
+-- fleet capacity has been increased.
+_FleetCapacityExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_FleetCapacityExceededException =
+    _ServiceError . hasCode "FleetCapacityExceededException"
+
+-- | The requested operation would cause the resource to exceed the allowed
+-- service limit. Please resolve the issue before retrying.
+_LimitExceededException :: AsError a => Getting (First ServiceError) a ServiceError
+_LimitExceededException = _ServiceError . hasCode "LimitExceededException"
diff --git a/gen/Network/AWS/GameLift/Types/Product.hs b/gen/Network/AWS/GameLift/Types/Product.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/Types/Product.hs
@@ -0,0 +1,1409 @@
+{-# 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.GameLift.Types.Product
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.GameLift.Types.Product where
+
+import           Network.AWS.GameLift.Types.Sum
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+
+-- | AWS access credentials required to upload game build files to Amazon
+-- GameLift. These credentials are generated with < CreateBuild>, and are
+-- valid for a limited time. If they expire before you upload your game
+-- build, get a new set by calling < RequestUploadCredentials>.
+--
+-- /See:/ 'awsCredentials' smart constructor.
+data AWSCredentials = AWSCredentials'
+    { _acSecretAccessKey :: !(Maybe Text)
+    , _acSessionToken    :: !(Maybe Text)
+    , _acAccessKeyId     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'AWSCredentials' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'acSecretAccessKey'
+--
+-- * 'acSessionToken'
+--
+-- * 'acAccessKeyId'
+awsCredentials
+    :: AWSCredentials
+awsCredentials =
+    AWSCredentials'
+    { _acSecretAccessKey = Nothing
+    , _acSessionToken = Nothing
+    , _acAccessKeyId = Nothing
+    }
+
+-- | Secret key for an AWS account.
+acSecretAccessKey :: Lens' AWSCredentials (Maybe Text)
+acSecretAccessKey = lens _acSecretAccessKey (\ s a -> s{_acSecretAccessKey = a});
+
+-- | Token specific to a build ID.
+acSessionToken :: Lens' AWSCredentials (Maybe Text)
+acSessionToken = lens _acSessionToken (\ s a -> s{_acSessionToken = a});
+
+-- | Access key for an AWS account.
+acAccessKeyId :: Lens' AWSCredentials (Maybe Text)
+acAccessKeyId = lens _acAccessKeyId (\ s a -> s{_acAccessKeyId = a});
+
+instance FromJSON AWSCredentials where
+        parseJSON
+          = withObject "AWSCredentials"
+              (\ x ->
+                 AWSCredentials' <$>
+                   (x .:? "SecretAccessKey") <*> (x .:? "SessionToken")
+                     <*> (x .:? "AccessKeyId"))
+
+instance Hashable AWSCredentials
+
+-- | Properties describing a fleet alias.
+--
+-- /See:/ 'alias' smart constructor.
+data Alias = Alias'
+    { _aCreationTime    :: !(Maybe POSIX)
+    , _aLastUpdatedTime :: !(Maybe POSIX)
+    , _aAliasId         :: !(Maybe Text)
+    , _aRoutingStrategy :: !(Maybe RoutingStrategy)
+    , _aName            :: !(Maybe Text)
+    , _aDescription     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Alias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'aCreationTime'
+--
+-- * 'aLastUpdatedTime'
+--
+-- * 'aAliasId'
+--
+-- * 'aRoutingStrategy'
+--
+-- * 'aName'
+--
+-- * 'aDescription'
+alias
+    :: Alias
+alias =
+    Alias'
+    { _aCreationTime = Nothing
+    , _aLastUpdatedTime = Nothing
+    , _aAliasId = Nothing
+    , _aRoutingStrategy = Nothing
+    , _aName = Nothing
+    , _aDescription = Nothing
+    }
+
+-- | Time stamp indicating when this object was created. Format is an integer
+-- representing the number of seconds since the Unix epoch (Unix time).
+aCreationTime :: Lens' Alias (Maybe UTCTime)
+aCreationTime = lens _aCreationTime (\ s a -> s{_aCreationTime = a}) . mapping _Time;
+
+-- | Time stamp indicating when this object was last modified. Format is an
+-- integer representing the number of seconds since the Unix epoch (Unix
+-- time).
+aLastUpdatedTime :: Lens' Alias (Maybe UTCTime)
+aLastUpdatedTime = lens _aLastUpdatedTime (\ s a -> s{_aLastUpdatedTime = a}) . mapping _Time;
+
+-- | Unique identifier for a fleet alias.
+aAliasId :: Lens' Alias (Maybe Text)
+aAliasId = lens _aAliasId (\ s a -> s{_aAliasId = a});
+
+-- | Undocumented member.
+aRoutingStrategy :: Lens' Alias (Maybe RoutingStrategy)
+aRoutingStrategy = lens _aRoutingStrategy (\ s a -> s{_aRoutingStrategy = a});
+
+-- | Descriptive label associated with this alias. Alias names do not need to
+-- be unique.
+aName :: Lens' Alias (Maybe Text)
+aName = lens _aName (\ s a -> s{_aName = a});
+
+-- | Human-readable description of the alias.
+aDescription :: Lens' Alias (Maybe Text)
+aDescription = lens _aDescription (\ s a -> s{_aDescription = a});
+
+instance FromJSON Alias where
+        parseJSON
+          = withObject "Alias"
+              (\ x ->
+                 Alias' <$>
+                   (x .:? "CreationTime") <*> (x .:? "LastUpdatedTime")
+                     <*> (x .:? "AliasId")
+                     <*> (x .:? "RoutingStrategy")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "Description"))
+
+instance Hashable Alias
+
+-- | Properties describing a game build.
+--
+-- /See:/ 'build' smart constructor.
+data Build = Build'
+    { _bCreationTime :: !(Maybe POSIX)
+    , _bStatus       :: !(Maybe BuildStatus)
+    , _bBuildId      :: !(Maybe Text)
+    , _bName         :: !(Maybe Text)
+    , _bVersion      :: !(Maybe Text)
+    , _bSizeOnDisk   :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Build' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'bCreationTime'
+--
+-- * 'bStatus'
+--
+-- * 'bBuildId'
+--
+-- * 'bName'
+--
+-- * 'bVersion'
+--
+-- * 'bSizeOnDisk'
+build
+    :: Build
+build =
+    Build'
+    { _bCreationTime = Nothing
+    , _bStatus = Nothing
+    , _bBuildId = Nothing
+    , _bName = Nothing
+    , _bVersion = Nothing
+    , _bSizeOnDisk = Nothing
+    }
+
+-- | Time stamp indicating when this object was created. Format is an integer
+-- representing the number of seconds since the Unix epoch (Unix time).
+bCreationTime :: Lens' Build (Maybe UTCTime)
+bCreationTime = lens _bCreationTime (\ s a -> s{_bCreationTime = a}) . mapping _Time;
+
+-- | Current status of the build. Possible build states include:
+--
+-- -   INITIALIZED: A new build has been defined, but no files have been
+--     uploaded. You cannot create fleets for builds that are in this
+--     state. When a build is successfully created, the build state is set
+--     to this value.
+-- -   READY: The game build has been successfully uploaded. You can now
+--     create new fleets for this build.
+-- -   FAILED: The game build upload failed. You cannot create new fleets
+--     for this build.
+bStatus :: Lens' Build (Maybe BuildStatus)
+bStatus = lens _bStatus (\ s a -> s{_bStatus = a});
+
+-- | Unique identifier for a build.
+bBuildId :: Lens' Build (Maybe Text)
+bBuildId = lens _bBuildId (\ s a -> s{_bBuildId = a});
+
+-- | Descriptive label associated with this build. Build names do not need to
+-- be unique. It can be set using < CreateBuild> or < UpdateBuild>.
+bName :: Lens' Build (Maybe Text)
+bName = lens _bName (\ s a -> s{_bName = a});
+
+-- | Version associated with this build. Version strings do not need to be
+-- unique to a build. This value can be set using < CreateBuild> or
+-- < UpdateBuild>.
+bVersion :: Lens' Build (Maybe Text)
+bVersion = lens _bVersion (\ s a -> s{_bVersion = a});
+
+-- | File size of the uploaded game build, expressed in bytes. When the build
+-- state is INITIALIZED, this value is 0.
+bSizeOnDisk :: Lens' Build (Maybe Natural)
+bSizeOnDisk = lens _bSizeOnDisk (\ s a -> s{_bSizeOnDisk = a}) . mapping _Nat;
+
+instance FromJSON Build where
+        parseJSON
+          = withObject "Build"
+              (\ x ->
+                 Build' <$>
+                   (x .:? "CreationTime") <*> (x .:? "Status") <*>
+                     (x .:? "BuildId")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "Version")
+                     <*> (x .:? "SizeOnDisk"))
+
+instance Hashable Build
+
+-- | Current status of fleet capacity. The number of active instances should
+-- match or be in the process of matching the number of desired instances.
+-- Pending and terminating counts are non-zero only if fleet capacity is
+-- adjusting to an < UpdateFleetCapacity> request, or if access to
+-- resources is temporarily affected.
+--
+-- /See:/ 'ec2InstanceCounts' smart constructor.
+data EC2InstanceCounts = EC2InstanceCounts'
+    { _eicIdLE        :: !(Maybe Nat)
+    , _eicTERMINATING :: !(Maybe Nat)
+    , _eicPENDING     :: !(Maybe Nat)
+    , _eicMAXIMUM     :: !(Maybe Nat)
+    , _eicDESIRED     :: !(Maybe Nat)
+    , _eicMINIMUM     :: !(Maybe Nat)
+    , _eicACTIVE      :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EC2InstanceCounts' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eicIdLE'
+--
+-- * 'eicTERMINATING'
+--
+-- * 'eicPENDING'
+--
+-- * 'eicMAXIMUM'
+--
+-- * 'eicDESIRED'
+--
+-- * 'eicMINIMUM'
+--
+-- * 'eicACTIVE'
+ec2InstanceCounts
+    :: EC2InstanceCounts
+ec2InstanceCounts =
+    EC2InstanceCounts'
+    { _eicIdLE = Nothing
+    , _eicTERMINATING = Nothing
+    , _eicPENDING = Nothing
+    , _eicMAXIMUM = Nothing
+    , _eicDESIRED = Nothing
+    , _eicMINIMUM = Nothing
+    , _eicACTIVE = Nothing
+    }
+
+-- | Number of active instances in the fleet that are not currently hosting a
+-- game session.
+eicIdLE :: Lens' EC2InstanceCounts (Maybe Natural)
+eicIdLE = lens _eicIdLE (\ s a -> s{_eicIdLE = a}) . mapping _Nat;
+
+-- | Number of instances in the fleet that are no longer active but haven\'t
+-- yet been terminated.
+eicTERMINATING :: Lens' EC2InstanceCounts (Maybe Natural)
+eicTERMINATING = lens _eicTERMINATING (\ s a -> s{_eicTERMINATING = a}) . mapping _Nat;
+
+-- | Number of instances in the fleet that are starting but not yet active.
+eicPENDING :: Lens' EC2InstanceCounts (Maybe Natural)
+eicPENDING = lens _eicPENDING (\ s a -> s{_eicPENDING = a}) . mapping _Nat;
+
+-- | Maximum value allowed for the fleet\'s instance count.
+eicMAXIMUM :: Lens' EC2InstanceCounts (Maybe Natural)
+eicMAXIMUM = lens _eicMAXIMUM (\ s a -> s{_eicMAXIMUM = a}) . mapping _Nat;
+
+-- | Ideal number of active instances in the fleet.
+eicDESIRED :: Lens' EC2InstanceCounts (Maybe Natural)
+eicDESIRED = lens _eicDESIRED (\ s a -> s{_eicDESIRED = a}) . mapping _Nat;
+
+-- | Minimum value allowed for the fleet\'s instance count.
+eicMINIMUM :: Lens' EC2InstanceCounts (Maybe Natural)
+eicMINIMUM = lens _eicMINIMUM (\ s a -> s{_eicMINIMUM = a}) . mapping _Nat;
+
+-- | Actual number of active instances in the fleet.
+eicACTIVE :: Lens' EC2InstanceCounts (Maybe Natural)
+eicACTIVE = lens _eicACTIVE (\ s a -> s{_eicACTIVE = a}) . mapping _Nat;
+
+instance FromJSON EC2InstanceCounts where
+        parseJSON
+          = withObject "EC2InstanceCounts"
+              (\ x ->
+                 EC2InstanceCounts' <$>
+                   (x .:? "IDLE") <*> (x .:? "TERMINATING") <*>
+                     (x .:? "PENDING")
+                     <*> (x .:? "MAXIMUM")
+                     <*> (x .:? "DESIRED")
+                     <*> (x .:? "MINIMUM")
+                     <*> (x .:? "ACTIVE"))
+
+instance Hashable EC2InstanceCounts
+
+-- | Maximum number of instances allowed based on the Amazon Elastic Compute
+-- Cloud (Amazon EC2) instance type. Instance limits can be retrieved by
+-- calling < DescribeEC2InstanceLimits>.
+--
+-- /See:/ 'ec2InstanceLimit' smart constructor.
+data EC2InstanceLimit = EC2InstanceLimit'
+    { _eilEC2InstanceType  :: !(Maybe EC2InstanceType)
+    , _eilCurrentInstances :: !(Maybe Nat)
+    , _eilInstanceLimit    :: !(Maybe Nat)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'EC2InstanceLimit' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eilEC2InstanceType'
+--
+-- * 'eilCurrentInstances'
+--
+-- * 'eilInstanceLimit'
+ec2InstanceLimit
+    :: EC2InstanceLimit
+ec2InstanceLimit =
+    EC2InstanceLimit'
+    { _eilEC2InstanceType = Nothing
+    , _eilCurrentInstances = Nothing
+    , _eilInstanceLimit = Nothing
+    }
+
+-- | Type of EC2 instances used in the fleet. EC2 instance types define the
+-- CPU, memory, storage, and networking capacity of the fleetaposs hosts.
+-- Amazon GameLift supports the EC2 instance types listed below. See
+-- <https://aws.amazon.com/ec2/instance-types/ Amazon EC2 Instance Types>
+-- for detailed descriptions of each.
+eilEC2InstanceType :: Lens' EC2InstanceLimit (Maybe EC2InstanceType)
+eilEC2InstanceType = lens _eilEC2InstanceType (\ s a -> s{_eilEC2InstanceType = a});
+
+-- | Number of instances of the specified type that are currently in use by
+-- this AWS account.
+eilCurrentInstances :: Lens' EC2InstanceLimit (Maybe Natural)
+eilCurrentInstances = lens _eilCurrentInstances (\ s a -> s{_eilCurrentInstances = a}) . mapping _Nat;
+
+-- | Number of instances allowed.
+eilInstanceLimit :: Lens' EC2InstanceLimit (Maybe Natural)
+eilInstanceLimit = lens _eilInstanceLimit (\ s a -> s{_eilInstanceLimit = a}) . mapping _Nat;
+
+instance FromJSON EC2InstanceLimit where
+        parseJSON
+          = withObject "EC2InstanceLimit"
+              (\ x ->
+                 EC2InstanceLimit' <$>
+                   (x .:? "EC2InstanceType") <*>
+                     (x .:? "CurrentInstances")
+                     <*> (x .:? "InstanceLimit"))
+
+instance Hashable EC2InstanceLimit
+
+-- | Log entry describing an event involving an Amazon GameLift resource
+-- (such as a fleet).
+--
+-- /See:/ 'event' smart constructor.
+data Event = Event'
+    { _eResourceId :: !(Maybe Text)
+    , _eEventTime  :: !(Maybe POSIX)
+    , _eMessage    :: !(Maybe Text)
+    , _eEventCode  :: !(Maybe EventCode)
+    , _eEventId    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'Event' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'eResourceId'
+--
+-- * 'eEventTime'
+--
+-- * 'eMessage'
+--
+-- * 'eEventCode'
+--
+-- * 'eEventId'
+event
+    :: Event
+event =
+    Event'
+    { _eResourceId = Nothing
+    , _eEventTime = Nothing
+    , _eMessage = Nothing
+    , _eEventCode = Nothing
+    , _eEventId = Nothing
+    }
+
+-- | Unique identifier for the resource, such as a fleet ID.
+eResourceId :: Lens' Event (Maybe Text)
+eResourceId = lens _eResourceId (\ s a -> s{_eResourceId = a});
+
+-- | Time stamp indicating when this event occurred. Format is an integer
+-- representing the number of seconds since the Unix epoch (Unix time).
+eEventTime :: Lens' Event (Maybe UTCTime)
+eEventTime = lens _eEventTime (\ s a -> s{_eEventTime = a}) . mapping _Time;
+
+-- | Additional information related to the event.
+eMessage :: Lens' Event (Maybe Text)
+eMessage = lens _eMessage (\ s a -> s{_eMessage = a});
+
+-- | Type of event being logged.
+eEventCode :: Lens' Event (Maybe EventCode)
+eEventCode = lens _eEventCode (\ s a -> s{_eEventCode = a});
+
+-- | Unique identifier for a fleet event.
+eEventId :: Lens' Event (Maybe Text)
+eEventId = lens _eEventId (\ s a -> s{_eEventId = a});
+
+instance FromJSON Event where
+        parseJSON
+          = withObject "Event"
+              (\ x ->
+                 Event' <$>
+                   (x .:? "ResourceId") <*> (x .:? "EventTime") <*>
+                     (x .:? "Message")
+                     <*> (x .:? "EventCode")
+                     <*> (x .:? "EventId"))
+
+instance Hashable Event
+
+-- | General properties describing a fleet.
+--
+-- /See:/ 'fleetAttributes' smart constructor.
+data FleetAttributes = FleetAttributes'
+    { _faCreationTime                   :: !(Maybe POSIX)
+    , _faStatus                         :: !(Maybe FleetStatus)
+    , _faServerLaunchParameters         :: !(Maybe Text)
+    , _faLogPaths                       :: !(Maybe [Text])
+    , _faBuildId                        :: !(Maybe Text)
+    , _faTerminationTime                :: !(Maybe POSIX)
+    , _faNewGameSessionProtectionPolicy :: !(Maybe ProtectionPolicy)
+    , _faName                           :: !(Maybe Text)
+    , _faServerLaunchPath               :: !(Maybe Text)
+    , _faFleetId                        :: !(Maybe Text)
+    , _faDescription                    :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FleetAttributes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'faCreationTime'
+--
+-- * 'faStatus'
+--
+-- * 'faServerLaunchParameters'
+--
+-- * 'faLogPaths'
+--
+-- * 'faBuildId'
+--
+-- * 'faTerminationTime'
+--
+-- * 'faNewGameSessionProtectionPolicy'
+--
+-- * 'faName'
+--
+-- * 'faServerLaunchPath'
+--
+-- * 'faFleetId'
+--
+-- * 'faDescription'
+fleetAttributes
+    :: FleetAttributes
+fleetAttributes =
+    FleetAttributes'
+    { _faCreationTime = Nothing
+    , _faStatus = Nothing
+    , _faServerLaunchParameters = Nothing
+    , _faLogPaths = Nothing
+    , _faBuildId = Nothing
+    , _faTerminationTime = Nothing
+    , _faNewGameSessionProtectionPolicy = Nothing
+    , _faName = Nothing
+    , _faServerLaunchPath = Nothing
+    , _faFleetId = Nothing
+    , _faDescription = Nothing
+    }
+
+-- | Time stamp indicating when this object was created. Format is an integer
+-- representing the number of seconds since the Unix epoch (Unix time).
+faCreationTime :: Lens' FleetAttributes (Maybe UTCTime)
+faCreationTime = lens _faCreationTime (\ s a -> s{_faCreationTime = a}) . mapping _Time;
+
+-- | Current status of the fleet. Possible fleet states include:
+--
+-- -   NEW: A new fleet has been defined and hosts allocated.
+-- -   DOWNLOADING\/VALIDATING\/BUILDING\/ACTIVATING: The new fleet is
+--     being set up with the game build, and new hosts are being started.
+-- -   ACTIVE: Hosts can now accept game sessions.
+-- -   ERROR: An error occurred when downloading, validating, building, or
+--     activating the fleet.
+-- -   DELETING: Hosts are responding to a delete fleet request.
+-- -   TERMINATED: The fleet no longer exists.
+faStatus :: Lens' FleetAttributes (Maybe FleetStatus)
+faStatus = lens _faStatus (\ s a -> s{_faStatus = a});
+
+-- | Parameters required to launch your game server. These parameters should
+-- be expressed as a string of command-line parameters. Example: \"+sv_port
+-- 33435 +start_lobby\".
+faServerLaunchParameters :: Lens' FleetAttributes (Maybe Text)
+faServerLaunchParameters = lens _faServerLaunchParameters (\ s a -> s{_faServerLaunchParameters = a});
+
+-- | Path to game-session log files generated by your game server. Once a
+-- game session has been terminated, Amazon GameLift captures and stores
+-- the logs on Amazon S3. Use the GameLift console to access the stored
+-- logs.
+faLogPaths :: Lens' FleetAttributes [Text]
+faLogPaths = lens _faLogPaths (\ s a -> s{_faLogPaths = a}) . _Default . _Coerce;
+
+-- | Unique identifier for a build.
+faBuildId :: Lens' FleetAttributes (Maybe Text)
+faBuildId = lens _faBuildId (\ s a -> s{_faBuildId = a});
+
+-- | Time stamp indicating when this fleet was terminated. Format is an
+-- integer representing the number of seconds since the Unix epoch (Unix
+-- time).
+faTerminationTime :: Lens' FleetAttributes (Maybe UTCTime)
+faTerminationTime = lens _faTerminationTime (\ s a -> s{_faTerminationTime = a}) . mapping _Time;
+
+-- | Type of game session protection to set for all new instances started in
+-- the fleet.
+--
+-- -   NoProtection: The game session can be terminated during a scale-down
+--     event.
+-- -   FullProtection: If the game session is in an ACTIVE status, it
+--     cannot be terminated during a scale-down event.
+faNewGameSessionProtectionPolicy :: Lens' FleetAttributes (Maybe ProtectionPolicy)
+faNewGameSessionProtectionPolicy = lens _faNewGameSessionProtectionPolicy (\ s a -> s{_faNewGameSessionProtectionPolicy = a});
+
+-- | Descriptive label associated with this fleet. Fleet names do not need to
+-- be unique.
+faName :: Lens' FleetAttributes (Maybe Text)
+faName = lens _faName (\ s a -> s{_faName = a});
+
+-- | Path to the launch executable for the game server. A game server is
+-- built into a 'C:\\game' drive. This value must be expressed as
+-- 'C:\\game\\[launchpath]'. Example: If, when built, your game server
+-- files are in a folder called \"MyGame\", your log path should be
+-- 'C:\\game\\MyGame\\server.exe'.
+faServerLaunchPath :: Lens' FleetAttributes (Maybe Text)
+faServerLaunchPath = lens _faServerLaunchPath (\ s a -> s{_faServerLaunchPath = a});
+
+-- | Unique identifier for a fleet.
+faFleetId :: Lens' FleetAttributes (Maybe Text)
+faFleetId = lens _faFleetId (\ s a -> s{_faFleetId = a});
+
+-- | Human-readable description of the fleet.
+faDescription :: Lens' FleetAttributes (Maybe Text)
+faDescription = lens _faDescription (\ s a -> s{_faDescription = a});
+
+instance FromJSON FleetAttributes where
+        parseJSON
+          = withObject "FleetAttributes"
+              (\ x ->
+                 FleetAttributes' <$>
+                   (x .:? "CreationTime") <*> (x .:? "Status") <*>
+                     (x .:? "ServerLaunchParameters")
+                     <*> (x .:? "LogPaths" .!= mempty)
+                     <*> (x .:? "BuildId")
+                     <*> (x .:? "TerminationTime")
+                     <*> (x .:? "NewGameSessionProtectionPolicy")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "ServerLaunchPath")
+                     <*> (x .:? "FleetId")
+                     <*> (x .:? "Description"))
+
+instance Hashable FleetAttributes
+
+-- | Information about the fleet\'s capacity. Fleet capacity is measured in
+-- EC2 instances. By default, new fleets have a capacity of one instance,
+-- but can be updated as needed. The maximum number of instances for a
+-- fleet is determined by the fleet\'s instance type.
+--
+-- /See:/ 'fleetCapacity' smart constructor.
+data FleetCapacity = FleetCapacity'
+    { _fcInstanceType   :: !(Maybe EC2InstanceType)
+    , _fcFleetId        :: !(Maybe Text)
+    , _fcInstanceCounts :: !(Maybe EC2InstanceCounts)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FleetCapacity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fcInstanceType'
+--
+-- * 'fcFleetId'
+--
+-- * 'fcInstanceCounts'
+fleetCapacity
+    :: FleetCapacity
+fleetCapacity =
+    FleetCapacity'
+    { _fcInstanceType = Nothing
+    , _fcFleetId = Nothing
+    , _fcInstanceCounts = Nothing
+    }
+
+-- | Type of EC2 instances used in the fleet. EC2 instance types define the
+-- CPU, memory, storage, and networking capacity of the fleetaposs hosts.
+-- Amazon GameLift supports the EC2 instance types listed below. See
+-- <https://aws.amazon.com/ec2/instance-types/ Amazon EC2 Instance Types>
+-- for detailed descriptions of each.
+fcInstanceType :: Lens' FleetCapacity (Maybe EC2InstanceType)
+fcInstanceType = lens _fcInstanceType (\ s a -> s{_fcInstanceType = a});
+
+-- | Unique identifier for a fleet.
+fcFleetId :: Lens' FleetCapacity (Maybe Text)
+fcFleetId = lens _fcFleetId (\ s a -> s{_fcFleetId = a});
+
+-- | Current status of fleet capacity.
+fcInstanceCounts :: Lens' FleetCapacity (Maybe EC2InstanceCounts)
+fcInstanceCounts = lens _fcInstanceCounts (\ s a -> s{_fcInstanceCounts = a});
+
+instance FromJSON FleetCapacity where
+        parseJSON
+          = withObject "FleetCapacity"
+              (\ x ->
+                 FleetCapacity' <$>
+                   (x .:? "InstanceType") <*> (x .:? "FleetId") <*>
+                     (x .:? "InstanceCounts"))
+
+instance Hashable FleetCapacity
+
+-- | Current status of fleet utilization, including the number of game and
+-- player sessions being hosted.
+--
+-- /See:/ 'fleetUtilization' smart constructor.
+data FleetUtilization = FleetUtilization'
+    { _fuActiveGameSessionCount    :: !(Maybe Nat)
+    , _fuMaximumPlayerSessionCount :: !(Maybe Nat)
+    , _fuCurrentPlayerSessionCount :: !(Maybe Nat)
+    , _fuFleetId                   :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'FleetUtilization' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'fuActiveGameSessionCount'
+--
+-- * 'fuMaximumPlayerSessionCount'
+--
+-- * 'fuCurrentPlayerSessionCount'
+--
+-- * 'fuFleetId'
+fleetUtilization
+    :: FleetUtilization
+fleetUtilization =
+    FleetUtilization'
+    { _fuActiveGameSessionCount = Nothing
+    , _fuMaximumPlayerSessionCount = Nothing
+    , _fuCurrentPlayerSessionCount = Nothing
+    , _fuFleetId = Nothing
+    }
+
+-- | Number of active game sessions currently being hosted on fleet game
+-- servers.
+fuActiveGameSessionCount :: Lens' FleetUtilization (Maybe Natural)
+fuActiveGameSessionCount = lens _fuActiveGameSessionCount (\ s a -> s{_fuActiveGameSessionCount = a}) . mapping _Nat;
+
+-- | Maximum players allowed across all game sessions currently hosted in the
+-- fleet.
+fuMaximumPlayerSessionCount :: Lens' FleetUtilization (Maybe Natural)
+fuMaximumPlayerSessionCount = lens _fuMaximumPlayerSessionCount (\ s a -> s{_fuMaximumPlayerSessionCount = a}) . mapping _Nat;
+
+-- | Number of active player sessions currently being hosted on fleet game
+-- servers.
+fuCurrentPlayerSessionCount :: Lens' FleetUtilization (Maybe Natural)
+fuCurrentPlayerSessionCount = lens _fuCurrentPlayerSessionCount (\ s a -> s{_fuCurrentPlayerSessionCount = a}) . mapping _Nat;
+
+-- | Unique identifier for a fleet.
+fuFleetId :: Lens' FleetUtilization (Maybe Text)
+fuFleetId = lens _fuFleetId (\ s a -> s{_fuFleetId = a});
+
+instance FromJSON FleetUtilization where
+        parseJSON
+          = withObject "FleetUtilization"
+              (\ x ->
+                 FleetUtilization' <$>
+                   (x .:? "ActiveGameSessionCount") <*>
+                     (x .:? "MaximumPlayerSessionCount")
+                     <*> (x .:? "CurrentPlayerSessionCount")
+                     <*> (x .:? "FleetId"))
+
+instance Hashable FleetUtilization
+
+-- | Set of key-value pairs containing information your game server requires
+-- to set up sessions. This object allows you to pass in any set of data
+-- needed for your game. For more information, see the
+-- <http://docs.aws.amazon.com/gamelift/latest/developerguide/ Amazon GameLift Developer Guide>.
+--
+-- /See:/ 'gameProperty' smart constructor.
+data GameProperty = GameProperty'
+    { _gpKey   :: !Text
+    , _gpValue :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GameProperty' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gpKey'
+--
+-- * 'gpValue'
+gameProperty
+    :: Text -- ^ 'gpKey'
+    -> Text -- ^ 'gpValue'
+    -> GameProperty
+gameProperty pKey_ pValue_ =
+    GameProperty'
+    { _gpKey = pKey_
+    , _gpValue = pValue_
+    }
+
+-- | Undocumented member.
+gpKey :: Lens' GameProperty Text
+gpKey = lens _gpKey (\ s a -> s{_gpKey = a});
+
+-- | Undocumented member.
+gpValue :: Lens' GameProperty Text
+gpValue = lens _gpValue (\ s a -> s{_gpValue = a});
+
+instance FromJSON GameProperty where
+        parseJSON
+          = withObject "GameProperty"
+              (\ x ->
+                 GameProperty' <$> (x .: "Key") <*> (x .: "Value"))
+
+instance Hashable GameProperty
+
+instance ToJSON GameProperty where
+        toJSON GameProperty'{..}
+          = object
+              (catMaybes
+                 [Just ("Key" .= _gpKey), Just ("Value" .= _gpValue)])
+
+-- | Properties describing a game session.
+--
+-- /See:/ 'gameSession' smart constructor.
+data GameSession = GameSession'
+    { _gsCreationTime                :: !(Maybe POSIX)
+    , _gsStatus                      :: !(Maybe GameSessionStatus)
+    , _gsGameProperties              :: !(Maybe [GameProperty])
+    , _gsIPAddress                   :: !(Maybe Text)
+    , _gsGameSessionId               :: !(Maybe Text)
+    , _gsMaximumPlayerSessionCount   :: !(Maybe Nat)
+    , _gsTerminationTime             :: !(Maybe POSIX)
+    , _gsPlayerSessionCreationPolicy :: !(Maybe PlayerSessionCreationPolicy)
+    , _gsName                        :: !(Maybe Text)
+    , _gsCurrentPlayerSessionCount   :: !(Maybe Nat)
+    , _gsFleetId                     :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GameSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gsCreationTime'
+--
+-- * 'gsStatus'
+--
+-- * 'gsGameProperties'
+--
+-- * 'gsIPAddress'
+--
+-- * 'gsGameSessionId'
+--
+-- * 'gsMaximumPlayerSessionCount'
+--
+-- * 'gsTerminationTime'
+--
+-- * 'gsPlayerSessionCreationPolicy'
+--
+-- * 'gsName'
+--
+-- * 'gsCurrentPlayerSessionCount'
+--
+-- * 'gsFleetId'
+gameSession
+    :: GameSession
+gameSession =
+    GameSession'
+    { _gsCreationTime = Nothing
+    , _gsStatus = Nothing
+    , _gsGameProperties = Nothing
+    , _gsIPAddress = Nothing
+    , _gsGameSessionId = Nothing
+    , _gsMaximumPlayerSessionCount = Nothing
+    , _gsTerminationTime = Nothing
+    , _gsPlayerSessionCreationPolicy = Nothing
+    , _gsName = Nothing
+    , _gsCurrentPlayerSessionCount = Nothing
+    , _gsFleetId = Nothing
+    }
+
+-- | Time stamp indicating when this object was created. Format is an integer
+-- representing the number of seconds since the Unix epoch (Unix time).
+gsCreationTime :: Lens' GameSession (Maybe UTCTime)
+gsCreationTime = lens _gsCreationTime (\ s a -> s{_gsCreationTime = a}) . mapping _Time;
+
+-- | Current status of the game session. A game session must be in an ACTIVE
+-- state to have player sessions.
+gsStatus :: Lens' GameSession (Maybe GameSessionStatus)
+gsStatus = lens _gsStatus (\ s a -> s{_gsStatus = a});
+
+-- | Set of custom properties for the game session.
+gsGameProperties :: Lens' GameSession [GameProperty]
+gsGameProperties = lens _gsGameProperties (\ s a -> s{_gsGameProperties = a}) . _Default . _Coerce;
+
+-- | IP address of the game session.
+gsIPAddress :: Lens' GameSession (Maybe Text)
+gsIPAddress = lens _gsIPAddress (\ s a -> s{_gsIPAddress = a});
+
+-- | Unique identifier for a game session.
+gsGameSessionId :: Lens' GameSession (Maybe Text)
+gsGameSessionId = lens _gsGameSessionId (\ s a -> s{_gsGameSessionId = a});
+
+-- | Maximum number of players allowed in the game session.
+gsMaximumPlayerSessionCount :: Lens' GameSession (Maybe Natural)
+gsMaximumPlayerSessionCount = lens _gsMaximumPlayerSessionCount (\ s a -> s{_gsMaximumPlayerSessionCount = a}) . mapping _Nat;
+
+-- | Time stamp indicating when this fleet was terminated. Format is an
+-- integer representing the number of seconds since the Unix epoch (Unix
+-- time).
+gsTerminationTime :: Lens' GameSession (Maybe UTCTime)
+gsTerminationTime = lens _gsTerminationTime (\ s a -> s{_gsTerminationTime = a}) . mapping _Time;
+
+-- | Indicates whether or not the game session is accepting new players.
+gsPlayerSessionCreationPolicy :: Lens' GameSession (Maybe PlayerSessionCreationPolicy)
+gsPlayerSessionCreationPolicy = lens _gsPlayerSessionCreationPolicy (\ s a -> s{_gsPlayerSessionCreationPolicy = a});
+
+-- | Descriptive label associated with this game session. Session names do
+-- not need to be unique.
+gsName :: Lens' GameSession (Maybe Text)
+gsName = lens _gsName (\ s a -> s{_gsName = a});
+
+-- | Number of players currently in the game session.
+gsCurrentPlayerSessionCount :: Lens' GameSession (Maybe Natural)
+gsCurrentPlayerSessionCount = lens _gsCurrentPlayerSessionCount (\ s a -> s{_gsCurrentPlayerSessionCount = a}) . mapping _Nat;
+
+-- | Unique identifier for a fleet.
+gsFleetId :: Lens' GameSession (Maybe Text)
+gsFleetId = lens _gsFleetId (\ s a -> s{_gsFleetId = a});
+
+instance FromJSON GameSession where
+        parseJSON
+          = withObject "GameSession"
+              (\ x ->
+                 GameSession' <$>
+                   (x .:? "CreationTime") <*> (x .:? "Status") <*>
+                     (x .:? "GameProperties" .!= mempty)
+                     <*> (x .:? "IpAddress")
+                     <*> (x .:? "GameSessionId")
+                     <*> (x .:? "MaximumPlayerSessionCount")
+                     <*> (x .:? "TerminationTime")
+                     <*> (x .:? "PlayerSessionCreationPolicy")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "CurrentPlayerSessionCount")
+                     <*> (x .:? "FleetId"))
+
+instance Hashable GameSession
+
+-- | A game session\'s properties and the protection policy currently in
+-- force.
+--
+-- /See:/ 'gameSessionDetail' smart constructor.
+data GameSessionDetail = GameSessionDetail'
+    { _gsdGameSession      :: !(Maybe GameSession)
+    , _gsdProtectionPolicy :: !(Maybe ProtectionPolicy)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'GameSessionDetail' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'gsdGameSession'
+--
+-- * 'gsdProtectionPolicy'
+gameSessionDetail
+    :: GameSessionDetail
+gameSessionDetail =
+    GameSessionDetail'
+    { _gsdGameSession = Nothing
+    , _gsdProtectionPolicy = Nothing
+    }
+
+-- | Undocumented member.
+gsdGameSession :: Lens' GameSessionDetail (Maybe GameSession)
+gsdGameSession = lens _gsdGameSession (\ s a -> s{_gsdGameSession = a});
+
+-- | Current status of protection for the game session.
+--
+-- -   NoProtection: The game session can be terminated during a scale-down
+--     event.
+-- -   FullProtection: If the game session is in an ACTIVE status, it
+--     cannot be terminated during a scale-down event.
+gsdProtectionPolicy :: Lens' GameSessionDetail (Maybe ProtectionPolicy)
+gsdProtectionPolicy = lens _gsdProtectionPolicy (\ s a -> s{_gsdProtectionPolicy = a});
+
+instance FromJSON GameSessionDetail where
+        parseJSON
+          = withObject "GameSessionDetail"
+              (\ x ->
+                 GameSessionDetail' <$>
+                   (x .:? "GameSession") <*> (x .:? "ProtectionPolicy"))
+
+instance Hashable GameSessionDetail
+
+-- | IP addresses and port settings used to limit access by incoming traffic
+-- (players) to a fleet. Permissions specify a range of IP addresses and
+-- port settings that must be used to gain access to a game server on a
+-- fleet machine.
+--
+-- /See:/ 'ipPermission' smart constructor.
+data IPPermission = IPPermission'
+    { _ipFromPort :: !Nat
+    , _ipToPort   :: !Nat
+    , _ipIPRange  :: !Text
+    , _ipProtocol :: !IPProtocol
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'IPPermission' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ipFromPort'
+--
+-- * 'ipToPort'
+--
+-- * 'ipIPRange'
+--
+-- * 'ipProtocol'
+ipPermission
+    :: Natural -- ^ 'ipFromPort'
+    -> Natural -- ^ 'ipToPort'
+    -> Text -- ^ 'ipIPRange'
+    -> IPProtocol -- ^ 'ipProtocol'
+    -> IPPermission
+ipPermission pFromPort_ pToPort_ pIPRange_ pProtocol_ =
+    IPPermission'
+    { _ipFromPort = _Nat # pFromPort_
+    , _ipToPort = _Nat # pToPort_
+    , _ipIPRange = pIPRange_
+    , _ipProtocol = pProtocol_
+    }
+
+-- | Starting value for a range of allowed port numbers.
+ipFromPort :: Lens' IPPermission Natural
+ipFromPort = lens _ipFromPort (\ s a -> s{_ipFromPort = a}) . _Nat;
+
+-- | Ending value for a range of allowed port numbers. Port numbers are
+-- end-inclusive. This value must be higher than /FromPort/.
+ipToPort :: Lens' IPPermission Natural
+ipToPort = lens _ipToPort (\ s a -> s{_ipToPort = a}) . _Nat;
+
+-- | Range of allowed IP addresses. This value must be expressed in
+-- <https://tools.ietf.org/id/cidr CIDR notation>. Example:
+-- \"'000.000.000.000\/[subnet mask]'\" or optionally the shortened version
+-- \"'0.0.0.0\/[subnet mask]'\".
+ipIPRange :: Lens' IPPermission Text
+ipIPRange = lens _ipIPRange (\ s a -> s{_ipIPRange = a});
+
+-- | Network communication protocol used by the fleet.
+ipProtocol :: Lens' IPPermission IPProtocol
+ipProtocol = lens _ipProtocol (\ s a -> s{_ipProtocol = a});
+
+instance FromJSON IPPermission where
+        parseJSON
+          = withObject "IPPermission"
+              (\ x ->
+                 IPPermission' <$>
+                   (x .: "FromPort") <*> (x .: "ToPort") <*>
+                     (x .: "IpRange")
+                     <*> (x .: "Protocol"))
+
+instance Hashable IPPermission
+
+instance ToJSON IPPermission where
+        toJSON IPPermission'{..}
+          = object
+              (catMaybes
+                 [Just ("FromPort" .= _ipFromPort),
+                  Just ("ToPort" .= _ipToPort),
+                  Just ("IpRange" .= _ipIPRange),
+                  Just ("Protocol" .= _ipProtocol)])
+
+-- | Properties describing a player session.
+--
+-- /See:/ 'playerSession' smart constructor.
+data PlayerSession = PlayerSession'
+    { _psCreationTime    :: !(Maybe POSIX)
+    , _psStatus          :: !(Maybe PlayerSessionStatus)
+    , _psIPAddress       :: !(Maybe Text)
+    , _psGameSessionId   :: !(Maybe Text)
+    , _psTerminationTime :: !(Maybe POSIX)
+    , _psPlayerSessionId :: !(Maybe Text)
+    , _psFleetId         :: !(Maybe Text)
+    , _psPlayerId        :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'PlayerSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'psCreationTime'
+--
+-- * 'psStatus'
+--
+-- * 'psIPAddress'
+--
+-- * 'psGameSessionId'
+--
+-- * 'psTerminationTime'
+--
+-- * 'psPlayerSessionId'
+--
+-- * 'psFleetId'
+--
+-- * 'psPlayerId'
+playerSession
+    :: PlayerSession
+playerSession =
+    PlayerSession'
+    { _psCreationTime = Nothing
+    , _psStatus = Nothing
+    , _psIPAddress = Nothing
+    , _psGameSessionId = Nothing
+    , _psTerminationTime = Nothing
+    , _psPlayerSessionId = Nothing
+    , _psFleetId = Nothing
+    , _psPlayerId = Nothing
+    }
+
+-- | Time stamp indicating when this object was created. Format is an integer
+-- representing the number of seconds since the Unix epoch (Unix time).
+psCreationTime :: Lens' PlayerSession (Maybe UTCTime)
+psCreationTime = lens _psCreationTime (\ s a -> s{_psCreationTime = a}) . mapping _Time;
+
+-- | Current status of the player session. Possible player session states
+-- include:
+--
+-- -   RESERVED: The player session request has been received, but the
+--     player has not yet connected to the game server and\/or been
+--     validated.
+-- -   ACTIVE: The player has been validated by the game server and is
+--     currently connected.
+-- -   COMPLETED: The player connection has been dropped.
+-- -   TIMEDOUT: A player session request was received, but the player did
+--     not connect and\/or was not validated within the time-out limit (60
+--     seconds).
+psStatus :: Lens' PlayerSession (Maybe PlayerSessionStatus)
+psStatus = lens _psStatus (\ s a -> s{_psStatus = a});
+
+-- | Game session IP address. All player sessions reference the game session
+-- location.
+psIPAddress :: Lens' PlayerSession (Maybe Text)
+psIPAddress = lens _psIPAddress (\ s a -> s{_psIPAddress = a});
+
+-- | Unique identifier for a game session.
+psGameSessionId :: Lens' PlayerSession (Maybe Text)
+psGameSessionId = lens _psGameSessionId (\ s a -> s{_psGameSessionId = a});
+
+-- | Time stamp indicating when this fleet was terminated. Format is an
+-- integer representing the number of seconds since the Unix epoch (Unix
+-- time).
+psTerminationTime :: Lens' PlayerSession (Maybe UTCTime)
+psTerminationTime = lens _psTerminationTime (\ s a -> s{_psTerminationTime = a}) . mapping _Time;
+
+-- | Unique identifier for a player session.
+psPlayerSessionId :: Lens' PlayerSession (Maybe Text)
+psPlayerSessionId = lens _psPlayerSessionId (\ s a -> s{_psPlayerSessionId = a});
+
+-- | Unique identifier for a fleet.
+psFleetId :: Lens' PlayerSession (Maybe Text)
+psFleetId = lens _psFleetId (\ s a -> s{_psFleetId = a});
+
+-- | Unique identifier for a player.
+psPlayerId :: Lens' PlayerSession (Maybe Text)
+psPlayerId = lens _psPlayerId (\ s a -> s{_psPlayerId = a});
+
+instance FromJSON PlayerSession where
+        parseJSON
+          = withObject "PlayerSession"
+              (\ x ->
+                 PlayerSession' <$>
+                   (x .:? "CreationTime") <*> (x .:? "Status") <*>
+                     (x .:? "IpAddress")
+                     <*> (x .:? "GameSessionId")
+                     <*> (x .:? "TerminationTime")
+                     <*> (x .:? "PlayerSessionId")
+                     <*> (x .:? "FleetId")
+                     <*> (x .:? "PlayerId"))
+
+instance Hashable PlayerSession
+
+-- | Routing configuration for a fleet alias.
+--
+-- /See:/ 'routingStrategy' smart constructor.
+data RoutingStrategy = RoutingStrategy'
+    { _rsType    :: !(Maybe RoutingStrategyType)
+    , _rsMessage :: !(Maybe Text)
+    , _rsFleetId :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'RoutingStrategy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'rsType'
+--
+-- * 'rsMessage'
+--
+-- * 'rsFleetId'
+routingStrategy
+    :: RoutingStrategy
+routingStrategy =
+    RoutingStrategy'
+    { _rsType = Nothing
+    , _rsMessage = Nothing
+    , _rsFleetId = Nothing
+    }
+
+-- | Type of routing strategy. Possible routing types include:
+--
+-- -   SIMPLE: The alias resolves to one specific fleet. Use this type when
+--     routing to active fleets.
+-- -   TERMINAL: The alias does not resolve to a fleet but instead can be
+--     used to display a message to the user. A terminal alias throws a
+--     TerminalRoutingStrategyException with the < RoutingStrategy> message
+--     embedded.
+rsType :: Lens' RoutingStrategy (Maybe RoutingStrategyType)
+rsType = lens _rsType (\ s a -> s{_rsType = a});
+
+-- | Message text to be used with a terminal routing strategy.
+rsMessage :: Lens' RoutingStrategy (Maybe Text)
+rsMessage = lens _rsMessage (\ s a -> s{_rsMessage = a});
+
+-- | Unique identifier for a fleet.
+rsFleetId :: Lens' RoutingStrategy (Maybe Text)
+rsFleetId = lens _rsFleetId (\ s a -> s{_rsFleetId = a});
+
+instance FromJSON RoutingStrategy where
+        parseJSON
+          = withObject "RoutingStrategy"
+              (\ x ->
+                 RoutingStrategy' <$>
+                   (x .:? "Type") <*> (x .:? "Message") <*>
+                     (x .:? "FleetId"))
+
+instance Hashable RoutingStrategy
+
+instance ToJSON RoutingStrategy where
+        toJSON RoutingStrategy'{..}
+          = object
+              (catMaybes
+                 [("Type" .=) <$> _rsType,
+                  ("Message" .=) <$> _rsMessage,
+                  ("FleetId" .=) <$> _rsFleetId])
+
+-- | Location in Amazon Simple Storage Service (Amazon S3) where a build\'s
+-- files are stored. This location is assigned in response to a
+-- < CreateBuild> call, and is always in the same region as the service
+-- used to create the build. For more details see the
+-- <http://aws.amazon.com/documentation/s3/ Amazon S3 documentation>.
+--
+-- /See:/ 's3Location' smart constructor.
+data S3Location = S3Location'
+    { _slBucket  :: !(Maybe Text)
+    , _slKey     :: !(Maybe Text)
+    , _slRoleARN :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'S3Location' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'slBucket'
+--
+-- * 'slKey'
+--
+-- * 'slRoleARN'
+s3Location
+    :: S3Location
+s3Location =
+    S3Location'
+    { _slBucket = Nothing
+    , _slKey = Nothing
+    , _slRoleARN = Nothing
+    }
+
+-- | Amazon S3 bucket identifier.
+slBucket :: Lens' S3Location (Maybe Text)
+slBucket = lens _slBucket (\ s a -> s{_slBucket = a});
+
+-- | Amazon S3 bucket key.
+slKey :: Lens' S3Location (Maybe Text)
+slKey = lens _slKey (\ s a -> s{_slKey = a});
+
+-- | Undocumented member.
+slRoleARN :: Lens' S3Location (Maybe Text)
+slRoleARN = lens _slRoleARN (\ s a -> s{_slRoleARN = a});
+
+instance FromJSON S3Location where
+        parseJSON
+          = withObject "S3Location"
+              (\ x ->
+                 S3Location' <$>
+                   (x .:? "Bucket") <*> (x .:? "Key") <*>
+                     (x .:? "RoleArn"))
+
+instance Hashable S3Location
+
+instance ToJSON S3Location where
+        toJSON S3Location'{..}
+          = object
+              (catMaybes
+                 [("Bucket" .=) <$> _slBucket, ("Key" .=) <$> _slKey,
+                  ("RoleArn" .=) <$> _slRoleARN])
+
+-- | Rule that controls how a fleet is scaled. Scaling policies are uniquely
+-- identified by the combination of name and fleet ID.
+--
+-- /See:/ 'scalingPolicy' smart constructor.
+data ScalingPolicy = ScalingPolicy'
+    { _spStatus                :: !(Maybe ScalingStatusType)
+    , _spScalingAdjustmentType :: !(Maybe ScalingAdjustmentType)
+    , _spEvaluationPeriods     :: !(Maybe Nat)
+    , _spMetricName            :: !(Maybe MetricName)
+    , _spComparisonOperator    :: !(Maybe ComparisonOperatorType)
+    , _spName                  :: !(Maybe Text)
+    , _spThreshold             :: !(Maybe Double)
+    , _spScalingAdjustment     :: !(Maybe Int)
+    , _spFleetId               :: !(Maybe Text)
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'ScalingPolicy' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'spStatus'
+--
+-- * 'spScalingAdjustmentType'
+--
+-- * 'spEvaluationPeriods'
+--
+-- * 'spMetricName'
+--
+-- * 'spComparisonOperator'
+--
+-- * 'spName'
+--
+-- * 'spThreshold'
+--
+-- * 'spScalingAdjustment'
+--
+-- * 'spFleetId'
+scalingPolicy
+    :: ScalingPolicy
+scalingPolicy =
+    ScalingPolicy'
+    { _spStatus = Nothing
+    , _spScalingAdjustmentType = Nothing
+    , _spEvaluationPeriods = Nothing
+    , _spMetricName = Nothing
+    , _spComparisonOperator = Nothing
+    , _spName = Nothing
+    , _spThreshold = Nothing
+    , _spScalingAdjustment = Nothing
+    , _spFleetId = Nothing
+    }
+
+-- | Current status of the scaling policy. The scaling policy is only in
+-- force when in an Active state.
+--
+-- -   ACTIVE: The scaling policy is currently in force.
+-- -   UPDATEREQUESTED: A request to update the scaling policy has been
+--     received.
+-- -   UPDATING: A change is being made to the scaling policy.
+-- -   DELETEREQUESTED: A request to delete the scaling policy has been
+--     received.
+-- -   DELETING: The scaling policy is being deleted.
+-- -   DELETED: The scaling policy has been deleted.
+-- -   ERROR: An error occurred in creating the policy. It should be
+--     removed and recreated.
+spStatus :: Lens' ScalingPolicy (Maybe ScalingStatusType)
+spStatus = lens _spStatus (\ s a -> s{_spStatus = a});
+
+-- | Type of adjustment to make to a fleet\'s instance count (see
+-- < FleetCapacity>):
+--
+-- -   ChangeInCapacity: add (or subtract) the scaling adjustment value
+--     from the current instance count. Positive values scale up while
+--     negative values scale down.
+-- -   ExactCapacity: set the instance count to the scaling adjustment
+--     value.
+-- -   PercentChangeInCapacity: increase or reduce the current instance
+--     count by the scaling adjustment, read as a percentage. Positive
+--     values scale up while negative values scale down.
+spScalingAdjustmentType :: Lens' ScalingPolicy (Maybe ScalingAdjustmentType)
+spScalingAdjustmentType = lens _spScalingAdjustmentType (\ s a -> s{_spScalingAdjustmentType = a});
+
+-- | Length of time (in minutes) the metric must be at or beyond the
+-- threshold before a scaling event is triggered.
+spEvaluationPeriods :: Lens' ScalingPolicy (Maybe Natural)
+spEvaluationPeriods = lens _spEvaluationPeriods (\ s a -> s{_spEvaluationPeriods = a}) . mapping _Nat;
+
+-- | Name of the GameLift-defined metric that is used to trigger an
+-- adjustment.
+--
+-- -   ActivatingGameSessions: number of game sessions in the process of
+--     being created (game session status = ACTIVATING).
+-- -   ActiveGameSessions: number of game sessions currently running (game
+--     session status = ACTIVE).
+-- -   CurrentPlayerSessions: number of active or reserved player sessions
+--     (player session status = ACTIVE or RESERVED).
+-- -   AvailablePlayerSessions: number of player session slots currently
+--     available in active game sessions across the fleet, calculated by
+--     subtracting a game session\'s current player session count from its
+--     maximum player session count. This number does include game sessions
+--     that are not currently accepting players (game session
+--     PlayerSessionCreationPolicy = DENY_ALL).
+-- -   ActiveInstances: number of instances currently running a game
+--     session.
+-- -   IdleInstances: number of instances not currently running a game
+--     session.
+spMetricName :: Lens' ScalingPolicy (Maybe MetricName)
+spMetricName = lens _spMetricName (\ s a -> s{_spMetricName = a});
+
+-- | Comparison operator to use when measuring a metric against the threshold
+-- value.
+spComparisonOperator :: Lens' ScalingPolicy (Maybe ComparisonOperatorType)
+spComparisonOperator = lens _spComparisonOperator (\ s a -> s{_spComparisonOperator = a});
+
+-- | Descriptive label associated with this scaling policy. Policy names do
+-- not need to be unique.
+spName :: Lens' ScalingPolicy (Maybe Text)
+spName = lens _spName (\ s a -> s{_spName = a});
+
+-- | Metric value used to trigger a scaling event.
+spThreshold :: Lens' ScalingPolicy (Maybe Double)
+spThreshold = lens _spThreshold (\ s a -> s{_spThreshold = a});
+
+-- | Amount of adjustment to make, based on the scaling adjustment type.
+spScalingAdjustment :: Lens' ScalingPolicy (Maybe Int)
+spScalingAdjustment = lens _spScalingAdjustment (\ s a -> s{_spScalingAdjustment = a});
+
+-- | Unique identity for the fleet associated with this scaling policy.
+spFleetId :: Lens' ScalingPolicy (Maybe Text)
+spFleetId = lens _spFleetId (\ s a -> s{_spFleetId = a});
+
+instance FromJSON ScalingPolicy where
+        parseJSON
+          = withObject "ScalingPolicy"
+              (\ x ->
+                 ScalingPolicy' <$>
+                   (x .:? "Status") <*> (x .:? "ScalingAdjustmentType")
+                     <*> (x .:? "EvaluationPeriods")
+                     <*> (x .:? "MetricName")
+                     <*> (x .:? "ComparisonOperator")
+                     <*> (x .:? "Name")
+                     <*> (x .:? "Threshold")
+                     <*> (x .:? "ScalingAdjustment")
+                     <*> (x .:? "FleetId"))
+
+instance Hashable ScalingPolicy
diff --git a/gen/Network/AWS/GameLift/Types/Sum.hs b/gen/Network/AWS/GameLift/Types/Sum.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/Types/Sum.hs
@@ -0,0 +1,598 @@
+{-# 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.GameLift.Types.Sum
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.GameLift.Types.Sum where
+
+import           Network.AWS.Prelude
+
+data BuildStatus
+    = Failed
+    | Initialized
+    | Ready
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText BuildStatus where
+    parser = takeLowerText >>= \case
+        "failed" -> pure Failed
+        "initialized" -> pure Initialized
+        "ready" -> pure Ready
+        e -> fromTextError $ "Failure parsing BuildStatus from value: '" <> e
+           <> "'. Accepted values: FAILED, INITIALIZED, READY"
+
+instance ToText BuildStatus where
+    toText = \case
+        Failed -> "FAILED"
+        Initialized -> "INITIALIZED"
+        Ready -> "READY"
+
+instance Hashable     BuildStatus
+instance ToByteString BuildStatus
+instance ToQuery      BuildStatus
+instance ToHeader     BuildStatus
+
+instance ToJSON BuildStatus where
+    toJSON = toJSONText
+
+instance FromJSON BuildStatus where
+    parseJSON = parseJSONText "BuildStatus"
+
+data ComparisonOperatorType
+    = GreaterThanOrEqualToThreshold
+    | GreaterThanThreshold
+    | LessThanOrEqualToThreshold
+    | LessThanThreshold
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText ComparisonOperatorType where
+    parser = takeLowerText >>= \case
+        "greaterthanorequaltothreshold" -> pure GreaterThanOrEqualToThreshold
+        "greaterthanthreshold" -> pure GreaterThanThreshold
+        "lessthanorequaltothreshold" -> pure LessThanOrEqualToThreshold
+        "lessthanthreshold" -> pure LessThanThreshold
+        e -> fromTextError $ "Failure parsing ComparisonOperatorType from value: '" <> e
+           <> "'. Accepted values: GreaterThanOrEqualToThreshold, GreaterThanThreshold, LessThanOrEqualToThreshold, LessThanThreshold"
+
+instance ToText ComparisonOperatorType where
+    toText = \case
+        GreaterThanOrEqualToThreshold -> "GreaterThanOrEqualToThreshold"
+        GreaterThanThreshold -> "GreaterThanThreshold"
+        LessThanOrEqualToThreshold -> "LessThanOrEqualToThreshold"
+        LessThanThreshold -> "LessThanThreshold"
+
+instance Hashable     ComparisonOperatorType
+instance ToByteString ComparisonOperatorType
+instance ToQuery      ComparisonOperatorType
+instance ToHeader     ComparisonOperatorType
+
+instance ToJSON ComparisonOperatorType where
+    toJSON = toJSONText
+
+instance FromJSON ComparisonOperatorType where
+    parseJSON = parseJSONText "ComparisonOperatorType"
+
+data EC2InstanceType
+    = C3_2XLarge
+    | C3_4XLarge
+    | C3_8XLarge
+    | C3_Large
+    | C3_XLarge
+    | C4_2XLarge
+    | C4_4XLarge
+    | C4_8XLarge
+    | C4_Large
+    | C4_XLarge
+    | M3_2XLarge
+    | M3_Large
+    | M3_Medium
+    | M3_XLarge
+    | M4_10XLarge
+    | M4_2XLarge
+    | M4_4XLarge
+    | M4_Large
+    | M4_XLarge
+    | R3_2XLarge
+    | R3_4XLarge
+    | R3_8XLarge
+    | R3_Large
+    | R3_XLarge
+    | T2_Large
+    | T2_Medium
+    | T2_Micro
+    | T2_Small
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText EC2InstanceType where
+    parser = takeLowerText >>= \case
+        "c3.2xlarge" -> pure C3_2XLarge
+        "c3.4xlarge" -> pure C3_4XLarge
+        "c3.8xlarge" -> pure C3_8XLarge
+        "c3.large" -> pure C3_Large
+        "c3.xlarge" -> pure C3_XLarge
+        "c4.2xlarge" -> pure C4_2XLarge
+        "c4.4xlarge" -> pure C4_4XLarge
+        "c4.8xlarge" -> pure C4_8XLarge
+        "c4.large" -> pure C4_Large
+        "c4.xlarge" -> pure C4_XLarge
+        "m3.2xlarge" -> pure M3_2XLarge
+        "m3.large" -> pure M3_Large
+        "m3.medium" -> pure M3_Medium
+        "m3.xlarge" -> pure M3_XLarge
+        "m4.10xlarge" -> pure M4_10XLarge
+        "m4.2xlarge" -> pure M4_2XLarge
+        "m4.4xlarge" -> pure M4_4XLarge
+        "m4.large" -> pure M4_Large
+        "m4.xlarge" -> pure M4_XLarge
+        "r3.2xlarge" -> pure R3_2XLarge
+        "r3.4xlarge" -> pure R3_4XLarge
+        "r3.8xlarge" -> pure R3_8XLarge
+        "r3.large" -> pure R3_Large
+        "r3.xlarge" -> pure R3_XLarge
+        "t2.large" -> pure T2_Large
+        "t2.medium" -> pure T2_Medium
+        "t2.micro" -> pure T2_Micro
+        "t2.small" -> pure T2_Small
+        e -> fromTextError $ "Failure parsing EC2InstanceType from value: '" <> e
+           <> "'. Accepted values: c3.2xlarge, c3.4xlarge, c3.8xlarge, c3.large, c3.xlarge, c4.2xlarge, c4.4xlarge, c4.8xlarge, c4.large, c4.xlarge, m3.2xlarge, m3.large, m3.medium, m3.xlarge, m4.10xlarge, m4.2xlarge, m4.4xlarge, m4.large, m4.xlarge, r3.2xlarge, r3.4xlarge, r3.8xlarge, r3.large, r3.xlarge, t2.large, t2.medium, t2.micro, t2.small"
+
+instance ToText EC2InstanceType where
+    toText = \case
+        C3_2XLarge -> "c3.2xlarge"
+        C3_4XLarge -> "c3.4xlarge"
+        C3_8XLarge -> "c3.8xlarge"
+        C3_Large -> "c3.large"
+        C3_XLarge -> "c3.xlarge"
+        C4_2XLarge -> "c4.2xlarge"
+        C4_4XLarge -> "c4.4xlarge"
+        C4_8XLarge -> "c4.8xlarge"
+        C4_Large -> "c4.large"
+        C4_XLarge -> "c4.xlarge"
+        M3_2XLarge -> "m3.2xlarge"
+        M3_Large -> "m3.large"
+        M3_Medium -> "m3.medium"
+        M3_XLarge -> "m3.xlarge"
+        M4_10XLarge -> "m4.10xlarge"
+        M4_2XLarge -> "m4.2xlarge"
+        M4_4XLarge -> "m4.4xlarge"
+        M4_Large -> "m4.large"
+        M4_XLarge -> "m4.xlarge"
+        R3_2XLarge -> "r3.2xlarge"
+        R3_4XLarge -> "r3.4xlarge"
+        R3_8XLarge -> "r3.8xlarge"
+        R3_Large -> "r3.large"
+        R3_XLarge -> "r3.xlarge"
+        T2_Large -> "t2.large"
+        T2_Medium -> "t2.medium"
+        T2_Micro -> "t2.micro"
+        T2_Small -> "t2.small"
+
+instance Hashable     EC2InstanceType
+instance ToByteString EC2InstanceType
+instance ToQuery      EC2InstanceType
+instance ToHeader     EC2InstanceType
+
+instance ToJSON EC2InstanceType where
+    toJSON = toJSONText
+
+instance FromJSON EC2InstanceType where
+    parseJSON = parseJSONText "EC2InstanceType"
+
+data EventCode
+    = FleetActivationFailed
+    | FleetActivationFailedNoInstances
+    | FleetBinaryDownloadFailed
+    | FleetCreated
+    | FleetDeleted
+    | FleetInitializationFailed
+    | FleetNewGameSessionProtectionPolicyUpdated
+    | FleetScalingEvent
+    | FleetStateActivating
+    | FleetStateActive
+    | FleetStateBuilding
+    | FleetStateDownloading
+    | FleetStateError
+    | FleetStateValidating
+    | FleetValidationExecutableRuntimeFailure
+    | FleetValidationLaunchPathNotFound
+    | FleetValidationTimedOut
+    | GenericEvent
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText EventCode where
+    parser = takeLowerText >>= \case
+        "fleet_activation_failed" -> pure FleetActivationFailed
+        "fleet_activation_failed_no_instances" -> pure FleetActivationFailedNoInstances
+        "fleet_binary_download_failed" -> pure FleetBinaryDownloadFailed
+        "fleet_created" -> pure FleetCreated
+        "fleet_deleted" -> pure FleetDeleted
+        "fleet_initialization_failed" -> pure FleetInitializationFailed
+        "fleet_new_game_session_protection_policy_updated" -> pure FleetNewGameSessionProtectionPolicyUpdated
+        "fleet_scaling_event" -> pure FleetScalingEvent
+        "fleet_state_activating" -> pure FleetStateActivating
+        "fleet_state_active" -> pure FleetStateActive
+        "fleet_state_building" -> pure FleetStateBuilding
+        "fleet_state_downloading" -> pure FleetStateDownloading
+        "fleet_state_error" -> pure FleetStateError
+        "fleet_state_validating" -> pure FleetStateValidating
+        "fleet_validation_executable_runtime_failure" -> pure FleetValidationExecutableRuntimeFailure
+        "fleet_validation_launch_path_not_found" -> pure FleetValidationLaunchPathNotFound
+        "fleet_validation_timed_out" -> pure FleetValidationTimedOut
+        "generic_event" -> pure GenericEvent
+        e -> fromTextError $ "Failure parsing EventCode from value: '" <> e
+           <> "'. Accepted values: FLEET_ACTIVATION_FAILED, FLEET_ACTIVATION_FAILED_NO_INSTANCES, FLEET_BINARY_DOWNLOAD_FAILED, FLEET_CREATED, FLEET_DELETED, FLEET_INITIALIZATION_FAILED, FLEET_NEW_GAME_SESSION_PROTECTION_POLICY_UPDATED, FLEET_SCALING_EVENT, FLEET_STATE_ACTIVATING, FLEET_STATE_ACTIVE, FLEET_STATE_BUILDING, FLEET_STATE_DOWNLOADING, FLEET_STATE_ERROR, FLEET_STATE_VALIDATING, FLEET_VALIDATION_EXECUTABLE_RUNTIME_FAILURE, FLEET_VALIDATION_LAUNCH_PATH_NOT_FOUND, FLEET_VALIDATION_TIMED_OUT, GENERIC_EVENT"
+
+instance ToText EventCode where
+    toText = \case
+        FleetActivationFailed -> "FLEET_ACTIVATION_FAILED"
+        FleetActivationFailedNoInstances -> "FLEET_ACTIVATION_FAILED_NO_INSTANCES"
+        FleetBinaryDownloadFailed -> "FLEET_BINARY_DOWNLOAD_FAILED"
+        FleetCreated -> "FLEET_CREATED"
+        FleetDeleted -> "FLEET_DELETED"
+        FleetInitializationFailed -> "FLEET_INITIALIZATION_FAILED"
+        FleetNewGameSessionProtectionPolicyUpdated -> "FLEET_NEW_GAME_SESSION_PROTECTION_POLICY_UPDATED"
+        FleetScalingEvent -> "FLEET_SCALING_EVENT"
+        FleetStateActivating -> "FLEET_STATE_ACTIVATING"
+        FleetStateActive -> "FLEET_STATE_ACTIVE"
+        FleetStateBuilding -> "FLEET_STATE_BUILDING"
+        FleetStateDownloading -> "FLEET_STATE_DOWNLOADING"
+        FleetStateError -> "FLEET_STATE_ERROR"
+        FleetStateValidating -> "FLEET_STATE_VALIDATING"
+        FleetValidationExecutableRuntimeFailure -> "FLEET_VALIDATION_EXECUTABLE_RUNTIME_FAILURE"
+        FleetValidationLaunchPathNotFound -> "FLEET_VALIDATION_LAUNCH_PATH_NOT_FOUND"
+        FleetValidationTimedOut -> "FLEET_VALIDATION_TIMED_OUT"
+        GenericEvent -> "GENERIC_EVENT"
+
+instance Hashable     EventCode
+instance ToByteString EventCode
+instance ToQuery      EventCode
+instance ToHeader     EventCode
+
+instance FromJSON EventCode where
+    parseJSON = parseJSONText "EventCode"
+
+data FleetStatus
+    = FSActivating
+    | FSActive
+    | FSBuilding
+    | FSDeleting
+    | FSDownloading
+    | FSError'
+    | FSNew
+    | FSTerminated
+    | FSValidating
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText FleetStatus where
+    parser = takeLowerText >>= \case
+        "activating" -> pure FSActivating
+        "active" -> pure FSActive
+        "building" -> pure FSBuilding
+        "deleting" -> pure FSDeleting
+        "downloading" -> pure FSDownloading
+        "error" -> pure FSError'
+        "new" -> pure FSNew
+        "terminated" -> pure FSTerminated
+        "validating" -> pure FSValidating
+        e -> fromTextError $ "Failure parsing FleetStatus from value: '" <> e
+           <> "'. Accepted values: ACTIVATING, ACTIVE, BUILDING, DELETING, DOWNLOADING, ERROR, NEW, TERMINATED, VALIDATING"
+
+instance ToText FleetStatus where
+    toText = \case
+        FSActivating -> "ACTIVATING"
+        FSActive -> "ACTIVE"
+        FSBuilding -> "BUILDING"
+        FSDeleting -> "DELETING"
+        FSDownloading -> "DOWNLOADING"
+        FSError' -> "ERROR"
+        FSNew -> "NEW"
+        FSTerminated -> "TERMINATED"
+        FSValidating -> "VALIDATING"
+
+instance Hashable     FleetStatus
+instance ToByteString FleetStatus
+instance ToQuery      FleetStatus
+instance ToHeader     FleetStatus
+
+instance FromJSON FleetStatus where
+    parseJSON = parseJSONText "FleetStatus"
+
+data GameSessionStatus
+    = GSSActivating
+    | GSSActive
+    | GSSTerminated
+    | GSSTerminating
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText GameSessionStatus where
+    parser = takeLowerText >>= \case
+        "activating" -> pure GSSActivating
+        "active" -> pure GSSActive
+        "terminated" -> pure GSSTerminated
+        "terminating" -> pure GSSTerminating
+        e -> fromTextError $ "Failure parsing GameSessionStatus from value: '" <> e
+           <> "'. Accepted values: ACTIVATING, ACTIVE, TERMINATED, TERMINATING"
+
+instance ToText GameSessionStatus where
+    toText = \case
+        GSSActivating -> "ACTIVATING"
+        GSSActive -> "ACTIVE"
+        GSSTerminated -> "TERMINATED"
+        GSSTerminating -> "TERMINATING"
+
+instance Hashable     GameSessionStatus
+instance ToByteString GameSessionStatus
+instance ToQuery      GameSessionStatus
+instance ToHeader     GameSessionStatus
+
+instance FromJSON GameSessionStatus where
+    parseJSON = parseJSONText "GameSessionStatus"
+
+data IPProtocol
+    = TCP
+    | Udp
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText IPProtocol where
+    parser = takeLowerText >>= \case
+        "tcp" -> pure TCP
+        "udp" -> pure Udp
+        e -> fromTextError $ "Failure parsing IPProtocol from value: '" <> e
+           <> "'. Accepted values: TCP, UDP"
+
+instance ToText IPProtocol where
+    toText = \case
+        TCP -> "TCP"
+        Udp -> "UDP"
+
+instance Hashable     IPProtocol
+instance ToByteString IPProtocol
+instance ToQuery      IPProtocol
+instance ToHeader     IPProtocol
+
+instance ToJSON IPProtocol where
+    toJSON = toJSONText
+
+instance FromJSON IPProtocol where
+    parseJSON = parseJSONText "IPProtocol"
+
+data MetricName
+    = ActivatingGameSessions
+    | ActiveGameSessions
+    | ActiveInstances
+    | AvailablePlayerSessions
+    | CurrentPlayerSessions
+    | IdleInstances
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText MetricName where
+    parser = takeLowerText >>= \case
+        "activatinggamesessions" -> pure ActivatingGameSessions
+        "activegamesessions" -> pure ActiveGameSessions
+        "activeinstances" -> pure ActiveInstances
+        "availableplayersessions" -> pure AvailablePlayerSessions
+        "currentplayersessions" -> pure CurrentPlayerSessions
+        "idleinstances" -> pure IdleInstances
+        e -> fromTextError $ "Failure parsing MetricName from value: '" <> e
+           <> "'. Accepted values: ActivatingGameSessions, ActiveGameSessions, ActiveInstances, AvailablePlayerSessions, CurrentPlayerSessions, IdleInstances"
+
+instance ToText MetricName where
+    toText = \case
+        ActivatingGameSessions -> "ActivatingGameSessions"
+        ActiveGameSessions -> "ActiveGameSessions"
+        ActiveInstances -> "ActiveInstances"
+        AvailablePlayerSessions -> "AvailablePlayerSessions"
+        CurrentPlayerSessions -> "CurrentPlayerSessions"
+        IdleInstances -> "IdleInstances"
+
+instance Hashable     MetricName
+instance ToByteString MetricName
+instance ToQuery      MetricName
+instance ToHeader     MetricName
+
+instance ToJSON MetricName where
+    toJSON = toJSONText
+
+instance FromJSON MetricName where
+    parseJSON = parseJSONText "MetricName"
+
+data PlayerSessionCreationPolicy
+    = AcceptAll
+    | DenyAll
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText PlayerSessionCreationPolicy where
+    parser = takeLowerText >>= \case
+        "accept_all" -> pure AcceptAll
+        "deny_all" -> pure DenyAll
+        e -> fromTextError $ "Failure parsing PlayerSessionCreationPolicy from value: '" <> e
+           <> "'. Accepted values: ACCEPT_ALL, DENY_ALL"
+
+instance ToText PlayerSessionCreationPolicy where
+    toText = \case
+        AcceptAll -> "ACCEPT_ALL"
+        DenyAll -> "DENY_ALL"
+
+instance Hashable     PlayerSessionCreationPolicy
+instance ToByteString PlayerSessionCreationPolicy
+instance ToQuery      PlayerSessionCreationPolicy
+instance ToHeader     PlayerSessionCreationPolicy
+
+instance ToJSON PlayerSessionCreationPolicy where
+    toJSON = toJSONText
+
+instance FromJSON PlayerSessionCreationPolicy where
+    parseJSON = parseJSONText "PlayerSessionCreationPolicy"
+
+data PlayerSessionStatus
+    = PSSActive
+    | PSSCompleted
+    | PSSReserved
+    | PSSTimedout
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText PlayerSessionStatus where
+    parser = takeLowerText >>= \case
+        "active" -> pure PSSActive
+        "completed" -> pure PSSCompleted
+        "reserved" -> pure PSSReserved
+        "timedout" -> pure PSSTimedout
+        e -> fromTextError $ "Failure parsing PlayerSessionStatus from value: '" <> e
+           <> "'. Accepted values: ACTIVE, COMPLETED, RESERVED, TIMEDOUT"
+
+instance ToText PlayerSessionStatus where
+    toText = \case
+        PSSActive -> "ACTIVE"
+        PSSCompleted -> "COMPLETED"
+        PSSReserved -> "RESERVED"
+        PSSTimedout -> "TIMEDOUT"
+
+instance Hashable     PlayerSessionStatus
+instance ToByteString PlayerSessionStatus
+instance ToQuery      PlayerSessionStatus
+instance ToHeader     PlayerSessionStatus
+
+instance FromJSON PlayerSessionStatus where
+    parseJSON = parseJSONText "PlayerSessionStatus"
+
+data ProtectionPolicy
+    = FullProtection
+    | NoProtection
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText ProtectionPolicy where
+    parser = takeLowerText >>= \case
+        "fullprotection" -> pure FullProtection
+        "noprotection" -> pure NoProtection
+        e -> fromTextError $ "Failure parsing ProtectionPolicy from value: '" <> e
+           <> "'. Accepted values: FullProtection, NoProtection"
+
+instance ToText ProtectionPolicy where
+    toText = \case
+        FullProtection -> "FullProtection"
+        NoProtection -> "NoProtection"
+
+instance Hashable     ProtectionPolicy
+instance ToByteString ProtectionPolicy
+instance ToQuery      ProtectionPolicy
+instance ToHeader     ProtectionPolicy
+
+instance ToJSON ProtectionPolicy where
+    toJSON = toJSONText
+
+instance FromJSON ProtectionPolicy where
+    parseJSON = parseJSONText "ProtectionPolicy"
+
+data RoutingStrategyType
+    = Simple
+    | Terminal
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText RoutingStrategyType where
+    parser = takeLowerText >>= \case
+        "simple" -> pure Simple
+        "terminal" -> pure Terminal
+        e -> fromTextError $ "Failure parsing RoutingStrategyType from value: '" <> e
+           <> "'. Accepted values: SIMPLE, TERMINAL"
+
+instance ToText RoutingStrategyType where
+    toText = \case
+        Simple -> "SIMPLE"
+        Terminal -> "TERMINAL"
+
+instance Hashable     RoutingStrategyType
+instance ToByteString RoutingStrategyType
+instance ToQuery      RoutingStrategyType
+instance ToHeader     RoutingStrategyType
+
+instance ToJSON RoutingStrategyType where
+    toJSON = toJSONText
+
+instance FromJSON RoutingStrategyType where
+    parseJSON = parseJSONText "RoutingStrategyType"
+
+data ScalingAdjustmentType
+    = ChangeInCapacity
+    | ExactCapacity
+    | PercentChangeInCapacity
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText ScalingAdjustmentType where
+    parser = takeLowerText >>= \case
+        "changeincapacity" -> pure ChangeInCapacity
+        "exactcapacity" -> pure ExactCapacity
+        "percentchangeincapacity" -> pure PercentChangeInCapacity
+        e -> fromTextError $ "Failure parsing ScalingAdjustmentType from value: '" <> e
+           <> "'. Accepted values: ChangeInCapacity, ExactCapacity, PercentChangeInCapacity"
+
+instance ToText ScalingAdjustmentType where
+    toText = \case
+        ChangeInCapacity -> "ChangeInCapacity"
+        ExactCapacity -> "ExactCapacity"
+        PercentChangeInCapacity -> "PercentChangeInCapacity"
+
+instance Hashable     ScalingAdjustmentType
+instance ToByteString ScalingAdjustmentType
+instance ToQuery      ScalingAdjustmentType
+instance ToHeader     ScalingAdjustmentType
+
+instance ToJSON ScalingAdjustmentType where
+    toJSON = toJSONText
+
+instance FromJSON ScalingAdjustmentType where
+    parseJSON = parseJSONText "ScalingAdjustmentType"
+
+data ScalingStatusType
+    = Active
+    | DeleteRequested
+    | Deleted
+    | Deleting
+    | Error'
+    | UpdateRequested
+    | Updating
+    deriving (Eq,Ord,Read,Show,Enum,Bounded,Data,Typeable,Generic)
+
+instance FromText ScalingStatusType where
+    parser = takeLowerText >>= \case
+        "active" -> pure Active
+        "delete_requested" -> pure DeleteRequested
+        "deleted" -> pure Deleted
+        "deleting" -> pure Deleting
+        "error" -> pure Error'
+        "update_requested" -> pure UpdateRequested
+        "updating" -> pure Updating
+        e -> fromTextError $ "Failure parsing ScalingStatusType from value: '" <> e
+           <> "'. Accepted values: ACTIVE, DELETE_REQUESTED, DELETED, DELETING, ERROR, UPDATE_REQUESTED, UPDATING"
+
+instance ToText ScalingStatusType where
+    toText = \case
+        Active -> "ACTIVE"
+        DeleteRequested -> "DELETE_REQUESTED"
+        Deleted -> "DELETED"
+        Deleting -> "DELETING"
+        Error' -> "ERROR"
+        UpdateRequested -> "UPDATE_REQUESTED"
+        Updating -> "UPDATING"
+
+instance Hashable     ScalingStatusType
+instance ToByteString ScalingStatusType
+instance ToQuery      ScalingStatusType
+instance ToHeader     ScalingStatusType
+
+instance ToJSON ScalingStatusType where
+    toJSON = toJSONText
+
+instance FromJSON ScalingStatusType where
+    parseJSON = parseJSONText "ScalingStatusType"
diff --git a/gen/Network/AWS/GameLift/UpdateAlias.hs b/gen/Network/AWS/GameLift/UpdateAlias.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/UpdateAlias.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.GameLift.UpdateAlias
+-- 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)
+--
+-- Updates properties for an alias. To update properties, specify the alias
+-- ID to be updated and provide the information to be changed. To reassign
+-- an alias to another fleet, provide an updated routing strategy. If
+-- successful, the updated alias record is returned.
+module Network.AWS.GameLift.UpdateAlias
+    (
+    -- * Creating a Request
+      updateAlias
+    , UpdateAlias
+    -- * Request Lenses
+    , uaRoutingStrategy
+    , uaName
+    , uaDescription
+    , uaAliasId
+
+    -- * Destructuring the Response
+    , updateAliasResponse
+    , UpdateAliasResponse
+    -- * Response Lenses
+    , uarsAlias
+    , uarsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'updateAlias' smart constructor.
+data UpdateAlias = UpdateAlias'
+    { _uaRoutingStrategy :: !(Maybe RoutingStrategy)
+    , _uaName            :: !(Maybe Text)
+    , _uaDescription     :: !(Maybe Text)
+    , _uaAliasId         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateAlias' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uaRoutingStrategy'
+--
+-- * 'uaName'
+--
+-- * 'uaDescription'
+--
+-- * 'uaAliasId'
+updateAlias
+    :: Text -- ^ 'uaAliasId'
+    -> UpdateAlias
+updateAlias pAliasId_ =
+    UpdateAlias'
+    { _uaRoutingStrategy = Nothing
+    , _uaName = Nothing
+    , _uaDescription = Nothing
+    , _uaAliasId = pAliasId_
+    }
+
+-- | Object specifying the fleet and routing type to use for the alias.
+uaRoutingStrategy :: Lens' UpdateAlias (Maybe RoutingStrategy)
+uaRoutingStrategy = lens _uaRoutingStrategy (\ s a -> s{_uaRoutingStrategy = a});
+
+-- | Descriptive label associated with this alias. Alias names do not need to
+-- be unique.
+uaName :: Lens' UpdateAlias (Maybe Text)
+uaName = lens _uaName (\ s a -> s{_uaName = a});
+
+-- | Human-readable description of the alias.
+uaDescription :: Lens' UpdateAlias (Maybe Text)
+uaDescription = lens _uaDescription (\ s a -> s{_uaDescription = a});
+
+-- | Unique identifier for a fleet alias. Specify the alias you want to
+-- update.
+uaAliasId :: Lens' UpdateAlias Text
+uaAliasId = lens _uaAliasId (\ s a -> s{_uaAliasId = a});
+
+instance AWSRequest UpdateAlias where
+        type Rs UpdateAlias = UpdateAliasResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateAliasResponse' <$>
+                   (x .?> "Alias") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateAlias
+
+instance ToHeaders UpdateAlias where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.UpdateAlias" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateAlias where
+        toJSON UpdateAlias'{..}
+          = object
+              (catMaybes
+                 [("RoutingStrategy" .=) <$> _uaRoutingStrategy,
+                  ("Name" .=) <$> _uaName,
+                  ("Description" .=) <$> _uaDescription,
+                  Just ("AliasId" .= _uaAliasId)])
+
+instance ToPath UpdateAlias where
+        toPath = const "/"
+
+instance ToQuery UpdateAlias where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'updateAliasResponse' smart constructor.
+data UpdateAliasResponse = UpdateAliasResponse'
+    { _uarsAlias          :: !(Maybe Alias)
+    , _uarsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateAliasResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'uarsAlias'
+--
+-- * 'uarsResponseStatus'
+updateAliasResponse
+    :: Int -- ^ 'uarsResponseStatus'
+    -> UpdateAliasResponse
+updateAliasResponse pResponseStatus_ =
+    UpdateAliasResponse'
+    { _uarsAlias = Nothing
+    , _uarsResponseStatus = pResponseStatus_
+    }
+
+-- | Object containing the updated alias configuration.
+uarsAlias :: Lens' UpdateAliasResponse (Maybe Alias)
+uarsAlias = lens _uarsAlias (\ s a -> s{_uarsAlias = a});
+
+-- | The response status code.
+uarsResponseStatus :: Lens' UpdateAliasResponse Int
+uarsResponseStatus = lens _uarsResponseStatus (\ s a -> s{_uarsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/UpdateBuild.hs b/gen/Network/AWS/GameLift/UpdateBuild.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/UpdateBuild.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.GameLift.UpdateBuild
+-- 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)
+--
+-- Updates metadata in a build record, including the build name and
+-- version. To update the metadata, specify the build ID to update and
+-- provide the new values. If successful, a build object containing the
+-- updated metadata is returned.
+module Network.AWS.GameLift.UpdateBuild
+    (
+    -- * Creating a Request
+      updateBuild
+    , UpdateBuild
+    -- * Request Lenses
+    , ubName
+    , ubVersion
+    , ubBuildId
+
+    -- * Destructuring the Response
+    , updateBuildResponse
+    , UpdateBuildResponse
+    -- * Response Lenses
+    , ubrsBuild
+    , ubrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'updateBuild' smart constructor.
+data UpdateBuild = UpdateBuild'
+    { _ubName    :: !(Maybe Text)
+    , _ubVersion :: !(Maybe Text)
+    , _ubBuildId :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateBuild' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ubName'
+--
+-- * 'ubVersion'
+--
+-- * 'ubBuildId'
+updateBuild
+    :: Text -- ^ 'ubBuildId'
+    -> UpdateBuild
+updateBuild pBuildId_ =
+    UpdateBuild'
+    { _ubName = Nothing
+    , _ubVersion = Nothing
+    , _ubBuildId = pBuildId_
+    }
+
+-- | Descriptive label associated with this build. Build names do not need to
+-- be unique.
+ubName :: Lens' UpdateBuild (Maybe Text)
+ubName = lens _ubName (\ s a -> s{_ubName = a});
+
+-- | Version associated with this build. Version strings do not need to be
+-- unique to a build.
+ubVersion :: Lens' UpdateBuild (Maybe Text)
+ubVersion = lens _ubVersion (\ s a -> s{_ubVersion = a});
+
+-- | Unique identifier for the build you want to update.
+ubBuildId :: Lens' UpdateBuild Text
+ubBuildId = lens _ubBuildId (\ s a -> s{_ubBuildId = a});
+
+instance AWSRequest UpdateBuild where
+        type Rs UpdateBuild = UpdateBuildResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateBuildResponse' <$>
+                   (x .?> "Build") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateBuild
+
+instance ToHeaders UpdateBuild where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.UpdateBuild" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateBuild where
+        toJSON UpdateBuild'{..}
+          = object
+              (catMaybes
+                 [("Name" .=) <$> _ubName,
+                  ("Version" .=) <$> _ubVersion,
+                  Just ("BuildId" .= _ubBuildId)])
+
+instance ToPath UpdateBuild where
+        toPath = const "/"
+
+instance ToQuery UpdateBuild where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'updateBuildResponse' smart constructor.
+data UpdateBuildResponse = UpdateBuildResponse'
+    { _ubrsBuild          :: !(Maybe Build)
+    , _ubrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateBuildResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ubrsBuild'
+--
+-- * 'ubrsResponseStatus'
+updateBuildResponse
+    :: Int -- ^ 'ubrsResponseStatus'
+    -> UpdateBuildResponse
+updateBuildResponse pResponseStatus_ =
+    UpdateBuildResponse'
+    { _ubrsBuild = Nothing
+    , _ubrsResponseStatus = pResponseStatus_
+    }
+
+-- | Object containing the updated build record.
+ubrsBuild :: Lens' UpdateBuildResponse (Maybe Build)
+ubrsBuild = lens _ubrsBuild (\ s a -> s{_ubrsBuild = a});
+
+-- | The response status code.
+ubrsResponseStatus :: Lens' UpdateBuildResponse Int
+ubrsResponseStatus = lens _ubrsResponseStatus (\ s a -> s{_ubrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/UpdateFleetAttributes.hs b/gen/Network/AWS/GameLift/UpdateFleetAttributes.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/UpdateFleetAttributes.hs
@@ -0,0 +1,175 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+{-# LANGUAGE DeriveGeneric      #-}
+{-# LANGUAGE OverloadedStrings  #-}
+{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE TypeFamilies       #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
+{-# OPTIONS_GHC -fno-warn-unused-matches #-}
+
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- |
+-- Module      : Network.AWS.GameLift.UpdateFleetAttributes
+-- 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)
+--
+-- Updates fleet properties, including name and description, for a fleet.
+-- To update metadata, specify the fleet ID and the property values you
+-- want to change. If successful, the fleet ID for the updated fleet is
+-- returned.
+module Network.AWS.GameLift.UpdateFleetAttributes
+    (
+    -- * Creating a Request
+      updateFleetAttributes
+    , UpdateFleetAttributes
+    -- * Request Lenses
+    , ufaNewGameSessionProtectionPolicy
+    , ufaName
+    , ufaDescription
+    , ufaFleetId
+
+    -- * Destructuring the Response
+    , updateFleetAttributesResponse
+    , UpdateFleetAttributesResponse
+    -- * Response Lenses
+    , ufarsFleetId
+    , ufarsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'updateFleetAttributes' smart constructor.
+data UpdateFleetAttributes = UpdateFleetAttributes'
+    { _ufaNewGameSessionProtectionPolicy :: !(Maybe ProtectionPolicy)
+    , _ufaName                           :: !(Maybe Text)
+    , _ufaDescription                    :: !(Maybe Text)
+    , _ufaFleetId                        :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateFleetAttributes' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufaNewGameSessionProtectionPolicy'
+--
+-- * 'ufaName'
+--
+-- * 'ufaDescription'
+--
+-- * 'ufaFleetId'
+updateFleetAttributes
+    :: Text -- ^ 'ufaFleetId'
+    -> UpdateFleetAttributes
+updateFleetAttributes pFleetId_ =
+    UpdateFleetAttributes'
+    { _ufaNewGameSessionProtectionPolicy = Nothing
+    , _ufaName = Nothing
+    , _ufaDescription = Nothing
+    , _ufaFleetId = pFleetId_
+    }
+
+-- | Game session protection policy to apply to all new instances created in
+-- this fleet. Instances that already exist will not be affected. You can
+-- set protection for individual instances using < UpdateGameSession>.
+--
+-- -   NoProtection: The game session can be terminated during a scale-down
+--     event.
+-- -   FullProtection: If the game session is in an ACTIVE status, it
+--     cannot be terminated during a scale-down event.
+ufaNewGameSessionProtectionPolicy :: Lens' UpdateFleetAttributes (Maybe ProtectionPolicy)
+ufaNewGameSessionProtectionPolicy = lens _ufaNewGameSessionProtectionPolicy (\ s a -> s{_ufaNewGameSessionProtectionPolicy = a});
+
+-- | Descriptive label associated with this fleet. Fleet names do not need to
+-- be unique.
+ufaName :: Lens' UpdateFleetAttributes (Maybe Text)
+ufaName = lens _ufaName (\ s a -> s{_ufaName = a});
+
+-- | Human-readable description of the fleet.
+ufaDescription :: Lens' UpdateFleetAttributes (Maybe Text)
+ufaDescription = lens _ufaDescription (\ s a -> s{_ufaDescription = a});
+
+-- | Unique identifier for the fleet you want to update attribute metadata
+-- for.
+ufaFleetId :: Lens' UpdateFleetAttributes Text
+ufaFleetId = lens _ufaFleetId (\ s a -> s{_ufaFleetId = a});
+
+instance AWSRequest UpdateFleetAttributes where
+        type Rs UpdateFleetAttributes =
+             UpdateFleetAttributesResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateFleetAttributesResponse' <$>
+                   (x .?> "FleetId") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateFleetAttributes
+
+instance ToHeaders UpdateFleetAttributes where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.UpdateFleetAttributes" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateFleetAttributes where
+        toJSON UpdateFleetAttributes'{..}
+          = object
+              (catMaybes
+                 [("NewGameSessionProtectionPolicy" .=) <$>
+                    _ufaNewGameSessionProtectionPolicy,
+                  ("Name" .=) <$> _ufaName,
+                  ("Description" .=) <$> _ufaDescription,
+                  Just ("FleetId" .= _ufaFleetId)])
+
+instance ToPath UpdateFleetAttributes where
+        toPath = const "/"
+
+instance ToQuery UpdateFleetAttributes where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'updateFleetAttributesResponse' smart constructor.
+data UpdateFleetAttributesResponse = UpdateFleetAttributesResponse'
+    { _ufarsFleetId        :: !(Maybe Text)
+    , _ufarsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateFleetAttributesResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufarsFleetId'
+--
+-- * 'ufarsResponseStatus'
+updateFleetAttributesResponse
+    :: Int -- ^ 'ufarsResponseStatus'
+    -> UpdateFleetAttributesResponse
+updateFleetAttributesResponse pResponseStatus_ =
+    UpdateFleetAttributesResponse'
+    { _ufarsFleetId = Nothing
+    , _ufarsResponseStatus = pResponseStatus_
+    }
+
+-- | Unique identifier for the updated fleet.
+ufarsFleetId :: Lens' UpdateFleetAttributesResponse (Maybe Text)
+ufarsFleetId = lens _ufarsFleetId (\ s a -> s{_ufarsFleetId = a});
+
+-- | The response status code.
+ufarsResponseStatus :: Lens' UpdateFleetAttributesResponse Int
+ufarsResponseStatus = lens _ufarsResponseStatus (\ s a -> s{_ufarsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/UpdateFleetCapacity.hs b/gen/Network/AWS/GameLift/UpdateFleetCapacity.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/UpdateFleetCapacity.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.GameLift.UpdateFleetCapacity
+-- 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)
+--
+-- Updates capacity settings for a fleet. Use this action to specify the
+-- number of EC2 instances (hosts) you want this fleet to contain. Before
+-- calling this action, you may want to call < DescribeEC2InstanceLimits>
+-- to get the maximum capacity based on the fleet\'s EC2 instance type.
+--
+-- If you\'re using auto-scaling (see < PutScalingPolicy>), you may want to
+-- specify a minimum and\/or maximum capacity. If you don\'t provide these
+-- boundaries, auto-scaling can set capacity anywhere between zero and the
+-- <http://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html#limits_gamelift service limits>.
+--
+-- To update fleet capacity, specify the fleet ID and the desired number of
+-- instances. If successful, Amazon GameLift starts or terminates instances
+-- so that the fleet\'s active instance count matches the desired instance
+-- count. You can view a fleet\'s current capacity information by calling
+-- < DescribeFleetCapacity>. If the desired instance count is higher than
+-- the instance type\'s limit, the \"Limit Exceeded\" exception will occur.
+module Network.AWS.GameLift.UpdateFleetCapacity
+    (
+    -- * Creating a Request
+      updateFleetCapacity
+    , UpdateFleetCapacity
+    -- * Request Lenses
+    , ufcMaxSize
+    , ufcMinSize
+    , ufcDesiredInstances
+    , ufcFleetId
+
+    -- * Destructuring the Response
+    , updateFleetCapacityResponse
+    , UpdateFleetCapacityResponse
+    -- * Response Lenses
+    , ufcrsFleetId
+    , ufcrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'updateFleetCapacity' smart constructor.
+data UpdateFleetCapacity = UpdateFleetCapacity'
+    { _ufcMaxSize          :: !(Maybe Nat)
+    , _ufcMinSize          :: !(Maybe Nat)
+    , _ufcDesiredInstances :: !(Maybe Nat)
+    , _ufcFleetId          :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateFleetCapacity' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufcMaxSize'
+--
+-- * 'ufcMinSize'
+--
+-- * 'ufcDesiredInstances'
+--
+-- * 'ufcFleetId'
+updateFleetCapacity
+    :: Text -- ^ 'ufcFleetId'
+    -> UpdateFleetCapacity
+updateFleetCapacity pFleetId_ =
+    UpdateFleetCapacity'
+    { _ufcMaxSize = Nothing
+    , _ufcMinSize = Nothing
+    , _ufcDesiredInstances = Nothing
+    , _ufcFleetId = pFleetId_
+    }
+
+-- | Maximum value allowed for the fleet\'s instance count. Default if not
+-- set is 1.
+ufcMaxSize :: Lens' UpdateFleetCapacity (Maybe Natural)
+ufcMaxSize = lens _ufcMaxSize (\ s a -> s{_ufcMaxSize = a}) . mapping _Nat;
+
+-- | Minimum value allowed for the fleet\'s instance count. Default if not
+-- set is 0.
+ufcMinSize :: Lens' UpdateFleetCapacity (Maybe Natural)
+ufcMinSize = lens _ufcMinSize (\ s a -> s{_ufcMinSize = a}) . mapping _Nat;
+
+-- | Number of EC2 instances you want this fleet to host.
+ufcDesiredInstances :: Lens' UpdateFleetCapacity (Maybe Natural)
+ufcDesiredInstances = lens _ufcDesiredInstances (\ s a -> s{_ufcDesiredInstances = a}) . mapping _Nat;
+
+-- | Unique identifier for the fleet you want to update capacity for.
+ufcFleetId :: Lens' UpdateFleetCapacity Text
+ufcFleetId = lens _ufcFleetId (\ s a -> s{_ufcFleetId = a});
+
+instance AWSRequest UpdateFleetCapacity where
+        type Rs UpdateFleetCapacity =
+             UpdateFleetCapacityResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateFleetCapacityResponse' <$>
+                   (x .?> "FleetId") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateFleetCapacity
+
+instance ToHeaders UpdateFleetCapacity where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.UpdateFleetCapacity" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateFleetCapacity where
+        toJSON UpdateFleetCapacity'{..}
+          = object
+              (catMaybes
+                 [("MaxSize" .=) <$> _ufcMaxSize,
+                  ("MinSize" .=) <$> _ufcMinSize,
+                  ("DesiredInstances" .=) <$> _ufcDesiredInstances,
+                  Just ("FleetId" .= _ufcFleetId)])
+
+instance ToPath UpdateFleetCapacity where
+        toPath = const "/"
+
+instance ToQuery UpdateFleetCapacity where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'updateFleetCapacityResponse' smart constructor.
+data UpdateFleetCapacityResponse = UpdateFleetCapacityResponse'
+    { _ufcrsFleetId        :: !(Maybe Text)
+    , _ufcrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateFleetCapacityResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufcrsFleetId'
+--
+-- * 'ufcrsResponseStatus'
+updateFleetCapacityResponse
+    :: Int -- ^ 'ufcrsResponseStatus'
+    -> UpdateFleetCapacityResponse
+updateFleetCapacityResponse pResponseStatus_ =
+    UpdateFleetCapacityResponse'
+    { _ufcrsFleetId = Nothing
+    , _ufcrsResponseStatus = pResponseStatus_
+    }
+
+-- | Unique identifier for the updated fleet.
+ufcrsFleetId :: Lens' UpdateFleetCapacityResponse (Maybe Text)
+ufcrsFleetId = lens _ufcrsFleetId (\ s a -> s{_ufcrsFleetId = a});
+
+-- | The response status code.
+ufcrsResponseStatus :: Lens' UpdateFleetCapacityResponse Int
+ufcrsResponseStatus = lens _ufcrsResponseStatus (\ s a -> s{_ufcrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/UpdateFleetPortSettings.hs b/gen/Network/AWS/GameLift/UpdateFleetPortSettings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/UpdateFleetPortSettings.hs
@@ -0,0 +1,159 @@
+{-# 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.GameLift.UpdateFleetPortSettings
+-- 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)
+--
+-- Updates port settings for a fleet. To update settings, specify the fleet
+-- ID to be updated and list the permissions you want to update. List the
+-- permissions you want to add in /InboundPermissionAuthorizations/, and
+-- permissions you want to remove in /InboundPermissionRevocations/.
+-- Permissions to be removed must match existing fleet permissions. If
+-- successful, the fleet ID for the updated fleet is returned.
+module Network.AWS.GameLift.UpdateFleetPortSettings
+    (
+    -- * Creating a Request
+      updateFleetPortSettings
+    , UpdateFleetPortSettings
+    -- * Request Lenses
+    , ufpsInboundPermissionRevocations
+    , ufpsInboundPermissionAuthorizations
+    , ufpsFleetId
+
+    -- * Destructuring the Response
+    , updateFleetPortSettingsResponse
+    , UpdateFleetPortSettingsResponse
+    -- * Response Lenses
+    , ufpsrsFleetId
+    , ufpsrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'updateFleetPortSettings' smart constructor.
+data UpdateFleetPortSettings = UpdateFleetPortSettings'
+    { _ufpsInboundPermissionRevocations    :: !(Maybe [IPPermission])
+    , _ufpsInboundPermissionAuthorizations :: !(Maybe [IPPermission])
+    , _ufpsFleetId                         :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateFleetPortSettings' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufpsInboundPermissionRevocations'
+--
+-- * 'ufpsInboundPermissionAuthorizations'
+--
+-- * 'ufpsFleetId'
+updateFleetPortSettings
+    :: Text -- ^ 'ufpsFleetId'
+    -> UpdateFleetPortSettings
+updateFleetPortSettings pFleetId_ =
+    UpdateFleetPortSettings'
+    { _ufpsInboundPermissionRevocations = Nothing
+    , _ufpsInboundPermissionAuthorizations = Nothing
+    , _ufpsFleetId = pFleetId_
+    }
+
+-- | Collection of port settings to be removed from the fleet record.
+ufpsInboundPermissionRevocations :: Lens' UpdateFleetPortSettings [IPPermission]
+ufpsInboundPermissionRevocations = lens _ufpsInboundPermissionRevocations (\ s a -> s{_ufpsInboundPermissionRevocations = a}) . _Default . _Coerce;
+
+-- | Collection of port settings to be added to the fleet record.
+ufpsInboundPermissionAuthorizations :: Lens' UpdateFleetPortSettings [IPPermission]
+ufpsInboundPermissionAuthorizations = lens _ufpsInboundPermissionAuthorizations (\ s a -> s{_ufpsInboundPermissionAuthorizations = a}) . _Default . _Coerce;
+
+-- | Unique identifier for the fleet you want to update port settings for.
+ufpsFleetId :: Lens' UpdateFleetPortSettings Text
+ufpsFleetId = lens _ufpsFleetId (\ s a -> s{_ufpsFleetId = a});
+
+instance AWSRequest UpdateFleetPortSettings where
+        type Rs UpdateFleetPortSettings =
+             UpdateFleetPortSettingsResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateFleetPortSettingsResponse' <$>
+                   (x .?> "FleetId") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateFleetPortSettings
+
+instance ToHeaders UpdateFleetPortSettings where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.UpdateFleetPortSettings" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateFleetPortSettings where
+        toJSON UpdateFleetPortSettings'{..}
+          = object
+              (catMaybes
+                 [("InboundPermissionRevocations" .=) <$>
+                    _ufpsInboundPermissionRevocations,
+                  ("InboundPermissionAuthorizations" .=) <$>
+                    _ufpsInboundPermissionAuthorizations,
+                  Just ("FleetId" .= _ufpsFleetId)])
+
+instance ToPath UpdateFleetPortSettings where
+        toPath = const "/"
+
+instance ToQuery UpdateFleetPortSettings where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'updateFleetPortSettingsResponse' smart constructor.
+data UpdateFleetPortSettingsResponse = UpdateFleetPortSettingsResponse'
+    { _ufpsrsFleetId        :: !(Maybe Text)
+    , _ufpsrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateFleetPortSettingsResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ufpsrsFleetId'
+--
+-- * 'ufpsrsResponseStatus'
+updateFleetPortSettingsResponse
+    :: Int -- ^ 'ufpsrsResponseStatus'
+    -> UpdateFleetPortSettingsResponse
+updateFleetPortSettingsResponse pResponseStatus_ =
+    UpdateFleetPortSettingsResponse'
+    { _ufpsrsFleetId = Nothing
+    , _ufpsrsResponseStatus = pResponseStatus_
+    }
+
+-- | Unique identifier for the updated fleet.
+ufpsrsFleetId :: Lens' UpdateFleetPortSettingsResponse (Maybe Text)
+ufpsrsFleetId = lens _ufpsrsFleetId (\ s a -> s{_ufpsrsFleetId = a});
+
+-- | The response status code.
+ufpsrsResponseStatus :: Lens' UpdateFleetPortSettingsResponse Int
+ufpsrsResponseStatus = lens _ufpsrsResponseStatus (\ s a -> s{_ufpsrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/UpdateGameSession.hs b/gen/Network/AWS/GameLift/UpdateGameSession.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/UpdateGameSession.hs
@@ -0,0 +1,187 @@
+{-# 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.GameLift.UpdateGameSession
+-- 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)
+--
+-- Updates game session properties. This includes the session name, maximum
+-- player count, protection policy, which controls whether or not an active
+-- game session can be terminated during a scale-down event, and the player
+-- session creation policy, which controls whether or not new players can
+-- join the session. To update a game session, specify the game session ID
+-- and the values you want to change. If successful, an updated
+-- < GameSession> object is returned.
+module Network.AWS.GameLift.UpdateGameSession
+    (
+    -- * Creating a Request
+      updateGameSession
+    , UpdateGameSession
+    -- * Request Lenses
+    , ugsMaximumPlayerSessionCount
+    , ugsPlayerSessionCreationPolicy
+    , ugsName
+    , ugsProtectionPolicy
+    , ugsGameSessionId
+
+    -- * Destructuring the Response
+    , updateGameSessionResponse
+    , UpdateGameSessionResponse
+    -- * Response Lenses
+    , ugsrsGameSession
+    , ugsrsResponseStatus
+    ) where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.GameLift.Types.Product
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Request
+import           Network.AWS.Response
+
+-- | Represents the input for a request action.
+--
+-- /See:/ 'updateGameSession' smart constructor.
+data UpdateGameSession = UpdateGameSession'
+    { _ugsMaximumPlayerSessionCount   :: !(Maybe Nat)
+    , _ugsPlayerSessionCreationPolicy :: !(Maybe PlayerSessionCreationPolicy)
+    , _ugsName                        :: !(Maybe Text)
+    , _ugsProtectionPolicy            :: !(Maybe ProtectionPolicy)
+    , _ugsGameSessionId               :: !Text
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateGameSession' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugsMaximumPlayerSessionCount'
+--
+-- * 'ugsPlayerSessionCreationPolicy'
+--
+-- * 'ugsName'
+--
+-- * 'ugsProtectionPolicy'
+--
+-- * 'ugsGameSessionId'
+updateGameSession
+    :: Text -- ^ 'ugsGameSessionId'
+    -> UpdateGameSession
+updateGameSession pGameSessionId_ =
+    UpdateGameSession'
+    { _ugsMaximumPlayerSessionCount = Nothing
+    , _ugsPlayerSessionCreationPolicy = Nothing
+    , _ugsName = Nothing
+    , _ugsProtectionPolicy = Nothing
+    , _ugsGameSessionId = pGameSessionId_
+    }
+
+-- | Maximum number of players that can be simultaneously connected to the
+-- game session.
+ugsMaximumPlayerSessionCount :: Lens' UpdateGameSession (Maybe Natural)
+ugsMaximumPlayerSessionCount = lens _ugsMaximumPlayerSessionCount (\ s a -> s{_ugsMaximumPlayerSessionCount = a}) . mapping _Nat;
+
+-- | Policy determining whether or not the game session accepts new players.
+ugsPlayerSessionCreationPolicy :: Lens' UpdateGameSession (Maybe PlayerSessionCreationPolicy)
+ugsPlayerSessionCreationPolicy = lens _ugsPlayerSessionCreationPolicy (\ s a -> s{_ugsPlayerSessionCreationPolicy = a});
+
+-- | Descriptive label associated with this game session. Session names do
+-- not need to be unique.
+ugsName :: Lens' UpdateGameSession (Maybe Text)
+ugsName = lens _ugsName (\ s a -> s{_ugsName = a});
+
+-- | Game session protection policy to apply to this game session only.
+--
+-- -   NoProtection: The game session can be terminated during a scale-down
+--     event.
+-- -   FullProtection: If the game session is in an ACTIVE status, it
+--     cannot be terminated during a scale-down event.
+ugsProtectionPolicy :: Lens' UpdateGameSession (Maybe ProtectionPolicy)
+ugsProtectionPolicy = lens _ugsProtectionPolicy (\ s a -> s{_ugsProtectionPolicy = a});
+
+-- | Unique identifier for a game session. Specify the game session you want
+-- to update.
+ugsGameSessionId :: Lens' UpdateGameSession Text
+ugsGameSessionId = lens _ugsGameSessionId (\ s a -> s{_ugsGameSessionId = a});
+
+instance AWSRequest UpdateGameSession where
+        type Rs UpdateGameSession = UpdateGameSessionResponse
+        request = postJSON gameLift
+        response
+          = receiveJSON
+              (\ s h x ->
+                 UpdateGameSessionResponse' <$>
+                   (x .?> "GameSession") <*> (pure (fromEnum s)))
+
+instance Hashable UpdateGameSession
+
+instance ToHeaders UpdateGameSession where
+        toHeaders
+          = const
+              (mconcat
+                 ["X-Amz-Target" =#
+                    ("GameLift.UpdateGameSession" :: ByteString),
+                  "Content-Type" =#
+                    ("application/x-amz-json-1.1" :: ByteString)])
+
+instance ToJSON UpdateGameSession where
+        toJSON UpdateGameSession'{..}
+          = object
+              (catMaybes
+                 [("MaximumPlayerSessionCount" .=) <$>
+                    _ugsMaximumPlayerSessionCount,
+                  ("PlayerSessionCreationPolicy" .=) <$>
+                    _ugsPlayerSessionCreationPolicy,
+                  ("Name" .=) <$> _ugsName,
+                  ("ProtectionPolicy" .=) <$> _ugsProtectionPolicy,
+                  Just ("GameSessionId" .= _ugsGameSessionId)])
+
+instance ToPath UpdateGameSession where
+        toPath = const "/"
+
+instance ToQuery UpdateGameSession where
+        toQuery = const mempty
+
+-- | Represents the returned data in response to a request action.
+--
+-- /See:/ 'updateGameSessionResponse' smart constructor.
+data UpdateGameSessionResponse = UpdateGameSessionResponse'
+    { _ugsrsGameSession    :: !(Maybe GameSession)
+    , _ugsrsResponseStatus :: !Int
+    } deriving (Eq,Read,Show,Data,Typeable,Generic)
+
+-- | Creates a value of 'UpdateGameSessionResponse' with the minimum fields required to make a request.
+--
+-- Use one of the following lenses to modify other fields as desired:
+--
+-- * 'ugsrsGameSession'
+--
+-- * 'ugsrsResponseStatus'
+updateGameSessionResponse
+    :: Int -- ^ 'ugsrsResponseStatus'
+    -> UpdateGameSessionResponse
+updateGameSessionResponse pResponseStatus_ =
+    UpdateGameSessionResponse'
+    { _ugsrsGameSession = Nothing
+    , _ugsrsResponseStatus = pResponseStatus_
+    }
+
+-- | Object containing the updated game session metadata.
+ugsrsGameSession :: Lens' UpdateGameSessionResponse (Maybe GameSession)
+ugsrsGameSession = lens _ugsrsGameSession (\ s a -> s{_ugsrsGameSession = a});
+
+-- | The response status code.
+ugsrsResponseStatus :: Lens' UpdateGameSessionResponse Int
+ugsrsResponseStatus = lens _ugsrsResponseStatus (\ s a -> s{_ugsrsResponseStatus = a});
diff --git a/gen/Network/AWS/GameLift/Waiters.hs b/gen/Network/AWS/GameLift/Waiters.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/GameLift/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.GameLift.Waiters
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Network.AWS.GameLift.Waiters where
+
+import           Network.AWS.GameLift.Types
+import           Network.AWS.Lens
+import           Network.AWS.Prelude
+import           Network.AWS.Waiter
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Main
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Main (main) where
+
+import Test.Tasty
+import Test.AWS.GameLift
+import Test.AWS.GameLift.Internal
+
+main :: IO ()
+main = defaultMain $ testGroup "GameLift"
+    [ testGroup "tests"    tests
+    , testGroup "fixtures" fixtures
+    ]
diff --git a/test/Test/AWS/GameLift.hs b/test/Test/AWS/GameLift.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/GameLift.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TemplateHaskell   #-}
+
+-- |
+-- Module      : Test.AWS.GameLift
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.GameLift
+    ( tests
+    , fixtures
+    ) where
+
+import           Test.AWS.Prelude
+
+tests :: [TestTree]
+tests = []
+
+fixtures :: [TestTree]
+fixtures = []
diff --git a/test/Test/AWS/GameLift/Internal.hs b/test/Test/AWS/GameLift/Internal.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/GameLift/Internal.hs
@@ -0,0 +1,15 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- |
+-- Module      : Test.AWS.GameLift.Internal
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+
+module Test.AWS.GameLift.Internal where
+
+import           Test.AWS.Prelude
diff --git a/test/Test/AWS/Gen/GameLift.hs b/test/Test/AWS/Gen/GameLift.hs
new file mode 100644
--- /dev/null
+++ b/test/Test/AWS/Gen/GameLift.hs
@@ -0,0 +1,669 @@
+{-# 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.GameLift
+-- Copyright   : (c) 2013-2016 Brendan Hay
+-- License     : Mozilla Public License, v. 2.0.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : auto-generated
+-- Portability : non-portable (GHC extensions)
+--
+module Test.AWS.Gen.GameLift where
+
+import Data.Proxy
+import Test.AWS.Fixture
+import Test.AWS.Prelude
+import Test.Tasty
+import Network.AWS.GameLift
+import Test.AWS.GameLift.Internal
+
+-- Auto-generated: the actual test selection needs to be manually placed into
+-- the top-level so that real test data can be incrementally added.
+--
+-- This commented snippet is what the entire set should look like:
+
+-- fixtures :: TestTree
+-- fixtures =
+--     [ testGroup "request"
+--         [ testCreateGameSession $
+--             createGameSession
+--
+--         , testDeleteScalingPolicy $
+--             deleteScalingPolicy
+--
+--         , testPutScalingPolicy $
+--             putScalingPolicy
+--
+--         , testListBuilds $
+--             listBuilds
+--
+--         , testDeleteFleet $
+--             deleteFleet
+--
+--         , testCreateBuild $
+--             createBuild
+--
+--         , testRequestUploadCredentials $
+--             requestUploadCredentials
+--
+--         , testCreateAlias $
+--             createAlias
+--
+--         , testResolveAlias $
+--             resolveAlias
+--
+--         , testListAliases $
+--             listAliases
+--
+--         , testDescribeScalingPolicies $
+--             describeScalingPolicies
+--
+--         , testDescribeGameSessions $
+--             describeGameSessions
+--
+--         , testDescribeFleetUtilization $
+--             describeFleetUtilization
+--
+--         , testGetGameSessionLogURL $
+--             getGameSessionLogURL
+--
+--         , testDescribeFleetAttributes $
+--             describeFleetAttributes
+--
+--         , testDescribeFleetEvents $
+--             describeFleetEvents
+--
+--         , testDescribeFleetCapacity $
+--             describeFleetCapacity
+--
+--         , testDeleteBuild $
+--             deleteBuild
+--
+--         , testUpdateBuild $
+--             updateBuild
+--
+--         , testListFleets $
+--             listFleets
+--
+--         , testDeleteAlias $
+--             deleteAlias
+--
+--         , testUpdateAlias $
+--             updateAlias
+--
+--         , testDescribeGameSessionDetails $
+--             describeGameSessionDetails
+--
+--         , testDescribeFleetPortSettings $
+--             describeFleetPortSettings
+--
+--         , testCreatePlayerSessions $
+--             createPlayerSessions
+--
+--         , testCreateFleet $
+--             createFleet
+--
+--         , testUpdateFleetAttributes $
+--             updateFleetAttributes
+--
+--         , testDescribePlayerSessions $
+--             describePlayerSessions
+--
+--         , testDescribeBuild $
+--             describeBuild
+--
+--         , testUpdateFleetPortSettings $
+--             updateFleetPortSettings
+--
+--         , testUpdateFleetCapacity $
+--             updateFleetCapacity
+--
+--         , testDescribeAlias $
+--             describeAlias
+--
+--         , testDescribeEC2InstanceLimits $
+--             describeEC2InstanceLimits
+--
+--         , testUpdateGameSession $
+--             updateGameSession
+--
+--         , testCreatePlayerSession $
+--             createPlayerSession
+--
+--           ]
+
+--     , testGroup "response"
+--         [ testCreateGameSessionResponse $
+--             createGameSessionResponse
+--
+--         , testDeleteScalingPolicyResponse $
+--             deleteScalingPolicyResponse
+--
+--         , testPutScalingPolicyResponse $
+--             putScalingPolicyResponse
+--
+--         , testListBuildsResponse $
+--             listBuildsResponse
+--
+--         , testDeleteFleetResponse $
+--             deleteFleetResponse
+--
+--         , testCreateBuildResponse $
+--             createBuildResponse
+--
+--         , testRequestUploadCredentialsResponse $
+--             requestUploadCredentialsResponse
+--
+--         , testCreateAliasResponse $
+--             createAliasResponse
+--
+--         , testResolveAliasResponse $
+--             resolveAliasResponse
+--
+--         , testListAliasesResponse $
+--             listAliasesResponse
+--
+--         , testDescribeScalingPoliciesResponse $
+--             describeScalingPoliciesResponse
+--
+--         , testDescribeGameSessionsResponse $
+--             describeGameSessionsResponse
+--
+--         , testDescribeFleetUtilizationResponse $
+--             describeFleetUtilizationResponse
+--
+--         , testGetGameSessionLogURLResponse $
+--             getGameSessionLogURLResponse
+--
+--         , testDescribeFleetAttributesResponse $
+--             describeFleetAttributesResponse
+--
+--         , testDescribeFleetEventsResponse $
+--             describeFleetEventsResponse
+--
+--         , testDescribeFleetCapacityResponse $
+--             describeFleetCapacityResponse
+--
+--         , testDeleteBuildResponse $
+--             deleteBuildResponse
+--
+--         , testUpdateBuildResponse $
+--             updateBuildResponse
+--
+--         , testListFleetsResponse $
+--             listFleetsResponse
+--
+--         , testDeleteAliasResponse $
+--             deleteAliasResponse
+--
+--         , testUpdateAliasResponse $
+--             updateAliasResponse
+--
+--         , testDescribeGameSessionDetailsResponse $
+--             describeGameSessionDetailsResponse
+--
+--         , testDescribeFleetPortSettingsResponse $
+--             describeFleetPortSettingsResponse
+--
+--         , testCreatePlayerSessionsResponse $
+--             createPlayerSessionsResponse
+--
+--         , testCreateFleetResponse $
+--             createFleetResponse
+--
+--         , testUpdateFleetAttributesResponse $
+--             updateFleetAttributesResponse
+--
+--         , testDescribePlayerSessionsResponse $
+--             describePlayerSessionsResponse
+--
+--         , testDescribeBuildResponse $
+--             describeBuildResponse
+--
+--         , testUpdateFleetPortSettingsResponse $
+--             updateFleetPortSettingsResponse
+--
+--         , testUpdateFleetCapacityResponse $
+--             updateFleetCapacityResponse
+--
+--         , testDescribeAliasResponse $
+--             describeAliasResponse
+--
+--         , testDescribeEC2InstanceLimitsResponse $
+--             describeEC2InstanceLimitsResponse
+--
+--         , testUpdateGameSessionResponse $
+--             updateGameSessionResponse
+--
+--         , testCreatePlayerSessionResponse $
+--             createPlayerSessionResponse
+--
+--           ]
+--     ]
+
+-- Requests
+
+testCreateGameSession :: CreateGameSession -> TestTree
+testCreateGameSession = req
+    "CreateGameSession"
+    "fixture/CreateGameSession.yaml"
+
+testDeleteScalingPolicy :: DeleteScalingPolicy -> TestTree
+testDeleteScalingPolicy = req
+    "DeleteScalingPolicy"
+    "fixture/DeleteScalingPolicy.yaml"
+
+testPutScalingPolicy :: PutScalingPolicy -> TestTree
+testPutScalingPolicy = req
+    "PutScalingPolicy"
+    "fixture/PutScalingPolicy.yaml"
+
+testListBuilds :: ListBuilds -> TestTree
+testListBuilds = req
+    "ListBuilds"
+    "fixture/ListBuilds.yaml"
+
+testDeleteFleet :: DeleteFleet -> TestTree
+testDeleteFleet = req
+    "DeleteFleet"
+    "fixture/DeleteFleet.yaml"
+
+testCreateBuild :: CreateBuild -> TestTree
+testCreateBuild = req
+    "CreateBuild"
+    "fixture/CreateBuild.yaml"
+
+testRequestUploadCredentials :: RequestUploadCredentials -> TestTree
+testRequestUploadCredentials = req
+    "RequestUploadCredentials"
+    "fixture/RequestUploadCredentials.yaml"
+
+testCreateAlias :: CreateAlias -> TestTree
+testCreateAlias = req
+    "CreateAlias"
+    "fixture/CreateAlias.yaml"
+
+testResolveAlias :: ResolveAlias -> TestTree
+testResolveAlias = req
+    "ResolveAlias"
+    "fixture/ResolveAlias.yaml"
+
+testListAliases :: ListAliases -> TestTree
+testListAliases = req
+    "ListAliases"
+    "fixture/ListAliases.yaml"
+
+testDescribeScalingPolicies :: DescribeScalingPolicies -> TestTree
+testDescribeScalingPolicies = req
+    "DescribeScalingPolicies"
+    "fixture/DescribeScalingPolicies.yaml"
+
+testDescribeGameSessions :: DescribeGameSessions -> TestTree
+testDescribeGameSessions = req
+    "DescribeGameSessions"
+    "fixture/DescribeGameSessions.yaml"
+
+testDescribeFleetUtilization :: DescribeFleetUtilization -> TestTree
+testDescribeFleetUtilization = req
+    "DescribeFleetUtilization"
+    "fixture/DescribeFleetUtilization.yaml"
+
+testGetGameSessionLogURL :: GetGameSessionLogURL -> TestTree
+testGetGameSessionLogURL = req
+    "GetGameSessionLogURL"
+    "fixture/GetGameSessionLogURL.yaml"
+
+testDescribeFleetAttributes :: DescribeFleetAttributes -> TestTree
+testDescribeFleetAttributes = req
+    "DescribeFleetAttributes"
+    "fixture/DescribeFleetAttributes.yaml"
+
+testDescribeFleetEvents :: DescribeFleetEvents -> TestTree
+testDescribeFleetEvents = req
+    "DescribeFleetEvents"
+    "fixture/DescribeFleetEvents.yaml"
+
+testDescribeFleetCapacity :: DescribeFleetCapacity -> TestTree
+testDescribeFleetCapacity = req
+    "DescribeFleetCapacity"
+    "fixture/DescribeFleetCapacity.yaml"
+
+testDeleteBuild :: DeleteBuild -> TestTree
+testDeleteBuild = req
+    "DeleteBuild"
+    "fixture/DeleteBuild.yaml"
+
+testUpdateBuild :: UpdateBuild -> TestTree
+testUpdateBuild = req
+    "UpdateBuild"
+    "fixture/UpdateBuild.yaml"
+
+testListFleets :: ListFleets -> TestTree
+testListFleets = req
+    "ListFleets"
+    "fixture/ListFleets.yaml"
+
+testDeleteAlias :: DeleteAlias -> TestTree
+testDeleteAlias = req
+    "DeleteAlias"
+    "fixture/DeleteAlias.yaml"
+
+testUpdateAlias :: UpdateAlias -> TestTree
+testUpdateAlias = req
+    "UpdateAlias"
+    "fixture/UpdateAlias.yaml"
+
+testDescribeGameSessionDetails :: DescribeGameSessionDetails -> TestTree
+testDescribeGameSessionDetails = req
+    "DescribeGameSessionDetails"
+    "fixture/DescribeGameSessionDetails.yaml"
+
+testDescribeFleetPortSettings :: DescribeFleetPortSettings -> TestTree
+testDescribeFleetPortSettings = req
+    "DescribeFleetPortSettings"
+    "fixture/DescribeFleetPortSettings.yaml"
+
+testCreatePlayerSessions :: CreatePlayerSessions -> TestTree
+testCreatePlayerSessions = req
+    "CreatePlayerSessions"
+    "fixture/CreatePlayerSessions.yaml"
+
+testCreateFleet :: CreateFleet -> TestTree
+testCreateFleet = req
+    "CreateFleet"
+    "fixture/CreateFleet.yaml"
+
+testUpdateFleetAttributes :: UpdateFleetAttributes -> TestTree
+testUpdateFleetAttributes = req
+    "UpdateFleetAttributes"
+    "fixture/UpdateFleetAttributes.yaml"
+
+testDescribePlayerSessions :: DescribePlayerSessions -> TestTree
+testDescribePlayerSessions = req
+    "DescribePlayerSessions"
+    "fixture/DescribePlayerSessions.yaml"
+
+testDescribeBuild :: DescribeBuild -> TestTree
+testDescribeBuild = req
+    "DescribeBuild"
+    "fixture/DescribeBuild.yaml"
+
+testUpdateFleetPortSettings :: UpdateFleetPortSettings -> TestTree
+testUpdateFleetPortSettings = req
+    "UpdateFleetPortSettings"
+    "fixture/UpdateFleetPortSettings.yaml"
+
+testUpdateFleetCapacity :: UpdateFleetCapacity -> TestTree
+testUpdateFleetCapacity = req
+    "UpdateFleetCapacity"
+    "fixture/UpdateFleetCapacity.yaml"
+
+testDescribeAlias :: DescribeAlias -> TestTree
+testDescribeAlias = req
+    "DescribeAlias"
+    "fixture/DescribeAlias.yaml"
+
+testDescribeEC2InstanceLimits :: DescribeEC2InstanceLimits -> TestTree
+testDescribeEC2InstanceLimits = req
+    "DescribeEC2InstanceLimits"
+    "fixture/DescribeEC2InstanceLimits.yaml"
+
+testUpdateGameSession :: UpdateGameSession -> TestTree
+testUpdateGameSession = req
+    "UpdateGameSession"
+    "fixture/UpdateGameSession.yaml"
+
+testCreatePlayerSession :: CreatePlayerSession -> TestTree
+testCreatePlayerSession = req
+    "CreatePlayerSession"
+    "fixture/CreatePlayerSession.yaml"
+
+-- Responses
+
+testCreateGameSessionResponse :: CreateGameSessionResponse -> TestTree
+testCreateGameSessionResponse = res
+    "CreateGameSessionResponse"
+    "fixture/CreateGameSessionResponse.proto"
+    gameLift
+    (Proxy :: Proxy CreateGameSession)
+
+testDeleteScalingPolicyResponse :: DeleteScalingPolicyResponse -> TestTree
+testDeleteScalingPolicyResponse = res
+    "DeleteScalingPolicyResponse"
+    "fixture/DeleteScalingPolicyResponse.proto"
+    gameLift
+    (Proxy :: Proxy DeleteScalingPolicy)
+
+testPutScalingPolicyResponse :: PutScalingPolicyResponse -> TestTree
+testPutScalingPolicyResponse = res
+    "PutScalingPolicyResponse"
+    "fixture/PutScalingPolicyResponse.proto"
+    gameLift
+    (Proxy :: Proxy PutScalingPolicy)
+
+testListBuildsResponse :: ListBuildsResponse -> TestTree
+testListBuildsResponse = res
+    "ListBuildsResponse"
+    "fixture/ListBuildsResponse.proto"
+    gameLift
+    (Proxy :: Proxy ListBuilds)
+
+testDeleteFleetResponse :: DeleteFleetResponse -> TestTree
+testDeleteFleetResponse = res
+    "DeleteFleetResponse"
+    "fixture/DeleteFleetResponse.proto"
+    gameLift
+    (Proxy :: Proxy DeleteFleet)
+
+testCreateBuildResponse :: CreateBuildResponse -> TestTree
+testCreateBuildResponse = res
+    "CreateBuildResponse"
+    "fixture/CreateBuildResponse.proto"
+    gameLift
+    (Proxy :: Proxy CreateBuild)
+
+testRequestUploadCredentialsResponse :: RequestUploadCredentialsResponse -> TestTree
+testRequestUploadCredentialsResponse = res
+    "RequestUploadCredentialsResponse"
+    "fixture/RequestUploadCredentialsResponse.proto"
+    gameLift
+    (Proxy :: Proxy RequestUploadCredentials)
+
+testCreateAliasResponse :: CreateAliasResponse -> TestTree
+testCreateAliasResponse = res
+    "CreateAliasResponse"
+    "fixture/CreateAliasResponse.proto"
+    gameLift
+    (Proxy :: Proxy CreateAlias)
+
+testResolveAliasResponse :: ResolveAliasResponse -> TestTree
+testResolveAliasResponse = res
+    "ResolveAliasResponse"
+    "fixture/ResolveAliasResponse.proto"
+    gameLift
+    (Proxy :: Proxy ResolveAlias)
+
+testListAliasesResponse :: ListAliasesResponse -> TestTree
+testListAliasesResponse = res
+    "ListAliasesResponse"
+    "fixture/ListAliasesResponse.proto"
+    gameLift
+    (Proxy :: Proxy ListAliases)
+
+testDescribeScalingPoliciesResponse :: DescribeScalingPoliciesResponse -> TestTree
+testDescribeScalingPoliciesResponse = res
+    "DescribeScalingPoliciesResponse"
+    "fixture/DescribeScalingPoliciesResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeScalingPolicies)
+
+testDescribeGameSessionsResponse :: DescribeGameSessionsResponse -> TestTree
+testDescribeGameSessionsResponse = res
+    "DescribeGameSessionsResponse"
+    "fixture/DescribeGameSessionsResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeGameSessions)
+
+testDescribeFleetUtilizationResponse :: DescribeFleetUtilizationResponse -> TestTree
+testDescribeFleetUtilizationResponse = res
+    "DescribeFleetUtilizationResponse"
+    "fixture/DescribeFleetUtilizationResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeFleetUtilization)
+
+testGetGameSessionLogURLResponse :: GetGameSessionLogURLResponse -> TestTree
+testGetGameSessionLogURLResponse = res
+    "GetGameSessionLogURLResponse"
+    "fixture/GetGameSessionLogURLResponse.proto"
+    gameLift
+    (Proxy :: Proxy GetGameSessionLogURL)
+
+testDescribeFleetAttributesResponse :: DescribeFleetAttributesResponse -> TestTree
+testDescribeFleetAttributesResponse = res
+    "DescribeFleetAttributesResponse"
+    "fixture/DescribeFleetAttributesResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeFleetAttributes)
+
+testDescribeFleetEventsResponse :: DescribeFleetEventsResponse -> TestTree
+testDescribeFleetEventsResponse = res
+    "DescribeFleetEventsResponse"
+    "fixture/DescribeFleetEventsResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeFleetEvents)
+
+testDescribeFleetCapacityResponse :: DescribeFleetCapacityResponse -> TestTree
+testDescribeFleetCapacityResponse = res
+    "DescribeFleetCapacityResponse"
+    "fixture/DescribeFleetCapacityResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeFleetCapacity)
+
+testDeleteBuildResponse :: DeleteBuildResponse -> TestTree
+testDeleteBuildResponse = res
+    "DeleteBuildResponse"
+    "fixture/DeleteBuildResponse.proto"
+    gameLift
+    (Proxy :: Proxy DeleteBuild)
+
+testUpdateBuildResponse :: UpdateBuildResponse -> TestTree
+testUpdateBuildResponse = res
+    "UpdateBuildResponse"
+    "fixture/UpdateBuildResponse.proto"
+    gameLift
+    (Proxy :: Proxy UpdateBuild)
+
+testListFleetsResponse :: ListFleetsResponse -> TestTree
+testListFleetsResponse = res
+    "ListFleetsResponse"
+    "fixture/ListFleetsResponse.proto"
+    gameLift
+    (Proxy :: Proxy ListFleets)
+
+testDeleteAliasResponse :: DeleteAliasResponse -> TestTree
+testDeleteAliasResponse = res
+    "DeleteAliasResponse"
+    "fixture/DeleteAliasResponse.proto"
+    gameLift
+    (Proxy :: Proxy DeleteAlias)
+
+testUpdateAliasResponse :: UpdateAliasResponse -> TestTree
+testUpdateAliasResponse = res
+    "UpdateAliasResponse"
+    "fixture/UpdateAliasResponse.proto"
+    gameLift
+    (Proxy :: Proxy UpdateAlias)
+
+testDescribeGameSessionDetailsResponse :: DescribeGameSessionDetailsResponse -> TestTree
+testDescribeGameSessionDetailsResponse = res
+    "DescribeGameSessionDetailsResponse"
+    "fixture/DescribeGameSessionDetailsResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeGameSessionDetails)
+
+testDescribeFleetPortSettingsResponse :: DescribeFleetPortSettingsResponse -> TestTree
+testDescribeFleetPortSettingsResponse = res
+    "DescribeFleetPortSettingsResponse"
+    "fixture/DescribeFleetPortSettingsResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeFleetPortSettings)
+
+testCreatePlayerSessionsResponse :: CreatePlayerSessionsResponse -> TestTree
+testCreatePlayerSessionsResponse = res
+    "CreatePlayerSessionsResponse"
+    "fixture/CreatePlayerSessionsResponse.proto"
+    gameLift
+    (Proxy :: Proxy CreatePlayerSessions)
+
+testCreateFleetResponse :: CreateFleetResponse -> TestTree
+testCreateFleetResponse = res
+    "CreateFleetResponse"
+    "fixture/CreateFleetResponse.proto"
+    gameLift
+    (Proxy :: Proxy CreateFleet)
+
+testUpdateFleetAttributesResponse :: UpdateFleetAttributesResponse -> TestTree
+testUpdateFleetAttributesResponse = res
+    "UpdateFleetAttributesResponse"
+    "fixture/UpdateFleetAttributesResponse.proto"
+    gameLift
+    (Proxy :: Proxy UpdateFleetAttributes)
+
+testDescribePlayerSessionsResponse :: DescribePlayerSessionsResponse -> TestTree
+testDescribePlayerSessionsResponse = res
+    "DescribePlayerSessionsResponse"
+    "fixture/DescribePlayerSessionsResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribePlayerSessions)
+
+testDescribeBuildResponse :: DescribeBuildResponse -> TestTree
+testDescribeBuildResponse = res
+    "DescribeBuildResponse"
+    "fixture/DescribeBuildResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeBuild)
+
+testUpdateFleetPortSettingsResponse :: UpdateFleetPortSettingsResponse -> TestTree
+testUpdateFleetPortSettingsResponse = res
+    "UpdateFleetPortSettingsResponse"
+    "fixture/UpdateFleetPortSettingsResponse.proto"
+    gameLift
+    (Proxy :: Proxy UpdateFleetPortSettings)
+
+testUpdateFleetCapacityResponse :: UpdateFleetCapacityResponse -> TestTree
+testUpdateFleetCapacityResponse = res
+    "UpdateFleetCapacityResponse"
+    "fixture/UpdateFleetCapacityResponse.proto"
+    gameLift
+    (Proxy :: Proxy UpdateFleetCapacity)
+
+testDescribeAliasResponse :: DescribeAliasResponse -> TestTree
+testDescribeAliasResponse = res
+    "DescribeAliasResponse"
+    "fixture/DescribeAliasResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeAlias)
+
+testDescribeEC2InstanceLimitsResponse :: DescribeEC2InstanceLimitsResponse -> TestTree
+testDescribeEC2InstanceLimitsResponse = res
+    "DescribeEC2InstanceLimitsResponse"
+    "fixture/DescribeEC2InstanceLimitsResponse.proto"
+    gameLift
+    (Proxy :: Proxy DescribeEC2InstanceLimits)
+
+testUpdateGameSessionResponse :: UpdateGameSessionResponse -> TestTree
+testUpdateGameSessionResponse = res
+    "UpdateGameSessionResponse"
+    "fixture/UpdateGameSessionResponse.proto"
+    gameLift
+    (Proxy :: Proxy UpdateGameSession)
+
+testCreatePlayerSessionResponse :: CreatePlayerSessionResponse -> TestTree
+testCreatePlayerSessionResponse = res
+    "CreatePlayerSessionResponse"
+    "fixture/CreatePlayerSessionResponse.proto"
+    gameLift
+    (Proxy :: Proxy CreatePlayerSession)
