AWS CodeDeploy Command Not Found

5.4k Views Asked by At

When trying to deploy a Node.js application I'm getting an error npm: command not found in my post_install.sh AfterInstall script. What's super strange is in my BeforeInstall script I run npm install -g pm2 and it works perfectly fine without any errors.

Both are being run as the ubuntu user. Why would this command work in one CodeDeploy script and fail in another?

3

There are 3 best solutions below

0
On BEST ANSWER

Looks like I was able to solve this by adding the following to my script files.

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

Hopefully this can help someone.

1
On

I got the same problem trying to invoke the aws cli in my shell script during the After Install hook, in an ubuntu20 server with ubuntu user.

I have checked inside /usr/bin/ folder on server yarn/pm2/node are running are not If not run below command root@ip-:/# ln -s /root/.nvm/versions/node/v16.17.0/bin/node /usr/bin/ root@ip-:/# ln -s /root/.nvm/versions/node/v16.17.0/bin/pm2 /usr/bin/ root@ip-:/# ln -s /root/.nvm/versions/node/v16.17.0/bin/yarn /usr/bin/

0
On

I got the same problem trying to invoke the aws cli in my shell script during the AfterInstall hook, in an ubuntu server with ubuntu user.

This is what happened when I executed my script manually sh ecr-login.sh:

# Works
$(aws ecr get-login --no-include-email --region sa-east-1)

# Works
$(/home/ubuntu/.local/bin/aws ecr get-login --no-include-email --region sa-east-1)

When CodeDeploy executed it:

# Not Work
$(aws ecr get-login --no-include-email --region sa-east-1)

# Works
$(/home/ubuntu/.local/bin/aws ecr get-login --no-include-email --region sa-east-1)