A package to compile nim functions for AWS Lambda
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
img Update README screenshot Nov 29, 2018
README.md Can now install awslambda straight from nimble Nov 30, 2018
awslambda.nim Prefer deadline as a Time instead of just ms Nov 29, 2018
awslambda.nimble Prefer deadline as a Time instead of just ms Nov 29, 2018

README.md

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