Начало работы с бессерверными функциями в Node.js: практическое руководство по началу работы

Serverless

В прошлом году я видел, как слово ServerLess появлялось во многих местах. Было введено относительно много концепций, но по-прежнему очень мало реальных практик. Это также из-за любопытства к новым технологиям, поэтому я планирую глубже понять ServerLess. Чтобы понять, какое удобство может принести нам ServerLess, лучше всего начать с Hello World.

об авторе: Джун Май, разработчик Nodejs, сертифицированный автор МООК, молодежь после 90-х, которая любит технологии и любит делиться, добро пожаловать на внимание.Стек технологий Nodejsи проект с открытым исходным кодом Githubwww.nodejs.red

О бессерверных функциях

Serverless означает «бессерверная архитектура», но это не означает, что в серверах нет необходимости.Управление этими серверами обеспечивается платформой облачных вычислений.Со стороны пользователя нет необходимости уделять внимание настройке сервера, мониторингу , состояние ресурса и т. д., на которые можно ориентироваться в бизнес-логике.

На приведенном ниже рисунке микросервисы далее подразделяются на функцию «Функция как услуга» (FaaS), которая имеет меньшую степень детализации, чем микросервисы.

Источник изображения:stackify

Узнайте больше о бессерверных технологиях

Что такое безсерверный? В Интернете есть много информации об этом. Может быть, вы можете обратиться к ним. Вот некоторые предыдущие публикации:

Поддержка поставщика облачных услуг

На данный момент многие поставщики облачных услуг поддерживают ServerLess:

... Более

AWS Lambda function

В этом примере будет использоваться Aws Lambda. Вы можете выбрать других поставщиков услуг, перечисленных выше. AWS предоставляет бесплатную пробную версию на один год, но вам необходимо иметь действующую кредитную карту для привязки перед использованием сервисов AWS. сумма 1$ для проверки.

Сначала необходимо выполнить следующие шаги:

Установка и настройка ServerLess framework

Платформа ServerLess — это инструмент командной строки, написанный на Node.js. Разработчики могут развернуть полную и удобную бессерверную архитектуру приложения, не обращая внимания на базовые ресурсы. Перед установкой вам необходимо иметь среду выполнения Node.js.Если вы не установили Node.js, вы можете обратиться к этой статье«3N Brothers», чтобы помочь вам завершить создание среды Node.jsОписывает различные способы установки Node.js.

Установите бесполезный фреймворк


$ npm i serveless -g

Проверьте, успешно ли установлен serverless


$ serverless --version

Framework Core: 1.60.0

Plugin: 3.2.6

SDK: 2.2.1

Components Core: 1.1.2

Components CLI: 1.4.0

Настройте учетные данные AWS

Если он уже установлен, может произойти сбой, просто добавьте -o после учетных данных безсерверной конфигурации.


$ serverless config credentials --provider aws --key <your_access_key_id> --secret <your_access_key_secret>

Serverless: Setting up AWS...

Первый проект по созданию Nodejs ServerLess

Вы можете быстро создать проект с помощью бессерверного инструмента командной строки. --template — это шаблон, поддерживаемый скаффолдом. Дополнительные шаблоны см.GitHub.com/сервер меньше/…


$ serverless create --template hello-world --path aws-hello-nodejs-function

  

Serverless: Generating boilerplate...

Serverless: Generating boilerplate in "/Users/test/aws-hello-nodejs-function"

_______ __

| _ .-----.----.--.--.-----.----| .-----.-----.-----.

| |___| -__| _| | | -__| _| | -__|__ --|__ --|

|____ |_____|__| \___/|_____|__| |__|_____|_____|_____|

| | | The Serverless Application Framework

| | serverless.com, v1.60.0

-------'

  

Serverless: Successfully generated boilerplate for template: "hello-world"

После успешного создания вы можете увидеть следующую структуру проекта


├── handler.js # 逻辑处理

├── .gitignore # 忽略文件

└── serverless.yml # ServerLess 配置文件

handler.js

handler.js — это место для логической обработки. Конечно, вы также можете настроить другие файлы. После того, как вы настроите файл, вам нужно реагировать на изменения в файле serverless.yml. Этот раздел является лишь введением, поэтому он не будет Это не слишком сложно.Используйте практику REST API, реализованную ServerLess, вы можете следить за официальной учетной записью «Технологический стек Nodejs», чтобы получать последние новости.

Вот три параметра, о которых вам нужно знать:

  • событие: данные, используемые для разбора запроса

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

  • обратный вызов возвращает данные ответа


'use strict';

  

module.exports.helloWorld = (event, context, callback) => {

const  response = {

statusCode:  200,

headers: {

'Access-Control-Allow-Origin':  '*', // Required for CORS support to work

},

body:  JSON.stringify({

message:  'Go Serverless v1.0! Your function executed successfully!',

input:  event,

}),

};

  

callback(null, response);

};

serverless.yml

  • служба: имя службы

  • провайдер: определяет, где ваш сервис должен быть развернут

  • функции: определить код для развертывания

  • functions.helloWorld: функция

  • functions.helloWorld.handler: "handle.helloWorld" в значении определяет путь к файлу функции, функция helloWorld в файле дескриптора

  • functions.helloWorld.events: события определяют, как запускать программу «handler.helloWorld».


service: aws-hello-nodejs-function

  

provider:

name: aws

runtime: nodejs12.x

  

functions:

helloWorld:

handler: handler.helloWorld

events:

- http:

path: hello-world  # 定义请求路径

method: get  # 定义接口请求方式

cors: true  # 开启跨域

развертывать

Перечислите некоторые команды, связанные с развертыванием ServerLess:

  • развернуть все:$ serverless deploy

  • одиночное развертывание:$ serverless deploy function -f helloWorld

  • Локальный запуск функционального теста:$ serverless invoke local -f helloWorld

  • Просмотр журналов:$ serverless logs -f helloWorld -l

Выполните команду serverless deploy и увидите следующую информацию: служба успешно развернута, не правда ли, это очень просто? Нет необходимости уделять внимание построению и развертыванию серверной среды, а можно сосредоточиться на развитии бизнеса.


$ serverless deploy

Serverless: Packaging service...

Serverless: Excluding development dependencies...

Serverless: Creating Stack...

Serverless: Checking Stack create progress...

........

Serverless: Stack create finished...

Serverless: Uploading CloudFormation file to S3...

Serverless: Uploading artifacts...

Serverless: Uploading service aws-hello-nodejs-function.zip file to S3 (404 B)...

Serverless: Validating template...

Serverless: Updating Stack...

Serverless: Checking Stack update progress...

.................................

Serverless: Stack update finished...

Service Information

service: aws-hello-nodejs-function

stage: dev

region: us-east-1

stack: aws-hello-nodejs-function-dev

resources: 12

api keys:

None

endpoints:

GET - https://******.execute-api.us-east-1.amazonaws.com/dev/hello-world

functions:

helloWorld: aws-hello-nodejs-function-dev-helloWorld

layers:

None

Serverless: Run the "serverless"  command to setup monitoring, troubleshooting and testing.

Конечные точки в приведенном выше журнале показывают адрес интерфейса доступа, и теперь вы можете вызвать его через интерфейс или получить доступ к нему с помощью postman и curl.


$ curl https://******.execute-api.us-east-1.amazonaws.com/dev/hello-world

Локальный тест ServerLess-Offline

Используйте этот бессерверный автономный подключаемый модуль, чтобы локально запустить HTTP-сервер, эмулирующий AWS Lambda и API Gateway.

Установить плагин

Установите плагин.Если локально нет файла package.json, npm init может сгенерировать файл package.json


$ npm install serverless-offline --save-dev

Изменить serverless.yml

Добавьте плагин serverless-offline в serverless.yml проекта следующим образом:


plugins:

- serverless-offline

местный старт

Выполните автономную команду без сервера в корневом каталоге проекта, чтобы успешно запустить тест локально.


$ serverless offline

Serverless: Starting Offline: dev/us-east-1.

  

Serverless: Routes for helloWorld:

Serverless: GET /hello-world

Serverless: POST /{apiVersion}/functions/aws-hello-nodejs-function-dev-helloWorld/invocations

  

Serverless: Offline [HTTP] listening on http://localhost:3000

Адрес по умолчаниюhttp://localhost:3000Мы можем легко получить доступ к нашему примеру выше, как показано ниже.


$ curl http://localhost:3000/hello-world

serverless-offline предоставляет множество параметров, которые вы можете настроить, например, изменить порт, который слушает запускаемый проект, вы можете обратиться кGitHub.com/DrinkRaulHe/Цвет…

Адрес исходного кода Github этого раздела выглядит следующим образом:

https://github.com/Q-Angelo/project-training/tree/master/serverless/aws-hello-nodejs-function

Суммировать

Я надеюсь, что с помощью руководства по началу работы в этом разделе вы научитесь запускать бессерверное приложение, а также развертывать, разрабатывать и отлаживать его локально. Это только начало. В следующем разделе я буду использовать ServerLess, Node.js и MongoDB на этой основе Облако Atlas создает REST API, пожалуйста, обратите внимание на общедоступную учетную запись «Технологический стек Nodejs» для получения последней информации.

Reference