If people want to run Next.js for some reason, especially with react server components, then there is plenty of complexity that Vercel handles. For example, the version mismatch between the long-living client in the user's browser, and the server that is updated any time new changes are pushed. Vercel calls it the skew, and helps with it by keeping old servers alive for a while, and routing traffic to them from appropriately old clients. One would have to architect something similar on his own on AWS if he chose a similar tech stack.