Документирование ваших бессерверных решений 🚀

Пример создания и размещения вашей бессерверной документации, такой как OpenAPI / Swagger, ADR и документации по коду с TypeDoc.

Вступление

Довольно часто мы создаем фантастические бессерверные решения, но не уделяем должного внимания документации. Это может быть документ OpenAPI (Swagger) с описанием ваших API, документация по коду (с указанием ваших обработчиков лямбда-выражений, пакетов и т. Д. ), а также Записи решений по архитектуре (ADR).

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

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

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

Что мы строим? 🏗️

На диаграмме ниже показана архитектура, которую мы строим в репо:

Архитектура основана на следующей статье с дополнительными шагами по созданию и размещению бессерверной документации 🔦



Этот пример архитектуры дает нам возможность работать, поэтому мы можем создать следующую документацию:

  1. Документ Swagger / OpenAPI для API.
  2. Документация по коду с использованием TypeDoc.
  3. Генерация ADR.
  4. Сгенерированная документация размещается на AWS S3 для просмотра.

Развертывание решения! 👨‍💻

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

В корне папки запустите npm i, а затем npm run deploy:develop, который установит все зависимости и затем развернет на AWS.

Создание документации! 📝

Итак, мы развернули решение, теперь давайте посмотрим на результат!

OpenAPI / Swagger

Первая область документации, которую мы собираемся рассмотреть, - это документация OpenAPI / Swagger!

Мы используем плагин serverless-openapi-documentation-v2 с Serverless Framework для автоматического создания нашего документа OpenAPI / Swagger локально.

Это запускается в корне папки с помощью npm run openapi, а также является частью хука предварительной фиксации, который автоматически запускает его, когда вы фиксируете любые изменения в репозитории. Сгенерированный файл openapi.json показан ниже:

У нас есть отдельный файл для нашей документации по swagger под названием serverless.doc.yml, который затем связан в основном serverless.yml для каждой из конечных точек, как показано ниже:

Затем файл serverless.doc.yml содержит всю информацию OpenAPI, как и следовало ожидать, такую ​​как модели, запросы / ответы, описания и т. Д. Базовый пример этого показан ниже:

Затем вы можете скопировать содержимое файла openapi.json, который был сгенерирован локально, и вставить его в swagger.io, чтобы просмотреть его, как показано ниже, чтобы убедиться, что он действителен:

В рамках бессерверного развертывания мы также автоматически размещаем это публично, используя бессерверный плагин s3, как показано ниже, который вы можете просмотреть, перейдя по URL-адресу соответствующей корзины S3 https://s3-openapi-develop.s3.eu-west-1.amazonaws.com/index.html#

Он автоматически передается в AWS S3 при бессерверном развертывании с использованием бессерверного подключаемого модуля s3 со следующей конфигурацией:

s3Sync:
   - bucketName: ${self:custom.openapiBucket}
     localDir: docs/openapi
     acl: public-read

Как видно из нашей папки ./docs/openapi/static, мы используем папку dist из репозитория https://github.com/swagger-api/swagger-ui/tree/master/dist, чтобы мы могли разместить сгенерированный файл openapi.json. правильно на S3!

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

Документация по коду

После развертывания бессерверный плагин s3 примет сгенерированную документацию по коду TypeDoc и разместит ее для нас публично на S3! Следующая конфигурация позволила нам это сделать:

s3Sync:
   - bucketName: ${self:custom.docsBucket}
     localDir: docs/documentation
     acl: public-read

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

Если вы сейчас перейдете в корзину AWS S3 docs, вы сможете просмотреть созданную вами документацию по решению! Например: https://s3-documentation-develop.s3.eu-west-1.amazonaws.com/index.html:

Индексная страница

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

Индивидуальные лямбда-функции

На снимке экрана ниже показана автоматически созданная страница для одной из лямбда-функций при нажатии на ссылку справа от страницы индекса:

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

Существует хриплый хук перед фиксацией, который запускается npm run docs в корневой папке, поэтому при фиксации ваша документация всегда автоматически обновляется на случай, если вы забудете!

ADR (Записи решений по архитектуре)

Далее идут отчеты о решениях по архитектуре! Чтобы добавить новый ADR, вы можете выполнить следующую команду:

npm run adr:new — “add typedoc”

Это создаст для вас новый ADR в папке \docs\adr, как показано ниже:

Вы можете видеть, что у вас будет пронумерованный ADR для каждого принятого вами архитектурного решения, а также индексная страница «Прочтите меня»: README.md

Впоследствии вы можете указать свои ADR, используя следующую команду npm run adr:list, которая покажет в вашем терминале следующее:

А чтобы обновить существующий ADR, вы можете запустить npm run adr:update — “add typedoc".i.e. по ключу

Если вы хотите создать HTML-версию своих ADR локально, вы увидите export.html файл в корневой папке после запуска npm run adr:export:

🛑 Обратите внимание, что я на самом деле не описал контекст, решение или последствия, а это просто пример того, как их генерировать.

💡 Вы также можете разместить свои сгенерированные ADR так же, как мы сделали выше для OpenAPI и документации по коду!

Тестируем API! 🎯

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



Подведение итогов

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

Я хотел бы связаться с вами по любому из следующих вопросов:

Https://www.linkedin.com/in/lee-james-gilmore/
https://twitter.com/LeeJamesGilmore

Если вы нашли статьи вдохновляющими или полезными, не стесняйтесь поддержать меня виртуальным кофе https://www.buymeacoffee.com/leegilmore, и в любом случае давайте подключимся и пообщаемся! ☕️

Если вам понравились публикации, пожалуйста, подпишитесь на мой профиль Ли Джеймс Гилмор для дальнейших публикаций / серий, и не забудьте подключиться и поздороваться 👋

Также используйте функцию «хлопать в ладоши» внизу сообщения, если она вам понравилась! (Можно хлопать больше одного раза !!)

Если вам понравилась эта статья, вам также может понравиться следующее:













Обо мне

«Привет, я Ли, сертифицированный технический архитектор AWS и ведущий инженер-программист из Великобритании, в настоящее время работаю техническим облачным архитектором и главным бессерверным разработчиком, в прошлом работал в основном над полнофункциональным JavaScript на AWS. 5 лет.

Я считаю себя проповедником бессерверных технологий и люблю все, что связано с AWS, инновациями, архитектурой программного обеспечения и технологиями. »

** Предоставленная информация является моим личным мнением, и я не несу ответственности за ее использование. ***