Estoy usando serverless para implementar aws lambdas. Actualmente, mi configuración es que la puerta de enlace api activa una lambda y luego invoco de forma asíncrona otra lambda.
sin servidor.yml
service: scraper useDotenv: true #added this because deprecation notice frameworkVersion: '2' provider: name: aws runtime: nodejs14.x lambdaHashingVersion: 20201021 stage: prod region: us-east-2 functions: scraperRunner: handler: handler.scraperRunner provisionedConcurrency: 0 timeout: 90 events: - http: path: process/run method: post async: true runTargetSite: handler: handler.runTargetSite plugins: - serverless-offlineluego tengo un archivo handler.js donde defino ambas funciones del controlador:
'use strict'; const startScraper = require('./crawler/runner'); const AWS = require('aws-sdk'); AWS.config.region = 'us-east-2'; const lambda = new AWS.Lambda(); function processResponse(msg, statusCode, event) { return { statusCode: statusCode, headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': 'Content-Type', "Access-Control-Allow-Methods": "OPTIONS,POST,GET" }, body: JSON.stringify({ message: msg, input: event }) } } module.exports.scraperRunner = async (event) => { if (event) { const data = event; if (data.hasOwnProperty('target_id')) { const prov = [<array of objects>] for (const p of prov) { data['target'] = p.name const params = { FunctionName: 'provider-scraper-prod-runTargetSite', InvocationType: 'Event', // LogType: 'Tail', Payload: JSON.stringify(data) }; await lambda.invoke(params).promise() } return processResponse( 'Event successfully received', 200, event) } } return processResponse( 'Invalid body payload', 402, event) }; module.exports.runTargetSite = async function(event, context) { await startScraper(event) return processResponse( 'Event successfully received for runTargetSite', 200, event) }También he agregado los roles necesarios (creo):
Usando la línea de comando, puedo llamar al primer lambda que luego llama al segundo:
serverless invoke local --function scraperRunner --data '{"target": "_tpp_"}'Sin embargo, cuando se envía una solicitud de publicación al extremo de API Gateway, se activa la primera lambda (scraperRunner), pero no se invoca la segunda.