Abe Estrada

AWS SAM Lambda Local

Hay veces que es necesario ejecutar functiones de AWS Lambda en la computadora local para agilizar el desarrollo, en un principio era fácil probar el código en línea utilizando el editor de texto que ofrece AWS Lambda, pero a la hora de ir agregando dependencias, es necesario compilar la funcion y crear un archivo, y el edito de texto no permite esa flexbilidad.

Para empezar a ejecutar la función de manera local es necesario:

Suponiendo que se cuenta con una versión de NodeJS y Docker previamente instalados, hay que instalar AWS SAM.

En el caso de macOS se puede instalar utilizando brew:

brew tap aws/tap
brew install aws-sam-cli
sam --version

Luego hay que crear dos archivos, el primer es el template.yaml para NodeJS.

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  project-functions

  SAM Template

Globals:
  Function:
    Timeout: 3

Resources:
  ProjectFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: project/dist/
      Handler: index.handler
      Runtime: nodejs10.x

Y un archivo vació llamado event.json.

En mi caso estoy utilizando ncc para compilar las dependencias y generar un solo archivo index.js, desde luego se pueden utilizar otras opciones como Browserify, esta utilidad se puede instalar de la siguiente forma:

npm i -g @zeit/ncc

Lo siguiente es compilar todo en un solo archivo, suponiendo que tenemos un directorio llamado project/:

ncc build -m ./project/index.js -o ./project/dist

El archivo generado queda dentro de project/dist/, es el archivo que vamos a ejecutar:

sam local invoke ProjectFunction --event event.json
root/
├── project/
│   ├── dist/
│   │   └── index.js <--- compiled
│   └── index.js <--- source
├── event.json
└── template.yaml