Maybe I'm a bit contrarian on this one but once I saw data center, Azure, and the phrase "lift and shift" it filled in a lot of context for me. I spent a lot of my early to mid career participating in these strategies. They don't work. VM images almost always are different in some way, there's something one vendor provides that another doesn't - in general there's enough minute details that add up to make a series of mini-mountains in terms of blockers.
Yep, there are always differences. Just one thing I stumbled into recently was one of our program images that has long worked fine in AWS can't start in Azure because something their hypervisor does to the virtual address layout conflicts with the way that we remap .text to a huge page. It is both trivia and a showstopper.
Yeah, there is a vast gulf between "it works for us" and "every dependency was implemented strictly according to open standards and is therefore seamlessly portable". See also the joke of migrating between "SQL" databases.