diff --git a/amazonka-lambda.cabal b/amazonka-lambda.cabal
--- a/amazonka-lambda.cabal
+++ b/amazonka-lambda.cabal
@@ -1,5 +1,5 @@
 name:                  amazonka-lambda
-version:               0.3.3
+version:               0.3.4
 synopsis:              Amazon Lambda SDK.
 homepage:              https://github.com/brendanhay/amazonka
 license:               OtherLicense
@@ -43,21 +43,27 @@
 
     exposed-modules:
           Network.AWS.Lambda
-        , Network.AWS.Lambda.AddEventSource
+        , Network.AWS.Lambda.AddPermission
+        , Network.AWS.Lambda.CreateEventSourceMapping
+        , Network.AWS.Lambda.CreateFunction
+        , Network.AWS.Lambda.DeleteEventSourceMapping
         , Network.AWS.Lambda.DeleteFunction
-        , Network.AWS.Lambda.GetEventSource
+        , Network.AWS.Lambda.GetEventSourceMapping
         , Network.AWS.Lambda.GetFunction
         , Network.AWS.Lambda.GetFunctionConfiguration
+        , Network.AWS.Lambda.GetPolicy
+        , Network.AWS.Lambda.Invoke
         , Network.AWS.Lambda.InvokeAsync
-        , Network.AWS.Lambda.ListEventSources
+        , Network.AWS.Lambda.ListEventSourceMappings
         , Network.AWS.Lambda.ListFunctions
-        , Network.AWS.Lambda.RemoveEventSource
+        , Network.AWS.Lambda.RemovePermission
         , Network.AWS.Lambda.Types
+        , Network.AWS.Lambda.UpdateEventSourceMapping
+        , Network.AWS.Lambda.UpdateFunctionCode
         , Network.AWS.Lambda.UpdateFunctionConfiguration
-        , Network.AWS.Lambda.UploadFunction
 
     other-modules:
 
     build-depends:
-          amazonka-core == 0.3.3.*
+          amazonka-core == 0.3.4.*
         , base          >= 4.7     && < 5
diff --git a/gen/Network/AWS/Lambda.hs b/gen/Network/AWS/Lambda.hs
--- a/gen/Network/AWS/Lambda.hs
+++ b/gen/Network/AWS/Lambda.hs
@@ -22,29 +22,41 @@
 -- cost-effective and easy to scale automatically from a few requests per day to
 -- thousands per second.
 module Network.AWS.Lambda
-    ( module Network.AWS.Lambda.AddEventSource
+    ( module Network.AWS.Lambda.AddPermission
+    , module Network.AWS.Lambda.CreateEventSourceMapping
+    , module Network.AWS.Lambda.CreateFunction
+    , module Network.AWS.Lambda.DeleteEventSourceMapping
     , module Network.AWS.Lambda.DeleteFunction
-    , module Network.AWS.Lambda.GetEventSource
+    , module Network.AWS.Lambda.GetEventSourceMapping
     , module Network.AWS.Lambda.GetFunction
     , module Network.AWS.Lambda.GetFunctionConfiguration
+    , module Network.AWS.Lambda.GetPolicy
+    , module Network.AWS.Lambda.Invoke
     , module Network.AWS.Lambda.InvokeAsync
-    , module Network.AWS.Lambda.ListEventSources
+    , module Network.AWS.Lambda.ListEventSourceMappings
     , module Network.AWS.Lambda.ListFunctions
-    , module Network.AWS.Lambda.RemoveEventSource
+    , module Network.AWS.Lambda.RemovePermission
     , module Network.AWS.Lambda.Types
+    , module Network.AWS.Lambda.UpdateEventSourceMapping
+    , module Network.AWS.Lambda.UpdateFunctionCode
     , module Network.AWS.Lambda.UpdateFunctionConfiguration
-    , module Network.AWS.Lambda.UploadFunction
     ) where
 
-import Network.AWS.Lambda.AddEventSource
+import Network.AWS.Lambda.AddPermission
+import Network.AWS.Lambda.CreateEventSourceMapping
+import Network.AWS.Lambda.CreateFunction
+import Network.AWS.Lambda.DeleteEventSourceMapping
 import Network.AWS.Lambda.DeleteFunction
-import Network.AWS.Lambda.GetEventSource
+import Network.AWS.Lambda.GetEventSourceMapping
 import Network.AWS.Lambda.GetFunction
 import Network.AWS.Lambda.GetFunctionConfiguration
+import Network.AWS.Lambda.GetPolicy
+import Network.AWS.Lambda.Invoke
 import Network.AWS.Lambda.InvokeAsync
-import Network.AWS.Lambda.ListEventSources
+import Network.AWS.Lambda.ListEventSourceMappings
 import Network.AWS.Lambda.ListFunctions
-import Network.AWS.Lambda.RemoveEventSource
+import Network.AWS.Lambda.RemovePermission
 import Network.AWS.Lambda.Types
+import Network.AWS.Lambda.UpdateEventSourceMapping
+import Network.AWS.Lambda.UpdateFunctionCode
 import Network.AWS.Lambda.UpdateFunctionConfiguration
-import Network.AWS.Lambda.UploadFunction
diff --git a/gen/Network/AWS/Lambda/AddEventSource.hs b/gen/Network/AWS/Lambda/AddEventSource.hs
deleted file mode 100644
--- a/gen/Network/AWS/Lambda/AddEventSource.hs
+++ /dev/null
@@ -1,266 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.Lambda.AddEventSource
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Identifies a stream as an event source for an AWS Lambda function. It can be
--- either an Amazon Kinesis stream or a Amazon DynamoDB stream. AWS Lambda
--- invokes the specified function when records are posted to the stream.
---
--- This is the pull model, where AWS Lambda invokes the function. For more
--- information, go to <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works> in the AWS Lambda Developer Guide.
---
--- This association between an Amazon Kinesis stream and an AWS Lambda function
--- is called the event source mapping. You provide the configuration information
--- (for example, which stream to read from and which AWS Lambda function to
--- invoke) for the event source mapping in the request body.
---
--- Each event source, such as a Kinesis stream, can only be associated with
--- one AWS Lambda function. If you call 'AddEventSource' for an event source that
--- is already mapped to another AWS Lambda function, the existing mapping is
--- updated to call the new function instead of the old one.
---
--- This operation requires permission for the 'iam:PassRole' action for the IAM
--- role. It also requires permission for the 'lambda:AddEventSource' action.
---
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_AddEventSource.html>
-module Network.AWS.Lambda.AddEventSource
-    (
-    -- * Request
-      AddEventSource
-    -- ** Request constructor
-    , addEventSource
-    -- ** Request lenses
-    , aesBatchSize
-    , aesEventSource
-    , aesFunctionName
-    , aesParameters
-    , aesRole
-
-    -- * Response
-    , AddEventSourceResponse
-    -- ** Response constructor
-    , addEventSourceResponse
-    -- ** Response lenses
-    , aesrBatchSize
-    , aesrEventSource
-    , aesrFunctionName
-    , aesrIsActive
-    , aesrLastModified
-    , aesrParameters
-    , aesrRole
-    , aesrStatus
-    , aesrUUID
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
-
-data AddEventSource = AddEventSource
-    { _aesBatchSize    :: Maybe Int
-    , _aesEventSource  :: Text
-    , _aesFunctionName :: Text
-    , _aesParameters   :: Map Text Text
-    , _aesRole         :: Text
-    } deriving (Eq, Read, Show)
-
--- | 'AddEventSource' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'aesBatchSize' @::@ 'Maybe' 'Int'
---
--- * 'aesEventSource' @::@ 'Text'
---
--- * 'aesFunctionName' @::@ 'Text'
---
--- * 'aesParameters' @::@ 'HashMap' 'Text' 'Text'
---
--- * 'aesRole' @::@ 'Text'
---
-addEventSource :: Text -- ^ 'aesEventSource'
-               -> Text -- ^ 'aesFunctionName'
-               -> Text -- ^ 'aesRole'
-               -> AddEventSource
-addEventSource p1 p2 p3 = AddEventSource
-    { _aesEventSource  = p1
-    , _aesFunctionName = p2
-    , _aesRole         = p3
-    , _aesBatchSize    = Nothing
-    , _aesParameters   = mempty
-    }
-
--- | The largest number of records that AWS Lambda will give to your function in a
--- single event. The default is 100 records.
-aesBatchSize :: Lens' AddEventSource (Maybe Int)
-aesBatchSize = lens _aesBatchSize (\s a -> s { _aesBatchSize = a })
-
--- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the event
--- source. Any record added to this stream causes AWS Lambda to invoke your
--- Lambda function. AWS Lambda POSTs the Amazon Kinesis event, containing
--- records, to your Lambda function as JSON.
-aesEventSource :: Lens' AddEventSource Text
-aesEventSource = lens _aesEventSource (\s a -> s { _aesEventSource = a })
-
--- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
-aesFunctionName :: Lens' AddEventSource Text
-aesFunctionName = lens _aesFunctionName (\s a -> s { _aesFunctionName = a })
-
--- | A map (key-value pairs) defining the configuration for AWS Lambda to use when
--- reading the event source. Currently, AWS Lambda supports only the 'InitialPositionInStream' key. The valid values are: "TRIM_HORIZON" and "LATEST". The default value is
--- "TRIM_HORIZON". For more information, go to <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html#Kinesis-GetShardIterator-request-ShardIteratorType ShardIteratorType> in the Amazon
--- Kinesis Service API Reference.
-aesParameters :: Lens' AddEventSource (HashMap Text Text)
-aesParameters = lens _aesParameters (\s a -> s { _aesParameters = a }) . _Map
-
--- | The ARN of the IAM role (invocation role) that AWS Lambda can assume to read
--- from the stream and invoke the function.
-aesRole :: Lens' AddEventSource Text
-aesRole = lens _aesRole (\s a -> s { _aesRole = a })
-
-data AddEventSourceResponse = AddEventSourceResponse
-    { _aesrBatchSize    :: Maybe Int
-    , _aesrEventSource  :: Maybe Text
-    , _aesrFunctionName :: Maybe Text
-    , _aesrIsActive     :: Maybe Bool
-    , _aesrLastModified :: Maybe Text
-    , _aesrParameters   :: Map Text Text
-    , _aesrRole         :: Maybe Text
-    , _aesrStatus       :: Maybe Text
-    , _aesrUUID         :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'AddEventSourceResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'aesrBatchSize' @::@ 'Maybe' 'Int'
---
--- * 'aesrEventSource' @::@ 'Maybe' 'Text'
---
--- * 'aesrFunctionName' @::@ 'Maybe' 'Text'
---
--- * 'aesrIsActive' @::@ 'Maybe' 'Bool'
---
--- * 'aesrLastModified' @::@ 'Maybe' 'Text'
---
--- * 'aesrParameters' @::@ 'HashMap' 'Text' 'Text'
---
--- * 'aesrRole' @::@ 'Maybe' 'Text'
---
--- * 'aesrStatus' @::@ 'Maybe' 'Text'
---
--- * 'aesrUUID' @::@ 'Maybe' 'Text'
---
-addEventSourceResponse :: AddEventSourceResponse
-addEventSourceResponse = AddEventSourceResponse
-    { _aesrUUID         = Nothing
-    , _aesrBatchSize    = Nothing
-    , _aesrEventSource  = Nothing
-    , _aesrFunctionName = Nothing
-    , _aesrParameters   = mempty
-    , _aesrRole         = Nothing
-    , _aesrLastModified = Nothing
-    , _aesrIsActive     = Nothing
-    , _aesrStatus       = Nothing
-    }
-
--- | The largest number of records that AWS Lambda will POST in the invocation
--- request to your function.
-aesrBatchSize :: Lens' AddEventSourceResponse (Maybe Int)
-aesrBatchSize = lens _aesrBatchSize (\s a -> s { _aesrBatchSize = a })
-
--- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
--- source of events.
-aesrEventSource :: Lens' AddEventSourceResponse (Maybe Text)
-aesrEventSource = lens _aesrEventSource (\s a -> s { _aesrEventSource = a })
-
--- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
-aesrFunctionName :: Lens' AddEventSourceResponse (Maybe Text)
-aesrFunctionName = lens _aesrFunctionName (\s a -> s { _aesrFunctionName = a })
-
--- | Indicates whether the event source mapping is currently honored. Events are
--- only processes if IsActive is true.
-aesrIsActive :: Lens' AddEventSourceResponse (Maybe Bool)
-aesrIsActive = lens _aesrIsActive (\s a -> s { _aesrIsActive = a })
-
--- | The UTC time string indicating the last time the event mapping was updated.
-aesrLastModified :: Lens' AddEventSourceResponse (Maybe Text)
-aesrLastModified = lens _aesrLastModified (\s a -> s { _aesrLastModified = a })
-
--- | The map (key-value pairs) defining the configuration for AWS Lambda to use
--- when reading the event source.
-aesrParameters :: Lens' AddEventSourceResponse (HashMap Text Text)
-aesrParameters = lens _aesrParameters (\s a -> s { _aesrParameters = a }) . _Map
-
--- | The ARN of the IAM role (invocation role) that AWS Lambda can assume to read
--- from the stream and invoke the function.
-aesrRole :: Lens' AddEventSourceResponse (Maybe Text)
-aesrRole = lens _aesrRole (\s a -> s { _aesrRole = a })
-
--- | The description of the health of the event source mapping. Valid values are:
--- "PENDING", "OK", and "PROBLEM:/message/". Initially this staus is "PENDING".
--- When AWS Lambda begins processing events, it changes the status to "OK".
-aesrStatus :: Lens' AddEventSourceResponse (Maybe Text)
-aesrStatus = lens _aesrStatus (\s a -> s { _aesrStatus = a })
-
--- | The AWS Lambda assigned opaque identifier for the mapping.
-aesrUUID :: Lens' AddEventSourceResponse (Maybe Text)
-aesrUUID = lens _aesrUUID (\s a -> s { _aesrUUID = a })
-
-instance ToPath AddEventSource where
-    toPath = const "/2014-11-13/event-source-mappings/"
-
-instance ToQuery AddEventSource where
-    toQuery = const mempty
-
-instance ToHeaders AddEventSource
-
-instance ToJSON AddEventSource where
-    toJSON AddEventSource{..} = object
-        [ "EventSource"  .= _aesEventSource
-        , "FunctionName" .= _aesFunctionName
-        , "Role"         .= _aesRole
-        , "BatchSize"    .= _aesBatchSize
-        , "Parameters"   .= _aesParameters
-        ]
-
-instance AWSRequest AddEventSource where
-    type Sv AddEventSource = Lambda
-    type Rs AddEventSource = AddEventSourceResponse
-
-    request  = post
-    response = jsonResponse
-
-instance FromJSON AddEventSourceResponse where
-    parseJSON = withObject "AddEventSourceResponse" $ \o -> AddEventSourceResponse
-        <$> o .:? "BatchSize"
-        <*> o .:? "EventSource"
-        <*> o .:? "FunctionName"
-        <*> o .:? "IsActive"
-        <*> o .:? "LastModified"
-        <*> o .:? "Parameters" .!= mempty
-        <*> o .:? "Role"
-        <*> o .:? "Status"
-        <*> o .:? "UUID"
diff --git a/gen/Network/AWS/Lambda/AddPermission.hs b/gen/Network/AWS/Lambda/AddPermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/AddPermission.hs
@@ -0,0 +1,204 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.AddPermission
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | Adds a permission to the access policy associated with the specified AWS
+-- Lambda function. In a "push event" model, the access policy attached to the
+-- Lambda function grants Amazon S3 or a user application permission for the
+-- Lambda 'lambda:Invoke' action. For information about the push model, see <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWSLambda: How it Works>. Each Lambda function has one access policy associated
+-- with it. You can use the 'AddPermission' API to add a permission to the policy.
+-- You have one access policy but it can have multiple permission statements.
+--
+-- This operation requires permission for the 'lambda:AddPermission' action.
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html>
+module Network.AWS.Lambda.AddPermission
+    (
+    -- * Request
+      AddPermission
+    -- ** Request constructor
+    , addPermission
+    -- ** Request lenses
+    , apAction
+    , apFunctionName
+    , apPrincipal
+    , apSourceAccount
+    , apSourceArn
+    , apStatementId
+
+    -- * Response
+    , AddPermissionResponse
+    -- ** Response constructor
+    , addPermissionResponse
+    -- ** Response lenses
+    , aprStatement
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+data AddPermission = AddPermission
+    { _apAction        :: Text
+    , _apFunctionName  :: Text
+    , _apPrincipal     :: Text
+    , _apSourceAccount :: Maybe Text
+    , _apSourceArn     :: Maybe Text
+    , _apStatementId   :: Text
+    } deriving (Eq, Ord, Read, Show)
+
+-- | 'AddPermission' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'apAction' @::@ 'Text'
+--
+-- * 'apFunctionName' @::@ 'Text'
+--
+-- * 'apPrincipal' @::@ 'Text'
+--
+-- * 'apSourceAccount' @::@ 'Maybe' 'Text'
+--
+-- * 'apSourceArn' @::@ 'Maybe' 'Text'
+--
+-- * 'apStatementId' @::@ 'Text'
+--
+addPermission :: Text -- ^ 'apFunctionName'
+              -> Text -- ^ 'apStatementId'
+              -> Text -- ^ 'apAction'
+              -> Text -- ^ 'apPrincipal'
+              -> AddPermission
+addPermission p1 p2 p3 p4 = AddPermission
+    { _apFunctionName  = p1
+    , _apStatementId   = p2
+    , _apAction        = p3
+    , _apPrincipal     = p4
+    , _apSourceArn     = Nothing
+    , _apSourceAccount = Nothing
+    }
+
+-- | The AWS Lambda action you want to allow in this statement. Each Lambda action
+-- is a string starting with "lambda:" followed by the API name (see 'Operations'). For example, "lambda:CreateFunction". You can use wildcard ("lambda:*") to grant permission for all AWS Lambda actions.
+apAction :: Lens' AddPermission Text
+apAction = lens _apAction (\s a -> s { _apAction = a })
+
+-- | Name of the Lambda function whose access policy you are updating by adding a
+-- new permission.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
+apFunctionName :: Lens' AddPermission Text
+apFunctionName = lens _apFunctionName (\s a -> s { _apFunctionName = a })
+
+-- | The principal who is getting this permission. It can be Amazon S3 service
+-- Principal ("s3.amazonaws.com") if you want Amazon S3 to invoke the function,
+-- an AWS account ID if you are granting cross-account permission, or any valid
+-- AWS service principal such as "sns.amazonaws.com". For example, you might
+-- want to allow a custom application in another AWS account to push events to
+-- AWS Lambda by invoking your function.
+apPrincipal :: Lens' AddPermission Text
+apPrincipal = lens _apPrincipal (\s a -> s { _apPrincipal = a })
+
+-- | The AWS account ID (without a hyphen) of the source owner. If the 'SourceArn'
+-- identifies a bucket, then this is the bucket owner's account ID. You can use
+-- this additional condition to ensure the bucket you specify is owned by a
+-- specific account (it is possible the bucket owner deleted the bucket and some
+-- other AWS account created the bucket). You can also use this condition to
+-- specify all sources (that is, you don't specify the 'SourceArn') owned by a
+-- specific account.
+apSourceAccount :: Lens' AddPermission (Maybe Text)
+apSourceAccount = lens _apSourceAccount (\s a -> s { _apSourceAccount = a })
+
+-- | This is optional; however, when granting Amazon S3 permission to invoke your
+-- function, you should specify this field with the bucket Amazon Resource Name
+-- (ARN) as its value. This ensures that only events generated from the
+-- specified bucket can invoke the function.
+--
+-- If you add a permission for the Amazon S3 principal without providing the
+-- source ARN, any AWS account that creates a mapping to your function ARN can
+-- send events to invoke your Lambda function from Amazon S3.
+apSourceArn :: Lens' AddPermission (Maybe Text)
+apSourceArn = lens _apSourceArn (\s a -> s { _apSourceArn = a })
+
+-- | A unique statement identifier.
+apStatementId :: Lens' AddPermission Text
+apStatementId = lens _apStatementId (\s a -> s { _apStatementId = a })
+
+newtype AddPermissionResponse = AddPermissionResponse
+    { _aprStatement :: Maybe Text
+    } deriving (Eq, Ord, Read, Show, Monoid)
+
+-- | 'AddPermissionResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'aprStatement' @::@ 'Maybe' 'Text'
+--
+addPermissionResponse :: AddPermissionResponse
+addPermissionResponse = AddPermissionResponse
+    { _aprStatement = Nothing
+    }
+
+-- | The permission statement you specified in the request. The response returns
+-- the same as a string using "\" as an escape character in the JSON.
+aprStatement :: Lens' AddPermissionResponse (Maybe Text)
+aprStatement = lens _aprStatement (\s a -> s { _aprStatement = a })
+
+instance ToPath AddPermission where
+    toPath AddPermission{..} = mconcat
+        [ "/2015-03-31/functions/"
+        , toText _apFunctionName
+        , "/versions/HEAD/policy"
+        ]
+
+instance ToQuery AddPermission where
+    toQuery = const mempty
+
+instance ToHeaders AddPermission
+
+instance ToJSON AddPermission where
+    toJSON AddPermission{..} = object
+        [ "StatementId"   .= _apStatementId
+        , "Action"        .= _apAction
+        , "Principal"     .= _apPrincipal
+        , "SourceArn"     .= _apSourceArn
+        , "SourceAccount" .= _apSourceAccount
+        ]
+
+instance AWSRequest AddPermission where
+    type Sv AddPermission = Lambda
+    type Rs AddPermission = AddPermissionResponse
+
+    request  = post
+    response = jsonResponse
+
+instance FromJSON AddPermissionResponse where
+    parseJSON = withObject "AddPermissionResponse" $ \o -> AddPermissionResponse
+        <$> o .:? "Statement"
diff --git a/gen/Network/AWS/Lambda/CreateEventSourceMapping.hs b/gen/Network/AWS/Lambda/CreateEventSourceMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/CreateEventSourceMapping.hs
@@ -0,0 +1,269 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.CreateEventSourceMapping
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | Identifies a stream as an event source for a Lambda function. It can be
+-- either an Amazon Kinesis stream or an Amazon DynamoDB stream. AWS Lambda
+-- invokes the specified function when records are posted to the stream.
+--
+-- This is the pull model, where AWS Lambda invokes the function. For more
+-- information, go to <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works> in the /AWS Lambda Developer Guide/.
+--
+-- This association between an Amazon Kinesis stream and a Lambda function is
+-- called the event source mapping. You provide the configuration information
+-- (for example, which stream to read from and which Lambda function to invoke)
+-- for the event source mapping in the request body.
+--
+-- Each event source, such as an Amazon Kinesis or a DynamoDB stream, can be
+-- associated with multiple AWS Lambda function. A given Lambda function can be
+-- associated with multiple AWS event sources.
+--
+-- This operation requires permission for the 'lambda:CreateEventSourceMapping'
+-- action.
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_CreateEventSourceMapping.html>
+module Network.AWS.Lambda.CreateEventSourceMapping
+    (
+    -- * Request
+      CreateEventSourceMapping
+    -- ** Request constructor
+    , createEventSourceMapping
+    -- ** Request lenses
+    , cesmBatchSize
+    , cesmEnabled
+    , cesmEventSourceArn
+    , cesmFunctionName
+    , cesmStartingPosition
+
+    -- * Response
+    , CreateEventSourceMappingResponse
+    -- ** Response constructor
+    , createEventSourceMappingResponse
+    -- ** Response lenses
+    , cesmrBatchSize
+    , cesmrEventSourceArn
+    , cesmrFunctionArn
+    , cesmrLastModified
+    , cesmrLastProcessingResult
+    , cesmrState
+    , cesmrStateTransitionReason
+    , cesmrUUID
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+data CreateEventSourceMapping = CreateEventSourceMapping
+    { _cesmBatchSize        :: Maybe Nat
+    , _cesmEnabled          :: Maybe Bool
+    , _cesmEventSourceArn   :: Text
+    , _cesmFunctionName     :: Text
+    , _cesmStartingPosition :: EventSourcePosition
+    } deriving (Eq, Read, Show)
+
+-- | 'CreateEventSourceMapping' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cesmBatchSize' @::@ 'Maybe' 'Natural'
+--
+-- * 'cesmEnabled' @::@ 'Maybe' 'Bool'
+--
+-- * 'cesmEventSourceArn' @::@ 'Text'
+--
+-- * 'cesmFunctionName' @::@ 'Text'
+--
+-- * 'cesmStartingPosition' @::@ 'EventSourcePosition'
+--
+createEventSourceMapping :: Text -- ^ 'cesmEventSourceArn'
+                         -> Text -- ^ 'cesmFunctionName'
+                         -> EventSourcePosition -- ^ 'cesmStartingPosition'
+                         -> CreateEventSourceMapping
+createEventSourceMapping p1 p2 p3 = CreateEventSourceMapping
+    { _cesmEventSourceArn   = p1
+    , _cesmFunctionName     = p2
+    , _cesmStartingPosition = p3
+    , _cesmEnabled          = Nothing
+    , _cesmBatchSize        = Nothing
+    }
+
+-- | The largest number of records that AWS Lambda will retrieve from your event
+-- source at the time of invoking your function. Your function receives an event
+-- with all the retrieved records. The default is 100 records.
+cesmBatchSize :: Lens' CreateEventSourceMapping (Maybe Natural)
+cesmBatchSize = lens _cesmBatchSize (\s a -> s { _cesmBatchSize = a }) . mapping _Nat
+
+-- | Indicates whether AWS Lambda should begin polling the event source.
+cesmEnabled :: Lens' CreateEventSourceMapping (Maybe Bool)
+cesmEnabled = lens _cesmEnabled (\s a -> s { _cesmEnabled = a })
+
+-- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the event
+-- source. Any record added to this stream could cause AWS Lambda to invoke your
+-- Lambda function, it depends on the 'BatchSize'. AWS Lambda POSTs the Amazon
+-- Kinesis event, containing records, to your Lambda function as JSON.
+cesmEventSourceArn :: Lens' CreateEventSourceMapping Text
+cesmEventSourceArn =
+    lens _cesmEventSourceArn (\s a -> s { _cesmEventSourceArn = a })
+
+-- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
+cesmFunctionName :: Lens' CreateEventSourceMapping Text
+cesmFunctionName = lens _cesmFunctionName (\s a -> s { _cesmFunctionName = a })
+
+-- | The position in the stream where AWS Lambda should start reading. For more
+-- information, go to <http://docs.aws.amazon.com/kinesis/latest/APIReference/API_GetShardIterator.html#Kinesis-GetShardIterator-request-ShardIteratorType ShardIteratorType> in the /Amazon Kinesis API Reference/.
+cesmStartingPosition :: Lens' CreateEventSourceMapping EventSourcePosition
+cesmStartingPosition =
+    lens _cesmStartingPosition (\s a -> s { _cesmStartingPosition = a })
+
+data CreateEventSourceMappingResponse = CreateEventSourceMappingResponse
+    { _cesmrBatchSize             :: Maybe Nat
+    , _cesmrEventSourceArn        :: Maybe Text
+    , _cesmrFunctionArn           :: Maybe Text
+    , _cesmrLastModified          :: Maybe POSIX
+    , _cesmrLastProcessingResult  :: Maybe Text
+    , _cesmrState                 :: Maybe Text
+    , _cesmrStateTransitionReason :: Maybe Text
+    , _cesmrUUID                  :: Maybe Text
+    } deriving (Eq, Ord, Read, Show)
+
+-- | 'CreateEventSourceMappingResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cesmrBatchSize' @::@ 'Maybe' 'Natural'
+--
+-- * 'cesmrEventSourceArn' @::@ 'Maybe' 'Text'
+--
+-- * 'cesmrFunctionArn' @::@ 'Maybe' 'Text'
+--
+-- * 'cesmrLastModified' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'cesmrLastProcessingResult' @::@ 'Maybe' 'Text'
+--
+-- * 'cesmrState' @::@ 'Maybe' 'Text'
+--
+-- * 'cesmrStateTransitionReason' @::@ 'Maybe' 'Text'
+--
+-- * 'cesmrUUID' @::@ 'Maybe' 'Text'
+--
+createEventSourceMappingResponse :: CreateEventSourceMappingResponse
+createEventSourceMappingResponse = CreateEventSourceMappingResponse
+    { _cesmrUUID                  = Nothing
+    , _cesmrBatchSize             = Nothing
+    , _cesmrEventSourceArn        = Nothing
+    , _cesmrFunctionArn           = Nothing
+    , _cesmrLastModified          = Nothing
+    , _cesmrLastProcessingResult  = Nothing
+    , _cesmrState                 = Nothing
+    , _cesmrStateTransitionReason = Nothing
+    }
+
+-- | The largest number of records that AWS Lambda will retrieve from your event
+-- source at the time of invoking your function. Your function receives an event
+-- with all the retrieved records.
+cesmrBatchSize :: Lens' CreateEventSourceMappingResponse (Maybe Natural)
+cesmrBatchSize = lens _cesmrBatchSize (\s a -> s { _cesmrBatchSize = a }) . mapping _Nat
+
+-- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
+-- source of events.
+cesmrEventSourceArn :: Lens' CreateEventSourceMappingResponse (Maybe Text)
+cesmrEventSourceArn =
+    lens _cesmrEventSourceArn (\s a -> s { _cesmrEventSourceArn = a })
+
+-- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
+cesmrFunctionArn :: Lens' CreateEventSourceMappingResponse (Maybe Text)
+cesmrFunctionArn = lens _cesmrFunctionArn (\s a -> s { _cesmrFunctionArn = a })
+
+-- | The UTC time string indicating the last time the event mapping was updated.
+cesmrLastModified :: Lens' CreateEventSourceMappingResponse (Maybe UTCTime)
+cesmrLastModified =
+    lens _cesmrLastModified (\s a -> s { _cesmrLastModified = a })
+        . mapping _Time
+
+-- | The result of the last AWS Lambda invocation of your Lambda function.
+cesmrLastProcessingResult :: Lens' CreateEventSourceMappingResponse (Maybe Text)
+cesmrLastProcessingResult =
+    lens _cesmrLastProcessingResult
+        (\s a -> s { _cesmrLastProcessingResult = a })
+
+-- | The state of the event source mapping. It can be "Creating", "Enabled",
+-- "Disabled", "Enabling", "Disabling", "Updating", or "Deleting".
+cesmrState :: Lens' CreateEventSourceMappingResponse (Maybe Text)
+cesmrState = lens _cesmrState (\s a -> s { _cesmrState = a })
+
+-- | The reason the event source mapping is in its current state. It is either
+-- user-requested or an AWS Lambda-initiated state transition.
+cesmrStateTransitionReason :: Lens' CreateEventSourceMappingResponse (Maybe Text)
+cesmrStateTransitionReason =
+    lens _cesmrStateTransitionReason
+        (\s a -> s { _cesmrStateTransitionReason = a })
+
+-- | The AWS Lambda assigned opaque identifier for the mapping.
+cesmrUUID :: Lens' CreateEventSourceMappingResponse (Maybe Text)
+cesmrUUID = lens _cesmrUUID (\s a -> s { _cesmrUUID = a })
+
+instance ToPath CreateEventSourceMapping where
+    toPath = const "/2015-03-31/event-source-mappings/"
+
+instance ToQuery CreateEventSourceMapping where
+    toQuery = const mempty
+
+instance ToHeaders CreateEventSourceMapping
+
+instance ToJSON CreateEventSourceMapping where
+    toJSON CreateEventSourceMapping{..} = object
+        [ "EventSourceArn"   .= _cesmEventSourceArn
+        , "FunctionName"     .= _cesmFunctionName
+        , "Enabled"          .= _cesmEnabled
+        , "BatchSize"        .= _cesmBatchSize
+        , "StartingPosition" .= _cesmStartingPosition
+        ]
+
+instance AWSRequest CreateEventSourceMapping where
+    type Sv CreateEventSourceMapping = Lambda
+    type Rs CreateEventSourceMapping = CreateEventSourceMappingResponse
+
+    request  = post
+    response = jsonResponse
+
+instance FromJSON CreateEventSourceMappingResponse where
+    parseJSON = withObject "CreateEventSourceMappingResponse" $ \o -> CreateEventSourceMappingResponse
+        <$> o .:? "BatchSize"
+        <*> o .:? "EventSourceArn"
+        <*> o .:? "FunctionArn"
+        <*> o .:? "LastModified"
+        <*> o .:? "LastProcessingResult"
+        <*> o .:? "State"
+        <*> o .:? "StateTransitionReason"
+        <*> o .:? "UUID"
diff --git a/gen/Network/AWS/Lambda/CreateFunction.hs b/gen/Network/AWS/Lambda/CreateFunction.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/CreateFunction.hs
@@ -0,0 +1,306 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.CreateFunction
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | Creates a new Lambda function. The function metadata is created from the
+-- request parameters, and the code for the function is provided by a .zip file
+-- in the request body. If the function name already exists, the operation will
+-- fail. Note that the function name is case-sensitive.
+--
+-- This operation requires permission for the 'lambda:CreateFunction' action.
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_CreateFunction.html>
+module Network.AWS.Lambda.CreateFunction
+    (
+    -- * Request
+      CreateFunction
+    -- ** Request constructor
+    , createFunction
+    -- ** Request lenses
+    , cfCode
+    , cfDescription
+    , cfFunctionName
+    , cfHandler
+    , cfMemorySize
+    , cfRole
+    , cfRuntime
+    , cfTimeout
+
+    -- * Response
+    , CreateFunctionResponse
+    -- ** Response constructor
+    , createFunctionResponse
+    -- ** Response lenses
+    , cfrCodeSize
+    , cfrDescription
+    , cfrFunctionArn
+    , cfrFunctionName
+    , cfrHandler
+    , cfrLastModified
+    , cfrMemorySize
+    , cfrRole
+    , cfrRuntime
+    , cfrTimeout
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+data CreateFunction = CreateFunction
+    { _cfCode         :: FunctionCode
+    , _cfDescription  :: Maybe Text
+    , _cfFunctionName :: Text
+    , _cfHandler      :: Text
+    , _cfMemorySize   :: Maybe Nat
+    , _cfRole         :: Text
+    , _cfRuntime      :: Runtime
+    , _cfTimeout      :: Maybe Nat
+    } deriving (Eq, Read, Show)
+
+-- | 'CreateFunction' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cfCode' @::@ 'FunctionCode'
+--
+-- * 'cfDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'cfFunctionName' @::@ 'Text'
+--
+-- * 'cfHandler' @::@ 'Text'
+--
+-- * 'cfMemorySize' @::@ 'Maybe' 'Natural'
+--
+-- * 'cfRole' @::@ 'Text'
+--
+-- * 'cfRuntime' @::@ 'Runtime'
+--
+-- * 'cfTimeout' @::@ 'Maybe' 'Natural'
+--
+createFunction :: Text -- ^ 'cfFunctionName'
+               -> Runtime -- ^ 'cfRuntime'
+               -> Text -- ^ 'cfRole'
+               -> Text -- ^ 'cfHandler'
+               -> FunctionCode -- ^ 'cfCode'
+               -> CreateFunction
+createFunction p1 p2 p3 p4 p5 = CreateFunction
+    { _cfFunctionName = p1
+    , _cfRuntime      = p2
+    , _cfRole         = p3
+    , _cfHandler      = p4
+    , _cfCode         = p5
+    , _cfDescription  = Nothing
+    , _cfTimeout      = Nothing
+    , _cfMemorySize   = Nothing
+    }
+
+-- | A structure that includes ZipFile.
+cfCode :: Lens' CreateFunction FunctionCode
+cfCode = lens _cfCode (\s a -> s { _cfCode = a })
+
+-- | A short, user-defined function description. Lambda does not use this value.
+-- Assign a meaningful description as you see fit.
+cfDescription :: Lens' CreateFunction (Maybe Text)
+cfDescription = lens _cfDescription (\s a -> s { _cfDescription = a })
+
+-- | The name you want to assign to the function you are uploading. You can
+-- specify an unqualified function name (for example, "Thumbnail") or you can
+-- specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length. The function names appear in the console and are returned in the 'ListFunctions' API. Function names are used to specify functions to other AWS Lambda APIs,
+-- such as 'Invoke'.
+cfFunctionName :: Lens' CreateFunction Text
+cfFunctionName = lens _cfFunctionName (\s a -> s { _cfFunctionName = a })
+
+-- | The function within your code that Lambda calls to begin execution. For
+-- Node.js, it is the /module-name/./export/ value in your function.
+cfHandler :: Lens' CreateFunction Text
+cfHandler = lens _cfHandler (\s a -> s { _cfHandler = a })
+
+-- | The amount of memory, in MB, your Lambda function is given. Lambda uses this
+-- memory size to infer the amount of CPU and memory allocated to your function.
+-- Your function use-case determines your CPU and memory requirements. For
+-- example, a database operation might need less memory compared to an image
+-- processing function. The default value is 128 MB. The value must be a
+-- multiple of 64 MB.
+cfMemorySize :: Lens' CreateFunction (Maybe Natural)
+cfMemorySize = lens _cfMemorySize (\s a -> s { _cfMemorySize = a }) . mapping _Nat
+
+-- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
+-- executes your function to access any other Amazon Web Services (AWS)
+-- resources. For more information, see <http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html AWS Lambda: How it Works>
+cfRole :: Lens' CreateFunction Text
+cfRole = lens _cfRole (\s a -> s { _cfRole = a })
+
+-- | The runtime environment for the Lambda function you are uploading. Currently,
+-- Lambda supports only "nodejs" as the runtime.
+cfRuntime :: Lens' CreateFunction Runtime
+cfRuntime = lens _cfRuntime (\s a -> s { _cfRuntime = a })
+
+-- | The function execution time at which Lambda should terminate the function.
+-- Because the execution time has cost implications, we recommend you set this
+-- value based on your expected execution time. The default is 3 seconds.
+cfTimeout :: Lens' CreateFunction (Maybe Natural)
+cfTimeout = lens _cfTimeout (\s a -> s { _cfTimeout = a }) . mapping _Nat
+
+data CreateFunctionResponse = CreateFunctionResponse
+    { _cfrCodeSize     :: Maybe Integer
+    , _cfrDescription  :: Maybe Text
+    , _cfrFunctionArn  :: Maybe Text
+    , _cfrFunctionName :: Maybe Text
+    , _cfrHandler      :: Maybe Text
+    , _cfrLastModified :: Maybe Text
+    , _cfrMemorySize   :: Maybe Nat
+    , _cfrRole         :: Maybe Text
+    , _cfrRuntime      :: Maybe Runtime
+    , _cfrTimeout      :: Maybe Nat
+    } deriving (Eq, Read, Show)
+
+-- | 'CreateFunctionResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'cfrCodeSize' @::@ 'Maybe' 'Integer'
+--
+-- * 'cfrDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'cfrFunctionArn' @::@ 'Maybe' 'Text'
+--
+-- * 'cfrFunctionName' @::@ 'Maybe' 'Text'
+--
+-- * 'cfrHandler' @::@ 'Maybe' 'Text'
+--
+-- * 'cfrLastModified' @::@ 'Maybe' 'Text'
+--
+-- * 'cfrMemorySize' @::@ 'Maybe' 'Natural'
+--
+-- * 'cfrRole' @::@ 'Maybe' 'Text'
+--
+-- * 'cfrRuntime' @::@ 'Maybe' 'Runtime'
+--
+-- * 'cfrTimeout' @::@ 'Maybe' 'Natural'
+--
+createFunctionResponse :: CreateFunctionResponse
+createFunctionResponse = CreateFunctionResponse
+    { _cfrFunctionName = Nothing
+    , _cfrFunctionArn  = Nothing
+    , _cfrRuntime      = Nothing
+    , _cfrRole         = Nothing
+    , _cfrHandler      = Nothing
+    , _cfrCodeSize     = Nothing
+    , _cfrDescription  = Nothing
+    , _cfrTimeout      = Nothing
+    , _cfrMemorySize   = Nothing
+    , _cfrLastModified = Nothing
+    }
+
+-- | The size, in bytes, of the function .zip file you uploaded.
+cfrCodeSize :: Lens' CreateFunctionResponse (Maybe Integer)
+cfrCodeSize = lens _cfrCodeSize (\s a -> s { _cfrCodeSize = a })
+
+-- | The user-provided description.
+cfrDescription :: Lens' CreateFunctionResponse (Maybe Text)
+cfrDescription = lens _cfrDescription (\s a -> s { _cfrDescription = a })
+
+-- | The Amazon Resource Name (ARN) assigned to the function.
+cfrFunctionArn :: Lens' CreateFunctionResponse (Maybe Text)
+cfrFunctionArn = lens _cfrFunctionArn (\s a -> s { _cfrFunctionArn = a })
+
+-- | The name of the function.
+cfrFunctionName :: Lens' CreateFunctionResponse (Maybe Text)
+cfrFunctionName = lens _cfrFunctionName (\s a -> s { _cfrFunctionName = a })
+
+-- | The function Lambda calls to begin executing your function.
+cfrHandler :: Lens' CreateFunctionResponse (Maybe Text)
+cfrHandler = lens _cfrHandler (\s a -> s { _cfrHandler = a })
+
+-- | The timestamp of the last time you updated the function.
+cfrLastModified :: Lens' CreateFunctionResponse (Maybe Text)
+cfrLastModified = lens _cfrLastModified (\s a -> s { _cfrLastModified = a })
+
+-- | The memory size, in MB, you configured for the function. Must be a multiple
+-- of 64 MB.
+cfrMemorySize :: Lens' CreateFunctionResponse (Maybe Natural)
+cfrMemorySize = lens _cfrMemorySize (\s a -> s { _cfrMemorySize = a }) . mapping _Nat
+
+-- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
+-- executes your function to access any other Amazon Web Services (AWS)
+-- resources.
+cfrRole :: Lens' CreateFunctionResponse (Maybe Text)
+cfrRole = lens _cfrRole (\s a -> s { _cfrRole = a })
+
+-- | The runtime environment for the Lambda function.
+cfrRuntime :: Lens' CreateFunctionResponse (Maybe Runtime)
+cfrRuntime = lens _cfrRuntime (\s a -> s { _cfrRuntime = a })
+
+-- | The function execution time at which Lambda should terminate the function.
+-- Because the execution time has cost implications, we recommend you set this
+-- value based on your expected execution time. The default is 3 seconds.
+cfrTimeout :: Lens' CreateFunctionResponse (Maybe Natural)
+cfrTimeout = lens _cfrTimeout (\s a -> s { _cfrTimeout = a }) . mapping _Nat
+
+instance ToPath CreateFunction where
+    toPath = const "/2015-03-31/functions"
+
+instance ToQuery CreateFunction where
+    toQuery = const mempty
+
+instance ToHeaders CreateFunction
+
+instance ToJSON CreateFunction where
+    toJSON CreateFunction{..} = object
+        [ "FunctionName" .= _cfFunctionName
+        , "Runtime"      .= _cfRuntime
+        , "Role"         .= _cfRole
+        , "Handler"      .= _cfHandler
+        , "Description"  .= _cfDescription
+        , "Timeout"      .= _cfTimeout
+        , "MemorySize"   .= _cfMemorySize
+        , "Code"         .= _cfCode
+        ]
+
+instance AWSRequest CreateFunction where
+    type Sv CreateFunction = Lambda
+    type Rs CreateFunction = CreateFunctionResponse
+
+    request  = post
+    response = jsonResponse
+
+instance FromJSON CreateFunctionResponse where
+    parseJSON = withObject "CreateFunctionResponse" $ \o -> CreateFunctionResponse
+        <$> o .:? "CodeSize"
+        <*> o .:? "Description"
+        <*> o .:? "FunctionArn"
+        <*> o .:? "FunctionName"
+        <*> o .:? "Handler"
+        <*> o .:? "LastModified"
+        <*> o .:? "MemorySize"
+        <*> o .:? "Role"
+        <*> o .:? "Runtime"
+        <*> o .:? "Timeout"
diff --git a/gen/Network/AWS/Lambda/DeleteEventSourceMapping.hs b/gen/Network/AWS/Lambda/DeleteEventSourceMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/DeleteEventSourceMapping.hs
@@ -0,0 +1,199 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.DeleteEventSourceMapping
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | Removes an event source mapping. This means AWS Lambda will no longer invoke
+-- the function for events in the associated source.
+--
+-- This operation requires permission for the 'lambda:DeleteEventSourceMapping'
+-- action.
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_DeleteEventSourceMapping.html>
+module Network.AWS.Lambda.DeleteEventSourceMapping
+    (
+    -- * Request
+      DeleteEventSourceMapping
+    -- ** Request constructor
+    , deleteEventSourceMapping
+    -- ** Request lenses
+    , desmUUID
+
+    -- * Response
+    , DeleteEventSourceMappingResponse
+    -- ** Response constructor
+    , deleteEventSourceMappingResponse
+    -- ** Response lenses
+    , desmrBatchSize
+    , desmrEventSourceArn
+    , desmrFunctionArn
+    , desmrLastModified
+    , desmrLastProcessingResult
+    , desmrState
+    , desmrStateTransitionReason
+    , desmrUUID
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+newtype DeleteEventSourceMapping = DeleteEventSourceMapping
+    { _desmUUID :: Text
+    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+
+-- | 'DeleteEventSourceMapping' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'desmUUID' @::@ 'Text'
+--
+deleteEventSourceMapping :: Text -- ^ 'desmUUID'
+                         -> DeleteEventSourceMapping
+deleteEventSourceMapping p1 = DeleteEventSourceMapping
+    { _desmUUID = p1
+    }
+
+-- | The event source mapping ID.
+desmUUID :: Lens' DeleteEventSourceMapping Text
+desmUUID = lens _desmUUID (\s a -> s { _desmUUID = a })
+
+data DeleteEventSourceMappingResponse = DeleteEventSourceMappingResponse
+    { _desmrBatchSize             :: Maybe Nat
+    , _desmrEventSourceArn        :: Maybe Text
+    , _desmrFunctionArn           :: Maybe Text
+    , _desmrLastModified          :: Maybe POSIX
+    , _desmrLastProcessingResult  :: Maybe Text
+    , _desmrState                 :: Maybe Text
+    , _desmrStateTransitionReason :: Maybe Text
+    , _desmrUUID                  :: Maybe Text
+    } deriving (Eq, Ord, Read, Show)
+
+-- | 'DeleteEventSourceMappingResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'desmrBatchSize' @::@ 'Maybe' 'Natural'
+--
+-- * 'desmrEventSourceArn' @::@ 'Maybe' 'Text'
+--
+-- * 'desmrFunctionArn' @::@ 'Maybe' 'Text'
+--
+-- * 'desmrLastModified' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'desmrLastProcessingResult' @::@ 'Maybe' 'Text'
+--
+-- * 'desmrState' @::@ 'Maybe' 'Text'
+--
+-- * 'desmrStateTransitionReason' @::@ 'Maybe' 'Text'
+--
+-- * 'desmrUUID' @::@ 'Maybe' 'Text'
+--
+deleteEventSourceMappingResponse :: DeleteEventSourceMappingResponse
+deleteEventSourceMappingResponse = DeleteEventSourceMappingResponse
+    { _desmrUUID                  = Nothing
+    , _desmrBatchSize             = Nothing
+    , _desmrEventSourceArn        = Nothing
+    , _desmrFunctionArn           = Nothing
+    , _desmrLastModified          = Nothing
+    , _desmrLastProcessingResult  = Nothing
+    , _desmrState                 = Nothing
+    , _desmrStateTransitionReason = Nothing
+    }
+
+-- | The largest number of records that AWS Lambda will retrieve from your event
+-- source at the time of invoking your function. Your function receives an event
+-- with all the retrieved records.
+desmrBatchSize :: Lens' DeleteEventSourceMappingResponse (Maybe Natural)
+desmrBatchSize = lens _desmrBatchSize (\s a -> s { _desmrBatchSize = a }) . mapping _Nat
+
+-- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
+-- source of events.
+desmrEventSourceArn :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
+desmrEventSourceArn =
+    lens _desmrEventSourceArn (\s a -> s { _desmrEventSourceArn = a })
+
+-- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
+desmrFunctionArn :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
+desmrFunctionArn = lens _desmrFunctionArn (\s a -> s { _desmrFunctionArn = a })
+
+-- | The UTC time string indicating the last time the event mapping was updated.
+desmrLastModified :: Lens' DeleteEventSourceMappingResponse (Maybe UTCTime)
+desmrLastModified =
+    lens _desmrLastModified (\s a -> s { _desmrLastModified = a })
+        . mapping _Time
+
+-- | The result of the last AWS Lambda invocation of your Lambda function.
+desmrLastProcessingResult :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
+desmrLastProcessingResult =
+    lens _desmrLastProcessingResult
+        (\s a -> s { _desmrLastProcessingResult = a })
+
+-- | The state of the event source mapping. It can be "Creating", "Enabled",
+-- "Disabled", "Enabling", "Disabling", "Updating", or "Deleting".
+desmrState :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
+desmrState = lens _desmrState (\s a -> s { _desmrState = a })
+
+-- | The reason the event source mapping is in its current state. It is either
+-- user-requested or an AWS Lambda-initiated state transition.
+desmrStateTransitionReason :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
+desmrStateTransitionReason =
+    lens _desmrStateTransitionReason
+        (\s a -> s { _desmrStateTransitionReason = a })
+
+-- | The AWS Lambda assigned opaque identifier for the mapping.
+desmrUUID :: Lens' DeleteEventSourceMappingResponse (Maybe Text)
+desmrUUID = lens _desmrUUID (\s a -> s { _desmrUUID = a })
+
+instance ToPath DeleteEventSourceMapping where
+    toPath DeleteEventSourceMapping{..} = mconcat
+        [ "/2015-03-31/event-source-mappings/"
+        , toText _desmUUID
+        ]
+
+instance ToQuery DeleteEventSourceMapping where
+    toQuery = const mempty
+
+instance ToHeaders DeleteEventSourceMapping
+
+instance ToJSON DeleteEventSourceMapping where
+    toJSON = const (toJSON Empty)
+
+instance AWSRequest DeleteEventSourceMapping where
+    type Sv DeleteEventSourceMapping = Lambda
+    type Rs DeleteEventSourceMapping = DeleteEventSourceMappingResponse
+
+    request  = delete
+    response = jsonResponse
+
+instance FromJSON DeleteEventSourceMappingResponse where
+    parseJSON = withObject "DeleteEventSourceMappingResponse" $ \o -> DeleteEventSourceMappingResponse
+        <$> o .:? "BatchSize"
+        <*> o .:? "EventSourceArn"
+        <*> o .:? "FunctionArn"
+        <*> o .:? "LastModified"
+        <*> o .:? "LastProcessingResult"
+        <*> o .:? "State"
+        <*> o .:? "StateTransitionReason"
+        <*> o .:? "UUID"
diff --git a/gen/Network/AWS/Lambda/DeleteFunction.hs b/gen/Network/AWS/Lambda/DeleteFunction.hs
--- a/gen/Network/AWS/Lambda/DeleteFunction.hs
+++ b/gen/Network/AWS/Lambda/DeleteFunction.hs
@@ -24,6 +24,9 @@
 
 -- | Deletes the specified Lambda function code and configuration.
 --
+-- When you delete a function the associated access policy is also deleted. You
+-- will need to delete the event source mappings explicitly.
+--
 -- This operation requires permission for the 'lambda:DeleteFunction' action.
 --
 -- <http://docs.aws.amazon.com/lambda/latest/dg/API_DeleteFunction.html>
@@ -42,6 +45,7 @@
     , deleteFunctionResponse
     ) where
 
+import Network.AWS.Data (Object)
 import Network.AWS.Prelude
 import Network.AWS.Request.RestJSON
 import Network.AWS.Lambda.Types
@@ -64,6 +68,14 @@
     }
 
 -- | The Lambda function to delete.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
 dfFunctionName :: Lens' DeleteFunction Text
 dfFunctionName = lens _dfFunctionName (\s a -> s { _dfFunctionName = a })
 
@@ -76,7 +88,7 @@
 
 instance ToPath DeleteFunction where
     toPath DeleteFunction{..} = mconcat
-        [ "/2014-11-13/functions/"
+        [ "/2015-03-31/functions/"
         , toText _dfFunctionName
         ]
 
diff --git a/gen/Network/AWS/Lambda/GetEventSource.hs b/gen/Network/AWS/Lambda/GetEventSource.hs
deleted file mode 100644
--- a/gen/Network/AWS/Lambda/GetEventSource.hs
+++ /dev/null
@@ -1,201 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.Lambda.GetEventSource
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns configuration information for the specified event source mapping (see 'AddEventSource').
---
--- This operation requires permission for the 'lambda:GetEventSource' action.
---
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_GetEventSource.html>
-module Network.AWS.Lambda.GetEventSource
-    (
-    -- * Request
-      GetEventSource
-    -- ** Request constructor
-    , getEventSource
-    -- ** Request lenses
-    , gesUUID
-
-    -- * Response
-    , GetEventSourceResponse
-    -- ** Response constructor
-    , getEventSourceResponse
-    -- ** Response lenses
-    , gesrBatchSize
-    , gesrEventSource
-    , gesrFunctionName
-    , gesrIsActive
-    , gesrLastModified
-    , gesrParameters
-    , gesrRole
-    , gesrStatus
-    , gesrUUID
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
-
-newtype GetEventSource = GetEventSource
-    { _gesUUID :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'GetEventSource' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gesUUID' @::@ 'Text'
---
-getEventSource :: Text -- ^ 'gesUUID'
-               -> GetEventSource
-getEventSource p1 = GetEventSource
-    { _gesUUID = p1
-    }
-
--- | The AWS Lambda assigned ID of the event source mapping.
-gesUUID :: Lens' GetEventSource Text
-gesUUID = lens _gesUUID (\s a -> s { _gesUUID = a })
-
-data GetEventSourceResponse = GetEventSourceResponse
-    { _gesrBatchSize    :: Maybe Int
-    , _gesrEventSource  :: Maybe Text
-    , _gesrFunctionName :: Maybe Text
-    , _gesrIsActive     :: Maybe Bool
-    , _gesrLastModified :: Maybe Text
-    , _gesrParameters   :: Map Text Text
-    , _gesrRole         :: Maybe Text
-    , _gesrStatus       :: Maybe Text
-    , _gesrUUID         :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'GetEventSourceResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'gesrBatchSize' @::@ 'Maybe' 'Int'
---
--- * 'gesrEventSource' @::@ 'Maybe' 'Text'
---
--- * 'gesrFunctionName' @::@ 'Maybe' 'Text'
---
--- * 'gesrIsActive' @::@ 'Maybe' 'Bool'
---
--- * 'gesrLastModified' @::@ 'Maybe' 'Text'
---
--- * 'gesrParameters' @::@ 'HashMap' 'Text' 'Text'
---
--- * 'gesrRole' @::@ 'Maybe' 'Text'
---
--- * 'gesrStatus' @::@ 'Maybe' 'Text'
---
--- * 'gesrUUID' @::@ 'Maybe' 'Text'
---
-getEventSourceResponse :: GetEventSourceResponse
-getEventSourceResponse = GetEventSourceResponse
-    { _gesrUUID         = Nothing
-    , _gesrBatchSize    = Nothing
-    , _gesrEventSource  = Nothing
-    , _gesrFunctionName = Nothing
-    , _gesrParameters   = mempty
-    , _gesrRole         = Nothing
-    , _gesrLastModified = Nothing
-    , _gesrIsActive     = Nothing
-    , _gesrStatus       = Nothing
-    }
-
--- | The largest number of records that AWS Lambda will POST in the invocation
--- request to your function.
-gesrBatchSize :: Lens' GetEventSourceResponse (Maybe Int)
-gesrBatchSize = lens _gesrBatchSize (\s a -> s { _gesrBatchSize = a })
-
--- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
--- source of events.
-gesrEventSource :: Lens' GetEventSourceResponse (Maybe Text)
-gesrEventSource = lens _gesrEventSource (\s a -> s { _gesrEventSource = a })
-
--- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
-gesrFunctionName :: Lens' GetEventSourceResponse (Maybe Text)
-gesrFunctionName = lens _gesrFunctionName (\s a -> s { _gesrFunctionName = a })
-
--- | Indicates whether the event source mapping is currently honored. Events are
--- only processes if IsActive is true.
-gesrIsActive :: Lens' GetEventSourceResponse (Maybe Bool)
-gesrIsActive = lens _gesrIsActive (\s a -> s { _gesrIsActive = a })
-
--- | The UTC time string indicating the last time the event mapping was updated.
-gesrLastModified :: Lens' GetEventSourceResponse (Maybe Text)
-gesrLastModified = lens _gesrLastModified (\s a -> s { _gesrLastModified = a })
-
--- | The map (key-value pairs) defining the configuration for AWS Lambda to use
--- when reading the event source.
-gesrParameters :: Lens' GetEventSourceResponse (HashMap Text Text)
-gesrParameters = lens _gesrParameters (\s a -> s { _gesrParameters = a }) . _Map
-
--- | The ARN of the IAM role (invocation role) that AWS Lambda can assume to read
--- from the stream and invoke the function.
-gesrRole :: Lens' GetEventSourceResponse (Maybe Text)
-gesrRole = lens _gesrRole (\s a -> s { _gesrRole = a })
-
--- | The description of the health of the event source mapping. Valid values are:
--- "PENDING", "OK", and "PROBLEM:/message/". Initially this staus is "PENDING".
--- When AWS Lambda begins processing events, it changes the status to "OK".
-gesrStatus :: Lens' GetEventSourceResponse (Maybe Text)
-gesrStatus = lens _gesrStatus (\s a -> s { _gesrStatus = a })
-
--- | The AWS Lambda assigned opaque identifier for the mapping.
-gesrUUID :: Lens' GetEventSourceResponse (Maybe Text)
-gesrUUID = lens _gesrUUID (\s a -> s { _gesrUUID = a })
-
-instance ToPath GetEventSource where
-    toPath GetEventSource{..} = mconcat
-        [ "/2014-11-13/event-source-mappings/"
-        , toText _gesUUID
-        ]
-
-instance ToQuery GetEventSource where
-    toQuery = const mempty
-
-instance ToHeaders GetEventSource
-
-instance ToJSON GetEventSource where
-    toJSON = const (toJSON Empty)
-
-instance AWSRequest GetEventSource where
-    type Sv GetEventSource = Lambda
-    type Rs GetEventSource = GetEventSourceResponse
-
-    request  = get
-    response = jsonResponse
-
-instance FromJSON GetEventSourceResponse where
-    parseJSON = withObject "GetEventSourceResponse" $ \o -> GetEventSourceResponse
-        <$> o .:? "BatchSize"
-        <*> o .:? "EventSource"
-        <*> o .:? "FunctionName"
-        <*> o .:? "IsActive"
-        <*> o .:? "LastModified"
-        <*> o .:? "Parameters" .!= mempty
-        <*> o .:? "Role"
-        <*> o .:? "Status"
-        <*> o .:? "UUID"
diff --git a/gen/Network/AWS/Lambda/GetEventSourceMapping.hs b/gen/Network/AWS/Lambda/GetEventSourceMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/GetEventSourceMapping.hs
@@ -0,0 +1,198 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.GetEventSourceMapping
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | Returns configuration information for the specified event source mapping (see 'CreateEventSourceMapping').
+--
+-- This operation requires permission for the 'lambda:GetEventSourceMapping'
+-- action.
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_GetEventSourceMapping.html>
+module Network.AWS.Lambda.GetEventSourceMapping
+    (
+    -- * Request
+      GetEventSourceMapping
+    -- ** Request constructor
+    , getEventSourceMapping
+    -- ** Request lenses
+    , gesmUUID
+
+    -- * Response
+    , GetEventSourceMappingResponse
+    -- ** Response constructor
+    , getEventSourceMappingResponse
+    -- ** Response lenses
+    , gesmrBatchSize
+    , gesmrEventSourceArn
+    , gesmrFunctionArn
+    , gesmrLastModified
+    , gesmrLastProcessingResult
+    , gesmrState
+    , gesmrStateTransitionReason
+    , gesmrUUID
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+newtype GetEventSourceMapping = GetEventSourceMapping
+    { _gesmUUID :: Text
+    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+
+-- | 'GetEventSourceMapping' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gesmUUID' @::@ 'Text'
+--
+getEventSourceMapping :: Text -- ^ 'gesmUUID'
+                      -> GetEventSourceMapping
+getEventSourceMapping p1 = GetEventSourceMapping
+    { _gesmUUID = p1
+    }
+
+-- | The AWS Lambda assigned ID of the event source mapping.
+gesmUUID :: Lens' GetEventSourceMapping Text
+gesmUUID = lens _gesmUUID (\s a -> s { _gesmUUID = a })
+
+data GetEventSourceMappingResponse = GetEventSourceMappingResponse
+    { _gesmrBatchSize             :: Maybe Nat
+    , _gesmrEventSourceArn        :: Maybe Text
+    , _gesmrFunctionArn           :: Maybe Text
+    , _gesmrLastModified          :: Maybe POSIX
+    , _gesmrLastProcessingResult  :: Maybe Text
+    , _gesmrState                 :: Maybe Text
+    , _gesmrStateTransitionReason :: Maybe Text
+    , _gesmrUUID                  :: Maybe Text
+    } deriving (Eq, Ord, Read, Show)
+
+-- | 'GetEventSourceMappingResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gesmrBatchSize' @::@ 'Maybe' 'Natural'
+--
+-- * 'gesmrEventSourceArn' @::@ 'Maybe' 'Text'
+--
+-- * 'gesmrFunctionArn' @::@ 'Maybe' 'Text'
+--
+-- * 'gesmrLastModified' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'gesmrLastProcessingResult' @::@ 'Maybe' 'Text'
+--
+-- * 'gesmrState' @::@ 'Maybe' 'Text'
+--
+-- * 'gesmrStateTransitionReason' @::@ 'Maybe' 'Text'
+--
+-- * 'gesmrUUID' @::@ 'Maybe' 'Text'
+--
+getEventSourceMappingResponse :: GetEventSourceMappingResponse
+getEventSourceMappingResponse = GetEventSourceMappingResponse
+    { _gesmrUUID                  = Nothing
+    , _gesmrBatchSize             = Nothing
+    , _gesmrEventSourceArn        = Nothing
+    , _gesmrFunctionArn           = Nothing
+    , _gesmrLastModified          = Nothing
+    , _gesmrLastProcessingResult  = Nothing
+    , _gesmrState                 = Nothing
+    , _gesmrStateTransitionReason = Nothing
+    }
+
+-- | The largest number of records that AWS Lambda will retrieve from your event
+-- source at the time of invoking your function. Your function receives an event
+-- with all the retrieved records.
+gesmrBatchSize :: Lens' GetEventSourceMappingResponse (Maybe Natural)
+gesmrBatchSize = lens _gesmrBatchSize (\s a -> s { _gesmrBatchSize = a }) . mapping _Nat
+
+-- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
+-- source of events.
+gesmrEventSourceArn :: Lens' GetEventSourceMappingResponse (Maybe Text)
+gesmrEventSourceArn =
+    lens _gesmrEventSourceArn (\s a -> s { _gesmrEventSourceArn = a })
+
+-- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
+gesmrFunctionArn :: Lens' GetEventSourceMappingResponse (Maybe Text)
+gesmrFunctionArn = lens _gesmrFunctionArn (\s a -> s { _gesmrFunctionArn = a })
+
+-- | The UTC time string indicating the last time the event mapping was updated.
+gesmrLastModified :: Lens' GetEventSourceMappingResponse (Maybe UTCTime)
+gesmrLastModified =
+    lens _gesmrLastModified (\s a -> s { _gesmrLastModified = a })
+        . mapping _Time
+
+-- | The result of the last AWS Lambda invocation of your Lambda function.
+gesmrLastProcessingResult :: Lens' GetEventSourceMappingResponse (Maybe Text)
+gesmrLastProcessingResult =
+    lens _gesmrLastProcessingResult
+        (\s a -> s { _gesmrLastProcessingResult = a })
+
+-- | The state of the event source mapping. It can be "Creating", "Enabled",
+-- "Disabled", "Enabling", "Disabling", "Updating", or "Deleting".
+gesmrState :: Lens' GetEventSourceMappingResponse (Maybe Text)
+gesmrState = lens _gesmrState (\s a -> s { _gesmrState = a })
+
+-- | The reason the event source mapping is in its current state. It is either
+-- user-requested or an AWS Lambda-initiated state transition.
+gesmrStateTransitionReason :: Lens' GetEventSourceMappingResponse (Maybe Text)
+gesmrStateTransitionReason =
+    lens _gesmrStateTransitionReason
+        (\s a -> s { _gesmrStateTransitionReason = a })
+
+-- | The AWS Lambda assigned opaque identifier for the mapping.
+gesmrUUID :: Lens' GetEventSourceMappingResponse (Maybe Text)
+gesmrUUID = lens _gesmrUUID (\s a -> s { _gesmrUUID = a })
+
+instance ToPath GetEventSourceMapping where
+    toPath GetEventSourceMapping{..} = mconcat
+        [ "/2015-03-31/event-source-mappings/"
+        , toText _gesmUUID
+        ]
+
+instance ToQuery GetEventSourceMapping where
+    toQuery = const mempty
+
+instance ToHeaders GetEventSourceMapping
+
+instance ToJSON GetEventSourceMapping where
+    toJSON = const (toJSON Empty)
+
+instance AWSRequest GetEventSourceMapping where
+    type Sv GetEventSourceMapping = Lambda
+    type Rs GetEventSourceMapping = GetEventSourceMappingResponse
+
+    request  = get
+    response = jsonResponse
+
+instance FromJSON GetEventSourceMappingResponse where
+    parseJSON = withObject "GetEventSourceMappingResponse" $ \o -> GetEventSourceMappingResponse
+        <$> o .:? "BatchSize"
+        <*> o .:? "EventSourceArn"
+        <*> o .:? "FunctionArn"
+        <*> o .:? "LastModified"
+        <*> o .:? "LastProcessingResult"
+        <*> o .:? "State"
+        <*> o .:? "StateTransitionReason"
+        <*> o .:? "UUID"
diff --git a/gen/Network/AWS/Lambda/GetFunction.hs b/gen/Network/AWS/Lambda/GetFunction.hs
--- a/gen/Network/AWS/Lambda/GetFunction.hs
+++ b/gen/Network/AWS/Lambda/GetFunction.hs
@@ -23,7 +23,7 @@
 -- Derived from AWS service descriptions, licensed under Apache 2.0.
 
 -- | Returns the configuration information of the Lambda function and a presigned
--- URL link to the .zip file you uploaded with 'UploadFunction' so you can
+-- URL link to the .zip file you uploaded with 'CreateFunction' so you can
 -- download the .zip file. Note that the URL is valid for up to 10 minutes. The
 -- configuration information is the same information you provided as parameters
 -- when uploading the function.
@@ -49,6 +49,7 @@
     , gfrConfiguration
     ) where
 
+import Network.AWS.Data (Object)
 import Network.AWS.Prelude
 import Network.AWS.Request.RestJSON
 import Network.AWS.Lambda.Types
@@ -71,6 +72,14 @@
     }
 
 -- | The Lambda function name.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
 gfFunctionName :: Lens' GetFunction Text
 gfFunctionName = lens _gfFunctionName (\s a -> s { _gfFunctionName = a })
 
@@ -101,8 +110,9 @@
 
 instance ToPath GetFunction where
     toPath GetFunction{..} = mconcat
-        [ "/2014-11-13/functions/"
+        [ "/2015-03-31/functions/"
         , toText _gfFunctionName
+        , "/versions/HEAD"
         ]
 
 instance ToQuery GetFunction where
diff --git a/gen/Network/AWS/Lambda/GetFunctionConfiguration.hs b/gen/Network/AWS/Lambda/GetFunctionConfiguration.hs
--- a/gen/Network/AWS/Lambda/GetFunctionConfiguration.hs
+++ b/gen/Network/AWS/Lambda/GetFunctionConfiguration.hs
@@ -23,7 +23,7 @@
 -- Derived from AWS service descriptions, licensed under Apache 2.0.
 
 -- | Returns the configuration information of the Lambda function. This the same
--- information you provided as parameters when uploading the function by using 'UploadFunction'.
+-- information you provided as parameters when uploading the function by using 'CreateFunction'.
 --
 -- This operation requires permission for the 'lambda:GetFunctionConfiguration'
 -- operation.
@@ -44,19 +44,18 @@
     , getFunctionConfigurationResponse
     -- ** Response lenses
     , gfcrCodeSize
-    , gfcrConfigurationId
     , gfcrDescription
-    , gfcrFunctionARN
+    , gfcrFunctionArn
     , gfcrFunctionName
     , gfcrHandler
     , gfcrLastModified
     , gfcrMemorySize
-    , gfcrMode
     , gfcrRole
     , gfcrRuntime
     , gfcrTimeout
     ) where
 
+import Network.AWS.Data (Object)
 import Network.AWS.Prelude
 import Network.AWS.Request.RestJSON
 import Network.AWS.Lambda.Types
@@ -80,22 +79,28 @@
 
 -- | The name of the Lambda function for which you want to retrieve the
 -- configuration information.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
 gfcFunctionName :: Lens' GetFunctionConfiguration Text
 gfcFunctionName = lens _gfcFunctionName (\s a -> s { _gfcFunctionName = a })
 
 data GetFunctionConfigurationResponse = GetFunctionConfigurationResponse
-    { _gfcrCodeSize        :: Maybe Integer
-    , _gfcrConfigurationId :: Maybe Text
-    , _gfcrDescription     :: Maybe Text
-    , _gfcrFunctionARN     :: Maybe Text
-    , _gfcrFunctionName    :: Maybe Text
-    , _gfcrHandler         :: Maybe Text
-    , _gfcrLastModified    :: Maybe Text
-    , _gfcrMemorySize      :: Maybe Nat
-    , _gfcrMode            :: Maybe Mode
-    , _gfcrRole            :: Maybe Text
-    , _gfcrRuntime         :: Maybe Runtime
-    , _gfcrTimeout         :: Maybe Nat
+    { _gfcrCodeSize     :: Maybe Integer
+    , _gfcrDescription  :: Maybe Text
+    , _gfcrFunctionArn  :: Maybe Text
+    , _gfcrFunctionName :: Maybe Text
+    , _gfcrHandler      :: Maybe Text
+    , _gfcrLastModified :: Maybe Text
+    , _gfcrMemorySize   :: Maybe Nat
+    , _gfcrRole         :: Maybe Text
+    , _gfcrRuntime      :: Maybe Runtime
+    , _gfcrTimeout      :: Maybe Nat
     } deriving (Eq, Read, Show)
 
 -- | 'GetFunctionConfigurationResponse' constructor.
@@ -104,11 +109,9 @@
 --
 -- * 'gfcrCodeSize' @::@ 'Maybe' 'Integer'
 --
--- * 'gfcrConfigurationId' @::@ 'Maybe' 'Text'
---
 -- * 'gfcrDescription' @::@ 'Maybe' 'Text'
 --
--- * 'gfcrFunctionARN' @::@ 'Maybe' 'Text'
+-- * 'gfcrFunctionArn' @::@ 'Maybe' 'Text'
 --
 -- * 'gfcrFunctionName' @::@ 'Maybe' 'Text'
 --
@@ -118,8 +121,6 @@
 --
 -- * 'gfcrMemorySize' @::@ 'Maybe' 'Natural'
 --
--- * 'gfcrMode' @::@ 'Maybe' 'Mode'
---
 -- * 'gfcrRole' @::@ 'Maybe' 'Text'
 --
 -- * 'gfcrRuntime' @::@ 'Maybe' 'Runtime'
@@ -128,37 +129,29 @@
 --
 getFunctionConfigurationResponse :: GetFunctionConfigurationResponse
 getFunctionConfigurationResponse = GetFunctionConfigurationResponse
-    { _gfcrFunctionName    = Nothing
-    , _gfcrFunctionARN     = Nothing
-    , _gfcrConfigurationId = Nothing
-    , _gfcrRuntime         = Nothing
-    , _gfcrRole            = Nothing
-    , _gfcrHandler         = Nothing
-    , _gfcrMode            = Nothing
-    , _gfcrCodeSize        = Nothing
-    , _gfcrDescription     = Nothing
-    , _gfcrTimeout         = Nothing
-    , _gfcrMemorySize      = Nothing
-    , _gfcrLastModified    = Nothing
+    { _gfcrFunctionName = Nothing
+    , _gfcrFunctionArn  = Nothing
+    , _gfcrRuntime      = Nothing
+    , _gfcrRole         = Nothing
+    , _gfcrHandler      = Nothing
+    , _gfcrCodeSize     = Nothing
+    , _gfcrDescription  = Nothing
+    , _gfcrTimeout      = Nothing
+    , _gfcrMemorySize   = Nothing
+    , _gfcrLastModified = Nothing
     }
 
 -- | The size, in bytes, of the function .zip file you uploaded.
 gfcrCodeSize :: Lens' GetFunctionConfigurationResponse (Maybe Integer)
 gfcrCodeSize = lens _gfcrCodeSize (\s a -> s { _gfcrCodeSize = a })
 
--- | A Lambda-assigned unique identifier for the current function code and related
--- configuration.
-gfcrConfigurationId :: Lens' GetFunctionConfigurationResponse (Maybe Text)
-gfcrConfigurationId =
-    lens _gfcrConfigurationId (\s a -> s { _gfcrConfigurationId = a })
-
 -- | The user-provided description.
 gfcrDescription :: Lens' GetFunctionConfigurationResponse (Maybe Text)
 gfcrDescription = lens _gfcrDescription (\s a -> s { _gfcrDescription = a })
 
 -- | The Amazon Resource Name (ARN) assigned to the function.
-gfcrFunctionARN :: Lens' GetFunctionConfigurationResponse (Maybe Text)
-gfcrFunctionARN = lens _gfcrFunctionARN (\s a -> s { _gfcrFunctionARN = a })
+gfcrFunctionArn :: Lens' GetFunctionConfigurationResponse (Maybe Text)
+gfcrFunctionArn = lens _gfcrFunctionArn (\s a -> s { _gfcrFunctionArn = a })
 
 -- | The name of the function.
 gfcrFunctionName :: Lens' GetFunctionConfigurationResponse (Maybe Text)
@@ -177,10 +170,6 @@
 gfcrMemorySize :: Lens' GetFunctionConfigurationResponse (Maybe Natural)
 gfcrMemorySize = lens _gfcrMemorySize (\s a -> s { _gfcrMemorySize = a }) . mapping _Nat
 
--- | The type of the Lambda function you uploaded.
-gfcrMode :: Lens' GetFunctionConfigurationResponse (Maybe Mode)
-gfcrMode = lens _gfcrMode (\s a -> s { _gfcrMode = a })
-
 -- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
 -- executes your function to access any other Amazon Web Services (AWS)
 -- resources.
@@ -199,9 +188,9 @@
 
 instance ToPath GetFunctionConfiguration where
     toPath GetFunctionConfiguration{..} = mconcat
-        [ "/2014-11-13/functions/"
+        [ "/2015-03-31/functions/"
         , toText _gfcFunctionName
-        , "/configuration"
+        , "/versions/HEAD/configuration"
         ]
 
 instance ToQuery GetFunctionConfiguration where
@@ -222,14 +211,12 @@
 instance FromJSON GetFunctionConfigurationResponse where
     parseJSON = withObject "GetFunctionConfigurationResponse" $ \o -> GetFunctionConfigurationResponse
         <$> o .:? "CodeSize"
-        <*> o .:? "ConfigurationId"
         <*> o .:? "Description"
-        <*> o .:? "FunctionARN"
+        <*> o .:? "FunctionArn"
         <*> o .:? "FunctionName"
         <*> o .:? "Handler"
         <*> o .:? "LastModified"
         <*> o .:? "MemorySize"
-        <*> o .:? "Mode"
         <*> o .:? "Role"
         <*> o .:? "Runtime"
         <*> o .:? "Timeout"
diff --git a/gen/Network/AWS/Lambda/GetPolicy.hs b/gen/Network/AWS/Lambda/GetPolicy.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/GetPolicy.hs
@@ -0,0 +1,125 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.GetPolicy
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | Returns the access policy, containing a list of permissions granted via the 'AddPermission' API, associated with the specified bucket.
+--
+-- You need permission for the 'lambda:GetPolicy action.'
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_GetPolicy.html>
+module Network.AWS.Lambda.GetPolicy
+    (
+    -- * Request
+      GetPolicy
+    -- ** Request constructor
+    , getPolicy
+    -- ** Request lenses
+    , gpFunctionName
+
+    -- * Response
+    , GetPolicyResponse
+    -- ** Response constructor
+    , getPolicyResponse
+    -- ** Response lenses
+    , gprPolicy
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+newtype GetPolicy = GetPolicy
+    { _gpFunctionName :: Text
+    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
+
+-- | 'GetPolicy' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gpFunctionName' @::@ 'Text'
+--
+getPolicy :: Text -- ^ 'gpFunctionName'
+          -> GetPolicy
+getPolicy p1 = GetPolicy
+    { _gpFunctionName = p1
+    }
+
+-- | Function name whose access policy you want to retrieve.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
+gpFunctionName :: Lens' GetPolicy Text
+gpFunctionName = lens _gpFunctionName (\s a -> s { _gpFunctionName = a })
+
+newtype GetPolicyResponse = GetPolicyResponse
+    { _gprPolicy :: Maybe Text
+    } deriving (Eq, Ord, Read, Show, Monoid)
+
+-- | 'GetPolicyResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'gprPolicy' @::@ 'Maybe' 'Text'
+--
+getPolicyResponse :: GetPolicyResponse
+getPolicyResponse = GetPolicyResponse
+    { _gprPolicy = Nothing
+    }
+
+-- | The access policy associated with the specified function. The response
+-- returns the same as a string using "\" as an escape character in the JSON.
+gprPolicy :: Lens' GetPolicyResponse (Maybe Text)
+gprPolicy = lens _gprPolicy (\s a -> s { _gprPolicy = a })
+
+instance ToPath GetPolicy where
+    toPath GetPolicy{..} = mconcat
+        [ "/2015-03-31/functions/"
+        , toText _gpFunctionName
+        , "/versions/HEAD/policy"
+        ]
+
+instance ToQuery GetPolicy where
+    toQuery = const mempty
+
+instance ToHeaders GetPolicy
+
+instance ToJSON GetPolicy where
+    toJSON = const (toJSON Empty)
+
+instance AWSRequest GetPolicy where
+    type Sv GetPolicy = Lambda
+    type Rs GetPolicy = GetPolicyResponse
+
+    request  = get
+    response = jsonResponse
+
+instance FromJSON GetPolicyResponse where
+    parseJSON = withObject "GetPolicyResponse" $ \o -> GetPolicyResponse
+        <$> o .:? "Policy"
diff --git a/gen/Network/AWS/Lambda/Invoke.hs b/gen/Network/AWS/Lambda/Invoke.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/Invoke.hs
@@ -0,0 +1,221 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.Invoke
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | Invokes a specified Lambda function.
+--
+-- This operation requires permission for the 'lambda:Invoke' action.
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html>
+module Network.AWS.Lambda.Invoke
+    (
+    -- * Request
+      Invoke
+    -- ** Request constructor
+    , invoke
+    -- ** Request lenses
+    , iClientContext
+    , iFunctionName
+    , iInvocationType
+    , iLogType
+    , iPayload
+
+    -- * Response
+    , InvokeResponse
+    -- ** Response constructor
+    , invokeResponse
+    -- ** Response lenses
+    , irFunctionError
+    , irLogResult
+    , irPayload
+    , irStatusCode
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+data Invoke = Invoke
+    { _iClientContext  :: Maybe Text
+    , _iFunctionName   :: Text
+    , _iInvocationType :: Maybe InvocationType
+    , _iLogType        :: Maybe LogType
+    , _iPayload        :: Maybe Object
+    } deriving (Eq, Show)
+
+-- | 'Invoke' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'iClientContext' @::@ 'Maybe' 'Text'
+--
+-- * 'iFunctionName' @::@ 'Text'
+--
+-- * 'iInvocationType' @::@ 'Maybe' 'InvocationType'
+--
+-- * 'iLogType' @::@ 'Maybe' 'LogType'
+--
+-- * 'iPayload' @::@ 'Maybe' 'Object'
+--
+invoke :: Text -- ^ 'iFunctionName'
+       -> Invoke
+invoke p1 = Invoke
+    { _iFunctionName   = p1
+    , _iInvocationType = Nothing
+    , _iLogType        = Nothing
+    , _iClientContext  = Nothing
+    , _iPayload        = Nothing
+    }
+
+-- | Using the 'ClientContext' you can pass client-specific information to the
+-- Lambda function you are invoking. You can then process the client information
+-- in your Lambda function as you choose through the context variable. For an
+-- example of a ClientContext JSON, go to <http://docs.aws.amazon.com/mobileanalytics/latest/ug/PutEvents.html PutEvents> in the /Amazon MobileAnalytics API Reference and User Guide/.
+--
+-- The ClientContext JSON must be base64-encoded.
+iClientContext :: Lens' Invoke (Maybe Text)
+iClientContext = lens _iClientContext (\s a -> s { _iClientContext = a })
+
+-- | The Lambda function name.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
+iFunctionName :: Lens' Invoke Text
+iFunctionName = lens _iFunctionName (\s a -> s { _iFunctionName = a })
+
+-- | By default, the 'Invoke' API assumes "RequestResponse" invocation type. You can
+-- optionally request asynchronous execution by specifying "Event" as the 'InvocationType'. You can also use this parameter to request AWS Lambda to not execute the
+-- function but do some verification, such as if the caller is authorized to
+-- invoke the function and if the inputs are valid. You request this by
+-- specifying "DryRun" as the 'InvocationType'. This is useful in a cross-account
+-- scenario when you want to verify access to a function without running it.
+iInvocationType :: Lens' Invoke (Maybe InvocationType)
+iInvocationType = lens _iInvocationType (\s a -> s { _iInvocationType = a })
+
+-- | You can set this optional parameter to "Tail" in the request only if you
+-- specify the 'InvocationType' parameter with value "RequestResponse". In this
+-- case, AWS Lambda returns the base64-encoded last 4 KB of log data produced by
+-- your Lambda function in the 'x-amz-log-results' header.
+iLogType :: Lens' Invoke (Maybe LogType)
+iLogType = lens _iLogType (\s a -> s { _iLogType = a })
+
+-- | JSON that you want to provide to your Lambda function as input.
+iPayload :: Lens' Invoke (Maybe Object)
+iPayload = lens _iPayload (\s a -> s { _iPayload = a })
+
+data InvokeResponse = InvokeResponse
+    { _irFunctionError :: Maybe Text
+    , _irLogResult     :: Maybe Text
+    , _irPayload       :: Maybe Object
+    , _irStatusCode    :: Maybe Int
+    } deriving (Eq, Show)
+
+-- | 'InvokeResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'irFunctionError' @::@ 'Maybe' 'Text'
+--
+-- * 'irLogResult' @::@ 'Maybe' 'Text'
+--
+-- * 'irPayload' @::@ 'Maybe' 'Object'
+--
+-- * 'irStatusCode' @::@ 'Maybe' 'Int'
+--
+invokeResponse :: InvokeResponse
+invokeResponse = InvokeResponse
+    { _irStatusCode    = Nothing
+    , _irFunctionError = Nothing
+    , _irLogResult     = Nothing
+    , _irPayload       = Nothing
+    }
+
+-- | Indicates whether an error occurred while executing the Lambda function. If
+-- an error occurred this field will have one of two values; 'Handled' or 'Unhandled'
+-- . 'Handled' errors are errors that are reported by the function while the 'Unhandled' errors are those detected and reported by AWS Lambda. Unhandled errors
+-- include out of memory errors and function timeouts. For information about how
+-- to report an 'Handled' error, see <http://docs.aws.amazon.com/lambda/latest/dg/programming-model.html Programming Model>.
+irFunctionError :: Lens' InvokeResponse (Maybe Text)
+irFunctionError = lens _irFunctionError (\s a -> s { _irFunctionError = a })
+
+-- | It is the base64-encoded logs for the Lambda function invocation. This is
+-- present only if the invocation type is "RequestResponse" and the logs were
+-- requested.
+irLogResult :: Lens' InvokeResponse (Maybe Text)
+irLogResult = lens _irLogResult (\s a -> s { _irLogResult = a })
+
+-- | It is the JSON representation of the object returned by the Lambda function.
+-- In This is present only if the invocation type is "RequestResponse".
+--
+-- In the event of a function error this field contains a message describing
+-- the error. For the 'Handled' errors the Lambda function will report this
+-- message. For 'Unhandled' errors AWS Lambda reports the message.
+irPayload :: Lens' InvokeResponse (Maybe Object)
+irPayload = lens _irPayload (\s a -> s { _irPayload = a })
+
+-- | The HTTP status code will be in the 200 range for successful request. For the
+-- "RequestResonse" invocation type this status code will be 200. For the
+-- "Event" invocation type this status code will be 202. For the "DryRun"
+-- invocation type the status code will be 204.
+irStatusCode :: Lens' InvokeResponse (Maybe Int)
+irStatusCode = lens _irStatusCode (\s a -> s { _irStatusCode = a })
+
+instance ToPath Invoke where
+    toPath Invoke{..} = mconcat
+        [ "/2015-03-31/functions/"
+        , toText _iFunctionName
+        , "/invocations"
+        ]
+
+instance ToQuery Invoke where
+    toQuery = const mempty
+
+instance ToHeaders Invoke where
+    toHeaders Invoke{..} = mconcat
+        [ "X-Amz-Invocation-Type" =: _iInvocationType
+        , "X-Amz-Log-Type"        =: _iLogType
+        , "X-Amz-Client-Context"  =: _iClientContext
+        ]
+
+instance ToJSON Invoke where
+    toJSON Invoke{..} = object
+        [ "Payload" .= _iPayload
+        ]
+
+instance AWSRequest Invoke where
+    type Sv Invoke = Lambda
+    type Rs Invoke = InvokeResponse
+
+    request  = post
+    response = jsonHeaderResponse $ \h s o -> InvokeResponse
+        <$> h ~:? "X-Amz-Function-Error"
+        <*> h ~:? "X-Amz-Log-Result"
+        <*> pure (Just o)
+        <*> pure (Just s)
diff --git a/gen/Network/AWS/Lambda/InvokeAsync.hs b/gen/Network/AWS/Lambda/InvokeAsync.hs
--- a/gen/Network/AWS/Lambda/InvokeAsync.hs
+++ b/gen/Network/AWS/Lambda/InvokeAsync.hs
@@ -22,13 +22,7 @@
 --
 -- Derived from AWS service descriptions, licensed under Apache 2.0.
 
--- | Submits an invocation request to AWS Lambda. Upon receiving the request,
--- Lambda executes the specified function asynchronously. To see the logs
--- generated by the Lambda function execution, see the CloudWatch logs console.
---
--- This operation requires permission for the 'lambda:InvokeAsync' action.
---
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_InvokeAsync.html>
+-- | <http://docs.aws.amazon.com/lambda/latest/dg/API_InvokeAsync.html>
 module Network.AWS.Lambda.InvokeAsync
     (
     -- * Request
@@ -47,6 +41,7 @@
     , iarStatus
     ) where
 
+import Network.AWS.Data (Object)
 import Network.AWS.Prelude
 import Network.AWS.Request.RestJSON
 import Network.AWS.Lambda.Types
@@ -73,11 +68,9 @@
     , _iaInvokeArgs   = p2
     }
 
--- | The Lambda function name.
 iaFunctionName :: Lens' InvokeAsync Text
 iaFunctionName = lens _iaFunctionName (\s a -> s { _iaFunctionName = a })
 
--- | JSON that you want to provide to your Lambda function as input.
 iaInvokeArgs :: Lens' InvokeAsync RqBody
 iaInvokeArgs = lens _iaInvokeArgs (\s a -> s { _iaInvokeArgs = a })
 
@@ -97,7 +90,6 @@
     { _iarStatus = p1
     }
 
--- | It will be 202 upon success.
 iarStatus :: Lens' InvokeAsyncResponse Int
 iarStatus = lens _iarStatus (\s a -> s { _iarStatus = a })
 
diff --git a/gen/Network/AWS/Lambda/ListEventSourceMappings.hs b/gen/Network/AWS/Lambda/ListEventSourceMappings.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/ListEventSourceMappings.hs
@@ -0,0 +1,178 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.ListEventSourceMappings
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | Returns a list of event source mappings you created using the 'CreateEventSourceMapping' (see 'CreateEventSourceMapping'), where you identify a stream as an event
+-- source. This list does not include Amazon S3 event sources.
+--
+-- For each mapping, the API returns configuration information. You can
+-- optionally specify filters to retrieve specific event source mappings.
+--
+-- This operation requires permission for the 'lambda:ListEventSourceMappings'
+-- action.
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_ListEventSourceMappings.html>
+module Network.AWS.Lambda.ListEventSourceMappings
+    (
+    -- * Request
+      ListEventSourceMappings
+    -- ** Request constructor
+    , listEventSourceMappings
+    -- ** Request lenses
+    , lesmEventSourceArn
+    , lesmFunctionName
+    , lesmMarker
+    , lesmMaxItems
+
+    -- * Response
+    , ListEventSourceMappingsResponse
+    -- ** Response constructor
+    , listEventSourceMappingsResponse
+    -- ** Response lenses
+    , lesmrEventSourceMappings
+    , lesmrNextMarker
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+data ListEventSourceMappings = ListEventSourceMappings
+    { _lesmEventSourceArn :: Maybe Text
+    , _lesmFunctionName   :: Maybe Text
+    , _lesmMarker         :: Maybe Text
+    , _lesmMaxItems       :: Maybe Nat
+    } deriving (Eq, Ord, Read, Show)
+
+-- | 'ListEventSourceMappings' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lesmEventSourceArn' @::@ 'Maybe' 'Text'
+--
+-- * 'lesmFunctionName' @::@ 'Maybe' 'Text'
+--
+-- * 'lesmMarker' @::@ 'Maybe' 'Text'
+--
+-- * 'lesmMaxItems' @::@ 'Maybe' 'Natural'
+--
+listEventSourceMappings :: ListEventSourceMappings
+listEventSourceMappings = ListEventSourceMappings
+    { _lesmEventSourceArn = Nothing
+    , _lesmFunctionName   = Nothing
+    , _lesmMarker         = Nothing
+    , _lesmMaxItems       = Nothing
+    }
+
+-- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream.
+lesmEventSourceArn :: Lens' ListEventSourceMappings (Maybe Text)
+lesmEventSourceArn =
+    lens _lesmEventSourceArn (\s a -> s { _lesmEventSourceArn = a })
+
+-- | The name of the Lambda function.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
+lesmFunctionName :: Lens' ListEventSourceMappings (Maybe Text)
+lesmFunctionName = lens _lesmFunctionName (\s a -> s { _lesmFunctionName = a })
+
+-- | Optional string. An opaque pagination token returned from a previous 'ListEventSourceMappings' operation. If present, specifies to continue the list from where the
+-- returning call left off.
+lesmMarker :: Lens' ListEventSourceMappings (Maybe Text)
+lesmMarker = lens _lesmMarker (\s a -> s { _lesmMarker = a })
+
+-- | Optional integer. Specifies the maximum number of event sources to return in
+-- response. This value must be greater than 0.
+lesmMaxItems :: Lens' ListEventSourceMappings (Maybe Natural)
+lesmMaxItems = lens _lesmMaxItems (\s a -> s { _lesmMaxItems = a }) . mapping _Nat
+
+data ListEventSourceMappingsResponse = ListEventSourceMappingsResponse
+    { _lesmrEventSourceMappings :: List "EventSourceMappings" EventSourceMappingConfiguration
+    , _lesmrNextMarker          :: Maybe Text
+    } deriving (Eq, Read, Show)
+
+-- | 'ListEventSourceMappingsResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'lesmrEventSourceMappings' @::@ ['EventSourceMappingConfiguration']
+--
+-- * 'lesmrNextMarker' @::@ 'Maybe' 'Text'
+--
+listEventSourceMappingsResponse :: ListEventSourceMappingsResponse
+listEventSourceMappingsResponse = ListEventSourceMappingsResponse
+    { _lesmrNextMarker          = Nothing
+    , _lesmrEventSourceMappings = mempty
+    }
+
+-- | An arrary of 'EventSourceMappingConfiguration' objects.
+lesmrEventSourceMappings :: Lens' ListEventSourceMappingsResponse [EventSourceMappingConfiguration]
+lesmrEventSourceMappings =
+    lens _lesmrEventSourceMappings
+        (\s a -> s { _lesmrEventSourceMappings = a })
+            . _List
+
+-- | A string, present if there are more event source mappings.
+lesmrNextMarker :: Lens' ListEventSourceMappingsResponse (Maybe Text)
+lesmrNextMarker = lens _lesmrNextMarker (\s a -> s { _lesmrNextMarker = a })
+
+instance ToPath ListEventSourceMappings where
+    toPath = const "/2015-03-31/event-source-mappings/"
+
+instance ToQuery ListEventSourceMappings where
+    toQuery ListEventSourceMappings{..} = mconcat
+        [ "EventSourceArn" =? _lesmEventSourceArn
+        , "FunctionName"   =? _lesmFunctionName
+        , "Marker"         =? _lesmMarker
+        , "MaxItems"       =? _lesmMaxItems
+        ]
+
+instance ToHeaders ListEventSourceMappings
+
+instance ToJSON ListEventSourceMappings where
+    toJSON = const (toJSON Empty)
+
+instance AWSRequest ListEventSourceMappings where
+    type Sv ListEventSourceMappings = Lambda
+    type Rs ListEventSourceMappings = ListEventSourceMappingsResponse
+
+    request  = get
+    response = jsonResponse
+
+instance FromJSON ListEventSourceMappingsResponse where
+    parseJSON = withObject "ListEventSourceMappingsResponse" $ \o -> ListEventSourceMappingsResponse
+        <$> o .:? "EventSourceMappings" .!= mempty
+        <*> o .:? "NextMarker"
+
+instance AWSPager ListEventSourceMappings where
+    page rq rs
+        | stop (rs ^. lesmrNextMarker) = Nothing
+        | otherwise = (\x -> rq & lesmMarker ?~ x)
+            <$> (rs ^. lesmrNextMarker)
diff --git a/gen/Network/AWS/Lambda/ListEventSources.hs b/gen/Network/AWS/Lambda/ListEventSources.hs
deleted file mode 100644
--- a/gen/Network/AWS/Lambda/ListEventSources.hs
+++ /dev/null
@@ -1,160 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.Lambda.ListEventSources
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Returns a list of event source mappings you created using the 'AddEventSource'
--- (see 'AddEventSource'), where you identify a stream as event source. This list
--- does not include Amazon S3 event sources.
---
--- For each mapping, the API returns configuration information. You can
--- optionally specify filters to retrieve specific event source mappings.
---
--- This operation requires permission for the 'lambda:ListEventSources' action.
---
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_ListEventSources.html>
-module Network.AWS.Lambda.ListEventSources
-    (
-    -- * Request
-      ListEventSources
-    -- ** Request constructor
-    , listEventSources
-    -- ** Request lenses
-    , lesEventSourceArn
-    , lesFunctionName
-    , lesMarker
-    , lesMaxItems
-
-    -- * Response
-    , ListEventSourcesResponse
-    -- ** Response constructor
-    , listEventSourcesResponse
-    -- ** Response lenses
-    , lesrEventSources
-    , lesrNextMarker
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
-
-data ListEventSources = ListEventSources
-    { _lesEventSourceArn :: Maybe Text
-    , _lesFunctionName   :: Maybe Text
-    , _lesMarker         :: Maybe Text
-    , _lesMaxItems       :: Maybe Nat
-    } deriving (Eq, Ord, Read, Show)
-
--- | 'ListEventSources' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lesEventSourceArn' @::@ 'Maybe' 'Text'
---
--- * 'lesFunctionName' @::@ 'Maybe' 'Text'
---
--- * 'lesMarker' @::@ 'Maybe' 'Text'
---
--- * 'lesMaxItems' @::@ 'Maybe' 'Natural'
---
-listEventSources :: ListEventSources
-listEventSources = ListEventSources
-    { _lesEventSourceArn = Nothing
-    , _lesFunctionName   = Nothing
-    , _lesMarker         = Nothing
-    , _lesMaxItems       = Nothing
-    }
-
--- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream.
-lesEventSourceArn :: Lens' ListEventSources (Maybe Text)
-lesEventSourceArn =
-    lens _lesEventSourceArn (\s a -> s { _lesEventSourceArn = a })
-
--- | The name of the AWS Lambda function.
-lesFunctionName :: Lens' ListEventSources (Maybe Text)
-lesFunctionName = lens _lesFunctionName (\s a -> s { _lesFunctionName = a })
-
--- | Optional string. An opaque pagination token returned from a previous 'ListEventSources' operation. If present, specifies to continue the list from where the
--- returning call left off.
-lesMarker :: Lens' ListEventSources (Maybe Text)
-lesMarker = lens _lesMarker (\s a -> s { _lesMarker = a })
-
--- | Optional integer. Specifies the maximum number of event sources to return in
--- response. This value must be greater than 0.
-lesMaxItems :: Lens' ListEventSources (Maybe Natural)
-lesMaxItems = lens _lesMaxItems (\s a -> s { _lesMaxItems = a }) . mapping _Nat
-
-data ListEventSourcesResponse = ListEventSourcesResponse
-    { _lesrEventSources :: List "EventSources" EventSourceConfiguration
-    , _lesrNextMarker   :: Maybe Text
-    } deriving (Eq, Read, Show)
-
--- | 'ListEventSourcesResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'lesrEventSources' @::@ ['EventSourceConfiguration']
---
--- * 'lesrNextMarker' @::@ 'Maybe' 'Text'
---
-listEventSourcesResponse :: ListEventSourcesResponse
-listEventSourcesResponse = ListEventSourcesResponse
-    { _lesrNextMarker   = Nothing
-    , _lesrEventSources = mempty
-    }
-
--- | An arrary of 'EventSourceConfiguration' objects.
-lesrEventSources :: Lens' ListEventSourcesResponse [EventSourceConfiguration]
-lesrEventSources = lens _lesrEventSources (\s a -> s { _lesrEventSources = a }) . _List
-
--- | A string, present if there are more event source mappings.
-lesrNextMarker :: Lens' ListEventSourcesResponse (Maybe Text)
-lesrNextMarker = lens _lesrNextMarker (\s a -> s { _lesrNextMarker = a })
-
-instance ToPath ListEventSources where
-    toPath = const "/2014-11-13/event-source-mappings/"
-
-instance ToQuery ListEventSources where
-    toQuery ListEventSources{..} = mconcat
-        [ "EventSource"  =? _lesEventSourceArn
-        , "FunctionName" =? _lesFunctionName
-        , "Marker"       =? _lesMarker
-        , "MaxItems"     =? _lesMaxItems
-        ]
-
-instance ToHeaders ListEventSources
-
-instance ToJSON ListEventSources where
-    toJSON = const (toJSON Empty)
-
-instance AWSRequest ListEventSources where
-    type Sv ListEventSources = Lambda
-    type Rs ListEventSources = ListEventSourcesResponse
-
-    request  = get
-    response = jsonResponse
-
-instance FromJSON ListEventSourcesResponse where
-    parseJSON = withObject "ListEventSourcesResponse" $ \o -> ListEventSourcesResponse
-        <$> o .:? "EventSources" .!= mempty
-        <*> o .:? "NextMarker"
diff --git a/gen/Network/AWS/Lambda/ListFunctions.hs b/gen/Network/AWS/Lambda/ListFunctions.hs
--- a/gen/Network/AWS/Lambda/ListFunctions.hs
+++ b/gen/Network/AWS/Lambda/ListFunctions.hs
@@ -48,6 +48,7 @@
     , lfrNextMarker
     ) where
 
+import Network.AWS.Data (Object)
 import Network.AWS.Prelude
 import Network.AWS.Request.RestJSON
 import Network.AWS.Lambda.Types
@@ -109,7 +110,7 @@
 lfrNextMarker = lens _lfrNextMarker (\s a -> s { _lfrNextMarker = a })
 
 instance ToPath ListFunctions where
-    toPath = const "/2014-11-13/functions/"
+    toPath = const "/2015-03-31/functions/"
 
 instance ToQuery ListFunctions where
     toQuery ListFunctions{..} = mconcat
@@ -133,3 +134,9 @@
     parseJSON = withObject "ListFunctionsResponse" $ \o -> ListFunctionsResponse
         <$> o .:? "Functions" .!= mempty
         <*> o .:? "NextMarker"
+
+instance AWSPager ListFunctions where
+    page rq rs
+        | stop (rs ^. lfrNextMarker) = Nothing
+        | otherwise = (\x -> rq & lfMarker ?~ x)
+            <$> (rs ^. lfrNextMarker)
diff --git a/gen/Network/AWS/Lambda/RemoveEventSource.hs b/gen/Network/AWS/Lambda/RemoveEventSource.hs
deleted file mode 100644
--- a/gen/Network/AWS/Lambda/RemoveEventSource.hs
+++ /dev/null
@@ -1,97 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.Lambda.RemoveEventSource
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Removes an event source mapping. This means AWS Lambda will no longer invoke
--- the function for events in the associated source.
---
--- This operation requires permission for the 'lambda:RemoveEventSource' action.
---
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_RemoveEventSource.html>
-module Network.AWS.Lambda.RemoveEventSource
-    (
-    -- * Request
-      RemoveEventSource
-    -- ** Request constructor
-    , removeEventSource
-    -- ** Request lenses
-    , resUUID
-
-    -- * Response
-    , RemoveEventSourceResponse
-    -- ** Response constructor
-    , removeEventSourceResponse
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
-
-newtype RemoveEventSource = RemoveEventSource
-    { _resUUID :: Text
-    } deriving (Eq, Ord, Read, Show, Monoid, IsString)
-
--- | 'RemoveEventSource' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'resUUID' @::@ 'Text'
---
-removeEventSource :: Text -- ^ 'resUUID'
-                  -> RemoveEventSource
-removeEventSource p1 = RemoveEventSource
-    { _resUUID = p1
-    }
-
--- | The event source mapping ID.
-resUUID :: Lens' RemoveEventSource Text
-resUUID = lens _resUUID (\s a -> s { _resUUID = a })
-
-data RemoveEventSourceResponse = RemoveEventSourceResponse
-    deriving (Eq, Ord, Read, Show, Generic)
-
--- | 'RemoveEventSourceResponse' constructor.
-removeEventSourceResponse :: RemoveEventSourceResponse
-removeEventSourceResponse = RemoveEventSourceResponse
-
-instance ToPath RemoveEventSource where
-    toPath RemoveEventSource{..} = mconcat
-        [ "/2014-11-13/event-source-mappings/"
-        , toText _resUUID
-        ]
-
-instance ToQuery RemoveEventSource where
-    toQuery = const mempty
-
-instance ToHeaders RemoveEventSource
-
-instance ToJSON RemoveEventSource where
-    toJSON = const (toJSON Empty)
-
-instance AWSRequest RemoveEventSource where
-    type Sv RemoveEventSource = Lambda
-    type Rs RemoveEventSource = RemoveEventSourceResponse
-
-    request  = delete
-    response = nullResponse RemoveEventSourceResponse
diff --git a/gen/Network/AWS/Lambda/RemovePermission.hs b/gen/Network/AWS/Lambda/RemovePermission.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/RemovePermission.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.RemovePermission
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | You can remove individual permissions from an access policy associated with a
+-- Lambda function by providing a Statement ID.
+--
+-- Note that removal of a permission will cause an active event source to lose
+-- permission to the function.
+--
+-- You need permission for the 'lambda:RemovePermission' action.
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_RemovePermission.html>
+module Network.AWS.Lambda.RemovePermission
+    (
+    -- * Request
+      RemovePermission
+    -- ** Request constructor
+    , removePermission
+    -- ** Request lenses
+    , rpFunctionName
+    , rpStatementId
+
+    -- * Response
+    , RemovePermissionResponse
+    -- ** Response constructor
+    , removePermissionResponse
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+data RemovePermission = RemovePermission
+    { _rpFunctionName :: Text
+    , _rpStatementId  :: Text
+    } deriving (Eq, Ord, Read, Show)
+
+-- | 'RemovePermission' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'rpFunctionName' @::@ 'Text'
+--
+-- * 'rpStatementId' @::@ 'Text'
+--
+removePermission :: Text -- ^ 'rpFunctionName'
+                 -> Text -- ^ 'rpStatementId'
+                 -> RemovePermission
+removePermission p1 p2 = RemovePermission
+    { _rpFunctionName = p1
+    , _rpStatementId  = p2
+    }
+
+-- | Lambda function whose access policy you want to remove a permission from.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
+rpFunctionName :: Lens' RemovePermission Text
+rpFunctionName = lens _rpFunctionName (\s a -> s { _rpFunctionName = a })
+
+-- | Statement ID of the permission to remove.
+rpStatementId :: Lens' RemovePermission Text
+rpStatementId = lens _rpStatementId (\s a -> s { _rpStatementId = a })
+
+data RemovePermissionResponse = RemovePermissionResponse
+    deriving (Eq, Ord, Read, Show, Generic)
+
+-- | 'RemovePermissionResponse' constructor.
+removePermissionResponse :: RemovePermissionResponse
+removePermissionResponse = RemovePermissionResponse
+
+instance ToPath RemovePermission where
+    toPath RemovePermission{..} = mconcat
+        [ "/2015-03-31/functions/"
+        , toText _rpFunctionName
+        , "/versions/HEAD/policy/"
+        , toText _rpStatementId
+        ]
+
+instance ToQuery RemovePermission where
+    toQuery = const mempty
+
+instance ToHeaders RemovePermission
+
+instance ToJSON RemovePermission where
+    toJSON = const (toJSON Empty)
+
+instance AWSRequest RemovePermission where
+    type Sv RemovePermission = Lambda
+    type Rs RemovePermission = RemovePermissionResponse
+
+    request  = delete
+    response = nullResponse RemovePermissionResponse
diff --git a/gen/Network/AWS/Lambda/Types.hs b/gen/Network/AWS/Lambda/Types.hs
--- a/gen/Network/AWS/Lambda/Types.hs
+++ b/gen/Network/AWS/Lambda/Types.hs
@@ -33,9 +33,20 @@
     -- * Runtime
     , Runtime (..)
 
-    -- * Mode
-    , Mode (..)
+    -- * EventSourcePosition
+    , EventSourcePosition (..)
 
+    -- * InvocationType
+    , InvocationType (..)
+
+    -- * LogType
+    , LogType (..)
+
+    -- * FunctionCode
+    , FunctionCode
+    , functionCode
+    , fcZipFile
+
     -- * FunctionCodeLocation
     , FunctionCodeLocation
     , functionCodeLocation
@@ -46,37 +57,34 @@
     , FunctionConfiguration
     , functionConfiguration
     , fcCodeSize
-    , fcConfigurationId
     , fcDescription
-    , fcFunctionARN
+    , fcFunctionArn
     , fcFunctionName
     , fcHandler
     , fcLastModified
     , fcMemorySize
-    , fcMode
     , fcRole
     , fcRuntime
     , fcTimeout
 
-    -- * EventSourceConfiguration
-    , EventSourceConfiguration
-    , eventSourceConfiguration
-    , escBatchSize
-    , escEventSource
-    , escFunctionName
-    , escIsActive
-    , escLastModified
-    , escParameters
-    , escRole
-    , escStatus
-    , escUUID
+    -- * EventSourceMappingConfiguration
+    , EventSourceMappingConfiguration
+    , eventSourceMappingConfiguration
+    , esmcBatchSize
+    , esmcEventSourceArn
+    , esmcFunctionArn
+    , esmcLastModified
+    , esmcLastProcessingResult
+    , esmcState
+    , esmcStateTransitionReason
+    , esmcUUID
     ) where
 
 import Network.AWS.Prelude
 import Network.AWS.Signing
 import qualified GHC.Exts
 
--- | Version @2014-11-11@ of the Amazon Lambda service.
+-- | Version @2015-03-31@ of the Amazon Lambda service.
 data Lambda
 
 instance AWSService Lambda where
@@ -89,7 +97,7 @@
         service' = Service
             { _svcAbbrev       = "Lambda"
             , _svcPrefix       = "lambda"
-            , _svcVersion      = "2014-11-11"
+            , _svcVersion      = "2015-03-31"
             , _svcTargetPrefix = Nothing
             , _svcJSONVersion  = Nothing
             , _svcHandle       = handle
@@ -118,19 +126,26 @@
             | otherwise = False
 
 data Runtime
-    = Nodejs -- ^ nodejs
+    = Jvm    -- ^ jvm
+    | Nodejs -- ^ nodejs
+    | Python -- ^ python
       deriving (Eq, Ord, Read, Show, Generic, Enum)
 
 instance Hashable Runtime
 
 instance FromText Runtime where
     parser = takeLowerText >>= \case
+        "jvm"    -> pure Jvm
         "nodejs" -> pure Nodejs
+        "python" -> pure Python
         e        -> fail $
             "Failure parsing Runtime from " ++ show e
 
 instance ToText Runtime where
-    toText Nodejs = "nodejs"
+    toText = \case
+        Jvm    -> "jvm"
+        Nodejs -> "nodejs"
+        Python -> "python"
 
 instance ToByteString Runtime
 instance ToHeader     Runtime
@@ -142,31 +157,125 @@
 instance ToJSON Runtime where
     toJSON = toJSONText
 
-data Mode
-    = Event -- ^ event
+data EventSourcePosition
+    = Latest      -- ^ LATEST
+    | TrimHorizon -- ^ TRIM_HORIZON
       deriving (Eq, Ord, Read, Show, Generic, Enum)
 
-instance Hashable Mode
+instance Hashable EventSourcePosition
 
-instance FromText Mode where
+instance FromText EventSourcePosition where
     parser = takeLowerText >>= \case
-        "event" -> pure Event
-        e       -> fail $
-            "Failure parsing Mode from " ++ show e
+        "latest"       -> pure Latest
+        "trim_horizon" -> pure TrimHorizon
+        e              -> fail $
+            "Failure parsing EventSourcePosition from " ++ show e
 
-instance ToText Mode where
-    toText Event = "event"
+instance ToText EventSourcePosition where
+    toText = \case
+        Latest      -> "LATEST"
+        TrimHorizon -> "TRIM_HORIZON"
 
-instance ToByteString Mode
-instance ToHeader     Mode
-instance ToQuery      Mode
+instance ToByteString EventSourcePosition
+instance ToHeader     EventSourcePosition
+instance ToQuery      EventSourcePosition
 
-instance FromJSON Mode where
-    parseJSON = parseJSONText "Mode"
+instance FromJSON EventSourcePosition where
+    parseJSON = parseJSONText "EventSourcePosition"
 
-instance ToJSON Mode where
+instance ToJSON EventSourcePosition where
     toJSON = toJSONText
 
+data InvocationType
+    = DryRun          -- ^ DryRun
+    | Event           -- ^ Event
+    | RequestResponse -- ^ RequestResponse
+      deriving (Eq, Ord, Read, Show, Generic, Enum)
+
+instance Hashable InvocationType
+
+instance FromText InvocationType where
+    parser = takeLowerText >>= \case
+        "dryrun"          -> pure DryRun
+        "event"           -> pure Event
+        "requestresponse" -> pure RequestResponse
+        e                 -> fail $
+            "Failure parsing InvocationType from " ++ show e
+
+instance ToText InvocationType where
+    toText = \case
+        DryRun          -> "DryRun"
+        Event           -> "Event"
+        RequestResponse -> "RequestResponse"
+
+instance ToByteString InvocationType
+instance ToHeader     InvocationType
+instance ToQuery      InvocationType
+
+instance FromJSON InvocationType where
+    parseJSON = parseJSONText "InvocationType"
+
+instance ToJSON InvocationType where
+    toJSON = toJSONText
+
+data LogType
+    = None  -- ^ None
+    | Tail' -- ^ Tail
+      deriving (Eq, Ord, Read, Show, Generic, Enum)
+
+instance Hashable LogType
+
+instance FromText LogType where
+    parser = takeLowerText >>= \case
+        "none" -> pure None
+        "tail" -> pure Tail'
+        e      -> fail $
+            "Failure parsing LogType from " ++ show e
+
+instance ToText LogType where
+    toText = \case
+        None  -> "None"
+        Tail' -> "Tail"
+
+instance ToByteString LogType
+instance ToHeader     LogType
+instance ToQuery      LogType
+
+instance FromJSON LogType where
+    parseJSON = parseJSONText "LogType"
+
+instance ToJSON LogType where
+    toJSON = toJSONText
+
+newtype FunctionCode = FunctionCode
+    { _fcZipFile :: Maybe Base64
+    } deriving (Eq, Read, Show)
+
+-- | 'FunctionCode' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'fcZipFile' @::@ 'Maybe' 'Base64'
+--
+functionCode :: FunctionCode
+functionCode = FunctionCode
+    { _fcZipFile = Nothing
+    }
+
+-- | A base64-encoded .zip file containing your packaged source code. For more
+-- information about creating a .zip file, go to <http://http://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#lambda-intro-execution-role.html Execution Permissions> in the /AWS Lambda Developer Guide/.
+fcZipFile :: Lens' FunctionCode (Maybe Base64)
+fcZipFile = lens _fcZipFile (\s a -> s { _fcZipFile = a })
+
+instance FromJSON FunctionCode where
+    parseJSON = withObject "FunctionCode" $ \o -> FunctionCode
+        <$> o .:? "ZipFile"
+
+instance ToJSON FunctionCode where
+    toJSON FunctionCode{..} = object
+        [ "ZipFile" .= _fcZipFile
+        ]
+
 data FunctionCodeLocation = FunctionCodeLocation
     { _fclLocation       :: Maybe Text
     , _fclRepositoryType :: Maybe Text
@@ -208,18 +317,16 @@
         ]
 
 data FunctionConfiguration = FunctionConfiguration
-    { _fcCodeSize        :: Maybe Integer
-    , _fcConfigurationId :: Maybe Text
-    , _fcDescription     :: Maybe Text
-    , _fcFunctionARN     :: Maybe Text
-    , _fcFunctionName    :: Maybe Text
-    , _fcHandler         :: Maybe Text
-    , _fcLastModified    :: Maybe Text
-    , _fcMemorySize      :: Maybe Nat
-    , _fcMode            :: Maybe Mode
-    , _fcRole            :: Maybe Text
-    , _fcRuntime         :: Maybe Runtime
-    , _fcTimeout         :: Maybe Nat
+    { _fcCodeSize     :: Maybe Integer
+    , _fcDescription  :: Maybe Text
+    , _fcFunctionArn  :: Maybe Text
+    , _fcFunctionName :: Maybe Text
+    , _fcHandler      :: Maybe Text
+    , _fcLastModified :: Maybe Text
+    , _fcMemorySize   :: Maybe Nat
+    , _fcRole         :: Maybe Text
+    , _fcRuntime      :: Maybe Runtime
+    , _fcTimeout      :: Maybe Nat
     } deriving (Eq, Read, Show)
 
 -- | 'FunctionConfiguration' constructor.
@@ -228,11 +335,9 @@
 --
 -- * 'fcCodeSize' @::@ 'Maybe' 'Integer'
 --
--- * 'fcConfigurationId' @::@ 'Maybe' 'Text'
---
 -- * 'fcDescription' @::@ 'Maybe' 'Text'
 --
--- * 'fcFunctionARN' @::@ 'Maybe' 'Text'
+-- * 'fcFunctionArn' @::@ 'Maybe' 'Text'
 --
 -- * 'fcFunctionName' @::@ 'Maybe' 'Text'
 --
@@ -242,8 +347,6 @@
 --
 -- * 'fcMemorySize' @::@ 'Maybe' 'Natural'
 --
--- * 'fcMode' @::@ 'Maybe' 'Mode'
---
 -- * 'fcRole' @::@ 'Maybe' 'Text'
 --
 -- * 'fcRuntime' @::@ 'Maybe' 'Runtime'
@@ -252,37 +355,29 @@
 --
 functionConfiguration :: FunctionConfiguration
 functionConfiguration = FunctionConfiguration
-    { _fcFunctionName    = Nothing
-    , _fcFunctionARN     = Nothing
-    , _fcConfigurationId = Nothing
-    , _fcRuntime         = Nothing
-    , _fcRole            = Nothing
-    , _fcHandler         = Nothing
-    , _fcMode            = Nothing
-    , _fcCodeSize        = Nothing
-    , _fcDescription     = Nothing
-    , _fcTimeout         = Nothing
-    , _fcMemorySize      = Nothing
-    , _fcLastModified    = Nothing
+    { _fcFunctionName = Nothing
+    , _fcFunctionArn  = Nothing
+    , _fcRuntime      = Nothing
+    , _fcRole         = Nothing
+    , _fcHandler      = Nothing
+    , _fcCodeSize     = Nothing
+    , _fcDescription  = Nothing
+    , _fcTimeout      = Nothing
+    , _fcMemorySize   = Nothing
+    , _fcLastModified = Nothing
     }
 
 -- | The size, in bytes, of the function .zip file you uploaded.
 fcCodeSize :: Lens' FunctionConfiguration (Maybe Integer)
 fcCodeSize = lens _fcCodeSize (\s a -> s { _fcCodeSize = a })
 
--- | A Lambda-assigned unique identifier for the current function code and related
--- configuration.
-fcConfigurationId :: Lens' FunctionConfiguration (Maybe Text)
-fcConfigurationId =
-    lens _fcConfigurationId (\s a -> s { _fcConfigurationId = a })
-
 -- | The user-provided description.
 fcDescription :: Lens' FunctionConfiguration (Maybe Text)
 fcDescription = lens _fcDescription (\s a -> s { _fcDescription = a })
 
 -- | The Amazon Resource Name (ARN) assigned to the function.
-fcFunctionARN :: Lens' FunctionConfiguration (Maybe Text)
-fcFunctionARN = lens _fcFunctionARN (\s a -> s { _fcFunctionARN = a })
+fcFunctionArn :: Lens' FunctionConfiguration (Maybe Text)
+fcFunctionArn = lens _fcFunctionArn (\s a -> s { _fcFunctionArn = a })
 
 -- | The name of the function.
 fcFunctionName :: Lens' FunctionConfiguration (Maybe Text)
@@ -301,10 +396,6 @@
 fcMemorySize :: Lens' FunctionConfiguration (Maybe Natural)
 fcMemorySize = lens _fcMemorySize (\s a -> s { _fcMemorySize = a }) . mapping _Nat
 
--- | The type of the Lambda function you uploaded.
-fcMode :: Lens' FunctionConfiguration (Maybe Mode)
-fcMode = lens _fcMode (\s a -> s { _fcMode = a })
-
 -- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
 -- executes your function to access any other Amazon Web Services (AWS)
 -- resources.
@@ -324,145 +415,134 @@
 instance FromJSON FunctionConfiguration where
     parseJSON = withObject "FunctionConfiguration" $ \o -> FunctionConfiguration
         <$> o .:? "CodeSize"
-        <*> o .:? "ConfigurationId"
         <*> o .:? "Description"
-        <*> o .:? "FunctionARN"
+        <*> o .:? "FunctionArn"
         <*> o .:? "FunctionName"
         <*> o .:? "Handler"
         <*> o .:? "LastModified"
         <*> o .:? "MemorySize"
-        <*> o .:? "Mode"
         <*> o .:? "Role"
         <*> o .:? "Runtime"
         <*> o .:? "Timeout"
 
 instance ToJSON FunctionConfiguration where
     toJSON FunctionConfiguration{..} = object
-        [ "FunctionName"    .= _fcFunctionName
-        , "FunctionARN"     .= _fcFunctionARN
-        , "ConfigurationId" .= _fcConfigurationId
-        , "Runtime"         .= _fcRuntime
-        , "Role"            .= _fcRole
-        , "Handler"         .= _fcHandler
-        , "Mode"            .= _fcMode
-        , "CodeSize"        .= _fcCodeSize
-        , "Description"     .= _fcDescription
-        , "Timeout"         .= _fcTimeout
-        , "MemorySize"      .= _fcMemorySize
-        , "LastModified"    .= _fcLastModified
+        [ "FunctionName" .= _fcFunctionName
+        , "FunctionArn"  .= _fcFunctionArn
+        , "Runtime"      .= _fcRuntime
+        , "Role"         .= _fcRole
+        , "Handler"      .= _fcHandler
+        , "CodeSize"     .= _fcCodeSize
+        , "Description"  .= _fcDescription
+        , "Timeout"      .= _fcTimeout
+        , "MemorySize"   .= _fcMemorySize
+        , "LastModified" .= _fcLastModified
         ]
 
-data EventSourceConfiguration = EventSourceConfiguration
-    { _escBatchSize    :: Maybe Int
-    , _escEventSource  :: Maybe Text
-    , _escFunctionName :: Maybe Text
-    , _escIsActive     :: Maybe Bool
-    , _escLastModified :: Maybe Text
-    , _escParameters   :: Map Text Text
-    , _escRole         :: Maybe Text
-    , _escStatus       :: Maybe Text
-    , _escUUID         :: Maybe Text
-    } deriving (Eq, Read, Show)
+data EventSourceMappingConfiguration = EventSourceMappingConfiguration
+    { _esmcBatchSize             :: Maybe Nat
+    , _esmcEventSourceArn        :: Maybe Text
+    , _esmcFunctionArn           :: Maybe Text
+    , _esmcLastModified          :: Maybe POSIX
+    , _esmcLastProcessingResult  :: Maybe Text
+    , _esmcState                 :: Maybe Text
+    , _esmcStateTransitionReason :: Maybe Text
+    , _esmcUUID                  :: Maybe Text
+    } deriving (Eq, Ord, Read, Show)
 
--- | 'EventSourceConfiguration' constructor.
+-- | 'EventSourceMappingConfiguration' constructor.
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'escBatchSize' @::@ 'Maybe' 'Int'
---
--- * 'escEventSource' @::@ 'Maybe' 'Text'
+-- * 'esmcBatchSize' @::@ 'Maybe' 'Natural'
 --
--- * 'escFunctionName' @::@ 'Maybe' 'Text'
+-- * 'esmcEventSourceArn' @::@ 'Maybe' 'Text'
 --
--- * 'escIsActive' @::@ 'Maybe' 'Bool'
+-- * 'esmcFunctionArn' @::@ 'Maybe' 'Text'
 --
--- * 'escLastModified' @::@ 'Maybe' 'Text'
+-- * 'esmcLastModified' @::@ 'Maybe' 'UTCTime'
 --
--- * 'escParameters' @::@ 'HashMap' 'Text' 'Text'
+-- * 'esmcLastProcessingResult' @::@ 'Maybe' 'Text'
 --
--- * 'escRole' @::@ 'Maybe' 'Text'
+-- * 'esmcState' @::@ 'Maybe' 'Text'
 --
--- * 'escStatus' @::@ 'Maybe' 'Text'
+-- * 'esmcStateTransitionReason' @::@ 'Maybe' 'Text'
 --
--- * 'escUUID' @::@ 'Maybe' 'Text'
+-- * 'esmcUUID' @::@ 'Maybe' 'Text'
 --
-eventSourceConfiguration :: EventSourceConfiguration
-eventSourceConfiguration = EventSourceConfiguration
-    { _escUUID         = Nothing
-    , _escBatchSize    = Nothing
-    , _escEventSource  = Nothing
-    , _escFunctionName = Nothing
-    , _escParameters   = mempty
-    , _escRole         = Nothing
-    , _escLastModified = Nothing
-    , _escIsActive     = Nothing
-    , _escStatus       = Nothing
+eventSourceMappingConfiguration :: EventSourceMappingConfiguration
+eventSourceMappingConfiguration = EventSourceMappingConfiguration
+    { _esmcUUID                  = Nothing
+    , _esmcBatchSize             = Nothing
+    , _esmcEventSourceArn        = Nothing
+    , _esmcFunctionArn           = Nothing
+    , _esmcLastModified          = Nothing
+    , _esmcLastProcessingResult  = Nothing
+    , _esmcState                 = Nothing
+    , _esmcStateTransitionReason = Nothing
     }
 
--- | The largest number of records that AWS Lambda will POST in the invocation
--- request to your function.
-escBatchSize :: Lens' EventSourceConfiguration (Maybe Int)
-escBatchSize = lens _escBatchSize (\s a -> s { _escBatchSize = a })
+-- | The largest number of records that AWS Lambda will retrieve from your event
+-- source at the time of invoking your function. Your function receives an event
+-- with all the retrieved records.
+esmcBatchSize :: Lens' EventSourceMappingConfiguration (Maybe Natural)
+esmcBatchSize = lens _esmcBatchSize (\s a -> s { _esmcBatchSize = a }) . mapping _Nat
 
 -- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
 -- source of events.
-escEventSource :: Lens' EventSourceConfiguration (Maybe Text)
-escEventSource = lens _escEventSource (\s a -> s { _escEventSource = a })
+esmcEventSourceArn :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcEventSourceArn =
+    lens _esmcEventSourceArn (\s a -> s { _esmcEventSourceArn = a })
 
 -- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
-escFunctionName :: Lens' EventSourceConfiguration (Maybe Text)
-escFunctionName = lens _escFunctionName (\s a -> s { _escFunctionName = a })
-
--- | Indicates whether the event source mapping is currently honored. Events are
--- only processes if IsActive is true.
-escIsActive :: Lens' EventSourceConfiguration (Maybe Bool)
-escIsActive = lens _escIsActive (\s a -> s { _escIsActive = a })
+esmcFunctionArn :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcFunctionArn = lens _esmcFunctionArn (\s a -> s { _esmcFunctionArn = a })
 
 -- | The UTC time string indicating the last time the event mapping was updated.
-escLastModified :: Lens' EventSourceConfiguration (Maybe Text)
-escLastModified = lens _escLastModified (\s a -> s { _escLastModified = a })
+esmcLastModified :: Lens' EventSourceMappingConfiguration (Maybe UTCTime)
+esmcLastModified = lens _esmcLastModified (\s a -> s { _esmcLastModified = a }) . mapping _Time
 
--- | The map (key-value pairs) defining the configuration for AWS Lambda to use
--- when reading the event source.
-escParameters :: Lens' EventSourceConfiguration (HashMap Text Text)
-escParameters = lens _escParameters (\s a -> s { _escParameters = a }) . _Map
+-- | The result of the last AWS Lambda invocation of your Lambda function.
+esmcLastProcessingResult :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcLastProcessingResult =
+    lens _esmcLastProcessingResult
+        (\s a -> s { _esmcLastProcessingResult = a })
 
--- | The ARN of the IAM role (invocation role) that AWS Lambda can assume to read
--- from the stream and invoke the function.
-escRole :: Lens' EventSourceConfiguration (Maybe Text)
-escRole = lens _escRole (\s a -> s { _escRole = a })
+-- | The state of the event source mapping. It can be "Creating", "Enabled",
+-- "Disabled", "Enabling", "Disabling", "Updating", or "Deleting".
+esmcState :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcState = lens _esmcState (\s a -> s { _esmcState = a })
 
--- | The description of the health of the event source mapping. Valid values are:
--- "PENDING", "OK", and "PROBLEM:/message/". Initially this staus is "PENDING".
--- When AWS Lambda begins processing events, it changes the status to "OK".
-escStatus :: Lens' EventSourceConfiguration (Maybe Text)
-escStatus = lens _escStatus (\s a -> s { _escStatus = a })
+-- | The reason the event source mapping is in its current state. It is either
+-- user-requested or an AWS Lambda-initiated state transition.
+esmcStateTransitionReason :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcStateTransitionReason =
+    lens _esmcStateTransitionReason
+        (\s a -> s { _esmcStateTransitionReason = a })
 
 -- | The AWS Lambda assigned opaque identifier for the mapping.
-escUUID :: Lens' EventSourceConfiguration (Maybe Text)
-escUUID = lens _escUUID (\s a -> s { _escUUID = a })
+esmcUUID :: Lens' EventSourceMappingConfiguration (Maybe Text)
+esmcUUID = lens _esmcUUID (\s a -> s { _esmcUUID = a })
 
-instance FromJSON EventSourceConfiguration where
-    parseJSON = withObject "EventSourceConfiguration" $ \o -> EventSourceConfiguration
+instance FromJSON EventSourceMappingConfiguration where
+    parseJSON = withObject "EventSourceMappingConfiguration" $ \o -> EventSourceMappingConfiguration
         <$> o .:? "BatchSize"
-        <*> o .:? "EventSource"
-        <*> o .:? "FunctionName"
-        <*> o .:? "IsActive"
+        <*> o .:? "EventSourceArn"
+        <*> o .:? "FunctionArn"
         <*> o .:? "LastModified"
-        <*> o .:? "Parameters" .!= mempty
-        <*> o .:? "Role"
-        <*> o .:? "Status"
+        <*> o .:? "LastProcessingResult"
+        <*> o .:? "State"
+        <*> o .:? "StateTransitionReason"
         <*> o .:? "UUID"
 
-instance ToJSON EventSourceConfiguration where
-    toJSON EventSourceConfiguration{..} = object
-        [ "UUID"         .= _escUUID
-        , "BatchSize"    .= _escBatchSize
-        , "EventSource"  .= _escEventSource
-        , "FunctionName" .= _escFunctionName
-        , "Parameters"   .= _escParameters
-        , "Role"         .= _escRole
-        , "LastModified" .= _escLastModified
-        , "IsActive"     .= _escIsActive
-        , "Status"       .= _escStatus
+instance ToJSON EventSourceMappingConfiguration where
+    toJSON EventSourceMappingConfiguration{..} = object
+        [ "UUID"                  .= _esmcUUID
+        , "BatchSize"             .= _esmcBatchSize
+        , "EventSourceArn"        .= _esmcEventSourceArn
+        , "FunctionArn"           .= _esmcFunctionArn
+        , "LastModified"          .= _esmcLastModified
+        , "LastProcessingResult"  .= _esmcLastProcessingResult
+        , "State"                 .= _esmcState
+        , "StateTransitionReason" .= _esmcStateTransitionReason
         ]
diff --git a/gen/Network/AWS/Lambda/UpdateEventSourceMapping.hs b/gen/Network/AWS/Lambda/UpdateEventSourceMapping.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/UpdateEventSourceMapping.hs
@@ -0,0 +1,242 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.UpdateEventSourceMapping
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | You can update an event source mapping. This is useful if you want to change
+-- the parameters of the existing mapping without losing your position in the
+-- stream. You can change which function will receive the stream records, but to
+-- change the stream itself, you must create a new mapping.
+--
+-- This operation requires permission for the 'lambda:UpdateEventSourceMapping'
+-- action.
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateEventSourceMapping.html>
+module Network.AWS.Lambda.UpdateEventSourceMapping
+    (
+    -- * Request
+      UpdateEventSourceMapping
+    -- ** Request constructor
+    , updateEventSourceMapping
+    -- ** Request lenses
+    , uesmBatchSize
+    , uesmEnabled
+    , uesmFunctionName
+    , uesmUUID
+
+    -- * Response
+    , UpdateEventSourceMappingResponse
+    -- ** Response constructor
+    , updateEventSourceMappingResponse
+    -- ** Response lenses
+    , uesmrBatchSize
+    , uesmrEventSourceArn
+    , uesmrFunctionArn
+    , uesmrLastModified
+    , uesmrLastProcessingResult
+    , uesmrState
+    , uesmrStateTransitionReason
+    , uesmrUUID
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+data UpdateEventSourceMapping = UpdateEventSourceMapping
+    { _uesmBatchSize    :: Maybe Nat
+    , _uesmEnabled      :: Maybe Bool
+    , _uesmFunctionName :: Maybe Text
+    , _uesmUUID         :: Text
+    } deriving (Eq, Ord, Read, Show)
+
+-- | 'UpdateEventSourceMapping' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'uesmBatchSize' @::@ 'Maybe' 'Natural'
+--
+-- * 'uesmEnabled' @::@ 'Maybe' 'Bool'
+--
+-- * 'uesmFunctionName' @::@ 'Maybe' 'Text'
+--
+-- * 'uesmUUID' @::@ 'Text'
+--
+updateEventSourceMapping :: Text -- ^ 'uesmUUID'
+                         -> UpdateEventSourceMapping
+updateEventSourceMapping p1 = UpdateEventSourceMapping
+    { _uesmUUID         = p1
+    , _uesmFunctionName = Nothing
+    , _uesmEnabled      = Nothing
+    , _uesmBatchSize    = Nothing
+    }
+
+-- | The maximum number of stream records that can be sent to your Lambda function
+-- for a single invocation.
+uesmBatchSize :: Lens' UpdateEventSourceMapping (Maybe Natural)
+uesmBatchSize = lens _uesmBatchSize (\s a -> s { _uesmBatchSize = a }) . mapping _Nat
+
+-- | Specifies whether AWS Lambda should actively poll the stream or not. If
+-- disabled, AWS Lambda will not poll the stream.
+uesmEnabled :: Lens' UpdateEventSourceMapping (Maybe Bool)
+uesmEnabled = lens _uesmEnabled (\s a -> s { _uesmEnabled = a })
+
+-- | The Lambda function to which you want the stream records sent.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
+uesmFunctionName :: Lens' UpdateEventSourceMapping (Maybe Text)
+uesmFunctionName = lens _uesmFunctionName (\s a -> s { _uesmFunctionName = a })
+
+-- | The event source mapping identifier.
+uesmUUID :: Lens' UpdateEventSourceMapping Text
+uesmUUID = lens _uesmUUID (\s a -> s { _uesmUUID = a })
+
+data UpdateEventSourceMappingResponse = UpdateEventSourceMappingResponse
+    { _uesmrBatchSize             :: Maybe Nat
+    , _uesmrEventSourceArn        :: Maybe Text
+    , _uesmrFunctionArn           :: Maybe Text
+    , _uesmrLastModified          :: Maybe POSIX
+    , _uesmrLastProcessingResult  :: Maybe Text
+    , _uesmrState                 :: Maybe Text
+    , _uesmrStateTransitionReason :: Maybe Text
+    , _uesmrUUID                  :: Maybe Text
+    } deriving (Eq, Ord, Read, Show)
+
+-- | 'UpdateEventSourceMappingResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'uesmrBatchSize' @::@ 'Maybe' 'Natural'
+--
+-- * 'uesmrEventSourceArn' @::@ 'Maybe' 'Text'
+--
+-- * 'uesmrFunctionArn' @::@ 'Maybe' 'Text'
+--
+-- * 'uesmrLastModified' @::@ 'Maybe' 'UTCTime'
+--
+-- * 'uesmrLastProcessingResult' @::@ 'Maybe' 'Text'
+--
+-- * 'uesmrState' @::@ 'Maybe' 'Text'
+--
+-- * 'uesmrStateTransitionReason' @::@ 'Maybe' 'Text'
+--
+-- * 'uesmrUUID' @::@ 'Maybe' 'Text'
+--
+updateEventSourceMappingResponse :: UpdateEventSourceMappingResponse
+updateEventSourceMappingResponse = UpdateEventSourceMappingResponse
+    { _uesmrUUID                  = Nothing
+    , _uesmrBatchSize             = Nothing
+    , _uesmrEventSourceArn        = Nothing
+    , _uesmrFunctionArn           = Nothing
+    , _uesmrLastModified          = Nothing
+    , _uesmrLastProcessingResult  = Nothing
+    , _uesmrState                 = Nothing
+    , _uesmrStateTransitionReason = Nothing
+    }
+
+-- | The largest number of records that AWS Lambda will retrieve from your event
+-- source at the time of invoking your function. Your function receives an event
+-- with all the retrieved records.
+uesmrBatchSize :: Lens' UpdateEventSourceMappingResponse (Maybe Natural)
+uesmrBatchSize = lens _uesmrBatchSize (\s a -> s { _uesmrBatchSize = a }) . mapping _Nat
+
+-- | The Amazon Resource Name (ARN) of the Amazon Kinesis stream that is the
+-- source of events.
+uesmrEventSourceArn :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
+uesmrEventSourceArn =
+    lens _uesmrEventSourceArn (\s a -> s { _uesmrEventSourceArn = a })
+
+-- | The Lambda function to invoke when AWS Lambda detects an event on the stream.
+uesmrFunctionArn :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
+uesmrFunctionArn = lens _uesmrFunctionArn (\s a -> s { _uesmrFunctionArn = a })
+
+-- | The UTC time string indicating the last time the event mapping was updated.
+uesmrLastModified :: Lens' UpdateEventSourceMappingResponse (Maybe UTCTime)
+uesmrLastModified =
+    lens _uesmrLastModified (\s a -> s { _uesmrLastModified = a })
+        . mapping _Time
+
+-- | The result of the last AWS Lambda invocation of your Lambda function.
+uesmrLastProcessingResult :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
+uesmrLastProcessingResult =
+    lens _uesmrLastProcessingResult
+        (\s a -> s { _uesmrLastProcessingResult = a })
+
+-- | The state of the event source mapping. It can be "Creating", "Enabled",
+-- "Disabled", "Enabling", "Disabling", "Updating", or "Deleting".
+uesmrState :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
+uesmrState = lens _uesmrState (\s a -> s { _uesmrState = a })
+
+-- | The reason the event source mapping is in its current state. It is either
+-- user-requested or an AWS Lambda-initiated state transition.
+uesmrStateTransitionReason :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
+uesmrStateTransitionReason =
+    lens _uesmrStateTransitionReason
+        (\s a -> s { _uesmrStateTransitionReason = a })
+
+-- | The AWS Lambda assigned opaque identifier for the mapping.
+uesmrUUID :: Lens' UpdateEventSourceMappingResponse (Maybe Text)
+uesmrUUID = lens _uesmrUUID (\s a -> s { _uesmrUUID = a })
+
+instance ToPath UpdateEventSourceMapping where
+    toPath UpdateEventSourceMapping{..} = mconcat
+        [ "/2015-03-31/event-source-mappings/"
+        , toText _uesmUUID
+        ]
+
+instance ToQuery UpdateEventSourceMapping where
+    toQuery = const mempty
+
+instance ToHeaders UpdateEventSourceMapping
+
+instance ToJSON UpdateEventSourceMapping where
+    toJSON UpdateEventSourceMapping{..} = object
+        [ "FunctionName" .= _uesmFunctionName
+        , "Enabled"      .= _uesmEnabled
+        , "BatchSize"    .= _uesmBatchSize
+        ]
+
+instance AWSRequest UpdateEventSourceMapping where
+    type Sv UpdateEventSourceMapping = Lambda
+    type Rs UpdateEventSourceMapping = UpdateEventSourceMappingResponse
+
+    request  = put
+    response = jsonResponse
+
+instance FromJSON UpdateEventSourceMappingResponse where
+    parseJSON = withObject "UpdateEventSourceMappingResponse" $ \o -> UpdateEventSourceMappingResponse
+        <$> o .:? "BatchSize"
+        <*> o .:? "EventSourceArn"
+        <*> o .:? "FunctionArn"
+        <*> o .:? "LastModified"
+        <*> o .:? "LastProcessingResult"
+        <*> o .:? "State"
+        <*> o .:? "StateTransitionReason"
+        <*> o .:? "UUID"
diff --git a/gen/Network/AWS/Lambda/UpdateFunctionCode.hs b/gen/Network/AWS/Lambda/UpdateFunctionCode.hs
new file mode 100644
--- /dev/null
+++ b/gen/Network/AWS/Lambda/UpdateFunctionCode.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE DeriveGeneric               #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
+{-# LANGUAGE LambdaCase                  #-}
+{-# LANGUAGE NoImplicitPrelude           #-}
+{-# LANGUAGE OverloadedStrings           #-}
+{-# LANGUAGE RecordWildCards             #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+{-# OPTIONS_GHC -fno-warn-unused-imports #-}
+
+-- Module      : Network.AWS.Lambda.UpdateFunctionCode
+-- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
+-- License     : This Source Code Form is subject to the terms of
+--               the Mozilla Public License, v. 2.0.
+--               A copy of the MPL can be found in the LICENSE file or
+--               you can obtain it at http://mozilla.org/MPL/2.0/.
+-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
+-- Stability   : experimental
+-- Portability : non-portable (GHC extensions)
+--
+-- Derived from AWS service descriptions, licensed under Apache 2.0.
+
+-- | Updates the code for the specified Lambda function. This operation must only
+-- be used on an existing Lambda function and cannot be used to update the
+-- function configuration.
+--
+-- This operation requires permision for the 'lambda:UpdateFunctionCode' action.
+--
+-- <http://docs.aws.amazon.com/lambda/latest/dg/API_UpdateFunctionCode.html>
+module Network.AWS.Lambda.UpdateFunctionCode
+    (
+    -- * Request
+      UpdateFunctionCode
+    -- ** Request constructor
+    , updateFunctionCode
+    -- ** Request lenses
+    , ufc1FunctionName
+    , ufc1ZipFile
+
+    -- * Response
+    , UpdateFunctionCodeResponse
+    -- ** Response constructor
+    , updateFunctionCodeResponse
+    -- ** Response lenses
+    , ufcrCodeSize
+    , ufcrDescription
+    , ufcrFunctionArn
+    , ufcrFunctionName
+    , ufcrHandler
+    , ufcrLastModified
+    , ufcrMemorySize
+    , ufcrRole
+    , ufcrRuntime
+    , ufcrTimeout
+    ) where
+
+import Network.AWS.Data (Object)
+import Network.AWS.Prelude
+import Network.AWS.Request.RestJSON
+import Network.AWS.Lambda.Types
+import qualified GHC.Exts
+
+data UpdateFunctionCode = UpdateFunctionCode
+    { _ufc1FunctionName :: Text
+    , _ufc1ZipFile      :: Base64
+    } deriving (Eq, Read, Show)
+
+-- | 'UpdateFunctionCode' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ufc1FunctionName' @::@ 'Text'
+--
+-- * 'ufc1ZipFile' @::@ 'Base64'
+--
+updateFunctionCode :: Text -- ^ 'ufc1FunctionName'
+                   -> Base64 -- ^ 'ufc1ZipFile'
+                   -> UpdateFunctionCode
+updateFunctionCode p1 p2 = UpdateFunctionCode
+    { _ufc1FunctionName = p1
+    , _ufc1ZipFile      = p2
+    }
+
+-- | The existing Lambda function name whose code you want to replace.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
+ufc1FunctionName :: Lens' UpdateFunctionCode Text
+ufc1FunctionName = lens _ufc1FunctionName (\s a -> s { _ufc1FunctionName = a })
+
+-- | Based64-encoded .zip file containing your packaged source code.
+ufc1ZipFile :: Lens' UpdateFunctionCode Base64
+ufc1ZipFile = lens _ufc1ZipFile (\s a -> s { _ufc1ZipFile = a })
+
+data UpdateFunctionCodeResponse = UpdateFunctionCodeResponse
+    { _ufcrCodeSize     :: Maybe Integer
+    , _ufcrDescription  :: Maybe Text
+    , _ufcrFunctionArn  :: Maybe Text
+    , _ufcrFunctionName :: Maybe Text
+    , _ufcrHandler      :: Maybe Text
+    , _ufcrLastModified :: Maybe Text
+    , _ufcrMemorySize   :: Maybe Nat
+    , _ufcrRole         :: Maybe Text
+    , _ufcrRuntime      :: Maybe Runtime
+    , _ufcrTimeout      :: Maybe Nat
+    } deriving (Eq, Read, Show)
+
+-- | 'UpdateFunctionCodeResponse' constructor.
+--
+-- The fields accessible through corresponding lenses are:
+--
+-- * 'ufcrCodeSize' @::@ 'Maybe' 'Integer'
+--
+-- * 'ufcrDescription' @::@ 'Maybe' 'Text'
+--
+-- * 'ufcrFunctionArn' @::@ 'Maybe' 'Text'
+--
+-- * 'ufcrFunctionName' @::@ 'Maybe' 'Text'
+--
+-- * 'ufcrHandler' @::@ 'Maybe' 'Text'
+--
+-- * 'ufcrLastModified' @::@ 'Maybe' 'Text'
+--
+-- * 'ufcrMemorySize' @::@ 'Maybe' 'Natural'
+--
+-- * 'ufcrRole' @::@ 'Maybe' 'Text'
+--
+-- * 'ufcrRuntime' @::@ 'Maybe' 'Runtime'
+--
+-- * 'ufcrTimeout' @::@ 'Maybe' 'Natural'
+--
+updateFunctionCodeResponse :: UpdateFunctionCodeResponse
+updateFunctionCodeResponse = UpdateFunctionCodeResponse
+    { _ufcrFunctionName = Nothing
+    , _ufcrFunctionArn  = Nothing
+    , _ufcrRuntime      = Nothing
+    , _ufcrRole         = Nothing
+    , _ufcrHandler      = Nothing
+    , _ufcrCodeSize     = Nothing
+    , _ufcrDescription  = Nothing
+    , _ufcrTimeout      = Nothing
+    , _ufcrMemorySize   = Nothing
+    , _ufcrLastModified = Nothing
+    }
+
+-- | The size, in bytes, of the function .zip file you uploaded.
+ufcrCodeSize :: Lens' UpdateFunctionCodeResponse (Maybe Integer)
+ufcrCodeSize = lens _ufcrCodeSize (\s a -> s { _ufcrCodeSize = a })
+
+-- | The user-provided description.
+ufcrDescription :: Lens' UpdateFunctionCodeResponse (Maybe Text)
+ufcrDescription = lens _ufcrDescription (\s a -> s { _ufcrDescription = a })
+
+-- | The Amazon Resource Name (ARN) assigned to the function.
+ufcrFunctionArn :: Lens' UpdateFunctionCodeResponse (Maybe Text)
+ufcrFunctionArn = lens _ufcrFunctionArn (\s a -> s { _ufcrFunctionArn = a })
+
+-- | The name of the function.
+ufcrFunctionName :: Lens' UpdateFunctionCodeResponse (Maybe Text)
+ufcrFunctionName = lens _ufcrFunctionName (\s a -> s { _ufcrFunctionName = a })
+
+-- | The function Lambda calls to begin executing your function.
+ufcrHandler :: Lens' UpdateFunctionCodeResponse (Maybe Text)
+ufcrHandler = lens _ufcrHandler (\s a -> s { _ufcrHandler = a })
+
+-- | The timestamp of the last time you updated the function.
+ufcrLastModified :: Lens' UpdateFunctionCodeResponse (Maybe Text)
+ufcrLastModified = lens _ufcrLastModified (\s a -> s { _ufcrLastModified = a })
+
+-- | The memory size, in MB, you configured for the function. Must be a multiple
+-- of 64 MB.
+ufcrMemorySize :: Lens' UpdateFunctionCodeResponse (Maybe Natural)
+ufcrMemorySize = lens _ufcrMemorySize (\s a -> s { _ufcrMemorySize = a }) . mapping _Nat
+
+-- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
+-- executes your function to access any other Amazon Web Services (AWS)
+-- resources.
+ufcrRole :: Lens' UpdateFunctionCodeResponse (Maybe Text)
+ufcrRole = lens _ufcrRole (\s a -> s { _ufcrRole = a })
+
+-- | The runtime environment for the Lambda function.
+ufcrRuntime :: Lens' UpdateFunctionCodeResponse (Maybe Runtime)
+ufcrRuntime = lens _ufcrRuntime (\s a -> s { _ufcrRuntime = a })
+
+-- | The function execution time at which Lambda should terminate the function.
+-- Because the execution time has cost implications, we recommend you set this
+-- value based on your expected execution time. The default is 3 seconds.
+ufcrTimeout :: Lens' UpdateFunctionCodeResponse (Maybe Natural)
+ufcrTimeout = lens _ufcrTimeout (\s a -> s { _ufcrTimeout = a }) . mapping _Nat
+
+instance ToPath UpdateFunctionCode where
+    toPath UpdateFunctionCode{..} = mconcat
+        [ "/2015-03-31/functions/"
+        , toText _ufc1FunctionName
+        , "/versions/HEAD/code"
+        ]
+
+instance ToQuery UpdateFunctionCode where
+    toQuery = const mempty
+
+instance ToHeaders UpdateFunctionCode
+
+instance ToJSON UpdateFunctionCode where
+    toJSON UpdateFunctionCode{..} = object
+        [ "ZipFile" .= _ufc1ZipFile
+        ]
+
+instance AWSRequest UpdateFunctionCode where
+    type Sv UpdateFunctionCode = Lambda
+    type Rs UpdateFunctionCode = UpdateFunctionCodeResponse
+
+    request  = put
+    response = jsonResponse
+
+instance FromJSON UpdateFunctionCodeResponse where
+    parseJSON = withObject "UpdateFunctionCodeResponse" $ \o -> UpdateFunctionCodeResponse
+        <$> o .:? "CodeSize"
+        <*> o .:? "Description"
+        <*> o .:? "FunctionArn"
+        <*> o .:? "FunctionName"
+        <*> o .:? "Handler"
+        <*> o .:? "LastModified"
+        <*> o .:? "MemorySize"
+        <*> o .:? "Role"
+        <*> o .:? "Runtime"
+        <*> o .:? "Timeout"
diff --git a/gen/Network/AWS/Lambda/UpdateFunctionConfiguration.hs b/gen/Network/AWS/Lambda/UpdateFunctionConfiguration.hs
--- a/gen/Network/AWS/Lambda/UpdateFunctionConfiguration.hs
+++ b/gen/Network/AWS/Lambda/UpdateFunctionConfiguration.hs
@@ -50,20 +50,19 @@
     -- ** Response constructor
     , updateFunctionConfigurationResponse
     -- ** Response lenses
-    , ufcrCodeSize
-    , ufcrConfigurationId
-    , ufcrDescription
-    , ufcrFunctionARN
-    , ufcrFunctionName
-    , ufcrHandler
-    , ufcrLastModified
-    , ufcrMemorySize
-    , ufcrMode
-    , ufcrRole
-    , ufcrRuntime
-    , ufcrTimeout
+    , ufcr1CodeSize
+    , ufcr1Description
+    , ufcr1FunctionArn
+    , ufcr1FunctionName
+    , ufcr1Handler
+    , ufcr1LastModified
+    , ufcr1MemorySize
+    , ufcr1Role
+    , ufcr1Runtime
+    , ufcr1Timeout
     ) where
 
+import Network.AWS.Data (Object)
 import Network.AWS.Prelude
 import Network.AWS.Request.RestJSON
 import Network.AWS.Lambda.Types
@@ -105,12 +104,20 @@
     , _ufcMemorySize   = Nothing
     }
 
--- | A short user-defined function description. Lambda does not use this value.
--- Assign a meaningful description as you see fit.
+-- | A short user-defined function description. AWS Lambda does not use this
+-- value. Assign a meaningful description as you see fit.
 ufcDescription :: Lens' UpdateFunctionConfiguration (Maybe Text)
 ufcDescription = lens _ufcDescription (\s a -> s { _ufcDescription = a })
 
 -- | The name of the Lambda function.
+--
+-- You can specify an unqualified function name (for example, "Thumbnail") or
+-- you can specify Amazon Resource Name (ARN) of the function (for example,
+-- "arn:aws:lambda:us-west-2:account-id:function:ThumbNail"). AWS Lambda also
+-- allows you to specify only the account ID qualifier (for example,
+-- "account-id:Thumbnail"). Note that the length constraint applies only to the
+-- ARN. If you specify only the function name, it is limited to 64 character in
+-- length.
 ufcFunctionName :: Lens' UpdateFunctionConfiguration Text
 ufcFunctionName = lens _ufcFunctionName (\s a -> s { _ufcFunctionName = a })
 
@@ -119,8 +126,8 @@
 ufcHandler :: Lens' UpdateFunctionConfiguration (Maybe Text)
 ufcHandler = lens _ufcHandler (\s a -> s { _ufcHandler = a })
 
--- | The amount of memory, in MB, your Lambda function is given. Lambda uses this
--- memory size to infer the amount of CPU allocated to your function. Your
+-- | The amount of memory, in MB, your Lambda function is given. AWS Lambda uses
+-- this memory size to infer the amount of CPU allocated to your function. Your
 -- function use-case determines your CPU and memory requirements. For example, a
 -- database operation might need less memory compared to an image processing
 -- function. The default value is 128 MB. The value must be a multiple of 64 MB.
@@ -132,146 +139,131 @@
 ufcRole :: Lens' UpdateFunctionConfiguration (Maybe Text)
 ufcRole = lens _ufcRole (\s a -> s { _ufcRole = a })
 
--- | The function execution time at which Lambda should terminate the function.
--- Because the execution time has cost implications, we recommend you set this
--- value based on your expected execution time. The default is 3 seconds.
+-- | The function execution time at which AWS Lambda should terminate the
+-- function. Because the execution time has cost implications, we recommend you
+-- set this value based on your expected execution time. The default is 3
+-- seconds.
 ufcTimeout :: Lens' UpdateFunctionConfiguration (Maybe Natural)
 ufcTimeout = lens _ufcTimeout (\s a -> s { _ufcTimeout = a }) . mapping _Nat
 
 data UpdateFunctionConfigurationResponse = UpdateFunctionConfigurationResponse
-    { _ufcrCodeSize        :: Maybe Integer
-    , _ufcrConfigurationId :: Maybe Text
-    , _ufcrDescription     :: Maybe Text
-    , _ufcrFunctionARN     :: Maybe Text
-    , _ufcrFunctionName    :: Maybe Text
-    , _ufcrHandler         :: Maybe Text
-    , _ufcrLastModified    :: Maybe Text
-    , _ufcrMemorySize      :: Maybe Nat
-    , _ufcrMode            :: Maybe Mode
-    , _ufcrRole            :: Maybe Text
-    , _ufcrRuntime         :: Maybe Runtime
-    , _ufcrTimeout         :: Maybe Nat
+    { _ufcr1CodeSize     :: Maybe Integer
+    , _ufcr1Description  :: Maybe Text
+    , _ufcr1FunctionArn  :: Maybe Text
+    , _ufcr1FunctionName :: Maybe Text
+    , _ufcr1Handler      :: Maybe Text
+    , _ufcr1LastModified :: Maybe Text
+    , _ufcr1MemorySize   :: Maybe Nat
+    , _ufcr1Role         :: Maybe Text
+    , _ufcr1Runtime      :: Maybe Runtime
+    , _ufcr1Timeout      :: Maybe Nat
     } deriving (Eq, Read, Show)
 
 -- | 'UpdateFunctionConfigurationResponse' constructor.
 --
 -- The fields accessible through corresponding lenses are:
 --
--- * 'ufcrCodeSize' @::@ 'Maybe' 'Integer'
---
--- * 'ufcrConfigurationId' @::@ 'Maybe' 'Text'
---
--- * 'ufcrDescription' @::@ 'Maybe' 'Text'
+-- * 'ufcr1CodeSize' @::@ 'Maybe' 'Integer'
 --
--- * 'ufcrFunctionARN' @::@ 'Maybe' 'Text'
+-- * 'ufcr1Description' @::@ 'Maybe' 'Text'
 --
--- * 'ufcrFunctionName' @::@ 'Maybe' 'Text'
+-- * 'ufcr1FunctionArn' @::@ 'Maybe' 'Text'
 --
--- * 'ufcrHandler' @::@ 'Maybe' 'Text'
+-- * 'ufcr1FunctionName' @::@ 'Maybe' 'Text'
 --
--- * 'ufcrLastModified' @::@ 'Maybe' 'Text'
+-- * 'ufcr1Handler' @::@ 'Maybe' 'Text'
 --
--- * 'ufcrMemorySize' @::@ 'Maybe' 'Natural'
+-- * 'ufcr1LastModified' @::@ 'Maybe' 'Text'
 --
--- * 'ufcrMode' @::@ 'Maybe' 'Mode'
+-- * 'ufcr1MemorySize' @::@ 'Maybe' 'Natural'
 --
--- * 'ufcrRole' @::@ 'Maybe' 'Text'
+-- * 'ufcr1Role' @::@ 'Maybe' 'Text'
 --
--- * 'ufcrRuntime' @::@ 'Maybe' 'Runtime'
+-- * 'ufcr1Runtime' @::@ 'Maybe' 'Runtime'
 --
--- * 'ufcrTimeout' @::@ 'Maybe' 'Natural'
+-- * 'ufcr1Timeout' @::@ 'Maybe' 'Natural'
 --
 updateFunctionConfigurationResponse :: UpdateFunctionConfigurationResponse
 updateFunctionConfigurationResponse = UpdateFunctionConfigurationResponse
-    { _ufcrFunctionName    = Nothing
-    , _ufcrFunctionARN     = Nothing
-    , _ufcrConfigurationId = Nothing
-    , _ufcrRuntime         = Nothing
-    , _ufcrRole            = Nothing
-    , _ufcrHandler         = Nothing
-    , _ufcrMode            = Nothing
-    , _ufcrCodeSize        = Nothing
-    , _ufcrDescription     = Nothing
-    , _ufcrTimeout         = Nothing
-    , _ufcrMemorySize      = Nothing
-    , _ufcrLastModified    = Nothing
+    { _ufcr1FunctionName = Nothing
+    , _ufcr1FunctionArn  = Nothing
+    , _ufcr1Runtime      = Nothing
+    , _ufcr1Role         = Nothing
+    , _ufcr1Handler      = Nothing
+    , _ufcr1CodeSize     = Nothing
+    , _ufcr1Description  = Nothing
+    , _ufcr1Timeout      = Nothing
+    , _ufcr1MemorySize   = Nothing
+    , _ufcr1LastModified = Nothing
     }
 
 -- | The size, in bytes, of the function .zip file you uploaded.
-ufcrCodeSize :: Lens' UpdateFunctionConfigurationResponse (Maybe Integer)
-ufcrCodeSize = lens _ufcrCodeSize (\s a -> s { _ufcrCodeSize = a })
-
--- | A Lambda-assigned unique identifier for the current function code and related
--- configuration.
-ufcrConfigurationId :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcrConfigurationId =
-    lens _ufcrConfigurationId (\s a -> s { _ufcrConfigurationId = a })
+ufcr1CodeSize :: Lens' UpdateFunctionConfigurationResponse (Maybe Integer)
+ufcr1CodeSize = lens _ufcr1CodeSize (\s a -> s { _ufcr1CodeSize = a })
 
 -- | The user-provided description.
-ufcrDescription :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcrDescription = lens _ufcrDescription (\s a -> s { _ufcrDescription = a })
+ufcr1Description :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
+ufcr1Description = lens _ufcr1Description (\s a -> s { _ufcr1Description = a })
 
 -- | The Amazon Resource Name (ARN) assigned to the function.
-ufcrFunctionARN :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcrFunctionARN = lens _ufcrFunctionARN (\s a -> s { _ufcrFunctionARN = a })
+ufcr1FunctionArn :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
+ufcr1FunctionArn = lens _ufcr1FunctionArn (\s a -> s { _ufcr1FunctionArn = a })
 
 -- | The name of the function.
-ufcrFunctionName :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcrFunctionName = lens _ufcrFunctionName (\s a -> s { _ufcrFunctionName = a })
+ufcr1FunctionName :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
+ufcr1FunctionName =
+    lens _ufcr1FunctionName (\s a -> s { _ufcr1FunctionName = a })
 
 -- | The function Lambda calls to begin executing your function.
-ufcrHandler :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcrHandler = lens _ufcrHandler (\s a -> s { _ufcrHandler = a })
+ufcr1Handler :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
+ufcr1Handler = lens _ufcr1Handler (\s a -> s { _ufcr1Handler = a })
 
 -- | The timestamp of the last time you updated the function.
-ufcrLastModified :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcrLastModified = lens _ufcrLastModified (\s a -> s { _ufcrLastModified = a })
+ufcr1LastModified :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
+ufcr1LastModified =
+    lens _ufcr1LastModified (\s a -> s { _ufcr1LastModified = a })
 
 -- | The memory size, in MB, you configured for the function. Must be a multiple
 -- of 64 MB.
-ufcrMemorySize :: Lens' UpdateFunctionConfigurationResponse (Maybe Natural)
-ufcrMemorySize = lens _ufcrMemorySize (\s a -> s { _ufcrMemorySize = a }) . mapping _Nat
-
--- | The type of the Lambda function you uploaded.
-ufcrMode :: Lens' UpdateFunctionConfigurationResponse (Maybe Mode)
-ufcrMode = lens _ufcrMode (\s a -> s { _ufcrMode = a })
+ufcr1MemorySize :: Lens' UpdateFunctionConfigurationResponse (Maybe Natural)
+ufcr1MemorySize = lens _ufcr1MemorySize (\s a -> s { _ufcr1MemorySize = a }) . mapping _Nat
 
 -- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
 -- executes your function to access any other Amazon Web Services (AWS)
 -- resources.
-ufcrRole :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
-ufcrRole = lens _ufcrRole (\s a -> s { _ufcrRole = a })
+ufcr1Role :: Lens' UpdateFunctionConfigurationResponse (Maybe Text)
+ufcr1Role = lens _ufcr1Role (\s a -> s { _ufcr1Role = a })
 
 -- | The runtime environment for the Lambda function.
-ufcrRuntime :: Lens' UpdateFunctionConfigurationResponse (Maybe Runtime)
-ufcrRuntime = lens _ufcrRuntime (\s a -> s { _ufcrRuntime = a })
+ufcr1Runtime :: Lens' UpdateFunctionConfigurationResponse (Maybe Runtime)
+ufcr1Runtime = lens _ufcr1Runtime (\s a -> s { _ufcr1Runtime = a })
 
 -- | The function execution time at which Lambda should terminate the function.
 -- Because the execution time has cost implications, we recommend you set this
 -- value based on your expected execution time. The default is 3 seconds.
-ufcrTimeout :: Lens' UpdateFunctionConfigurationResponse (Maybe Natural)
-ufcrTimeout = lens _ufcrTimeout (\s a -> s { _ufcrTimeout = a }) . mapping _Nat
+ufcr1Timeout :: Lens' UpdateFunctionConfigurationResponse (Maybe Natural)
+ufcr1Timeout = lens _ufcr1Timeout (\s a -> s { _ufcr1Timeout = a }) . mapping _Nat
 
 instance ToPath UpdateFunctionConfiguration where
     toPath UpdateFunctionConfiguration{..} = mconcat
-        [ "/2014-11-13/functions/"
+        [ "/2015-03-31/functions/"
         , toText _ufcFunctionName
-        , "/configuration"
+        , "/versions/HEAD/configuration"
         ]
 
 instance ToQuery UpdateFunctionConfiguration where
-    toQuery UpdateFunctionConfiguration{..} = mconcat
-        [ "Role"        =? _ufcRole
-        , "Handler"     =? _ufcHandler
-        , "Description" =? _ufcDescription
-        , "Timeout"     =? _ufcTimeout
-        , "MemorySize"  =? _ufcMemorySize
-        ]
+    toQuery = const mempty
 
 instance ToHeaders UpdateFunctionConfiguration
 
 instance ToJSON UpdateFunctionConfiguration where
-    toJSON = const (toJSON Empty)
+    toJSON UpdateFunctionConfiguration{..} = object
+        [ "Role"        .= _ufcRole
+        , "Handler"     .= _ufcHandler
+        , "Description" .= _ufcDescription
+        , "Timeout"     .= _ufcTimeout
+        , "MemorySize"  .= _ufcMemorySize
+        ]
 
 instance AWSRequest UpdateFunctionConfiguration where
     type Sv UpdateFunctionConfiguration = Lambda
@@ -283,14 +275,12 @@
 instance FromJSON UpdateFunctionConfigurationResponse where
     parseJSON = withObject "UpdateFunctionConfigurationResponse" $ \o -> UpdateFunctionConfigurationResponse
         <$> o .:? "CodeSize"
-        <*> o .:? "ConfigurationId"
         <*> o .:? "Description"
-        <*> o .:? "FunctionARN"
+        <*> o .:? "FunctionArn"
         <*> o .:? "FunctionName"
         <*> o .:? "Handler"
         <*> o .:? "LastModified"
         <*> o .:? "MemorySize"
-        <*> o .:? "Mode"
         <*> o .:? "Role"
         <*> o .:? "Runtime"
         <*> o .:? "Timeout"
diff --git a/gen/Network/AWS/Lambda/UploadFunction.hs b/gen/Network/AWS/Lambda/UploadFunction.hs
deleted file mode 100644
--- a/gen/Network/AWS/Lambda/UploadFunction.hs
+++ /dev/null
@@ -1,336 +0,0 @@
-{-# LANGUAGE DataKinds                   #-}
-{-# LANGUAGE DeriveGeneric               #-}
-{-# LANGUAGE FlexibleInstances           #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE LambdaCase                  #-}
-{-# LANGUAGE NoImplicitPrelude           #-}
-{-# LANGUAGE OverloadedStrings           #-}
-{-# LANGUAGE RecordWildCards             #-}
-{-# LANGUAGE TypeFamilies                #-}
-
-{-# OPTIONS_GHC -fno-warn-unused-imports #-}
-
--- Module      : Network.AWS.Lambda.UploadFunction
--- Copyright   : (c) 2013-2014 Brendan Hay <brendan.g.hay@gmail.com>
--- License     : This Source Code Form is subject to the terms of
---               the Mozilla Public License, v. 2.0.
---               A copy of the MPL can be found in the LICENSE file or
---               you can obtain it at http://mozilla.org/MPL/2.0/.
--- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
--- Stability   : experimental
--- Portability : non-portable (GHC extensions)
---
--- Derived from AWS service descriptions, licensed under Apache 2.0.
-
--- | Creates a new Lambda function or updates an existing function. The function
--- metadata is created from the request parameters, and the code for the
--- function is provided by a .zip file in the request body. If the function name
--- already exists, the existing Lambda function is updated with the new code and
--- metadata.
---
--- This operation requires permission for the 'lambda:UploadFunction' action.
---
--- <http://docs.aws.amazon.com/lambda/latest/dg/API_UploadFunction.html>
-module Network.AWS.Lambda.UploadFunction
-    (
-    -- * Request
-      UploadFunction
-    -- ** Request constructor
-    , uploadFunction
-    -- ** Request lenses
-    , ufDescription
-    , ufFunctionName
-    , ufFunctionZip
-    , ufHandler
-    , ufMemorySize
-    , ufMode
-    , ufRole
-    , ufRuntime
-    , ufTimeout
-
-    -- * Response
-    , UploadFunctionResponse
-    -- ** Response constructor
-    , uploadFunctionResponse
-    -- ** Response lenses
-    , ufrCodeSize
-    , ufrConfigurationId
-    , ufrDescription
-    , ufrFunctionARN
-    , ufrFunctionName
-    , ufrHandler
-    , ufrLastModified
-    , ufrMemorySize
-    , ufrMode
-    , ufrRole
-    , ufrRuntime
-    , ufrTimeout
-    ) where
-
-import Network.AWS.Prelude
-import Network.AWS.Request.RestJSON
-import Network.AWS.Lambda.Types
-import qualified GHC.Exts
-
-data UploadFunction = UploadFunction
-    { _ufDescription  :: Maybe Text
-    , _ufFunctionName :: Text
-    , _ufFunctionZip  :: RqBody
-    , _ufHandler      :: Text
-    , _ufMemorySize   :: Maybe Nat
-    , _ufMode         :: Mode
-    , _ufRole         :: Text
-    , _ufRuntime      :: Runtime
-    , _ufTimeout      :: Maybe Nat
-    } deriving (Show)
-
--- | 'UploadFunction' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ufDescription' @::@ 'Maybe' 'Text'
---
--- * 'ufFunctionName' @::@ 'Text'
---
--- * 'ufFunctionZip' @::@ 'RqBody'
---
--- * 'ufHandler' @::@ 'Text'
---
--- * 'ufMemorySize' @::@ 'Maybe' 'Natural'
---
--- * 'ufMode' @::@ 'Mode'
---
--- * 'ufRole' @::@ 'Text'
---
--- * 'ufRuntime' @::@ 'Runtime'
---
--- * 'ufTimeout' @::@ 'Maybe' 'Natural'
---
-uploadFunction :: Text -- ^ 'ufFunctionName'
-               -> RqBody -- ^ 'ufFunctionZip'
-               -> Runtime -- ^ 'ufRuntime'
-               -> Text -- ^ 'ufRole'
-               -> Text -- ^ 'ufHandler'
-               -> Mode -- ^ 'ufMode'
-               -> UploadFunction
-uploadFunction p1 p2 p3 p4 p5 p6 = UploadFunction
-    { _ufFunctionName = p1
-    , _ufFunctionZip  = p2
-    , _ufRuntime      = p3
-    , _ufRole         = p4
-    , _ufHandler      = p5
-    , _ufMode         = p6
-    , _ufDescription  = Nothing
-    , _ufTimeout      = Nothing
-    , _ufMemorySize   = Nothing
-    }
-
--- | A short, user-defined function description. Lambda does not use this value.
--- Assign a meaningful description as you see fit.
-ufDescription :: Lens' UploadFunction (Maybe Text)
-ufDescription = lens _ufDescription (\s a -> s { _ufDescription = a })
-
--- | The name you want to assign to the function you are uploading. The function
--- names appear in the console and are returned in the 'ListFunctions' API.
--- Function names are used to specify functions to other AWS Lambda APIs, such
--- as 'InvokeAsync'.
-ufFunctionName :: Lens' UploadFunction Text
-ufFunctionName = lens _ufFunctionName (\s a -> s { _ufFunctionName = a })
-
--- | A .zip file containing your packaged source code. For more information about
--- creating a .zip file, go to <http://docs.aws.amazon.com/lambda/latest/dg/walkthrough-custom-events.html AWS LambdaL How it Works> in the AWS Lambda
--- Developer Guide.
-ufFunctionZip :: Lens' UploadFunction RqBody
-ufFunctionZip = lens _ufFunctionZip (\s a -> s { _ufFunctionZip = a })
-
--- | The function that Lambda calls to begin execution. For Node.js, it is the /module-name/./export/ value in your function.
-ufHandler :: Lens' UploadFunction Text
-ufHandler = lens _ufHandler (\s a -> s { _ufHandler = a })
-
--- | The amount of memory, in MB, your Lambda function is given. Lambda uses this
--- memory size to infer the amount of CPU allocated to your function. Your
--- function use-case determines your CPU and memory requirements. For example,
--- database operation might need less memory compared to image processing
--- function. The default value is 128 MB. The value must be a multiple of 64 MB.
-ufMemorySize :: Lens' UploadFunction (Maybe Natural)
-ufMemorySize = lens _ufMemorySize (\s a -> s { _ufMemorySize = a }) . mapping _Nat
-
--- | How the Lambda function will be invoked. Lambda supports only the "event"
--- mode.
-ufMode :: Lens' UploadFunction Mode
-ufMode = lens _ufMode (\s a -> s { _ufMode = a })
-
--- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
--- executes your function to access any other Amazon Web Services (AWS)
--- resources.
-ufRole :: Lens' UploadFunction Text
-ufRole = lens _ufRole (\s a -> s { _ufRole = a })
-
--- | The runtime environment for the Lambda function you are uploading. Currently,
--- Lambda supports only "nodejs" as the runtime.
-ufRuntime :: Lens' UploadFunction Runtime
-ufRuntime = lens _ufRuntime (\s a -> s { _ufRuntime = a })
-
--- | The function execution time at which Lambda should terminate the function.
--- Because the execution time has cost implications, we recommend you set this
--- value based on your expected execution time. The default is 3 seconds.
-ufTimeout :: Lens' UploadFunction (Maybe Natural)
-ufTimeout = lens _ufTimeout (\s a -> s { _ufTimeout = a }) . mapping _Nat
-
-data UploadFunctionResponse = UploadFunctionResponse
-    { _ufrCodeSize        :: Maybe Integer
-    , _ufrConfigurationId :: Maybe Text
-    , _ufrDescription     :: Maybe Text
-    , _ufrFunctionARN     :: Maybe Text
-    , _ufrFunctionName    :: Maybe Text
-    , _ufrHandler         :: Maybe Text
-    , _ufrLastModified    :: Maybe Text
-    , _ufrMemorySize      :: Maybe Nat
-    , _ufrMode            :: Maybe Mode
-    , _ufrRole            :: Maybe Text
-    , _ufrRuntime         :: Maybe Runtime
-    , _ufrTimeout         :: Maybe Nat
-    } deriving (Eq, Read, Show)
-
--- | 'UploadFunctionResponse' constructor.
---
--- The fields accessible through corresponding lenses are:
---
--- * 'ufrCodeSize' @::@ 'Maybe' 'Integer'
---
--- * 'ufrConfigurationId' @::@ 'Maybe' 'Text'
---
--- * 'ufrDescription' @::@ 'Maybe' 'Text'
---
--- * 'ufrFunctionARN' @::@ 'Maybe' 'Text'
---
--- * 'ufrFunctionName' @::@ 'Maybe' 'Text'
---
--- * 'ufrHandler' @::@ 'Maybe' 'Text'
---
--- * 'ufrLastModified' @::@ 'Maybe' 'Text'
---
--- * 'ufrMemorySize' @::@ 'Maybe' 'Natural'
---
--- * 'ufrMode' @::@ 'Maybe' 'Mode'
---
--- * 'ufrRole' @::@ 'Maybe' 'Text'
---
--- * 'ufrRuntime' @::@ 'Maybe' 'Runtime'
---
--- * 'ufrTimeout' @::@ 'Maybe' 'Natural'
---
-uploadFunctionResponse :: UploadFunctionResponse
-uploadFunctionResponse = UploadFunctionResponse
-    { _ufrFunctionName    = Nothing
-    , _ufrFunctionARN     = Nothing
-    , _ufrConfigurationId = Nothing
-    , _ufrRuntime         = Nothing
-    , _ufrRole            = Nothing
-    , _ufrHandler         = Nothing
-    , _ufrMode            = Nothing
-    , _ufrCodeSize        = Nothing
-    , _ufrDescription     = Nothing
-    , _ufrTimeout         = Nothing
-    , _ufrMemorySize      = Nothing
-    , _ufrLastModified    = Nothing
-    }
-
--- | The size, in bytes, of the function .zip file you uploaded.
-ufrCodeSize :: Lens' UploadFunctionResponse (Maybe Integer)
-ufrCodeSize = lens _ufrCodeSize (\s a -> s { _ufrCodeSize = a })
-
--- | A Lambda-assigned unique identifier for the current function code and related
--- configuration.
-ufrConfigurationId :: Lens' UploadFunctionResponse (Maybe Text)
-ufrConfigurationId =
-    lens _ufrConfigurationId (\s a -> s { _ufrConfigurationId = a })
-
--- | The user-provided description.
-ufrDescription :: Lens' UploadFunctionResponse (Maybe Text)
-ufrDescription = lens _ufrDescription (\s a -> s { _ufrDescription = a })
-
--- | The Amazon Resource Name (ARN) assigned to the function.
-ufrFunctionARN :: Lens' UploadFunctionResponse (Maybe Text)
-ufrFunctionARN = lens _ufrFunctionARN (\s a -> s { _ufrFunctionARN = a })
-
--- | The name of the function.
-ufrFunctionName :: Lens' UploadFunctionResponse (Maybe Text)
-ufrFunctionName = lens _ufrFunctionName (\s a -> s { _ufrFunctionName = a })
-
--- | The function Lambda calls to begin executing your function.
-ufrHandler :: Lens' UploadFunctionResponse (Maybe Text)
-ufrHandler = lens _ufrHandler (\s a -> s { _ufrHandler = a })
-
--- | The timestamp of the last time you updated the function.
-ufrLastModified :: Lens' UploadFunctionResponse (Maybe Text)
-ufrLastModified = lens _ufrLastModified (\s a -> s { _ufrLastModified = a })
-
--- | The memory size, in MB, you configured for the function. Must be a multiple
--- of 64 MB.
-ufrMemorySize :: Lens' UploadFunctionResponse (Maybe Natural)
-ufrMemorySize = lens _ufrMemorySize (\s a -> s { _ufrMemorySize = a }) . mapping _Nat
-
--- | The type of the Lambda function you uploaded.
-ufrMode :: Lens' UploadFunctionResponse (Maybe Mode)
-ufrMode = lens _ufrMode (\s a -> s { _ufrMode = a })
-
--- | The Amazon Resource Name (ARN) of the IAM role that Lambda assumes when it
--- executes your function to access any other Amazon Web Services (AWS)
--- resources.
-ufrRole :: Lens' UploadFunctionResponse (Maybe Text)
-ufrRole = lens _ufrRole (\s a -> s { _ufrRole = a })
-
--- | The runtime environment for the Lambda function.
-ufrRuntime :: Lens' UploadFunctionResponse (Maybe Runtime)
-ufrRuntime = lens _ufrRuntime (\s a -> s { _ufrRuntime = a })
-
--- | The function execution time at which Lambda should terminate the function.
--- Because the execution time has cost implications, we recommend you set this
--- value based on your expected execution time. The default is 3 seconds.
-ufrTimeout :: Lens' UploadFunctionResponse (Maybe Natural)
-ufrTimeout = lens _ufrTimeout (\s a -> s { _ufrTimeout = a }) . mapping _Nat
-
-instance ToPath UploadFunction where
-    toPath UploadFunction{..} = mconcat
-        [ "/2014-11-13/functions/"
-        , toText _ufFunctionName
-        ]
-
-instance ToQuery UploadFunction where
-    toQuery UploadFunction{..} = mconcat
-        [ "Runtime"     =? _ufRuntime
-        , "Role"        =? _ufRole
-        , "Handler"     =? _ufHandler
-        , "Mode"        =? _ufMode
-        , "Description" =? _ufDescription
-        , "Timeout"     =? _ufTimeout
-        , "MemorySize"  =? _ufMemorySize
-        ]
-
-instance ToHeaders UploadFunction
-
-instance ToBody UploadFunction where
-    toBody = toBody . _ufFunctionZip
-
-instance AWSRequest UploadFunction where
-    type Sv UploadFunction = Lambda
-    type Rs UploadFunction = UploadFunctionResponse
-
-    request  = stream PUT
-    response = jsonResponse
-
-instance FromJSON UploadFunctionResponse where
-    parseJSON = withObject "UploadFunctionResponse" $ \o -> UploadFunctionResponse
-        <$> o .:? "CodeSize"
-        <*> o .:? "ConfigurationId"
-        <*> o .:? "Description"
-        <*> o .:? "FunctionARN"
-        <*> o .:? "FunctionName"
-        <*> o .:? "Handler"
-        <*> o .:? "LastModified"
-        <*> o .:? "MemorySize"
-        <*> o .:? "Mode"
-        <*> o .:? "Role"
-        <*> o .:? "Runtime"
-        <*> o .:? "Timeout"
