Real Madrid welcomed Bayern Munich to the Bernabeu with a 2-1 aggregate lead from the first leg. The visitors were quick off the mark with Joshua Kimmich scoring inside the first three minutes, but Madrid responded soon after when Karim Benzema headed home in the 11th minute.
Real were first out the blocks in the second half, as Benzema capitalised on a terrible mistake from Sven Ulreich to bag his second of the night and put Madrid back in control.
James Rodriguez gave the visitors a lifeline on 63 minutes, and constant pressure from Bayern followed. But despite their efforts the Bundesliga side could not find a way past Keylor Navas, and it was Madrid that booked a place in the Champions League final.
Bayern had the perfect start as they got themselves back in the tie with a goal just three minutes into the game. Thomas Muller put a ball into the box, Sergio Ramos got in a muddle and failed to clear, and it fell kindly to Kimmich who made no mistake in finding the back of the net, finishing from close range.
Madrid responded, taking control of possession. Cristiano Ronaldo shot wide before Benzema put Madrid back in the driving seat, as he headed home from Marcelo's cross.
The game became very open and end to end. Bayern looked like they were to retake the lead at the Bernabeu when Tolisso slotted a ball through to Robert Lewandowski, but the Polish forward failed to control the ball and went down under the challenge of Ramos.
There was a real ebb and flow to the game with both sides having chances, but Bayern continued to look the most dangerous on the attack, and again looked sure to score just after the half hour mark when Muller headed the ball into the path of James after Lewandowski's shot was parried away by Navas. But James subsequently ballooned the ball over the crossbar.
It was roles reversed as the second half kicked off, this time Madrid got the early goal. A soft back pass from Tolisso was inexcusably fumbled by Bayern keeper Sven Ulreich, allowing Benzema to race in an fire the ball into an empty net to put his side 4-2 up on aggregate.
Bayern looked to respond within minutes when David Alaba's long range shot deflected on it's way to goal, but Navas did well to save.
Luka Modric and Marcelo both put balls across the face of goal down the other end, before Ronaldo missed a sitter, and with it the chance put the game out of sight.
Bayern then found their second wind, with Alaba and Franck Ribery causing constant problems for Modric and Lucas Vasquez.
The visitors pressure paid off in the 63rd minute when James' shot rebounded back to the midfielder and he slotted home from what looked like an impossibly tight angle against his parent club, to give Bayern a lifeline.
Madrid responded with a double change as Gareth Bale and Casemiro entered the fray. But with 15 minutes remaining Bayern kept the pressure on and continued to search for a deserved goal.
Navas made a great save from Tolisso and James almost bagged himself a second.
Nicklas Sule cleared a rare chance for Madrid as he beat Ronaldo to the ball, summing up the central defenders impressive display in the absence of the injured Jerome Boateng.
The last ten minutes saw a barrage of chances from the German side, who were trying everything. Ball after ball came into the Madrid box as Bayern gave it all they had to get the goal to take them to the final, but Navas denied them time and time again. Muller had a chance with the last kick off the game, but just couldn't get on the end of the cross.