Разработка сайтов в Приволье, ЛНР. Создавайте бессерверные микросервисы с помощью Node.js и AWS Lambda

 
 

Если вы когда-либо хотели написать веб-приложение или API, не возясь с сервером, Amazon Lambda может быть тем, что вы ищете.

Amazon Web Services (AWS) — это набор инструментов для разработчиков, которые Amazon разрабатывает и публично предлагает. Эта статья поможет вам начать работу с Lambda, инструментом в наборе AWS. Мы будем использовать Lambda для создания конечной точки HTTP GET, которая будет отправлять запросы с использованием GitHub API, чтобы получать информацию о репозитории из GitHub и возвращать ответ JSON.

Слоган Lambda — «Запускайте код, не думая о серверах». На первый взгляд это может показаться запутанным. Где и как тогда работает код? Давайте узнаем.

Чтобы следовать этой статье, вам потребуется собственная учетная запись AWS. Вы можете создать бесплатную учетную запись AWS на сайте aws.amazon.com.

Создавайте бессерверные микросервисы с помощью Node.js и AWS Lambda

Бессерверные решения и функции как услуга

«Бессерверный» — это термин программной инфраструктуры, о котором вы, возможно, слышали. В нем описывается решение для выполнения кода по требованию. Термин «бессерверный» может ввести в заблуждение, потому что в уравнении все еще есть серверы. Лучшее описание — FaaS или «функционирует как услуга».

Оба определения описывают новый опыт разработки и развертывания. Этот опыт считается «бессерверным», потому что вам, как разработчику, больше не нужно управлять, отслеживать или масштабировать какие-либо серверы, на которых выполняется ваш код. Вы загружаете свой код поставщику FaaS (в данном случае AWS Lambda), а поставщик FaaS выполняет его и управляет любой инфраструктурой для вас за кулисами.

Плюсы и минусы бессерверной архитектуры

Учитывая это расширенное определение «бессерверной» архитектуры, давайте рассмотрим некоторые плюсы и минусы при работе с Lambda.

Плюсы

Цены на использование по запросу.

Традиционный серверный хостинг использует повторяющийся цикл выставления счетов. Ваш сервер всегда включен и работает, используя ресурсы и ожидая ввода. Вы платите ежемесячную или ежегодную плату, чтобы поддерживать его работу в течение всего платежного цикла. С Lambda вы платите только за используемые вычислительные ресурсы, а не за время простоя. У Lambda есть две модели ценообразования за использование: продолжительность и параллелизм.

Ценообразование

продолжительности Ценообразование длительности Lambda вычисляет цены на основе времени, когда функция начинает выполняться до ее завершения. Этот расчет цены выгоден для проектов, использующих кратковременные вычислительные ресурсы. Вы можете сэкономить значительную сумму денег по сравнению с традиционными «неактивными» хостинговыми решениями.

Цены на продолжительность лямбда следующие:

0,20 доллара США за 1 миллион запросов

0,00001667 долларов США за каждый гигабайт-секунду времени вычислений, при этом каждое выполнение округляется до ближайших 100 мс.

Стоимость продолжительности зависит от предварительно настроенного использования памяти развернутой функцией. Эта изменчивость продолжительности и памяти создает матрицу ценообразования, которая более подробно описана на странице цен Lambda.

Ценообразование в режиме параллелизма Ценообразование

в режиме Provisioned Concurrency рассчитывается с момента его включения до отключения. Режим параллелизма поддерживает готовность лямбда-функций и удаляет время запуска из режима длительности.

Цены на параллелизм Lambda следующие:

Provisioned Concurrency — 0,0000041667 USD за каждую ГБ-секунду.

Запросы составляют 0,20 доллара США за 1 млн запросов.

Продолжительность составляет $0,0000097222 за каждый ГБ-секунду.

Страница с ценами на AWS содержит дополнительные сведения и примеры матрицы ценообразования. Узнайте больше на странице цен на Lambda.

Встроенное автоматическое масштабирование

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

Минусы

Несогласованный рабочий процесс локальной разработки.

Вы можете написать код функции Lambda локально и протестировать его изолированно. Тем не менее, вы не сможете смоделировать производственную среду локально, не создав свою хакерскую версию Lambda.

Ключевые понятия Lambda: код и триггеры

В Lambda есть два основных понятия: код и триггеры. Код говорит сам за себя. В нашем случае это код JavaScript, который вы пишете и загружаете в Lambda для получения желаемого поведения.

После загрузки код не будет выполняться сам по себе. Здесь на помощь приходят триггеры. Триггеры — это события, запускаемые другими сервисами AWS, которые передают данные в функцию Lambda для выполнения.

Некоторые примеры триггеров видны, когда:

HTTP-запрос к AWS API Gateway запускает лямбда-код

событие запускается с интервалом, как задание cron из CloudWatch Events

таблица DynamoDB обновляется и запускает лямбда-код

Сигнатура функции лямбда-кода

Вы определяете функцию Lambda, экспортируя обычную функцию из JavaScript, которая соответствует ожидаемой подписи Lambda:

exports.myLambdaFunction = (event, context, callback) => {

// Use callback () and return

}

Функция получает три аргумента:

event: словарь пар ключ-значение «данные триггера», которые Lambda передает функции.

context: внутренняя информация AWS, такая как идентификатор запроса AWS, время ожидания истечения срока действия Lambda и информация журнала. Дополнительные сведения см. в документации по Lambda.

callback: стандартный асинхронный обработчик обратного вызова JavaScript. Для получения дополнительной информации см. документы Lambda.

Построение лямбда-функции

Чтобы приступить к созданию новой функции Lambda, посетите панель управления Lambda.

Это должно выглядеть примерно так:

Приборная панель Лямбда

Нажмите кнопку «Создать функцию «, чтобы начать.

Создать функцию

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

Параметры создания лямбды

Варианты:

Автор с нуля

Используйте план

Образ контейнера

Просмотрите репозиторий бессерверных приложений

Для наших целей выберите Автора с нуля и заполните раздел «Основная информация». Добавьте имя функции. (Я использовал «GithubGet» ниже.) Нажмите функциональную кнопку «Создать», чтобы продолжить.

Обзор функций

Теперь мы находимся на экране обзора функций.

Обзор функций

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

Добавить триггер

На экране «Добавить триггер» выполните следующие действия.

выберите «API Gateway» из выпадающего списка

выберите «Создать API» в раскрывающемся списке API.

выберите опцию HTTP API

выберите «Открыть» в раскрывающемся списке «Безопасность».

Окончательная конфигурация триггера должна выглядеть так:

Экран добавления триггера

Нажмите кнопку «Добавить «, чтобы продолжить.

Указание кода функции Lambda

Теперь у нас есть триггер шлюза API, зарегистрированный на странице обзора функций перед нашей функцией GithubGet.

Функция с триггером

В нижней панели щелкните вкладку «Код», чтобы просмотреть редактор кода. Есть предварительно настроенный «Hello, World!» пример кода, который выглядит так:

exports.handler = async (event) => {

// TODO implement

const response = {

statusCode: 200,

body: JSON.stringify ('Hello from Lambda!'),

};

return response;

};

Теперь, когда у нас есть триггер шлюза API, мы можем публично получить доступ к этой функции. Перейдите на вкладку «Конфигурация» и вкладку «Триггеры» и разверните триггер «Шлюз API».

Конфигурация триггера

Вы должны увидеть конечную точку API: запись с URL-адресом. Щелкните этот URL-адрес, и вы должны перейти на страницу, которая отображает «Hello From Lambda!» сообщение. Поздравляем! Вы настроили простой экземпляр AWS Lambda. Встроенный редактор требует небольших затрат для запуска и запуска кода Lambda, но мы собираемся сделать что-то более сложное для этого руководства.

Создание сложных функций с зависимостями

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

Давайте создадим пользовательскую функцию, использующую зависимость npm, и загрузим ее в Lambda. Вы можете выполнить шаги, описанные ниже, или взять код из репозитория примеров.

Создание новой функции

Давайте настроим папку для нашей новой функции и изнутри инициализируем npm package.jsonфайлом по умолчанию:

npm init -f

Далее мы установим официальный клиент GitHub:

npm install @octokit/rest

Создайте файл index.jsсо следующим кодом:

const { Octokit } = require («@octokit/rest») ;

const octokit = new Octokit () ;

exports.handler = async (event) => {

try{

const ghres = await octokit.rest.search.repos ({

q: «sitepoint»,

sort: «stars»

}) ;

const result = ghres.data.items.map (function (repo) {

return { url: repo.html_url, «stars»: repo.stargazers_count };

}) ;

return {

statusCode: 200,

body: JSON.stringify (result)

}

}catch (error) {

return {

statusCode: 500,

body: {error: error}

}

}

};

Вот разбивка того, что делает этот код:

Он включает и инициализирует оставшийся API GitHub «Octokit».

Он определяет функцию handler, соответствующую сигнатуре Lambda.

При handlerвызове он отправляет поисковый запрос в GitHub для всех репозиториев, соответствующих sitepointзапросу.

С ответом Github создается карта, которая включает URL-адрес и количество звездочек для каждого репо.

Наконец, он возвращает ответ HTTP в виде объекта, который соответствует ожидаемой интеграции шлюза API.

Загрузить в AWS Lambda

Создайте zip-файл из файлов функции, используя любую знакомую вам утилиту zip. Я использовал утилиту командной строки zipв macOS, например:

zip -r lambdaupload.zip. /index.js. /node_modules/

Чтобы загрузить код в Lambda, вернитесь в редактор кода в обзоре функций, щелкните селектор «Загрузить из «и выберите «.zip».

ZIP-загрузка

Затем выберите lambdaupload.zipфайл на своем компьютере и загрузите его на AWS. Вы должны увидеть обновление редактора кода и загрузить обработчик, который мы написали выше. Если вы посетите URL-адрес конечной точки API, который мы нашли в конфигурации триггера, вы должны увидеть новый ответ вместо «Привет от Lambda!» сообщение. Поздравляем! Вы успешно развернули и запустили код в Lambda.

Следующие шаги и будущее Lambda

Я надеюсь, что этот проект дал вам хорошую основу для работы с AWS Lambda. Хотя мы использовали интеграцию стороннего клиента (GitHub) в коде нашей функции, ее можно заменить любым другим клиентским API или подключением клиента к базе данных.

Бессерверные фреймворки

Эта статья демонстрирует очень ручной и несколько эфемерный процесс настройки Lambda. Существуют и другие способы настройки и инициализации Lambda, управляемые API AWS.

Некоторые инструменты и фреймворки создаются на основе AWS API, которые помогают упростить этот процесс:

serverless.com: это самая зрелая структура FaaS. Он обеспечивает очень полный опыт работы с Lambda и применим к другим поставщикам FaaS, не относящимся к AWS. Он обеспечивает локальную настройку среды разработки для быстрой итерации, автоматизированное развертывание кода Lambda, несколько промежуточных сред развертывания и многое другое.

terraform.io: это широко распространенный инструмент управления инфраструктурой как кодом и конфигурацией. Terraform позволяет разработчикам декларативно определять конфигурации облачной инфраструктуры, а затем автоматически развертывать и синхронизировать эти конфигурации. В предыдущем упражнении с Lambda мы выполнили большую часть ручной настройки через пользовательский интерфейс браузера AWS. Эта работа была довольно утомительной, и если нам нужно что-то изменить, нам придется выполнять дальнейшую работу в пользовательском интерфейсе AWS. Вместо этого мы могли бы определить ресурсы, которые мы использовали в AWS, с помощью Terraform, и автоматически развернуть функцию Lambda в Terraform.

Как вы думаете?

Будете ли вы рассматривать FaaS для будущих проектов? Возможно, вы уже начали использовать Lambda как часть архитектуры вашего приложения?

3D-печать5GABC-анализAndroidAppleAppStoreAsusCall-центрChatGPTCRMDellDNSDrupalExcelFacebookFMCGGoogleHuaweiInstagramiPhoneLinkedInLinuxMagentoMicrosoftNvidiaOpenCartPlayStationPOS материалPPC-специалистRuTubeSamsungSEO-услугиSMMSnapchatSonyStarlinkTikTokTwitterUbuntuUp-saleViasatVPNWhatsAppWindowsWordPressXiaomiYouTubeZoomАвдеевкаАктивные продажиАкцияАлександровск ЛНРАлмазнаяАлчевскАмвросиевкаАнализ конкурентовАнализ продажАнтимерчандайзингАнтрацитАртемовскАртемовск ЛНРАссортиментная политикаБелгородБелицкоеБелозерскоеБердянскБизнес-идеи (стартапы)БрендБрянкаБукингВахрушевоВендорВидеоВикипедияВирусная рекламаВирусный маркетингВладивостокВнутренние продажиВнутренний маркетингВолгоградВолновахаВоронежГорловкаГорнякГорскоеДебальцевоДебиторкаДебиторская задолженностьДезинтермедитацияДзержинскДивизионная система управленияДизайнДимитровДирект-маркетингДисконтДистрибьюторДистрибьюцияДобропольеДокучаевскДоменДружковкаЕкатеринбургЕнакиевоЖдановкаЗапорожьеЗимогорьеЗолотоеЗоринскЗугрэсИжевскИловайскИрминоКазаньКалининградКировскКировскоеКомсомольскоеКонстантиновкаКонтент-маркетингКонтент-планКопирайтингКраматорскКрасноармейскКрасногоровкаКраснодарКраснодонКраснопартизанскКрасный ЛиманКрасный ЛучКременнаяКураховоКурскЛисичанскЛуганскЛутугиноМакеевкаМариупольМаркетингМаркетинговая информацияМаркетинговые исследованияМаркетинговый каналМаркетинг услугМаркетологМарьинкаМедиаМелекиноМелитопольМенеджментМерчандайзерМерчандайзингМиусинскМолодогвардейскМоскваМоспиноНижний НовгородНиколаевНиколаевкаНишевой маркетингНовоазовскНовогродовкаНоводружескНовосибирскНумерическая дистрибьюцияОдессаОмскОтдел маркетингаПартизанский маркетингПервомайскПеревальскПетровскоеПлата за кликПоисковая оптимизацияПопаснаяПравило ПаретоПривольеПрогнозирование продажПродвижение сайтов в ДонецкеПроизводство видеоПромоПромоушнПрямой маркетингРабота для маркетологаРабота для студентаРазработка приложенийРаспродажаРегиональные продажиРекламаРеклама на асфальтеРемаркетингРетро-бонусРибейтРитейлРовенькиРодинскоеРостов-на-ДонуРубежноеСамараСанкт-ПетербургСаратовСватовоСвердловскСветлодарскСвятогорскСевастопольСеверодонецкСеверскСедовоСейлз промоушнСелидовоСимферопольСинергияСколковоСлавянскСнежноеСоздание сайтов в ДонецкеСоледарСоциальные сетиСочиСтаробельскСтаробешевоСтахановСтимулирование сбытаСуходольскСчастьеТелемаркетингТельмановоТираспольТорговый представительТорезТрейд маркетингТрейд промоушнТюменьУглегорскУгледарУкраинскХабаровскХарцызскХерсонХостингЦелевая аудиторияЦифровой маркетингЧасов ЯрЧелябинскШахтерскЮжно-СахалинскЮнокоммунаровскЯндексЯсиноватая