Введение в бессерверные облака
5 апреля 2022 г.Впервые я обратил внимание на Serverless Cloud во время Serverless Summit 2021, когда AWS Serverless Hero [Джереми Дейли] (https://www.jeremydaly.com/) представил продукт, который он сам помогал создавать. Всем, кто интересуется бессерверными технологиями и каким-то образом не удалось встретиться с Джереми до того, как я уверен, что он не будет возражать против того, чтобы я дал ссылку на его контент, я настоятельно рекомендую подписаться на его информационный бюллетень «Off-by-none», который я Последние несколько лет я не отставал от бессерверного мира.
Во-первых, давайте ответим на вопрос слона в комнате: что такое Serverless Cloud?
Бессерверное облако позволяет создавать приложения, не беспокоясь о создании облачных сервисов и управлении ими, что дает разработчикам больше времени, чтобы сосредоточиться на том, что у них получается лучше всего; написание кода. Он делает это, абстрагируя облачные сервисы с помощью интерфейса, который вы можете добавить в качестве зависимости в свое приложение, оставляя безсерверное облако выполнять всю тяжелую работу.
Serverless Cloud также предоставляет панель инструментов, которая позволяет вам отслеживать ваше приложение с помощью метрик и журналов из коробки. Это также позволяет вам вызывать ваши конечные точки непосредственно с панели инструментов, устраняя необходимость в таком инструменте, как Postman, для выполнения той же функции.
Теперь самое интересное: что я могу делать с бессерверным облаком?
Место хранения
Бессерверное хранилище дает вам возможность хранить файлы без необходимости писать код «Инфраструктура как код» для самостоятельного создания корзин S3 и управления ими, вам даже не нужно передавать ссылку на корзину в ваше приложение.
Хранилище — очень распространенный вариант использования в современных программных приложениях. В приведенном ниже примере вы можете видеть, что я вызываю API хранилища для хранения резюме сотрудника и получаю URL-адрес загрузки файла, который я возвращаю в ответ.
импортировать {API, данные, хранилище, расписание, события} из "@serverless/cloud";
api.post("/employees/:id/cv", async (req, res) => {
пусть ключ = "сотрудник:" + req.params.id;
пусть сотрудник = ожидание data.get(key);
пусть путь к файлу: строка = '/cv/' + req.params.id + '.txt';
ждите хранения.запись (путь к файлу, req.body);
let downloadUrl = await storage.getDownloadUrl (путь к файлу);
employee.cvUrl = URL-адрес загрузки;
ожидание data.set(ключ, сотрудник, правда);
res.send({URL-загрузки});
Еще одна интересная функция службы хранилища — возможность добавлять прослушиватели для любых изменений в вашей корзине. Это очень круто, и вам обычно приходится обрабатывать эти события в вашей конфигурации, например, вызывать лямбду, когда что-то меняется в вашем сегменте.
Приведенный ниже код записывает сообщение журнала каждый раз, когда файл сохраняется в моей корзине с префиксом cv
. Вы можете использовать эту функцию для создания конвейера асинхронных задач, например сканирования загруженного файла на наличие вирусов или редактирования конфиденциальных данных из файла, прежде чем сделать его доступным для извлечения из вашего приложения.
импортировать {API, данные, хранилище, расписание, события} из "@serverless/cloud";
storage.on("write:cv/*", async (event) => {
console.log('Файл загружен, проверка на наличие вирусов: ' + event.path);
Вы можете ознакомиться с другими функциями службы хранилища здесь.
Данные
Serverless Data дает вам возможность хранить данные вашего приложения в хранилище данных типа «ключ-значение» без необходимости управлять доступом к базе данных, обслуживанием, размером или даже передачей строк подключения в ваше приложение.
Данные являются краеугольным камнем программного обеспечения, поэтому доступ к хранению и извлечению данных вашего приложения путем вызова метода может значительно сократить время разработки в ваших командах. В приведенном ниже примере вы можете увидеть, как я получаю список всех сотрудников, получаю одного сотрудника и сохраняю сотрудника.
импортировать {API, данные, хранилище, расписание, события} из "@serverless/cloud";
импорт {Сотрудника} из "./models/Employee";
импортировать { v4 как uuidv4 } из 'uuid';
api.get("/employees", async (req, res) => {
let result = await data.get("employee:*", true);
res.send({сотрудники: результат.элементы});
api.get("/employees/:id", async (req, res) => {
пусть ключ = "сотрудник:" + req.params.id;
let result = await data.get(key);
res.send({сотрудник: результат});
api.post("/employees", async (req, res) => {
пусть сотрудник: Employee = req.body;
пусть идентификатор: число = uuidv4();
wait data.set('сотрудник:' + id, сотрудник);
events.publish("employee.created", {имя: employee.name});
res.send({Идентификатор_сотрудника: идентификатор});
Вы можете ознакомиться с другими функциями сервиса данных здесь.
События
Бессерверные события позволяют публиковать события, а затем обрабатывать их асинхронно сразу или через некоторое время. Опять же, это позволяет вам создавать асинхронные конвейеры задач без необходимости создавать очереди и настраивать вызовы Lambda.
В приведенном ниже примере вы можете увидеть, как я публикую событие при создании сотрудника, а затем асинхронно подхватываю событие. Вы можете использовать это, чтобы отправлять приветственные электронные письма или сообщать другим интеграциям вашего приложения, таким как система расчета заработной платы, о том, что этот новый сотрудник был создан.
импортировать {API, данные, хранилище, расписание, события} из "@serverless/cloud";
импорт {Сотрудника} из "./models/Employee";
импортировать { v4 как uuidv4 } из 'uuid';
api.post("/employees", async (req, res) => {
пусть сотрудник: Employee = req.body;
пусть идентификатор: число = uuidv4();
wait data.set('сотрудник:' + id, сотрудник);
events.publish("employee.created", {имя: employee.name});
res.send({Идентификатор_сотрудника: идентификатор});
events.on("employee.created", async ({ body }) => {
console.log('Отправить приветственное письмо ' + body.name);
Вы можете ознакомиться с другими функциями сервиса событий здесь.
Дела по расписанию
Мы все участвовали в проектах, требующих выполнения задания cron либо для запуска сценария очистки, либо для запуска обновления данных. С помощью Serverless Cloud вы можете просто определить функцию для запуска в любое время, избавляя от необходимости настраивать задание cron для запуска в вашей среде.
импортировать {API, данные, хранилище, расписание, события} из "@serverless/cloud";
schedule.every("1 день", () => {
console.log("Выполняет какую-то задачу по очистке каждую ночь!");
Вы можете ознакомиться с другими функциями сервиса запланированных задач здесь.
Приложения и экземпляры
Бессерверное облако следует модели изоляции. У вас есть организация, внутри которой вы можете создавать множество приложений, это приложения, которые могут быть многостековыми или независимыми сервисами. Каждое приложение может иметь множество экземпляров, экземпляром может быть среда, такая как производственная или тестовая, при этом каждый экземпляр получает свой собственный набор ресурсов, таких как данные и хранилище.
Такой подход позволяет запускать ваше приложение в облаке за считанные секунды, слишком быстро, чтобы поверить.
Хотите запустить свое приложение в облаке? Просто введите «облако»
Хотите поделиться своим текущим состоянием с членом команды для тестирования? Просто введите cloud share
Хотите выполнить развертывание в тестовой среде? Просто введите «тест развертывания в облаке».
Хотите повысить версию своего приложения в тестовой среде до рабочей среды? Просто введите «тестовый продукт продвижения в облаке».
Это слишком просто.
Текущие ограничения
Serverless Cloud все еще находится в разработке (версия 2.8.2 на момент написания статьи), поэтому многие функции еще не доступны, поэтому вот некоторые вещи, которые я хотел бы увидеть в будущих выпусках:
- Возможность выбора региона, в котором развернуты ваши облачные сервисы. В настоящее время все данные хранятся в регионе «us-east-1», однако многие компании, вероятно, юридически обязаны не передавать данные за пределы страны/региона, в котором они находятся, поэтому они не смогут использовать Serverless Cloud.
- Детальный контроль доступа внутри организации. В настоящее время в организации, где вы храните свои приложения и данные, нет управления доступом на основе ролей, это означает, что если вы хотите заблокировать доступ к своим производственным данным, вам придется создать отдельную организацию для их размещения, что позволит вам использовать классную функцию продвижения.
- Доступ к базовым облачным ресурсам. Одна из самых больших проблем, которые я предвижу для Serverless Cloud, — это создание репутации, благодаря которой заказчики, клиенты и предприятия будут чувствовать себя в безопасности, передавая контроль над своими данными. Я думаю, что должна быть золотая середина, где клиенты могут получить доступ к базовым облачным службам, когда это необходимо.
Последние мысли
Мне очень понравился мой опыт использования Serverless Cloud, и я буду продолжать использовать его для развертывания личных и экспериментальных приложений в будущем. Я надеюсь, что в будущем некоторые из вышеперечисленных моментов будут решены, что позволит мне продвигать использование бессерверного облака в организациях.
Если вы хотите взглянуть на проект с приведенным выше кодом, вы можете найти его [здесь] (https://github.com/shaunganley/serverless-cloud-typescript-api-demo).
В Serverless Cloud есть отличное сообщество Slack, которое с радостью ответит на любые ваши вопросы и решит любые проблемы, которые могут у вас возникнуть. Вы можете присоединиться к нему здесь.
Если у вас есть какие-либо комментарии об этом блоге или вы хотите пообщаться, вы можете найти меня в LinkedIn [здесь] (https://www.linkedin.com/in/shaun-ganley-8068aa82/).
Также опубликовано здесь
Оригинал