[Перевод] Express.js и AWS Lambda  —  История любви о бессерверных технологиях

JavaScript Программа перевода самородков Express AWS

Независимо от того, являетесь ли вы профессиональным разработчиком Node.js или обычным разработчиком, разработавшим API с помощью Node.js, вы, скорее всего, будете использоватьExpress.js. Express, пожалуй, самый популярный фреймворк в Node.js.

Создание экспресс-приложений чрезвычайно просто. Вам просто нужно добавить некоторые правила маршрутизации и соответствующие обработчики, и родится простое приложение.

Легенда: Простое приложение Express.js, использующее традиционные методы хостинга — процесс ответа на один запрос.

В следующем коде показано простейшее экспресс-приложение:

'use strict'

const express = require('express')
const app = express()

app.get('/', (req, res) => res.send('Hello world!'))

const port = process.env.PORT || 3000
app.listen(port, () => 
  console.log(`Server is listening on port ${port}.`)
)

Если вы сохраните приведенный выше фрагмент кода какapp.js, затем, выполнив еще три шага, вы сможете настроить и запустить это простое экспресс-приложение.

  1. Сначала измените рабочий каталог терминала наapp.jsпапку, в которой он находится, а затем выполнитьnpm init -yкоманда для инициализации нового проекта Node.js.
  2. Выполнить через терминалnpm install express --saveкоманда для установки модуля Express из NPM.
  3. воплощать в жизньnode app.jsкоманда, терминал выдаст эхо «Сервер прослушивает порт 3000».

Вуаля, это завершает экспресс-приложение. Если вы используете браузер для посещения http://localhost:3000, вы можете увидеть сообщение «Hello world!» на открытой веб-странице.

Развертывание приложения

Возникает неприятный вопрос: как вы можете показать своим друзьям или семье созданное вами приложение Express? Как сделать его доступным для всех?

Развертывание приложения — трудоемкий и болезненный процесс, но сейчас мы будем считать, что вы хорошо поработали, развернув его быстро. Ваше приложение уже доступно для всех и с тех пор работает нормально.

И так до тех пор, пока в один прекрасный день ваше приложение не начнет использовать внезапный приток пользователей.

Ваш сервер начинает уставать, но все еще работает.

Легенда: Простое приложение Express.js, использующее традиционные методы хостинга — под большой нагрузкой.

После того, как это продолжалось некоторое время, это, наконец, пошло вниз. ☠️

Легенда: простое приложение Express.js, использующее традиционные методы хостинга — приложение аварийно завершает работу из-за слишком большого количества посещений пользователей.

Большое количество пользователей стали недовольны тем, что приложение было недоступно (независимо от того, заплатили они за него или нет). Вы отчаиваетесь и начинаете искать решение в Google. Можно ли улучшить статус-кво, развернув его в облаке?

Легенда: Развертывание в облаке должно решить проблему масштабирования приложения, верно?

В этот момент вы встречаете предыдущего надоедливого друга, который рассказывает вам о бессерверных технологиях. Но подождите, теперь у вас есть сервер. Хотя этот сервер предоставляется поставщиком услуг, и его состояние не очень хорошее и временно вышло из-под контроля, вы всегда можете его использовать.

Легенда: Тем не менее, за Serverless все еще стоит куча серверов!

Когда вы в растерянности, вы готовы попробовать все, чтобы «спасти» свое приложение, будь то бессерверное приложение или какая-то другая черная магия. «Но что же такое Serverless?»

Вы пролистали несколько страниц, в том числе книгу "Бессерверные приложения с Node и Claudia.js"Пробное чтение главы 1(Опубликовано Manning Publications Co.).

В этой главе автор использует аналогию со стиральной машиной, чтобы проиллюстрировать принцип бессерверной работы, что звучит безумно, но очень полезно объяснить принцип. Ваше приложение дошло до того, что оно 🔥 сжигает ваши брови, поэтому вы решаете сразу же попробовать бессерверную версию.

Сделайте свое приложение Express.js бессерверным

Целая глава в приведенной выше книге написана на основе бессерверных решений AWS. Вы уже знаете, что бессерверный API состоит из функций API Gateway и AWS Lambda. Теперь нужно подумать о том, как сделать ваше приложение Express безсерверным.

Так же, как сюжет, изображенный в фильме Мэтта Дэймона «Уменьшился», Serverless также имеет неограниченный потенциал и возможности в будущем.

Легенда. Как сделать так, чтобы ваше приложение Express.js легко подключалось к AWS Lambda?

ClaudiaМожет помочь вам развернуть ваше приложение на AWS Lambda —  Попросите его о помощи!

Перед запуском команды Claudia убедитесь, что вы ссылалисьруководствоУчетные данные для доступа к AWS настроены.

Чтобы иметь возможность подключиться к AWS Lambda и выполнить развертывание с помощью Claudia, ваш код необходимо немного изменить. вам нужно экспортироватьapp, вместо вызова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, выполнив в терминале единственную команду:

claudia generate-serverless-express-proxy --express-module app

в конце командыappУказывает имя файла записи Express App, здесь добавлять не нужно.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
)

На данный момент все подготовительные работы завершены! Далее вам просто нужно выполнитьclaudia createкоманда для преобразования вашего экспресс-приложения (включаяlambda.jsфайл) в AWS Lambda и API Gateway.

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"
  }
}

Откройте в браузере ссылку, возвращенную в ответном сообщении. Если на веб-странице отображается «Hello world!», это доказывает, что приложение было успешно развернуто! 🙀

Легенда: бессерверное экспресс-приложение.

Сделав ваше приложение бессерверным, вы больше не боитесь дальнейшего расширения пользовательской базы, и приложение всегда останется доступным.

Это не преувеличение, поскольку по умолчанию AWS Lambda поддерживает до 1000 функций, одновременно выполняемых посредством автомасштабирования. Когда API Gateway получит запрос, новая функция будет доступна в течение короткого периода времени.

Легенда: приложение Serverless Express.js под большой нагрузкой.

Это не единственное преимущество, которое вы получаете от присоединения к Serverless. При условии, что приложение не будет остановлено из-за высокой нагрузки, вы также можете уменьшить накладные расходы многих приложений. С AWS Lambda вы платите только за фактический трафик вашего приложения. Аналогичным образом, бесплатная пробная программа AWS также предоставит вам 1 миллион бесплатного трафика на приложение в месяц за одно посещение.

Заголовок: Ваше бессерверное приложение действительно экономит ваши деньги!

Чтобы узнать больше о преимуществах использования Serverless, нажмите здесьэтостатья.

Недостатки приложения Serverless Express.js

Несмотря на то, что приложение Serverless Express звучит великолепно, у него есть свои недостатки.

Легенда: Бессерверная, «кастрированная» версия.

Вот некоторые из самых «смертельных» недостатков приложения Serverless Express:

  • WebsocketsНедоступно в AWS Lambda. Это связано с тем, что в AWS Lambda, если у приложения нет доступа, ваш сервер объективно не существует.AWS IOT websockets over MQTT protocolМожет быть предоставлена ​​«кастрированная» версия поддержки Websockets.
  • загрузитьфайл в файловую систему также не будет работать, если ваш каталог загрузки/tmpпапка. Это связано с тем, что функция AWS Lambda доступна только для чтения в файловой системе, даже если вы загружаете файл в/tmpпапки, они также существуют только тогда, когда функция «работает». Чтобы убедиться, что функция загрузки в вашем приложении работает, вы должны загружать и сохранять файлы в AWS S3.
  • Ограничения исполненияЭто также повлияет на функциональность вашего приложения Serverless Express. Например, у API Gateway ограничение времени ожидания составляет 30 секунд, максимальное время выполнения AWS Lambda не может превышать 5 минут и т. д.

Это только начало бессерверной истории любви между вашим приложением и AWS Lambda. С нетерпением ждите новых историй любви в ближайшее время!

Как всегда спасибо от друзейАлександр Симовича такжеМилован Йовичичза помощь и отзывы о статьях.

Все иллюстрации использованыSimpleDiagrams4Созданный.

Если вы хотите узнать больше о Serverless Express и бессерверных приложениях, не пропустите книгу «Бессерверные приложения с Node и Claudia.js». Эта книга написана мной иAleksandar SimovicСотрудничество было завершено, и Manning Publications отвечала за публикацию:

В дополнение к большому количеству знаний о приложениях Serverless Express, эта книга также научит вас, как использовать Node и Claudia.js для создания и отладки реальных бессерверных API (включая базу данных и проверку личности). В нем также объясняется, как создать чат-бота для Facebook Messenger и SMS (с помощью Twilio) и как развить навыки Amazon Alexa.

снова кAleksandar SimovicМоя сердечная благодарность.


Программа перевода самородковэто сообщество, которое переводит высококачественные технические статьи из Интернета сНаггетсДелитесь статьями на английском языке на . Охват контентаAndroid,iOS,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллекти другие поля, если вы хотите видеть больше качественных переводов, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.