Skip to content

lambci/awslambda.nim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

A package to compile nim functions for AWS Lambda

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages