Reputation: 17220
I recently deployed a new node.js app on beanstalk and keep running into the following error?
[Instance: i-cce89e4a] 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-v4.4.6-linux-x64/bin/npm', '--production', 'rebuild']' returned non-zero exit status 254. Hook /opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh failed. For more detail, check /var/log/eb-activity.log using console or EB CLI.
My version of node is: 4.4.7
The deployment seems to be failing at the last line below:
except Exception, e:
npm_debug_log = '/var/log/nodejs/npm-debug.log'
app_npm_debug_log = os.path.join(app_path, "npm-debug.log")
write_event('Failed to run npm install. Snapshot logs for more details.', 'ERROR')
if not os.path.exists(app_npm_debug_log):
utc_time_str = datetime.datetime.utcnow().strftime("UTC %Y/%m/%d %H:%M:%S")
err_msg = str.format("{0} cannot find application npm debug log at {1} \n", utc_time_str, app_npm_debug_log)
print(err_msg)
with open(npm_debug_log, 'a') as f:
f.write(err_msg)
else:
shutil.copyfile(app_npm_debug_log, npm_debug_log)
raise e
I cant seem to find any solid solution out there?
I manually zipped and uplaoded the files.
The app works perfectly locally.
Can anyone help?
Application deployment failed at 2016-07-09T18:47:38Z with exit status 1 and error: Hook /opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh failed.
+ /opt/elasticbeanstalk/containerfiles/ebnode.py --action npm-install
npm WARN package.json [email protected] No repository field.
> [email protected] postinstall /tmp/deployment/application/node_modules/history
> node ./npm-scripts/postinstall.js
npm ERR! Linux 4.4.14-24.50.amzn1.x86_64
npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v4.4.6-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v4.4.6-linux-x64/bin/npm" "--production" "rebuild"
npm ERR! node v4.4.6
npm ERR! npm v2.15.5
npm ERR! path /tmp/deployment/application/node_modules/gulp-main-bower-files/node_modules/main-bower-files/node_modules/vinyl-fs/node_modules/duplexify/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/node_modules/esprima/bin/esvalidate.js
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall chmod
npm ERR! enoent ENOENT: no such file or directory, chmod '/tmp/deployment/application/node_modules/gulp-main-bower-files/node_modules/main-bower-files/node_modules/vinyl-fs/node_modules/duplexify/node_modules/readable-stream/node_modules/unreachable-branch-transform/node_modules/recast/node_modules/esprima/bin/esvalidate.js'
npm ERR! enoent This is most likely not a problem with npm itself
npm ERR! enoent and is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! Please include the following file with any support request:
npm ERR! /tmp/deployment/application/npm-debug.log
Running npm install: /opt/elasticbeanstalk/node-install/node-v4.4.6-linux-x64/bin/npm
Setting npm config jobs to 1
npm config jobs set to 1
Running npm with --production flag
Failed to run npm install. Snapshot logs for more details.
Traceback (most recent call last):
File "/opt/elasticbeanstalk/containerfiles/ebnode.py", line 695, in
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-v4.4.6-linux-x64/bin/npm', '--production', 'rebuild']' returned non-zero exit status 254.
Upvotes: 8
Views: 10532
Reputation: 2276
Enabling S3 Bucket Versioning for codepipeline fixed the issue for me
Upvotes: 0
Reputation: 17610
After running into continued npm install issues I decided to skip this step on Elastic Beanstalk and instead push my node_modules
directory up along with built files from my CI env (Github Actions).
I used this module to install the correct Elastic Beanstalk config. The readme gives a good explanation of the problem: https://github.com/mixmaxhq/eb-disable-npm
I had to add !node_modules
to my .ebignore
to ensure it's pushed. So far no EB errors and deploys are a lot faster.
Upvotes: 0
Reputation: 7906
If npm install
is failing for you on a nano
instance (e.g. t3.nano
), another workaround is to enable swap memory for your instance by creating a file in your project .ebextensions/swap.config
with the following contents:
commands:
enable_swap_memory:
command: "fallocate -l 1G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile"
ignoreErrors: true
Then, try running eb deploy
again and npm install
should succeed.
Upvotes: 3
Reputation: 2811
After hours searching why the deploy fails. I can say that any of the following points could resolve the problem.
t2.micro
to t2.small
in the elacticbeanstalk configuration.npmrc
file in root project with this content# Force npm to run node-gyp also as root, preventing permission denied errors in AWS with npm@5
unsafe-perm=true
Upvotes: 6
Reputation: 17220
I was previously including my node_modules folder in my zip files. Excluding this folder resolved the problem
Upvotes: 4
Reputation: 3543
I don't have enough information to answer... What does the /var/log/eb-activity.log say ?
...But I encounter a similar error when running an npm install on a beanstalk with a t2.small : it had not enough RAM, npm failed. Upgrading to a bigger instance solve the problem. (commiting node_module could also solve this problem, but I didn't wanted to).
What you should do is connect with SSH to the instance, and watch with top/htop what is happening when deploying.
Upvotes: 6