0.2.5-bodyfix • Published 7 months ago

@eduardocalazansjr/lambda-handlers v0.2.5-bodyfix

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

@stone-ton/lambda-handlers

Lib para fazer wrapper de lambdas

Lambda trigada pela API Gateway como proxy (múltiplas rotas numa lambda)

import { LambdaApiProxyHandler, Controller } from '@stone-ton/lambda-handlers'
import { APIGatewayProxyHandler } from 'aws-lambda'
import authentication from './authentication'
import foo from './controllers/foo'

const api = new LambdaApiProxyHandler({
  base: process.env.ADMIN_API_BASE_PATH,
})

const foo: Controller = (req) => {
  return Promise.resolve({
    body: {
      message: 'Hello World'
    },
  })
}

export const handler: APIGatewayProxyHandler = async (
  event,
  context,
) => {
  api.addRoute({
    method: 'GET',
    path: '/',
    run: foo,
    auth: authentication(['admin']),
  })

  return api.handler(event, context)
}

Lambda trigada pela API Gateway como proxy (uma rota por lambda)

import { Controller, LambdaApiHandler } from '@stone-ton/lambda-handlers'
import { APIGatewayProxyHandler } from 'aws-lambda'

const getUserController: Controller = async (request) => {
  const user = await getUser(request.params.id)

  return {
    body: user,
  }
}

const apiHandler = new LambdaApiHandler(getUserController)

export const handler: APIGatewayProxyHandler = async (
  event,
  context,
) => {
  return apiHandler.handler(event, context)
}

Lambda trigada por SQS

import { LambdaSqsHandler, Worker } from '@stone-ton/lambda-handlers'
import { SQSHandler } from 'aws-lambda'

interface CreateUserMessage {
  user_id: string
}

const workerCreateUser: Worker<CreateUserMessage> = async (messages) => {
  for (const { body } of messages) {
    const user = await getUser(body.user_id)
  }
}

const sqsHandler = new LambdaSqsHandler(workerCreateUser)

export const handler: SQSHandler = async (event) => {
  return sqsHandler.handler(event)
}

Lambda trigada por SQS (Worker com processamento em paralelo)

import { LambdaSqsHandlerV2, WorkerV2 } from '@stone-ton/lambda-handlers'
import { SQSHandler } from 'aws-lambda'

interface CreateUserMessage {
  user_id: string
}

const workerCreateUser: WorkerV2<CreateUserMessage> = async (message, logger) => {
  logger.debug('Start create user')
  const user = await getUser(body.user_id)
}

const sqsHandler = new LambdaSqsHandler({
  worker: workerCreateUser,
  parallel: false,
  service: 'migraton',
})

export const handler: SQSHandler = async (event) => {
  return sqsHandler.handler(event)
}

A LambdaSqsHandlerV2 precisa ter o Report Batch Item Failures habilitado. Abaixo exemplo com terraform:

resource "aws_lambda_event_source_mapping" "event_handler" {
  event_source_arn        = module.sqs_event_handler.sqs_arn
  function_name           = module.event_handler.arn
  batch_size              = 1
  function_response_types = ["ReportBatchItemFailures"]
}

Lambda trigada pelo sdk

import { LambdaInvokeHandler, InvokeHandler } from '@stone-ton/lambda-handlers'
import { Handler } from 'aws-lambda'

interface CreateUserRequest {
  user_id: string
}

interface CreateUserResponse {
  message: string
}

const createUserInvoke: InvokeHandler<CreateUserRequest, CreateUserResponse> = async (event) => {
  return {
    message: event.user_id
  }
}

const invokeHandler = new LambdaInvokeHandler(createUserInvoke)

export const handler: Handler<CreateUserRequest, CreateUserResponse> = async (event) => {
  return invokeHandler.handler(event)
}
0.2.5-bodyfix

7 months ago

0.2.4-bodyfix

7 months ago