Maxwel Cornet struck twice for Lyon, but each time City fought back within minutes through Aymeric Laporte and then Sergio Aguero to secure a thrilling 2-2 draw.
The Blues are now assured a place in the last 16 of the competition and need a point to guarantee top spot against a Hoffenheim side who cannot progress.
City needed no reminding they were up against a very useful Lyon side as the game kicked off in front of a partisan home crowd at the Parc Olympique Lyonnais.
The Ligue 1 side went into this Group F clash knowing they were the only team to beat the Blues this season, and the way the French side started suggested they were confident they could do so again.
There was a definite swagger to Lyon’s early play and with only four minutes played, the hosts should have been ahead as Maxwel Cornet headed Memphis Depay’s corner goalwards from close range only for Oleks Zinchenko to block what seemed a certain goal.
On 13 minutes, Depay was guilty of a dreadful miss as he looked certain to turn in the dangerous Cornet’s shot from three yards out and Ederson stranded – but the Dutch winger fluffed his lines and Kyle Walker ushered the ball clear.
It was end-to-end stuff and developing into a thrilling spectacle.
The hosts again should have gone ahead on the half-hour when Ferland Mendy’s cross found Cornet who brought the ball down and only had to apply the finishing touch when Aymeric Laporte bravely lunged in to deflect the ball over.
The Blues, riding their luck somewhat, again escaped going behind two minutes before the break when Depay picked out Cornet, but the striker’s acrobatic effort hit the corner of the bar and post, leaving the Ivory Coast striker cursing his misfortune yet again.
However, the Lyon striker needed just nine minutes of the second half to finally find the back of the net.
City were caught napping somewhat as a free-kick was played out to Depay and the former United winger spotted the run of Cornet and after cutting inside, the Lyon forward curled the ball into the top left-hand corner from 20 yards out.
It wasn’t a huge surprise given the first half chances the French side had missed, but City responded magnificently.
Then, four minutes later, the Blues drew level.
Raheem Sterling, playing in an unaccustomed central midfield role, whipped in a free-kick from the right and Silva’s flick found the head of Laporte who buried the ball from close range.
It capped a superb performance by the France international who didn’t put a foot wrong all evening.
Sixty seconds later Leroy Sane almost put City ahead as the Blues flooded forward, but the ball was smothered on the line by Lopes.
But Cornet, quiet since the goal, hadn’t finished his night’s work and the Ivorian broke into the box, almost out of nothing, to fire past Ederson with 81 minutes played.
The Blues went for the kill, but ultimately, both teams were more than happy with a point, with the likelihood that Lyon will also progress from Group F - and on this evidence, they will be a handful for any side in the competition.
What it means…
City are through to the Round of 16, but need a point against Hoffenheim - or Lyon to drop points to secure top spot.
Lyon, who have now drawn four of their Group F games - must avoid defeat in the final game away to Shakhtar to progress - a loss in the Ukraine and they will be eliminated.
Colossus from start to finish – brave, intelligent and determined.
City host Bournemouth in the Premier League at the Etihad Stadium this Saturday, 3pm.
Then it’s off to Watford the following Tuesday.