Как превратить сервер node.js Express в лямбда-версию AWS? - PullRequest
1 голос
/ 03 мая 2019

У меня есть полноценный экспресс-сервер node.js со многими конечными точками.

Мне нужно преобразовать этот код в лямбда-код AWS. Во всех примерах, которые я видел, сервер экспресс-обслуживания предоставляет только одну конечную точку, и она определяется и экспортируется как export.handler.

Они подсказывают, как это сделать?

1 Ответ

1 голос
/ 03 мая 2019

Если я правильно вас понимаю, у вас есть приложение 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"
  }
}
...