Pep Guardiola’s side needed victory to secure their fourth title in five seasons but were facing the prospect of ending the season empty-handed as goals either side of the interval from Matty Cash and Philippe Coutinho put Villa 2-0 ahead and in control.
It looked as if Villa manager Steven Gerrard might help his former club Liverpool secure the title – until City turned the game on its head in an atmosphere bordering on hysteria.
Ilkay Gundogan, on as a substitute for Bernardo Silva, gave City hope with a far-post header in the 76th minute, and Etihad Stadium was a wall of noise when Rodri drove a low finish past Villa keeper Robin Olsen two minutes later.
The title-winning recovery was complete with nine minutes left as Gundogan once again arrived at the far post to put City in front, the decisive contribution on this nerve-shredding final day.
City did need those three points as Liverpool beat Wolverhampton Wanderers – with City boss Guardiola overcome with emotion and breaking down in tears at the final whistle.