Unless you are really small, have variable workloads then the cloud is maybe not for you. Unless the cost is a small part of the total cost of the plattform like not really related to how many users/sales you have.
We could spend time making sure we use the smallest aurora instances possible in AWS or we could standardize on a version to support and use the smallest size of that version that's available. We spend a lot on this extra capacity in some places, but it greatly increases our speed in other places.
It's all about trade-offs and what your organization values.
More often than not, my fellow devs are happy throwing extra servers at a problem instead of tackling the problem :(
I'd rather not get put in that position. Pre-pandemic, business was pretty good, but that seems like an unwise assumption as we slide into a recession.
Maintenance burden that's avoided has two inflection points rather than one. In a large enough data center, there's enough work simply replacing hard drives that justifies having a team that manages it. From the other end, that's just not true if there's a small number of hard drives (like O(1)). There's a middle area though, where there's enough work for more people but the overhead of there being a team is too expensive.
The real cost is IT talent and time. I happen to have homelab experience with HP servers, so (for us) those costs are extremely low.
It's honestly not as complex or costly as cloud providers make it sound.
Replication offsite is easy via s2s vpn and veeam - as is spinning up new VMs for dev or testing. Building already has good a/c and backup power, and hardware/drive failures are rare.
Are you setup with one or two racks in each location and maybe one full time IT/Sys admin at each location?
So if you use a lot of bandwidth on top of it (can be another 25-50k at AWS) this could reach into to levels where it's worth it to hire two devops guys to run your own in combination with some SLA/management agreements with a colo.
I do hope you regularly patch and reboot your systems.
(Not picking on CentOS, just using it as a placeholder for $REQUIRED_OS_BECAUSE_OF_CUSTOM_SOFTWARE.)
Cloud? Automatically updating operating systems. On-prem? Must be stuck on an old version.
Microservices? You can release to production in minutes. Monolith? Must take you weeks to get a release out.
Go? Simple self-contained deployables. Java? Must need a JDK and Tomcat installed on the server.
It always seem to come up when the leading term is something dubious (cloud, microservices, Go), but the following term is something unequivocally good. Or maybe that's just when i notice it.
I've looked several times and found different technologies over time (kexec, (Oracle's) ksplice, kGraft, kpatch, livepatch). They do appear to have some use-cases, e.g. delaying the need for a reboot by being able to install a critical vulnerability fix/workaround so that the reboot can be done at a more convenient time. Because many of the patch mechanisms are function-based, they don't appear to solve the general problem in such a way that reboots can be avoided all together for arbitrary large kernel changes. From my reading of the solutions none are at the level of unattended upgrades using apt/yum-cron or similar in a way that "most" can benefit from them without worrying too much about it (ksplice might do it, but not sure how much you need to pay for it for server use and therefore how accessible it is). kexec helps with skipping the bootloader/BIOS, but I'm not sure if it ends up restaring all the systemd services or going up/down the runlevels, some places suggest it reduces downtime but doesn't eliminate it. I've not experimented with any of these myself yet... so I'd be happy to be proven wrong and in any case learn more!
References:
- http://jensd.be/651/linux/linux-live-kernel-patching-with-kp...
- https://linux-audit.com/livepatch-linux-kernel-updates-witho...
- https://wiki.archlinux.org/index.php/Kernel_live_patching
- https://wiki.archlinux.org/index.php/Kexec
EDIT: forgot to mention livepatch
Our IT infra costs are 1/10th the cost of cloud, simply because I happen to be comfortable having on-premise machine and working on them (sometime myself).
We have two dozen servers in two locations. It's more time to setup, but maintenance is actually quite low.