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