Skip to main content Link Search Menu Expand Document (external link)

LambdaHandler overview

Added in v1.4.0


Table of contents


constructors

fromHttpApi

Construct a lambda handler from an HttpApi instance.

Signature

export declare const fromHttpApi: <LA, LE>(
  layer: Layer.Layer<LA | HttpApi.Api | HttpRouter.HttpRouter.DefaultServices, LE>,
  options?: {
    readonly middleware?: (
      httpApp: HttpApp.Default
    ) => HttpApp.Default<never, HttpApi.Api | HttpApiBuilder.Router | HttpRouter.HttpRouter.DefaultServices>
    readonly memoMap?: Layer.MemoMap
  }
) => Handler<LambdaEvent, LambdaResult>

Example

import { LambdaHandler } from "@effect-aws/lambda"
import { HttpApi, HttpApiBuilder, HttpServer } from "@effect/platform"
import { Layer } from "effect"

class MyApi extends HttpApi.make("api") {}

const MyApiLive = HttpApiBuilder.api(MyApi)

export const handler = LambdaHandler.fromHttpApi(
  Layer.mergeAll(
    MyApiLive,
    // you could also use NodeHttpServer.layerContext, depending on your
    // server's platform
    HttpServer.layerContext
  )
)

Added in v1.4.0

make

Makes a lambda handler from the given EffectHandler and optional global layer. The global layer is used to provide a runtime which will gracefully handle lambda termination during down-scaling.

Signature

export declare const make: {
  <T, R, E1, E2, A>(options: EffectHandlerWithLayer<T, R, E1, E2, A>): Handler<T, A>
  <T, E, A>(handler: EffectHandler<T, never, E, A>): Handler<T, A>
  <T, R, E1, E2, A>(handler: EffectHandler<T, R, E1, A>, globalLayer: Layer.Layer<R, E2>): Handler<T, A>
}

Example

import { LambdaHandler } from "@effect-aws/lambda"
import { Context } from "aws-lambda"
import { Effect } from "effect"

const effectHandler = (event: unknown, context: Context) => {
  return Effect.logInfo("Hello, world!")
}

export const handler = LambdaHandler.make(effectHandler)

Example

import { LambdaHandler } from "@effect-aws/lambda"
import { Context } from "aws-lambda"
import { Effect, Logger } from "effect"

const effectHandler = (event: unknown, context: Context) => {
  return Effect.logInfo("Hello, world!")
}

const LambdaLayer = Logger.replace(Logger.defaultLogger, Logger.logfmtLogger)

export const handler = LambdaHandler.make({
  handler: effectHandler,
  layer: LambdaLayer
})

Added in v1.0.0