20

Я использую AWS Lambda, который включает в себя создание архива моего сценария node.js, включая папку node_modules и загрузку ее в свою инфраструктуру для запуска.Модуль кросс-компиляции с собственными связями с node-gyp

Это прекрасно работает, за исключением случаев, когда речь идет о модулях узлов с собственными привязками (с использованием node-gyp). Поскольку привязка была выполнена и архивирована на моем локальном компьютере (OS X), она не совместима с серверами AWS (Amazon Linux).

Как перекрестно скомпилировать/установить модуль узла (в частности, node-sqlite3), поэтому, когда я загружаю его в другую архитектуру сервера, он запускается?

+0

Вы пытались использовать node-pre-gyp? node-sqlit3 уже использует его, поэтому вы опережаете игру. IIRC, он должен разгрузить сборку до Amazon S3, поэтому вы можете скомпилировать ее с Amazon Linux (ОС AWS Lambda). – zamnuts

+0

Да, я видел, что node-sqlite3 использует node-pre-gyp, но я действительно не понимал, что это значит для меня или как использовать его для достижения того, чего я хочу. –

+0

Я знаю, что это связано с дополнительными расходами, но я предлагаю упаковать рекламные объявления на другую коробку s3. Затем переведите его в рабочую среду. Обратите внимание: если вы сделаете npm i из своей Linux-среды, все будет работать отлично, если у вас есть необходимые инструменты сборки. –

ответ

9

Хотя на самом деле это не решение вашей проблемы, очень простым решением может быть просто скомпилировать собственные аддоны на машине Linux.

Для вашей конкретной ситуации я бы использовал Vagrant. Vagrant может создавать виртуальные машины и настраивать их в считанные секунды.

  1. Найти образ ОС, который напоминает Linux дистрибутив Амазонок (Fedora, CentOS, другие, которые используют yum в качестве менеджера пакетов - см Wiki)
  2. Используйте простую конфигурацию сценарий, который при запуске с помощью Vagrant при запуске машины, будет запустить npm install (опционально он может также удалить node_modules папки перед обеспечить чистую установку)
  3. для дополнительного удобства, этот сценарий может также создать почтовый файл для развертывания
  4. После завершения установки, скрипт Wi ll выключить виртуальную машину, чтобы избежать ненужного потребления системных ресурсов
  5. Развертывание!

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

+1

Хотя это может и не быть решением моего * вопроса *, оно действительно решает мою проблему. Спасибо, я посмотрю на это –

+0

Мне бы хотелось увидеть «настоящее» решение этого; Я хотел бы установить node-sqlite на малиновый Pi. –

+0

@RichardTurner Не должно быть никаких проблем с этим - просто «npm install» на целевом компьютере. –

1

Такие же строки, как ответ Роберта, когда мне приходилось работать на моем MAC в другой ОС, я использую vm ware, как бесплатный виртуализатор Oracle VirtualBox, чтобы получить linux на моем mac, без затрат для меня. Или зарегистрируйтесь для новой учетной записи AWS, вы получите микро бесплатно в течение года. Используйте это, чтобы получить свой linux box, сделайте все, что вам нужно.

2

При установке приложения с помощью Vagrant может быть достаточно в некоторых случаях, я счел необходимым создать приложение на Linux, который в рядом с Amazon Linux AMI Lambda, насколько это возможно.

Вы можете прочитать оригинальный ответ здесь: https://stackoverflow.com/a/34019739/303184

шаги, чтобы сделать его работу:

  1. Spawn новый экземпляр EC2. Убедитесь, что оно основано на точно так же изображение как ваше время работы AWMS Lambda. Вы можете ознакомиться здесь с данными Lambda env: http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html. В нашем случае это Amazon Linux AMI назывался amzn-ami-hvm-2015.03.0.x86_64-gp2.

  2. Установите nvm и используйте его для установки той же версии Node.js, что и на AWS Lambda. На момент написания это было v0.10.36. Вы можете обратиться к http://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html еще раз, чтобы узнать это.

  3. Возможно, вам понадобится установить git & g ++ компилятор на EC2. Вы можете сделать это работает

    sudo yum install git gcc-c++
  4. Наконец, клонировать приложение к новому EC2 и установить dependecies своего приложения:

    nvm use 0.10.36 
    npm install --production 
    
  5. Вы можете легко загрузить node_modules используя scp или такие.

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/10399857) – Eloims

+0

@Eloims Я приложил полное решение в соответствии с запросом. – xaralis