У нас довольно простое приложение node.js, но из-за механизма развертывания AWS Elastic Beanstalk требуется около 5 минут для развертывания новой версии (через git aws.push
) даже после фиксации одного файла.
т.е. сама фиксация (и загрузка) выполняется быстро (только один файл для push), но затем Elastic Beanstalk извлекает весь пакет из S3, разархивирует его и запускает npm install
, что заставляет node -gyp компилировать некоторые модули. После установки/завершения строительства, эластичные бобовые салфетки /var/app/current
и заменяют его новой версией приложения.
Излишне говорить, что константа node_modules не нужна, а перестройка, которая занимает 30 секунд на моем старом Macbook Air, занимает > 5 минут на экземпляре ec2.micro, а не в весе.
Здесь я вижу два подхода:
- tweak
/opt/containerfiles/ebnode.py
и играйте с node_modules, чтобы избежать его удаления и восстановления после развертывания. - настройте репозиторий git на Эластическом экземпляре ECC Beanstalk и в основном заново запишите процедуру развертывания самостоятельно, поэтому /var/app/current получает нажатие и запускает
npm install
только при необходимости (что делает эластичный beanstalk похожим на OpsWorks..)
Оба варианта не имеют изящества и склонны к проблемам, когда Amazon обновляет свои крючки и архитектуру из эластичного beanstalk.
Может кто-нибудь лучше подумает, как избежать постоянной перестройки node_modules, которые уже присутствуют в каталоге приложения? Спасибо.