1

I am trying to deploy my angular universal app to AWS Elastic beanstalk. I created a code pipeline on AWS where build output is sent to elastic beanstalk. Now elastic beanstalk needs an app.js or server.js or procfile file or package.json to run application but my build folder is like below

--dist/
   --Appname/
       --browser/
       --server/

   -- //here I am expecting package.json file

My Problem: I am trying to build angular universal but I want to include package.json at root level of dist. folder. I tried multiple approaches but the package.json is going to browser folder of build.

Below is what I tried:

Angular.json

"assets": [
  "src/favicon.ico",
  "src/assets",
  { "glob": "package.json", "input": "./", "output": "/" }
],

I also tried solution on this link

Also below is my buildspec file on AWS

version: 0.2

env:
    variables:
        CACHE_CONTROL: "86400"
        S3_BUCKET: "arn:aws:s3:::devemr.growthemr.com"
        BUILD_FOLDER: "dist"
phases:
  install:
    runtime-versions:
        nodejs: 10
    commands:
        - echo Installing source NPM dependencies...
        - npm install
        - npm install -g @angular/cli@next
  build:
    commands:
        - echo Build started 
        - npm run build:ssr
  post_build:
    commands:
        - bash -c "if [ /"$CODEBUILD_BUILD_SUCCEEDING/" == /"0/" ]; then exit 1; fi"
        - aws s3 rm s3://devemr.growthemr.com --recursive
        - echo S3 bucket is cleared.
 
artifacts:
    files:
        - '**/*'
    base-directory: 'dist'

Any solution will be much appreciated. Thanks in advance

tyler
  • 418
  • 4
  • 14
  • did you try coying it after build with ```cp``` ? – Mohammad Babaei Jan 03 '22 at 10:18
  • @MohammadBabaei I have tried but that doesnt work as build zip is already created by that time may be my cp command is wrong but below is what i tried aws cp s3:// bucketname/package.json s3://bucketname/buildfolder – tyler Jan 03 '22 at 10:40

1 Answers1

1

I see you are trying to run main js file which is generated after build in case of ssr. To run that you need a script or Procfile as per aws documentation. To do this I added Procfile to my s3 bucket and then run the build command

buildspec file

  build:
    commands:
        - echo Build started 
        - npm run build:ssr
  post_build:
    commands:
        - aws s3 cp s3://yourbucketname/Procfile ./dist
        - bash -c "if [ /"$CODEBUILD_BUILD_SUCCEEDING/" == /"0/" ]; then exit 1; fi"
        # - aws s3 rm s3://devemr.growthemr.com --recursive
        - echo S3 bucket is cleared.
        # - aws cloudfront create-invalidation --distribution-id=E26GLI30EJTNBB --paths '/*'
 
artifacts:
    files:
        - '**/*'
    base-directory: 'dist'

Also, don't forget to add the permission in your s3 bucket like below

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "PublicReadGetObject",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::bucketname",
                "arn:aws:s3:::bucketname/*"
            ]
        }
    ]
}
Mehul Kothari
  • 386
  • 1
  • 12