Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NPM error when deploying NodeJS to Elastic Beanstalk

I'm getting the following error:

 5065 verbose linkBins [email protected]
5066 verbose linkMans [email protected]
5067 verbose rebuildBundles [email protected]
5068 verbose rebuildBundles [ 'bindings', 'nan' ]
5069 info install [email protected]
5070 verbose unsafe-perm in lifecycle false
5071 info [email protected] Failed to exec install script
5072 verbose stack Error: [email protected] install: `node-gyp rebuild`
5072 verbose stack Exit status 1
5072 verbose stack     at EventEmitter.<anonymous> (/opt/elasticbeanstalk/node-install/node-v4.2.1-linux-x64/lib/node_modules/npm/lib/utils/lifecycle.js:214:16)
5072 verbose stack     at emitTwo (events.js:87:13)
5072 verbose stack     at EventEmitter.emit (events.js:172:7)
5072 verbose stack     at ChildProcess.<anonymous> (/opt/elasticbeanstalk/node-install/node-v4.2.1-linux-x64/lib/node_modules/npm/lib/utils/spawn.js:24:14)
5072 verbose stack     at emitTwo (events.js:87:13)
5072 verbose stack     at ChildProcess.emit (events.js:172:7)
5072 verbose stack     at maybeClose (internal/child_process.js:818:16)
5072 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5)
5073 verbose pkgid [email protected]
5074 verbose cwd /tmp/deployment/application
5075 error Linux 4.1.10-17.31.amzn1.x86_64
5076 error argv "/opt/elasticbeanstalk/node-install/node-v4.2.1-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v4.2.1-linux-x64/bin/npm" "--production" "rebuild"
5077 error node v4.2.1
5078 error npm  v2.14.7
5079 error code ELIFECYCLE
5080 error [email protected] install: `node-gyp rebuild`
5080 error Exit status 1
5081 error Failed at the [email protected] install script 'node-gyp rebuild'.
5081 error This is most likely a problem with the sse4_crc32 package,
5081 error not with npm itself.
5081 error Tell the author that this fails on your system:
5081 error     node-gyp rebuild
5081 error You can get their info via:
5081 error     npm owner ls sse4_crc32
5081 error There is likely additional logging output above.
5082 verbose exit [ 1, true ]

package.json

{
  "name": "application-name",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "test": "mocha"
  },
  "dependencies": {
    "async": "^0.8.0",
    "aws-sdk": "^2.2.21",
    "bcrypt-nodejs": "0.0.3",
    "body-parser": "^1.0.2",
    "config": "^1.16.0",
    "cors": "^2.7.1",
    "crypto": "0.0.3",
    "crypto-js": "^3.1.5",
    "debug": "^0.7.4",
    "express": "^4.0.0",
    "express-jwt": "^0.4.0",
    "express-validator": "^2.3.0",
    "fs": "0.0.2",
    "jade": "^1.3.1",
    "jsonwebtoken": "^5.0.0",
    "mongoose": "^4.0.0",
    "morgan": "^1.0.1",
    "multer": "^1.1.0",
    "nodemailer": "^1.8.0",
    "os-shim": "^0.1.3",
    "prompt": "^0.2.14",
    "request": "^2.67.0",
    "validator": "^3.22.1"
  },
  "devDependencies": {
    "chai": "^1.9.1",
    "chance": "^0.5.9",
    "mocha": "^1.18.2",
    "node-inspector": "^0.12.3",
    "supertest": "^0.13.0"
  }
}

Errors thrown in EB console:

2015-12-05 08:44:49 UTC+0700    ERROR   During an aborted deployment, some instances may have deployed the new application version. To ensure all instances are running the same version, re-deploy the appropriate application version.
2015-12-05 08:44:49 UTC+0700    ERROR   Failed to deploy application.
2015-12-05 08:44:49 UTC+0700    ERROR   Unsuccessful command execution on instance id(s) 'i-65c4d5dc'. Aborting the operation.
2015-12-05 08:44:49 UTC+0700    INFO    Command execution completed on all instances. Summary: [Successful: 0, Failed: 1].
2015-12-05 08:44:49 UTC+0700    ERROR   [Instance: i-65c4d5dc] Command failed on instance. Return code: 1 Output: (TRUNCATED)..."/opt/elasticbeanstalk/containerfiles/ebnode.py", line 166, in npm_install raise e subprocess.CalledProcessError: Command '['/opt/elasticbeanstalk/node-install/node-v4.2.1-linux-x64/bin/npm', '--production', 'rebuild']' 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.

Here's the .ebextensions/config.config I'm trying:

packages:
  yum:
    gcc: []
    make: []
    openssl-devel: []
    libxml2: []
    libxml2-devel: []
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" :
    mode: "000775"
    owner: root
    group: root
    content: |
      #!/bin/bash
      function error_exit
      {
      eventHelper.py --msg "$1" --severity ERROR
      exit $2
      }

      export HOME=/home/ec2-user # ADDED EXPORT COMMAND
      echo "export home" # JUST FOR REMARK

      OUT=$(/opt/elasticbeanstalk/containerfiles/ebnode.py --action npm- install 2>&1) || error_exit "Failed to run npm install. $OUT" $?
      echo $OUT

It looks like the error is coming from node-gyp or sse4_crc32.

Is there some config I should be using in an .ebextensions file to overcome this please?

Thanks

like image 952
Phil Hudson Avatar asked Dec 04 '15 09:12

Phil Hudson


People also ask

Does Elastic Beanstalk run npm install?

json file is present, Elastic Beanstalk runs npm install to install dependencies. It also uses the start command to start your application. For more information about the package. json file, see the package.

Does Elastic Beanstalk support node JS?

Elastic Beanstalk provides platforms for programming languages (Go, Java, Node. js, PHP, Python, Ruby), application servers (Tomcat, Passenger, Puma), and Docker containers.


1 Answers

Solved.

The EB config file fixed it. My path to it was .ebextensions/config.config

packages:
  yum:
    gcc: []
    make: []
    openssl-devel: []
    libxml2: []
    libxml2-devel: []
files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" :
    mode: "000775"
    owner: root
    group: root
    content: |
      #!/bin/bash
      function error_exit
      {
      eventHelper.py --msg "$1" --severity ERROR
      exit $2
      }

      export HOME=/home/ec2-user # ADDED EXPORT COMMAND
      echo "export home" # JUST FOR REMARK

      OUT=$(/opt/elasticbeanstalk/containerfiles/ebnode.py --action npm- install 2>&1) || error_exit "Failed to run npm install. $OUT" $?
      echo $OUT

The home directory in the NPM task seemed to do the job.

Something key that held me back also - zipping the project in the Mac GUI will not zip hidden files. This can be overcome by doing it in the command line using:

zip -r archive_name.zip * .*
like image 171
Phil Hudson Avatar answered Oct 14 '22 14:10

Phil Hudson