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

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

Или, по крайней мере, раньше! Architect 8.4 представляет новую концепцию, которую мы называем «встряхиванием деревьев» модулей Lambda Node.js.

Как работает лямбда-встряхивание деревьев

Если вы хотите воспользоваться преимуществами почти 1,5 миллиона публично опубликованных модулей Node.js, ваше приложение Architect может иметь множество отдельных package.json файлов, распределенных по различным Lambdae. Вот пример файлового дерева, как может выглядеть такой проект:

/
├─ src/
│  └─ http
│     ├─ get-index
│     │  ├─ index.js
│     │  └─ package.json
│     ├─ post-api
│     │ ├─ index.js
│     │ └─ package.json
│     └─ put-api
│        ├─ index.js
│        └─ package.json
├─ app.arc
└─ package.json

Взаимодействие модулей Lambda Node.js в Architect 8.4 теперь автоматически статически анализирует всю бизнес-логику ваших Lambda и управляет каждой из их зависимостей из корня. Это означает:

  • Вам нужно установить зависимости только один раз в одном месте: ваш корень package.json
  • Точно так же обновление, удаление или иное поддержание зависимостей происходит и в вашем корне.
  • Возможно, наш любимый вариант: больше не нужно хранить десятки (или сотни) отдельных package[-lock].json файлов в вашем репозитории.

Теперь проект выше выглядит так:

/
├─ src/
│  └─ http
│     ├─ get-index
│     │  └─ index.js
│     ├─ post-api
│     │  └─ index.js
│     └─ put-api
│        └─ index.js
├─ app.arc
└─ package.json

Начать работу с лямбда-встряхиванием деревьев

Для начала убедитесь, что вы используете Architect 8.4 (npm i @architect/architect@latest)!

Для новых проектов воспользоваться преимуществами Lambda treehaking так же просто, как добавить зависимости в корневой package.json файл вашего проекта (и require()ing¹ их в вашей бизнес-логике).

Для существующих проектов любые лямбда-выражения, у которых уже есть собственные package.json, будут по-прежнему иметь свои зависимости, полностью управляемые вами, что означает, что вы можете смешивать и согласовывать управление зависимостями для отдельных лямбда-выражений.

Мы считаем, что это огромный шаг вперед в эргономике создания приложений с нативными облачными функциями - мы хотели бы услышать, что вы думаете о Architect’s Slack!

¹ Architect предоставит поддержку ESM, когда Lambda предоставит поддержку Node.js 14; динамические требования не поддерживаются