Ajax secured a place in their first European final for 21 years after surviving a huge scare in Lyon.
The Dutch side, who played the final six minutes with 10 men, went through 5-4 on aggregate after losing 3-1 on the night, despite taking the lead through 19-year-old Dane Kasper Dolberg.
Lyon's in-demand striker Alexandre Lacazette led the fightback with two in 79 seconds on the stroke of half-time and Rachid Ghezzal's header, which deflected in off Nick Viergever, who moments later was sent off, resulted in a nail-biting finish.
The visitors held on, though, to set up a final meeting with Manchester United in Solna on May 24, their first European showpiece since losing the 1996 Champions League final on penalties to Juventus.
Ajax went into the clash boasting a commanding 4-1 first-leg lead, but Lyon were boosted by the return of key striker Lacazette, who was forced off early on in the clash in Amsterdam.
But for most of the first half Lacazette saw little of the ball and even less sight of Ajax's goal as the visitors' youthful side controlled the game.
He planted one early header wide, with Maxime Gonalons' glancing header easily saved by Andre Onana as Lyon struggled to generate the momentum they needed to overcome a three-goal deficit.
Their task was made even more difficult when they switched off in the 27th minute and were caught out by a straightforward clearance from Onana.
The goalkeeper's clearance exposed the hosts, who were left two versus two at the back. Dolberg collected the knockdown to exchange passes with Amin Youne and continued his run untracked to coolly dink a shot over the advancing Anthony Lopes from a narrow angle.
Lyon had no option but to raise the tempo, but it was not until 79 seconds from the end of the half that they broke through when Matthijs de Ligt was adjudged to have fouled Lacazette.
The striker picked himself up to send Onana the wrong way from the penalty spot to transform the atmosphere inside the ground.
Lyon responded and with the last kick of the half Lacazette turned in Nabil Fekir's cross at the far post after Viergever mis-kicked his clearance.
Ajax's young side were clearly rattled and at the start of the second half displayed none of the composure they had in the first.
However, they managed to blunt Lyon's attacks, with Onana only being called upon to make one genuine save 15 minutes from time when he charged down substitute Maciej Rybus's shot from Lacazette's knockdown.
Ajax midfielder Donny van de Beek curled a shot against the angle of crossbar and post, which would have finally killed off the hosts, and they were left to face a frantic last 10 minutes when Ghezzal's header deflected in off Viergever, who moments later was sent off for a second bookable offence.
Maxwel Cornet almost forced extra time with a shot which flew inches wide of the far post in the final minute, but a clearly rattled Ajax managed to hold on.