- NPM Downloads Last Month
Deploying Haskell code onto AWS Lambda using Serverless.
Create a Stack package for your code:
stack new mypackage
LTS 9-12 are supported, older versions are likely to work too but untested.
Initialise a Serverless project inside the Stack package directory and install the
cd mypackage npm init . npm install --save serverless firstname.lastname@example.org
The version of the NPM package to install must match the version of the Haskell package.
serverless.yml with the following contents:
service: myservice provider: name: aws runtime: nodejs8.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. The handler field may be prefixed # with a path of the form `dir1/.../dirn`, relative to `serverless.yml`, # which points to the location where the Haskell package `mypackage` is # defined. This prefix is not needed when the Stack project is defined at # the same level as `serverless.yml`. plugins: - serverless-haskell
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]
sls deploy to deploy the executable to AWS Lambda. Note:
sls deploy function is not supported yet.
You can test the function and see the invocation results with
sls invoke myfunc.
To invoke the function locally, use
sls invoke local -f myfunc.
This plugin supports handling API Gateway requests. Declare the HTTP events normally in
serverless.yml and use AWSLambda.Events.APIGateway in the handler to process them.
Serverless Offline can be used for local testing of API Gateway requests.
sls deploy functionis not supported yet.
See AWSLambda for documentation, including additional options to control the deployment.
Integration test verifies that the project can build and deploy a complete function to AWS, and it runs with expected functionality.
Integration test is only automatically run up to deployment due to the need for an AWS account. To run manually:
curl, jq, NPM,
./integration-test/run.sh. The exit code indicates success.
pip install bumpversion.
git push --tags && git push.