Amazon Beanstalk installs node and npm into really obscure places - and I'm not sure they won't change if EB decides to use a newer version of node, which would cause my application to break.
These are the locations for node and npm:
/opt/elasticbeanstalk/node-install/node-v0.8.24-linux-x64/bin/node
/opt/elasticbeanstalk/node-install/node-v0.8.24-linux-x64/bin/npm
I'm worried about the 0.8.24
part changing and I'd rather not grep for things in cron or monit scripts when trying to find something that is normally just /usr/bin/XXX
.
how do I get a consistent filepath for these executables? and why does EB do this?
for reference, I tried setting the NodeVersion
option in an .ebextensions/app.config
, it had no effect on the install location.
Following Peter Johnson & Greg Tatum replies I created a symlink to the latest node executable:
Amazon Elastic Beanstalk
Grand the access to node command
ls -td /opt/elasticbeanstalk/node-install/node-* | head -1
/binI created the file
/.ebextensions/node.config
in my project folder to declare my node version and add symlinks to the /bin folder. More information about the .ebextensions folder can be found here: http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers-ec2.htmlWe had a similar issue with "node not found", trying to run node in container commands. After running
ps aux
on the EC2 instance we saw that EB has access to the$NODE_HOME
env var:This can be used in .ebextensions, e.g.:
(thanks to Alan Grow)
You can add the most recent node and npm binaries to $PATH with a command like this:
I couldn't figure out how to prevent beanstalk commands from resetting the $PATH back again.
If you are so inclined you can probably create a symlink with a command similar to the above and use that as your reference point in cron scripts etc.
Agreed, it is very very annoying.