Search code examples
amazon-web-servicesnginxamazon-ec2aws-code-deployaws-code-deploy-appspec

Amazon EC2 | CodeDeploy [React] - Deployment succeeds but build folder not populated


TL;DR The command npm run build is taking forever to run on the Amazon EC2 [Ubuntu] instance when I tried running it explicitly by making an SSH. Meanwhile, when I try to create a deployment using CodeDeploy, the deployment takes a good 1 hour time and succeeds but the build folder doesn't get populated, hence I am unable to view my website on the public URL of the EC2 instance. Also, the instance reachability check fails every time after I try to run the command explicitly, and then I have to start and then stop the ec2 instance again! Woof!


Hello everyone, I am trying to deploy my MERN Stack application to AWS but I am stuck now!

Current Progress:

  1. Added both Nginx configs.[Attaching image below] Nginx is running and there is no problem there!
  2. Added build-app.sh in appspec.yml in the root directory. [View code below]
#!/bin/bash

#clear  build    directory
cd /home/ubuntu/badlav-app/badlav-client
sudo rm -rf build
sudo mkdir build

#client (Generates a new `build` directory)
cd /home/ubuntu/badlav-app/badlav-client
sudo sh set-prod-env-aws.sh
sudo rm -rf node_modules
sudo npm i
sudo npm run build

#server
cd /home/ubuntu/badlav-app/badlav-server
sudo sh set-prod-env.sh

#back to root
cd /home/ubuntu

appspec.yml

version: 0.0
os: linux
files:
  - source: /
    destination: /home/ubuntu/badlav-app
hooks:
  BeforeInstall:
    - location: scripts/build-app.sh
      runas: root

Using the above appspec.yml file, the deployment using CodeDeploy succeeds but didn't populate the build folder within /home/badlav-app/badlav-client/build. So I tried to debug on my own and started running the commands one by one by myself after SSH(ing :P) into the EC2 instance. But when I reach npm run build, the instance just hangs forever. After being exhausted, I have no option left, I terminate the task. Now, when I view my instance on the AWS Console, it has gone berserk! The instance reachability check fails! The only way, I get my instance back is by stopping it and starting it again.

Since I am new to CI/CD, please don't judge my appspec.yml. It'd be great if anyone of you could suggest a better way, thanks for that! :)

To sum up, I want to be able to create a deployment using AWS CodeDeploy, but due to this npm run build taking so much time and hanging my server(instance reach check fails!), I am unable to do so. Moreover, I am not even sure whether npm run build is a problem at all!

I would be more than happy to share any further details/screenshots in order to support my question. Please ask over.

Thanks in advance!

/etc/nginx/nginx.confenter image description here/etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf


Solution

  • If you're using EC2 free tier, the chance is that the instance may have low spec and memory (t2.nano has 0.5G and t2.micro has 1G of memory).

    Maybe npm run build consumes all of the memory space.

    I often face the same problem with my vue project.

    Solution: Do NOT use free tier for medium and large projects. Upgrade your plan and use better instances e.g. t2.medium