anmonteiro/aws-lambda-ocaml-runtime

An OCaml custom runtime for AWS Lambda and Vercel

OCaml

207

77 commits

updated Mar 26, 2023

See the code

README

OCaml Runtime for AWS Lambda

This package provides a custom runtime for AWS Lambda.

Installation

This repository provides two libraries:

  • lambda-runtime provides a runtime and API for AWS Lambda and API Gateway.
  • the vercel library depends on lambda-runtime and provides an interface to the Vercel service that resembles a request / response exchange.

The libraries in this repo are released to the OPAM package registry.

You can depend on them via:

  1. esy: esy add @opam/lambda-runtime and / or esy add @opam/vercel
  2. OPAM: opam install lambda-runtime vercel.

Example function

See the examples folder.

Deploying

Note: Based on the instructions in this blog post and the Rust custom runtime repository

For a custom runtime, AWS Lambda looks for an executable called bootstrap in the deployment package zip. Rename the generated basic executable to bootstrap and add it to a zip archive.

The Dockerfile (in conjunction with the build.sh script) in this repo does just that. It builds a static binary called bootstrap and drops it in the target directory.

$ ./build.sh && zip -j ocaml.zip bootstrap

Now that we have a deployment package (ocaml.zip), we can use the AWS CLI to create a new Lambda function. Make sure to replace the execution role with an existing role in your account!

$ aws lambda create-function --function-name OCamlTest \
  --handler doesnt.matter \
  --zip-file file://./ocaml.zip \
  --runtime provided \
  --role arn:aws:iam::XXXXXXXXXXXXX:role/your_lambda_execution_role \
  --tracing-config Mode=Active

You can now test the function using the AWS CLI or the AWS Lambda console

$ aws lambda invoke --function-name OCamlTest \
  --payload '{"firstName": "world"}' \
  output.json
$ cat output.json  # Prints: {"message":"Hello, world!"}

Copyright © 2018 António Nuno Monteiro

Distributed under the 3-clause BSD License (see LICENSE).

aws-lambda
ocaml
serverless

Contributors

anmonteiro

74 commits

joprice

1 commits

superherointj

1 commits

anmonteiro/aws-lambda-ocaml-runtime

An OCaml custom runtime for AWS Lambda and Vercel

OCaml

207

77 commits

updated Mar 26, 2023

See the code

README

OCaml Runtime for AWS Lambda

This package provides a custom runtime for AWS Lambda.

Installation

This repository provides two libraries:

  • lambda-runtime provides a runtime and API for AWS Lambda and API Gateway.
  • the vercel library depends on lambda-runtime and provides an interface to the Vercel service that resembles a request / response exchange.

The libraries in this repo are released to the OPAM package registry.

You can depend on them via:

  1. esy: esy add @opam/lambda-runtime and / or esy add @opam/vercel
  2. OPAM: opam install lambda-runtime vercel.

Example function

See the examples folder.

Deploying

Note: Based on the instructions in this blog post and the Rust custom runtime repository

For a custom runtime, AWS Lambda looks for an executable called bootstrap in the deployment package zip. Rename the generated basic executable to bootstrap and add it to a zip archive.

The Dockerfile (in conjunction with the build.sh script) in this repo does just that. It builds a static binary called bootstrap and drops it in the target directory.

$ ./build.sh && zip -j ocaml.zip bootstrap

Now that we have a deployment package (ocaml.zip), we can use the AWS CLI to create a new Lambda function. Make sure to replace the execution role with an existing role in your account!

$ aws lambda create-function --function-name OCamlTest \
  --handler doesnt.matter \
  --zip-file file://./ocaml.zip \
  --runtime provided \
  --role arn:aws:iam::XXXXXXXXXXXXX:role/your_lambda_execution_role \
  --tracing-config Mode=Active

You can now test the function using the AWS CLI or the AWS Lambda console

$ aws lambda invoke --function-name OCamlTest \
  --payload '{"firstName": "world"}' \
  output.json
$ cat output.json  # Prints: {"message":"Hello, world!"}

Copyright © 2018 António Nuno Monteiro

Distributed under the 3-clause BSD License (see LICENSE).

aws-lambda
ocaml
serverless

Contributors

anmonteiro

74 commits

joprice

1 commits

superherointj

1 commits

Languages

OCaml

88.2%

Nix

4.6%

Makefile

3.9%

Standard ML

3.3%