AWS EB部署节点应用程序:无法运行npm install

Gro*_*ler 6 amazon-web-services node.js amazon-elastic-beanstalk

我正在尝试将我的节点应用程序部署到AWS.它甚至不允许我Sample Application使用eb deploy部署应用程序(保持为).

版本:运行Node.js的64位Amazon Linux 2016.09 v4.0.1

日志说

无法运行npm install

但我不太确定他们还要求我做些什么来修复它.我可以在本地安装npm:

-------------------------------------
/var/log/eb-activity.log
-------------------------------------
  Failed to run npm install. Snapshot logs for more details.
  Traceback (most recent call last):
    File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 695, in <module>
      main()
    File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 677, in main
      node_version_manager.run_npm_install(options.app_path)
    File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 136, in run_npm_install
      self.npm_install(bin_path, self.config_manager.get_container_config('app_staging_dir'))
    File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 180, in npm_install
      raise e
  subprocess.CalledProcessError: Command '['/opt/elasticbeanstalk/node-install/node-v6.10.0-linux-x64/bin/npm', '--production', 'rebuild']' returned non-zero exit status 1 (Executor::NonZeroExitStatus)
Run Code Online (Sandbox Code Playgroud)

概述页面的快照:

在此输入图像描述

Eb部署失败消息:

$ eb deploy
Creating application version archive "app-bdfdd-170514_152527".
Uploading: [##################################################] 100% Done...
INFO: Environment update is starting.                               
INFO: Deploying new version to instance(s).                         
ERROR: Failed to run npm install. Snapshot logs for more details.   
ERROR: [Instance: i-09af789a519075c5e] Command failed on instance. Return code: 1 Output: (TRUNCATED).../opt/elasticbeanstalk/containerfiles/ebnode.py", line 180, in npm_install
    raise e
subprocess.CalledProcessError: Command '['/opt/elasticbeanstalk/node-install/node-v6.10.0-linux-x64/bin/npm', '--production', 'install']' returned non-zero exit status 1. 
Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.
INFO: Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
ERROR: Unsuccessful command execution on instance id(s) 'i-09af789a519075c5e'. Aborting the operation.
ERROR: Failed to deploy application.                                

ERROR: Failed to deploy application.
Run Code Online (Sandbox Code Playgroud)

我的ebextensions文件(at .ebextentions/config.config),默认:

packages:
  yum:
    git: []
    cairo: []
    cairo-devel: []
    libjpeg-turbo-devel: []
    giflib-devel: []
Run Code Online (Sandbox Code Playgroud)

Package.json文件

{
  "name": "live-demos",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "gulp": "gulp",
    "start": "node app.js",
    "start:dev": "browserify ./js/about.js -o ./build/js/bundle.js && gulp build-dev"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.x.x",
    "browserify": "^13.1.0",
    "canvas": "^1.4.0",
    "d3": "^3.5.17",
    "d3.layout.cloud": "^1.2.0",
    "ejs": "^2.5.1",
    "express": "^4.13.1",
    "gulp": "^3.9.0",
    "gulp-autoprefixer": "^2.3.1",
    "gulp-compass": "^2.1.0",
    "gulp-concat": "^2.6.0",
    "gulp-minify-css": "^1.2.0",
    "gulp-nodemon": "^2.0.4",
    "gulp-sass": "^2.0.4",
    "isotope-layout": "^3.0.1",
    "request": "^2.74.0",
    "request-promise": "^4.1.1"
  },
  "devDependencies": {
    "gulp": "^3.9.0",
    "gulp-browserify": "^0.5.1",
    "gulp-nodemon": "^2.0.4"
  }
}
Run Code Online (Sandbox Code Playgroud)

dus*_*nes 10

这是一个很老的问题,但我在这里添加信息,因为我在本周最近遇到了同样的问题并且找到解决方案和解释并不容易。

TLDR:如果您看到此错误,您很可能正在使用 AWS 最小的实例之一,并且节点在完成完整npm install进程列表之前内存不足。您可以通过.ebextensions配置文件分配一些交换内存来解决这个问题。

将以下文件夹/文件添加到您的存储库(或添加到现有配置文件),然后确保在运行eb deploy.

# .ebextensions/01_setup_swap.config
commands:
    01setup_swap:
        test: test ! -e /var/swapfile
        command: |
            /bin/dd if=/dev/zero of=/var/swapfile bs=1M count=2048
            /bin/chmod 600 /var/swapfile
            /sbin/mkswap /var/swapfile
            /sbin/swapon /var/swapfile
Run Code Online (Sandbox Code Playgroud)

TL_did_R :

在 AWS 提供的最小实例类型(t2.micro、t1.micro 和 t3.nano)上运行多个 Elastic Beanstalk Node 应用程序时,我一直遇到这个问题。我能解决这个错误的唯一方法是使用不可变部署策略,它需要更长的时间,并且伴随着所有其他类型的麻烦,比如新实例 ID、ssh 会话重新启动、新日志等。

经过多次失败的搜索后,我终于找到了这篇文章,其中用户eladnava2有效地提供了我在此处包含的相同解释和解决方案 - 但随后被线程中的接下来几个仍在询问是否已找到解决方案的人忽略。虽然eladnava2包含的代码示例对我不起作用,但它让我走上了下一次搜索的正确道路,这让我看到了这篇关于配置 EB 交换内存的文章,并包含了一个对我有用的代码片段,我已经逐字逐句地包含了以上。虽然这篇博文是关于 ruby​​ 应用程序的,但它对我来说适用于 Node 应用程序。

自从几天前进行此更改以来,尽管每天多次部署到六个都在t3.nano实例上运行的应用程序,但我没有再次遇到错误。

所以……如果您在需要安装大量依赖项的小型实例上运行 Node 应用程序 - 当机器的默认资源不足以完成构建任务时,这可能对您有用。

上面提到的实例的内存:

在此处输入图片说明

  • 哇。我已经和这个问题斗争了好几天了。非常感谢! (3认同)