Бессерверный режим заставляет вас сосредоточиться на коде вместо того, чтобы думать о предоставлении экземпляров и управлении серверами. В этой статье мы развернем базовое веб-приложение Node.js в AWS Lambda за считанные минуты.

Во-первых, вам нужно установить Serverless Framework глобально с помощью npm. Это инструмент, который упростит вам развертывание.

npm install -g serverless

Теперь давайте создадим новый проект с шаблоном AWS Node.js.

mkdir my-serverless && cd my-serverless
serverless create -t aws-nodejs

Вы можете использовать буквально любой язык, поддерживаемый AWS Lambda. Проверьте документы Servless для получения дополнительной информации.

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

handler.js - это место, где живет ваша функция. В этом примере он просто экспортирует одну функцию с именем hello, и все.

В serverless.yml файле есть множество конфигураций, которые вы можете использовать, например, переменные среды, сегменты S3, разрешения AWS и т. Д., Но в этой статье давайте взглянем на запись functions. Здесь вы определяете свои обработчики функций, а также можете добавлять конечные точки http. Изменим его на следующее:

functions:
  hello:
    handler: handler.hello
    events:
      - http:
          path: /hey
          method: get

Помимо указания, где находится функция (handler.hello означает файл handlers.js с именем функции hello), мы указали запись event и установили маршрут /hey с помощью команды GET. Таким образом, мы могли просто отправить запрос GET на /hey, и функция hello запустилась.

Пришло время настроить учетные данные AWS.

Перейдите в консоль AWS и откройте IAM Service. Слева нажмите Users, а затем Add User.

Дайте своему пользователю имя и отметьте поле Programmatic access. Это тип пользователя, у которого нет доступа к консоли, но его можно использовать для доступа к сервисам AWS с помощью API и секретных ключей.

Дайте Administrator Access разрешение вашему пользователю. Этого разрешения достаточно для всего, что нам нужно.

Обязательно скопируйте свои ID ключа доступа и Секретный ключ доступа в безопасное место, мы собираемся использовать их сейчас.

Вернитесь к своему терминалу, сообщите Serverless, какие ваши учетные данные AWS, выполнив следующую команду, и все будет хорошо. Замените YOUR_ACCESS_KEY_ID и YOUR_SECRECT_ACCESS_KEY своими учетными данными AWS.

serverless config credentials --provider aws --key YOUR_ACCESS_KEY_ID --secret YOUR_SECRECT_ACCESS_KEY

Измените свою функцию, если хотите, и давайте развернем ее!

Я просто изменил message тело моей функции на что-то вроде этого:

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

serverless deploy --stage development

Здесь он загружает стек Cloudformation в вашу учетную запись AWS и запускает его. Вы можете найти его в каталоге ./serverless, который был создан после выполнения команды deploy.

Конечная точка создается с помощью AWS API Gateway, и вы можете найти свою функцию в сервисе AWS Lambda.

После его завершения вы увидите конечную точку с подписью, которую мы сделали ранее. GET /hey

Кроме того, среда является префиксом для вашей конечной точки, как вы можете видеть development/hey в URL-адресе. Это полезно, потому что вы можете хранить несколько сред с разными URL-адресами.

Первое развертывание должно занять больше времени, чем следующие.

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