- Оригинальный адрес:Express.js и AWS Lambda — история любви без сервера
- Оригинальный автор:Слободан Стоянович
- Перевод с:Программа перевода самородков
- Постоянная ссылка на эту статью:GitHub.com/rare earth/gold-no…
- Переводчик:Лю Цзяи
- Корректор:FateZeros,Han Song
Независимо от того, являетесь ли вы профессиональным разработчиком 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, затем, выполнив еще три шага, вы сможете настроить и запустить это простое экспресс-приложение.
- Сначала измените рабочий каталог терминала на
app.js
папку, в которой он находится, а затем выполнитьnpm init -y
команда для инициализации нового проекта Node.js. - Выполнить через терминал
npm install express --save
команда для установки модуля Express из NPM. - воплощать в жизнь
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,внешний интерфейс,задняя часть,блокчейн,продукт,дизайн,искусственный интеллекти другие поля, если вы хотите видеть больше качественных переводов, пожалуйста, продолжайте обращать вниманиеПрограмма перевода самородков,официальный Вейбо,Знай колонку.