One of the big mistakes that I see when working with clients on their cloud migrations is the size of VMs in the cloud compared to their size on-prem. Typically when people are moving machines from on-premises to the cloud they pick a Virtual Machine size that is the same as (or close to) the size of the on-prem machine. For non-database servers (and even for database servers sometimes) this isn’t needed.
One thing to remember that the cloud gives you, that you didn’t have on-premises is the ability to scale without any upfront commitment. When you are running your Virtual Machines on-premises you still have to budget for and purchase the hardware. So the Virtual Machines that you create on-premises need to be sized for their peak workloads throughout the lifetime of the machine so that the hardware can be correctly purchased, allocated, and not overcommitted.
In the cloud, we don’t need to “reserve” CPU or RAM when we don’t need it. In fact sizing VMs to larger sizes in the cloud has a direct financial cost, larger VMs costs more than smaller VMs do. So by sizing up a VM, that VM will be costing more money to run. But we don’t have that cost until we actually scale the VM up.
This can make services in the cloud must more cost-effective than a direct CPU/RAM equivalent from the on-premises server.