A double to Karim Benzema has helped send Real Madrid through to its third-straight Champions League decider following a tense 2-2 draw with Bayern Munich in the second leg of their semi-final at the Santiago Bernabeu.
Real Madrid, who has won the past two Champions League titles, held a 2-1 aggregate following its victory away to Bayern last week but it was immediately on the back foot at home when Joshua Kimmich scored in the third minute for the German club.
But the hosts reacted quickly this time, with Benzema equalising early in the first half and scoring again just after half-time after an embarrassing mistake by Bayern goalkeeper Sven Ulreich when trying to meet a back pass into the area.
Bayern came within a goal of eliminating the European champions when former Madrid player James Rodriguez scored in the 63rd minute, but it was not enough to avoid its third straight elimination against the Spanish club.
The Germans, who have now been knocked out in the Champions League semi-finals in four of the past five seasons, pressured until the end but could not keep alive their hopes of a treble.
By successfully defending its 2-1 win from the first leg last week, Madrid stayed on track for a third consecutive European title, and fourth in five seasons.
Europe's most successful club with 12 trophies, Madrid will play the final in Kiev against either Liverpool or Roma, who face off on Thursday (AEST) in Italy. Liverpool won the first leg 5-2 at home.
"This club's DNA pushes you to fight until the end. We knew how to suffer together," Real captain Sergio Ramos said.
"They had more possession but overall we were better. This team deserves to be in Kiev."
Bayern started well and easily created scoring chances, while Madrid tried to control possession but only threatened on counterattacks with the speed of Cristiano Ronaldo and Marco Asensio up front.
It did not take long for Bayern to strike first.
Kimmich netted from inside the area after Ramos failed to clear a ball crossed by Corentin Tolisso.
It was an eerily similar start to Madrid's quarter-final match against Juventus, when the hosts conceded in the second minute while trying to protect a 3-0 first-leg advantage. Madrid conceded twice more but eventually advanced thanks to Ronaldo's injury-time penalty.
This time, Madrid reacted a lot more quickly, with Benzema equalizing in the 11th with a firm header from close range after a well-placed cross from the left by Marcelo.
Benzema has not been playing regularly as a starter and was a surprise addition to the line-up by Zinedine Zidane. He had scored only once in his previous 12 appearances in all competitions.
The French striker put Madrid ahead again early in the second half after a terrible blunder by Ulreich after a pass into his own area from Tolisso.
The goalkeeper appeared to lose his footing while trying to get to the ball and seemed to hesitate to stop it with his hands as it could have been considered a deliberate back pass, and it ended up going underneath his arm as he went to the ground.
That allowed Benzema to run onto the ball for an easy finish into an open net.
Bayern was not done yet and Rodriguez equalised in the 63rd with a low shot from inside the area. The Colombian playmaker did not celebrate, instead raising his hands in an almost apologetic gesture to the home fans.
The visitors unsuccessfully appealed for a handball by Marcelo just before half-time, when the Madrid defender appeared to be just inside the area.
"We feel extremely bitter," Bayern defender Mats Hummels said.
"We had chances in the first leg, we were more dangerous today (than Madrid) but in the end Real made fewer big mistakes."
Madrid, playing in its 250th Champions League match, is the first team to make it to three European finals in a row since Juventus from 1996-98.