El post anterior hemos hablado de cómo funciona o cómo desarrollar una lambda con el framework de Serverless.

Ahora toca probar de lanzar una lambda con un trigger asociado de tipo schedule dentro del framework Serverless y para ello utilizaremos el plugin: serverless-offline-shceduler

El proyecto podéis encontrarlo en: GitHub

QUÉ DEPENDENCIAS ESTAN IMPLICADAS

{
"name": "serverless-scheduler",
"version": "1.0.0",
"description": "example of serverless",
"main": "index.js",
"scripts": {},
"author": "Alberto Pascual",
"license": "ISC",
"engines": {
"node": "12"
},
"dependencies": {
"serverless-offline-scheduler": "^0.4.2",
"serverless-plugin-typescript": "^1.1.9",
"typescript": "^4.0.2"
},
"devDependencies": {
"@types/aws-lambda": "^8.10.61",
"aws-lambda": "^1.0.6"
}
}

Para desarrollar esta parte y como nuestro target es AWS, importaremos para poder desarrollar la librería de AWS y los tipos para nuestro typescript.

Por otro lado podemos ver los plugins que nos dan soporte al modo offline y a trabajar con typescript.

LA CONFIGURACIÓN DE SERVERLESS.YML

service: serverless-aws-provider

provider:
name: aws
runtime: nodejs8.10

plugins:
- serverless-plugin-typescript
- serverless-offline-scheduler

functions:
the-schedule: ${file(configuration/schedule.yml)}

Es bastante simple y minima para que podáis jugar con ella. Tenemos la version de runtime de node (podéis subirla) y la definición de la función:

handler: src/example/schedule.handler
description: "Serverless scheduler aws example offline"
events:
    - schedule: cron(0/2 * * * ? *)

Cómo podéis imaginar y como comparto el proyecto no pongo los path de los archivos, tan sólo entrar en el enlace de arriba de git.

Lo más destacable en este último fichero es la definición del «schedule», que es el de un cron, como puede ser el cron de linux.

OTROS FICHEROS

{
"compilerOptions": {
"target": "ES2015",
"module": "commonjs",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true ,
"rootDir": "./",
"typeRoots": ["node_modules/@types"],
"moduleResolution": "node"
},
"include" : ["./**/*"],
"exclude" : ["node_modules", "build", "test"]
}

Este sería el de typescript, poco que decir, también es bastante concreto para este ejemplo.

import {
    ScheduledEvent,
    Context,
    Handler
} from 'aws-lambda';

export const handler: Handler = async (event : ScheduledEvent, context: Context) => {
    console.log(new Date());
}

Cómo habéis visto en la imagen inicial, nos devuelve una fecha y este sería el aspecto de la función handler y sus posibles atributos.

COMO LANZARLO

Primero obviamente es instalar serverless

npm install -g serverless

Esto instalaría serverless de manera global -g y ya podríamos disponer del comando: serverless.

Luego instalaremos los paquetes necesarios con el comando: npm install en la raíz del proyecto y con esto ya podremos ver como funciona con

sls schedule

Deja una respuesta