City were two goals ahead on aggregate going into the 90th minute after Riyad Mahrez’s strike had added to their 4-3 first-leg win last week.
And then Rodrygo happened.
The Brazilian substitute turned home Karim Benzema’s left-wing ball from close range in the final minute – with Real’s very first shot on target.
And 90 seconds later he levelled the tie with a header into the top corner after Marco Asensio flicked on Dani Carvajal’s cross.
That sent an already rowdy Bernabeu into absolute euphoria.
City, who thought they were going through to a second consecutive all-English Champions League final, were shell-shocked.
Both sides had chances to win the tie before the full-time whistle. Ederson denied Rodrygo a quick-fire hat-trick and then an unmarked Phil Foden fired over inside the box.
And so to extra time the game went – and it was Real who got the decisive goal in maybe the greatest Champions League semi-final ever.
Benzema beat Ruben Dias to a loose ball in the box and was brought down by the City defender. He stepped up to take the penalty himself and scored his 43rd goal of the season. There is no doubt it is the most important.
Real’s Thibaut Courtois, who was by far the busier keeper, tipped away Foden’s header with Fernandinho inches away from scoring the rebound – but City could not find a goal to send it to penalties.
City’s devastating blow
The Champions League has delivered so many classic knockout ties in recent years, including the first leg of this one – a match City should have won by more.
It was looking like a rare, and delightfully, mundane one for City after Mahrez hammered home following Bernardo Silva’s surging run.
City have five Premier League titles – and are four wins away from a sixth – since the Abu Dhabi takeover in 2008.
But the Champions League – the trophy that really establishes your place as an icon of world football – has always eluded them.
After last season’s 1-0 loss to Chelsea in Porto, they may have wondered how long they would have to wait for another crack.
It looked like the answer was only 12 months. But now, who knows?
City fans will curse Rodrygo’s name forever if they never manage to win the European Cup.
The truth is City should have won this game easily. In the first half, Real keeper Courtois denied Mahrez, Kevin de Bruyne, Silva and Foden.
Late on Jack Grealish had a shot cleared off the line by Ferland Mendy – and another effort kept out by a diving Courtois.
Ederson’s only save in normal time came to deny Rodrygo a hat-trick.
After Benzema’s goal, they rarely looked like coming back and their players stood emotionless as the final whistle went on their European dreams.
Now Guardiola has a huge task on his hands. He has to lift City’s players’ heads for their final four Premier League games.
If they lose any of them, that gives Liverpool the chance to overtake them and win the title – and possibly become the first English team to win the quadruple.
Another night of European glory for Real
Real are the ultimate European Cup team, having won the competition 13 times – six times more than anybody else.
But in the final minute not even they could have imagined they would be going to Paris later this month.
So many times this season they were on the brink. They only booked their knockout place in their final group game – and then came back from 2-0 down on aggregate to beat Paris St-Germain in the last 16.
Then in the quarter-final against Chelsea, Rodrygo sent it to extra time with a late goal and Benzema netted the winner. Sound familiar?
Rodrygo, who replaced Toni Kroos after 68 minutes here, has truly booked his place in Real folklore now.
Their last final meeting, in 2018 in Kyiv, saw Gareth Bale score twice and Loris Karius’ howler gift Benzema a goal in a classic.
Anybody else excited to see what Real and Liverpool dish up on 28 May in this competition that never, ever stops delivering?