No description
Find a file
2019-09-23 17:44:48 -04:00
img Update README screenshot 2018-11-29 18:26:25 -05:00
awslambda.nim Prefer deadline as a Time instead of just ms 2018-11-29 18:23:46 -05:00
awslambda.nimble Prefer deadline as a Time instead of just ms 2018-11-29 18:23:46 -05:00
LICENSE Add LICENSE 2019-09-23 17:30:21 -04:00
README.md Can now install awslambda straight from nimble 2018-11-30 14:56:31 -05:00

Nim on AWS Lambda

Write your Lambda functions in nim using the custom runtime and get tiny binaries (250kb) and single-digit millisecond cold starts!

Log output

Function Example

Create a bootstrap.nim with the following:

import awslambda, json, times

proc handler(event: JsonNode, context: LambdaContext): JsonNode =
  echo "Hi from nim! Invocation will timeout at: ", context.deadline.format("yyyy-MM-dd'T'HH:mm:ss'.'fff")

  event["newKey"] = %*"newVal"

  event


when isMainModule:
  startLambda(handler)

Compiling

# if you're using Linux, you probably don't need to compile in docker, but assuming you're not:

docker run --rm -v "$PWD":/app -w /app nimlang/nim \
  sh -c 'nimble install -y awslambda && nim c -d:release bootstrap.nim'

zip -yr lambda.zip bootstrap # and anything else your binary needs

Then upload lambda.zip as the function code for your (custom runtime) Lambda.

Documentation

startLambda

proc startLambda*(handler: proc(event: JsonNode, context: LambdaContext): JsonNode)

This processes the event processing loop and takes a handler proc that should take the form:

proc handler(event: JsonNode, context: LambdaContext): JsonNode

LambdaContext

Each invocation will also have the following context object populated:

type
  LambdaContext* = tuple
    functionName: string
    functionVersion: string
    memoryLimitInMb: int
    logGroupName: string
    logStreamName: string
    awsRequestId: string
    invokedFunctionArn: string
    deadline: Time
    identity: JsonNode
    clientContext: JsonNode