Does anyone have a recommendation how to re-create the Heroku experience on AWS or Azure?
Besides the perf/security boost you aren't locked in to anything. You could take the same application and deploy it to multiple clouds simultaneously if you wanted to as it is making use of cloud primitives - nothing cloud-specific unlike some of the various serverless offerings.
It’s not a 1:1 experience, but I’ve enjoyed it as an alternative to Heroku for sure. Alternatively, you could spin up a server and install dokku which is pretty close to a shipping experience, but still requires some maintenance and hand holding.
I tried to get too fancy and set two web services on the same app (since the DO droplet was giving me more CPU and 4x the RAM for half the price) but they seemed to battle each other for control of the database and/or were exceeding resources. So I chilled out and used 1 web service and set CPU and RAM resource limits. And... it's been smooth since then! Much faster than heroku, too.
Price-wise: we were on the $50/mo dyno plus $9/mo postgresql, and with DO we beefed up the managed database specs, and now get 4x the RAM on the droplet, and the total cost is the same as heroku.
We do still have a free tier staging server on heroku that we only use a couple times a year.
Oh shoot, I just remembered that I use staticman for processing comments on a couple jekyll blogs, and those use free heroku tiers. Argh!
This was exactly what we tried to avoid with our (rather small) dev team.
It took our infra swe a few months to get MVP version working but he also did other infra related work at the same time. Complexity can change a lot depending on requirements, and ours are probably more stringent that Heroku ever supported. Because of sensitivity of the data we deal with there is now a relatively sophisticated identity management/permissioning/what-can-see-what-data component in how our infra is deployed which probably would not be the case for most companies. We also deploy ML models so there is additional issues with automation around keeping track of reproducability/provenance/ml pipeline regression/drift/deidentification/etc (which now a year later we haven't fully solved either!).