Первоначально опубликовано на Serverless 4 января 2017 г.

Обновление: документация Serverless Framework теперь содержит полный справочник по написанию пользовательских подключаемых модулей. Подробнее читайте в документации Создание плагинов.

Привет, я Анна Дубкова, инженер-программист в Red Badger в Лондоне. Если вы читаете этот пост, вы, вероятно, знакомы с некоторыми основами бессерверной платформы, такими как развертывание Lambdas и создание конечных точек API. Но, возможно, вы столкнулись с препятствием, когда вы обнаружите, что делать что-то с фреймворком либо сложно, либо невозможно, либо просто слишком много повторений.

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

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

Создайте свой первый плагин

Serverless Framework — это невероятно хорошо построенная платформа с открытым исходным кодом. Его можно расширять почти бесконечно, и вы можете с удивительной легкостью добавлять новые функции. Давайте посмотрим, как можно добавить плагин самым простым способом.

Где-то в новом каталоге запустите:

serverless create — template plugin

Эта команда создаст файл index.js. Когда вы откроете этот файл, вы увидите класс с конструктором и несколькими простыми функциями. Давайте посмотрим на это шаг за шагом.

Плагин как класс

Каждый бессерверный подключаемый модуль — это класс. Этот класс создается с помощью бессерверного объекта и набора параметров. Чуть позже мы рассмотрим их более подробно, а пока достаточно сказать, что они помогут вам делать вещи в вашем плагине.

Определите свои команды‍

Следующее, на что следует обратить внимание в конструкторе, — это определение команд, которые вводит ваш подключаемый модуль. В шаблоне, который мы инициализировали с помощью помощника Serverless CLI, добавлена ​​команда serverless welcome.

Использование — или Помощь

В разделе использования вы можете указать подсказку, как следует использовать команду. Эта подсказка появится при запуске без сервера — помощь в списке команд и их описаниях.

События жизненного цикла

Важнейшим элементом любой команды является массив lifecycleEvents. События жизненного цикла позволяют определить шаги, которые, скорее всего, будут предприняты при выполнении команды. Например, это события жизненного цикла для команды развертывания без сервера:

От очистки до развертывания у нас есть список задач, которые мы должны выполнить на пути к развертыванию сервиса. Однако мы еще не пишем никакой реализации. Мы описываем процесс только в очень общем виде, не включающем никаких деталей реализации.

Преимущество этого подхода в том, что он не привязывает нас к одному способу обработки развертывания (или выполнения любой другой команды), что, в свою очередь, помогает нам избежать привязки к поставщику.

Таким образом, вы можете рассматривать определение команды как руководство, которое сможете использовать позже при написании кода. Это делает код более читабельным и самодокументированным.

Опции — или Флаги

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

Раздел параметров можно использовать для описания, какие флаги можно использовать в CLI с вашей командой. В этом определении требуется параметр —message, который имеет сокращение -m, чтобы вы могли в равной степени писать бессерверные приветствие — сообщение «Привет!» и бессерверное приветствие — м «Привет!».

Как и в случае с самой командой, у нас есть описание использования, которое появляется при обращении за помощью в безсерверном приветствии CLI — help.

Требования к определению команды

Фрагмент, рассмотренный выше, определяет события жизненного цикла, описание справки и флаг. Для флага у нас снова есть раздел описания справки, информация о том, требуется ли флаг, и ярлык для флага. Как вы могли догадаться, не все из них обязательны. Очень минималистичный подход будет таким:

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

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

Подключайтесь к событиям

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

Вы можете найти их прямо под командами в конструкторе:

Крюки помогают нам определить реализацию каждого шага. В приведенном выше коде вы можете различить имя команды welcome и два определенных для нее события жизненного цикла: hello и world.

Хук welcome:hello определяет, что делать на шаге hello команды welcome; before:welcome:hello описывает, что нужно сделать перед первым шагом. Точно так же after:welcome:world определяет, что делать после последнего шага.

Это дает нам очень детальный контроль над определением того, что команда делает на каждом шаге, и позволяет вводить определенные действия до и после каждого шага.

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

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

Выполнение

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

В шаблоне мы выводим только приветствие и сообщение, которое мы ему передали:

‍Однако этого может быть недостаточно в реальном проекте.

Вы узнаете, как писать реализации подключаемых модулей, что такое бессерверный объект и как можно подходить к написанию подключаемых модулей различными способами. — в Как написать свой первый бессерверный плагин — Часть 2.

Первоначально опубликовано на https://www.serverless.com.