aws-amplify / amplify-hosting

AWS Amplify Hosting provides a Git-based workflow for deploying and hosting fullstack serverless web applications.
https://aws.amazon.com/amplify/hosting/
Apache License 2.0
461 stars 116 forks source link

!!! CustomerError: Can't find required-server-files.json in build output directory #3869

Open Quska45 opened 11 months ago

alexandersg2 commented 11 months ago

I've also been experiencing the error "CustomerError: Can't find required-server-files.json in build output directory" for the past week on my Nextjs app. It doesn't seem to be related to any changes I've made, as I've sometimes been able to revert and then re-add commits to achieve a successful build, only to run into the same issue a few commits later.

This is now completely blocking my deployments.

rayedturbine commented 11 months ago

Same issue here, Any response yet from Amplify team?

alexandersg2 commented 11 months ago

Any updates on this? I've been unable to deploy new code for 2 weeks now and am getting desperate. If the Amplify team can't look into this, can anyone tell me the next best way to deploy an Amplify app? Cheers

alexandersg2 commented 11 months ago

I seem to have fixed the issue by updating the line **/*.js to src/**/*.js in my tsconfig.json.

abe123442 commented 10 months ago

I am also getting this problem. The solution to update **/*.js to src/**/*.js did not work for me. Can Amplify team look into this?

karpolan commented 10 months ago

Got the same error after successful build of Next.js application :)

I use Next.js v14 with { output: "export" } config.

I run on custom build image with Node 20: public.ecr.aws/docker/library/node:20.11.0

rayedturbine commented 10 months ago

The problem is if you are using ‘next’ or yarn dev/run dev for tests then the build (.next) is overriden and doesnt have production build anymore. Make sure you either use production build or run next build after completing tests or tests server.

Thank you,

Rayed bajwa


From: Anton Karpenko @.> Sent: Saturday, January 27, 2024 2:55:19 PM To: aws-amplify/amplify-hosting @.> Cc: Rayed Bajwa @.>; Manual @.> Subject: Re: [aws-amplify/amplify-hosting] !!! CustomerError: Can't find required-server-files.json in build output directory (Issue #3869)

Got the same error after successful build of Next.js application :)

I use Next.js v14 with { output: "export" } config.

I run on custom build image with Node 20: public.ecr.aws/docker/library/node:20.11.0

— Reply to this email directly, view it on GitHubhttps://github.com/aws-amplify/amplify-hosting/issues/3869#issuecomment-1913314040, or unsubscribehttps://github.com/notifications/unsubscribe-auth/BAH3BL67QHDUCXZIFUFEM7TYQVLSPAVCNFSM6AAAAABA57AKSSVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTSMJTGMYTIMBUGA. You are receiving this because you are subscribed to this thread.Message ID: @.***>

karpolan commented 10 months ago

The issue disappears if change baseDirectory from "out" back to default ".next"

P.S. I also changed the building image to "Amazon Linux:2023"

image

karpolan commented 10 months ago

LOL, but after a successful build and deployment, the website is not working...

I love Apmlify (c)

NickRumenov commented 10 months ago

Any updates on this? Still facing the problem

dancj commented 7 months ago

I'm facing this issue as well with next 14.1.4 app with SSG pages hosted on amplify.

The next docs are explicit about using output: "export" in my next.config.js and that it will output to out folder: https://nextjs.org/docs/app/building-your-application/deploying/static-exports

It builds locally but with my build settings like this, getting the Can't find required-server-files.json error on amplify.

version: 1
frontend:
  phases:
    preBuild:
      commands:
        - npm ci
    build:
      commands:
        - npm run build
  artifacts:
    baseDirectory: out
    files:
      - '**/*'
  cache:
    paths:
      - .next/cache/**/*
      - node_modules/**/*
isoppp commented 5 months ago

I faced a similar problem when trying to host static Storybook files which is in Next.js dir. My issue was resolved by switching the platform from WEB_COMPUTE to WEB using the CLI.

aws amplify update-app --app-id your-amplify-app-id --platform WEB --region your-region

Reference: https://docs.aws.amazon.com/amplify/latest/userguide/redeploy-ssg-to-ssr.html#update-platform

Hopefully it could be helpful.

pvhuwung commented 5 months ago

Yes the baseDirectory: .next will not running correctly if you want to build a NextJS - SSG, static site generating.

So basically you may need to change it to baseDirectory: out in the amplify.yml, also don't use next export, because it no longer supported by NextJS from v13.4.0 and has been removed from `v14.0.0, which will causing error when building in AWS Amplify (Reference

You will need to use out: "export" in you next.config.js file, in the nextConfig. You can try to build from here

And then if your build still causing error, maybe because Amplify does not recognise your app as a SSR or SSG, so you might need to go to AWS CLI to configure

Remember to create an IAM account with the correct provision rules to work with Amplifier

  1. Run the following AWS CLI commands

    aws amplify update-app --app-id <APP_ID> --platform WEB --region <REGION>
    aws amplify update-branch --app-id <APP_ID> --branch-name <BRANCH_NAME> --framework 'Next.js - SSG' --region <REGION>
  2. Update your build spec to point the baseDirectory to out. e.g.

version: 1
frontend:
  ...
  artifacts:
    baseDirectory: out
  ...
  1. Trigger rebuild through commit, or manually

  2. You ready to go

Sometime the URL by Amplify, for example the built one is mysite.com, but when you clicked it appear nothing, actually because the actual routes is mysite.com/index.html

So if you want to set up the URL, You can go to the AWS Amplify Hosting console, go under All app / <Your Repo Name> / Hosting, and go to the Rewrites and redirects tab.

Then for example, if you want:

mysite.com/index.html -> mysite.com

You can set:

Source URL Target URL Type Country Code
/index.html / 200 (Rewrite) <Can be blank>

If you have some other routes, like /example.html but you dont want the .html ending, you can do this

mysite.com/example.html -> mysite.com/example

Source URL Target URL Type Country Code
/<any>.html /<any> 200(Rewrite) <Can be blank>

Thats my initial approach, hope that it is useful. Peace!

datnguyennnx commented 5 months ago

Hi there, three months ago. I have the same bug. I know a way to remedy that bug. 

I have explained it here: 

Check it out here:

It's helpful for you. Leave a thumbs up for me to know you solved it. 

nabanita-sarkar commented 1 month ago

For reference: I am using nextjs v14 export mode to generate html files in pages router

I removed everything from my repo in a new branch. Put inly a dummy a index.html and then connect the repo to amplify. So it doesn't auto detect the repo to be nextjs app. Now I change the build to this -

version: 1
applications:
  - appRoot: # Specify if there's a specific root directory for your app (optional)
    frontend:
      phases:
        preBuild:
          commands:
            # Install dependencies in all branches
            - npm ci
        build:
          commands:
            # Build the Next.js static site in all branches
            - npm run build
      artifacts:
        baseDirectory: out  # Output directory for Next.js static files
        files:
          - '**/*'  # Include all files in the output directory
      cache:
        paths:
          - node_modules/**/*  # Cache node_modules to speed up future builds
    environment:
      - NODE_ENV=production  # Ensure the environment is set to production for all branches

and then merge previous branch which had actual Next.Js code to this new branch. Then push and let amplify do auto deployment. It worked like a charm ✨