| Stability | experimental |
|---|---|
| Portability | POSIX |
| Safe Haskell | None |
| Language | Haskell2010 |
AWSLambda
Description
Tools for running Haskell on AWS Lambda.
Usage
To deploy a Haskell function on AWS Lambda:
- Initialise a Serverless project in the same directory as your Stack-enabled package.
- Install
serverless-haskellplugin (Warning: not uploaded to NPM registry yet, install manually by cloning this repository and specifying itsserverless-plugindirectory tonpm install). - Add the following to
serverless.yml:
provider:
name: aws
runtime: nodejs6.10
functions:
myfunc:
handler: mypackage.myfunc
# Here, mypackage is the Haskell package name and myfunc is the executable
# name as defined in the Cabal file
plugins:
- serverless-haskell- Write your
mainfunction usinglambdaMain. - Use
sls deployto deploy the executable to AWS Lambda. Note:sls deploy functionis not supported.
Additional features
To add flags to stack build, add the following key to serverless.yml:
custom:
haskell:
stackBuildArgs:
- --pedantic
- --allow-different-user- lambdaMain :: (FromJSON event, ToJSON res) => (event -> IO res) -> IO ()
- module AWSLambda.Events
Documentation
Process incoming events from serverless-haskell using a provided
function.
The handler receives the input event given to the AWS Lambda function, and its return value is returned from the function.
This is intended to be used as main, for example:
import qualified Data.Aeson as Aeson import AWSLambda main = lambdaMain handler handler :: Aeson.Value -> IO [Int] handler evt = do putStrLn "This should go to logs" print evt pure [1, 2, 3]
The handler function can receive arbitrary JSON values from custom
invocations, or one of the events from the AWSLambda.Events module, such as
S3Event:
import AWSLambda.Events.S3Event handler :: S3Event -> IO () handler evt = do print $ records evt
If the Lambda function needs to process several types of events, use
Alternative to combine several handlers:
import AWSLambda import AWSLambda.Events.S3Event import Data.Aeson import Data.Aeson.Alternative main = lambdaMain $ handlerS3 `alternative` handlerCustom handlerS3 :: S3Event -> IO () handlerS3 = _ handlerCustom :: Value -> IO () handlerCustom = _
When run outside the AWS Lambda environment, the input is read as JSON from the command line, and the result of the execution is printed, also as JSON, to the standard output.
module AWSLambda.Events