Security News
Node.js EOL Versions CVE Dubbed the "Worst CVE of the Year" by Security Experts
Critics call the Node.js EOL CVE a misuse of the system, sparking debate over CVE standards and the growing noise in vulnerability databases.
serverless-haskell
Advanced tools
Deploying Haskell code onto AWS Lambda using Serverless.
There are two ways to start, either via the stack template, or directly modifying a project. You may want to use the manual approach as the template specifies a specific stack resolver as it needs to hardcode the stack.yaml
file.
In either case, you will want to have Serverless installed, eg. npm install -g serverless
.
Create a Stack package for your code:
stack new mypackage https://raw.githubusercontent.com/seek-oss/serverless-haskell/master/serverless-haskell.hsfiles
Update the resolver in the stack.yaml
file. This is hardcoded as the resolver number is not known at template interpolation time. You should pick either the latest resolver, or one you have used before and have thus prebuilt many of the core packages for.
Install the dependencies and build the project:
cd mypackage
npm install
stack build
sls invoke local -f mypackage-func
This should invoke serverless locally and display output once everything has built.
Create a Stack package for your code:
stack new mypackage
LTS 10-17 are supported, older versions are likely to work too but untested.
Initialise a Serverless project inside the Stack package directory and install
the serverless-haskell
plugin:
cd mypackage
npm init -y
npm install --save serverless serverless-haskell@x.y.z
The version of the NPM package to install must match the version of the Haskell package.
Create serverless.yml
with the following contents:
service: myservice
provider:
name: aws
runtime: haskell
functions:
myfunc:
handler: mypackage.mypackage-exe
# Here, mypackage is the Haskell package name and mypackage-exe 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
Write your main
function:
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]
Add aeson
and serverless-haskell
to package.yaml
:
dependencies:
- base >= 4.7 && < 5
- aeson
- serverless-haskell
Build and test locally using sls invoke local
:
The serverless-haskell
plugin will build the package using Stack. Note that
the first build can take a long time. Consider adding export SLS_DEBUG=*
so
you can see what is happening.
export SLS_DEBUG=*
sls invoke local -f myfunc
Use sls deploy
to deploy the executable to AWS Lambda.
The serverless-haskell
plugin will build the package using Stack, then upload
it to AWS together with a JavaScript wrapper to pass the input and output
from/to AWS Lambda.
export SLS_DEBUG=*
sls deploy
You can test the function and see the invocation results with:
sls invoke -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. You
must use --useDocker
flag so that the native Haskell runtime works correctly.
When using Serverless Offline, make sure that the project directory is world-readable, otherwise the started Docker container will be unable to access the handlers and all invocations will return HTTP status 502.
See AWSLambda for documentation, including additional options to control the deployment.
master
branch is the stable version. It is normally released to Hackage once
new changes are merged via Git tags.
The package is also maintained in Stackage LTS, provided the dependencies are not blocking it.
stack test
.eslint
.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
pkg-config
pwgen
./integration-test/run.sh
. The exit code indicates success../integration-test/run.sh --dry-run
.stack.yaml
. To specify a different series, use RESOLVER_SERIES=lts-9
.--no-clean-dir
. This can speed up repeated test runs, but does not guarantee
the same results as a clean test.master
branch../bumpversion major|minor|patch
. This will increment the version number,
update the changelog, create and push the Git tag and the branch.master
,
taking care of the conflicts around version numbers and changelog, and release
the latest version as well.0.12.6
haskell
Docker image for building (#163)FAQs
Deploy Haskell binaries onto AWS Lambda
The npm package serverless-haskell receives a total of 11 weekly downloads. As such, serverless-haskell popularity was classified as not popular.
We found that serverless-haskell demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Critics call the Node.js EOL CVE a misuse of the system, sparking debate over CVE standards and the growing noise in vulnerability databases.
Security News
cURL and Go security teams are publicly rejecting CVSS as flawed for assessing vulnerabilities and are calling for more accurate, context-aware approaches.
Security News
Bun 1.2 enhances its JavaScript runtime with 90% Node.js compatibility, built-in S3 and Postgres support, HTML Imports, and faster, cloud-first performance.