Если я правильно вас понимаю, у вас есть приложение express.js, которое вы хотели бы запустить на Lambda?
Claudia.js может помочь вам развернуть ваше приложение на AWS Lambda.
Убедитесь, что вы настроили свои учетные данные для доступа к AWS, прежде чем запускать команды Claudia.
Ваш код должен быть слегка изменен для поддержки AWS Lambda и развертывания через Claudia.Вам нужно экспортировать свое приложение, а не запускать сервер с помощью app.listen.Ваш app.js должен выглядеть следующим образом:
'use strict'
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello world!'))
module.exports = app
Это может сломать локальный сервер Express, но вы можете добавить файл app.local.js со следующим содержимым:
'use strict'
const app = require('./app')
const port = process.env.PORT || 3000
app.listen(port, () =>
console.log(`Server is listening on port ${port}.`)
)
А затем запустите локальный сервер с помощью следующей команды:
node app.local.js
Чтобы приложение правильно работало с AWS Lambda, необходимо сгенерировать оболочку AWS Lambda для приложения Express.С Claudia вы можете сделать это, выполнив следующую команду в своем терминале:
claudia generate-serverless-express-proxy --express-module app
Где приложение - это имя файла записи вашего приложения Express, только без расширения .js.
На этом шаге был сгенерирован файл с именем lambda.js со следующим содержимым:
'use strict'
const awsServerlessExpress = require('aws-serverless-express')
const app = require('./app')
const binaryMimeTypes = [
'application/octet-stream',
'font/eot',
'font/opentype',
'font/otf',
'image/jpeg',
'image/png',
'image/svg+xml'
]
const server = awsServerlessExpress
.createServer(app, null, binaryMimeTypes)
exports.handler = (event, context) =>
awsServerlessExpress.proxy(server, event, context
)
Теперь вам нужно только развернуть приложение Express (с файлом lambda.js) на AWS Lambda и API Gateway, используяКоманда claudia create.
claudia create --handler lambda.handler --deploy-proxy-api --region eu-central-1
Через несколько секунд команда завершила и напечатала следующий ответ:
{
"lambda": {
"role": "awesome-serverless-expressjs-app-executor",
"name": "awesome-serverless-expressjs-app",
"region": "eu-central-1"
},
"api": {
"id": "iltfb5bke3",
"url": "https://iltfb5bke3.execute-api.eu-central-1.amazonaws.com/latest"
}
}