Да, это возможно с помощью Lambda SDK.Поскольку вы выполняете свою функцию за экспресс-сервером, вам нужно будет передать событие, которое выглядит точно так же, как и API-шлюз, поэтому с точки зрения вызванной Lambda это будет просто вызов API-шлюза.
Выможете проверить docs , чтобы увидеть, как выглядит событие API Gateway, но, по сути, вам нужны только path и body (в случае POST, PUT, PATCH) запросов.Если вам нужны параметры запроса и т. Д., Вы также можете передать их.
Убедитесь, что для InvocationType
установлено значение RequestResponse
Вот пример в Node.js
:
const lambda = new AWS.Lambda();
await lambda
.invoke({
FunctionName: 'FunctionName',
InvocationType: 'RequestResponse',
Payload: JSON.stringify({
path: '/your_path',
}),
})
.promise();
РЕДАКТИРОВАНИЕ: У OP возникли проблемы с тем, как данные поступают из заданной функции Lambda в функцию Lambda на основе Express, поэтому я решил добавить свою собственную конфигурацию для сравнения:
const serverless = require('serverless-http');
const express = require('express');
const cors = require('cors');
const app = express();
const bodyParser = require('body-parser');
const routes = require('./routes');
app.use(cors());
app.use(bodyParser.json({ strict: false }));
app.use('/api', routes);
module.exports.handler = serverless(app);
Пример метода контроллера:
const fetchOne = async (req, res) =>
res
.status(200)
.json(await MyService.doSomething(req.body.someField));