Real Madrid will play Liverpool on May 28 in Paris, a repeat of the 2018 final in Kyiv which the Spanish team won 3-1.
Real Madrid fought back from the brink of elimination to beat Manchester City 3-1 after extra-time in the second leg, and 6-5 on aggregate, in an enthralling and dramatic Champions League semi-final in Madrid on Wednesday.
City led 1-0 on the night and 5-3 on aggregate when Riyad Mahrez scored after 73 minutes but Real substitute Rodrygo equalised in the last minute of normal time and headed home one minute later to level the tie at 5-5.
Five minutes into extra-time Karim Benzema converted a penalty, awarded for a foul on him by Ruben Dias, and Real, the record 13-times European champions, held the shell-shocked English side at bay to reach the final.
Real will play Liverpool on May 28 in Paris, a repeat of the 2018 final in Kyiv which the Spanish team won 3-1.
It was another superb rearguard action by Real who came from behind for the third consecutive time in this season Champions League knock-out stage to stay on course to win Europe's most prestigious club competition for the fifth time in the last nine years.
After a breathtaking first leg packed with goals and individual brilliance from both sides, the return game was the complete opposite.
City worked tirelessly to subdue their hosts who failed to manage a shot on target on the first half.
With Real fast running out of ideas, Bernardo Silva broke through the middle of their defence and laid the ball off for Mahrez to finish and City looked certain to stay on course to win the trophy for the first time.
But as they did against Paris St Germain in the round of 16 and Chelsea in the quarter-finals, Real conjured up the magic they required.
Rodrygo slotted in from close range to give them a lifeline and the Brazilian headed home to send the Bernabeu crowd into raptures before Benzema completed the turnaround.
"Everything is possible when you are called Real Madrid," goalkeeper Thibaut Courtois told Movistar Plus.
"This is just amazing. We have knocked out very big clubs that have spent a lot of money to build their teams. But we have our history. And when Real Madrid get to the final, they go to win it."
City had dominated the first leg and their coach Pep Guardiola was content to sit tight and adopt a similar cautious approach as they they did in their quarter-final second leg against Atletico Madrid.
The plan worked well in the first half but Real missed a good chance to take the lead after the interval when Vinicius Jr. met a Dani Carvajal cross at the far post and sent his volley wide.
City continued to play their game of patience and earned the reward when Mahrez lashed home.
Phil Foden almost extended City’s lead with a counter-attack led by Jack Grealish which Real defender Eder Militao kept out on the line but Real refused to lie down.
In the last minute of regulation time, substitute Eduardo Camavinga found Benzema at the far post and the French striker set up Rodrygo to score from close range.
One minute later Rodrygo received a perfect cross from Dani Carvajal and got between three defenders to head the ball into the net.
With the Bernabeu turned into a cauldron, it was only a matter of time until Real delivered the killer blow, which came when Benzema was fouled by Dias and the Frenchman sent a precise spot-kick into the corner of the net.
"We were close. We were close. But in the end we could not reach it," Guardiola told BT Sport.
"We didn't play our best, but it is normal, a semi-final, the players feel the pressure. Football is unpredictable, it is a game like this. We have to accept it."
PIX: When Vini and Maxi Married Again...
Kohli on being an RCB success and elusive IPL crown
Discus thrower Kamalpreet Kaur fails drugs test
BCCI bans journalist for 2 years for threatening Saha