Pep Guardiola's hopes of a Champions League showdown with his new club Manchester City were ended by Antoine Griezmann who grabbed the decisive goal as Atletico Madrid hit Bayern Munich with a sucker punch to reach the final.
Griezmann tucked away Atletico's first shot on target for the crucial away goal to cancel out Xabi Alonso's first-half strike.
On a dramatic night with both sides missing a penalty, Robert Lewandowski put Bayern back ahead 2-1 on the night and levelled the tie 2-2 on aggregate, but they could not find a third as Atletico progressed on away goals and they will face either Real Madrid or Manchester City - who meet tonight after a goalless first leg - in Milan at the end of the month.
Atletico's defence was breached when David Alaba was tripped on the edge of the area in the 31st minute. Alonso drilled his free-kick hard and low and it took a big deflection off Jose Maria Gimenez on its way in.
Gimenez tugged back Javi Martinez to give away a spot-kick, but Jan Oblak read Thomas Muller's penalty correctly, diving to his right to make a fine save.
Griezmann grabbed Atletico's crucial away goal nine minutes after the break. Fernando Torres sent the Frenchman racing through and he kept his cool to whip the ball past Manuel Neuer.
Bayern got one back when Lewandowski pounced from close range.
Atletico were awarded a penalty when Torres, seemingly just outside the area, was tripped by Martinez only for the striker to see his spot-kick palmed away by Neuer.
BAYERN MUNICH: Neuer, Lahm, Martínez, Boateng, Alaba, Alonso, Costa (Coman 73), Müller, Vidal, Ribéry, Lewandowski. Subs not used: Tasci, Thiago, Rafinha, Götze, Ulreich, Kimmich.
Goals: Alonso 31, Lewandowski 74
ATLETICO MADRID: Oblak, Juanfran, Giménez, Godín, Luis, Ñíguez, Gabi, Fernandez (Carrasco 45), Koke (Savic 90), Griezmann (Partey 82), Torres. Subs not used: Rumbo, Correa, Hernández, Vietto.
Goal: Griezmann 53
Referee: Cüneyt Çakir (Turkey).