Как я могу развернуть приложение Serverless Framework macOS, которое использует библиотеку Sharp, до AWS? - PullRequest
1 голос
/ 02 февраля 2020

Я занимаюсь разработкой приложения Serverless Framework, которое использует среду выполнения Node и развернуто в AWS. Одна из моих функций AWS Lambda использует библиотеку sharp.

Когда я запускаю функцию AWS Lambda, возникает следующая ошибка:

бинарные файлы darwin-x64 не могут использоваться на платформе 'linux -x64'. Удалите каталог 'node_modules / sharp / vendor' и запустите 'npm install'.

Я считаю, что эта ошибка возникает, потому что когда я запускаю команду sls deploy на моем локальном компьютере, приложение упаковано в macOS и затем перемещено в AWS. Я думаю, что приложение должно быть упаковано в операционной системе, используя linux-x64.

Как я могу развернуть мою Serverless Framework с моего компьютера и все еще иметь возможность использовать библиотеку Sharp?

Ответы [ 3 ]

2 голосов
/ 02 февраля 2020

Вы можете установить Linux совместимый пакет, используя следующее:

rm -rf node_modules/sharp
npm install --arch=x64 --platform=linux --target=10.15.0 sharp

Обратите внимание, что это также указывает целевую версию NodeJS, убедитесь, что это та же версия узла, которую вы используете в своем Lambda. Это прямо из документов (см. здесь .)

Однако это не решило моих проблем. Моя бессерверная конфигурация (с использованием плагина serverless-bundle) означала, что мои модули снова устанавливались в отдельную папку, стирая специфичные для платформы модули c, которые я только что установил вручную.

Два варианта здесь:

  1. используйте serverless-plugin-scripts , чтобы подключиться к событиям deploy для запуска вышеуказанного патча; или
  2. запустить без сервера в docker, используя контейнер Linux с соответствующей версией узла.

Для моего конкретного случая c edge , который у меня был до go с Docker. Сценарии сборки будут влиять на каждую разворачиваемую функцию - добавление ~ 30 Мб кода Sharp - и Lambda@Edge имеет ограничения по размеру исходного кода.

0 голосов
/ 02 февраля 2020

Если вы этого еще не сделали, я бы рекомендовал следовать руководству Установка AWS SAM CLI на macOS , чтобы убедиться, что у вас есть правильная локальная среда для разработки Serverless на macOS.

Этот процесс разработан для macOS и включает встроенную поддержку Docker, так что вы можете создавать и развертывать пакеты, совместимые с Lambda, непосредственно с локального компьютера.

0 голосов
/ 02 февраля 2020

В описании https://www.npmjs.com/package/sharp предполагается, что он linux совместим.

Я не знаю, как (или если можно) принудительно разрешить разрешение собственных пакетов узлов для отдельной ОС , Попробуйте создать свою лямбда-молнию внутри docker изображения https://hub.docker.com/_/alpine/

...