The result sets up a high-voltage final on August 23, with Bayern Munich facing Paris Saint-Germain, which recently beat RB Leipzig 3-0.
Notably, Bayern would be vying for its second treble, a feat only achieved by Barcelona till now.
Serge Gnabry opened the scoring for Bayern in the 18th minute with his solo effort.
Although Lyon created plenty of chances to score with Memphis Depay nearly netting one, the execution made them pay.
Nevertheless, Gnabry added another as Bayern doubled their lead in the first half.
In the second half, Robert Lewandowski's sharp header sealed the game.
Robert Lewandowski has become only the second player to score 15 or more Champions League goals in a single campaign after Cristiano Ronaldo (17 in 2013/14, 16 in 2015/16 and 15 in 2017/18).
The former has now scored in nine consecutive UCL games.
Only Ruud Van Nistelrooy (9) and Cristiano Ronaldo (11) have scored in as many successive matches in the competition's history.
After this clash, Serge Gnabry became only the second German player to net a brace in a Champions League semi-final, after current team-mate Thomas Muller (2012/13).
He is also one of four players to be directly involved in 10+ goals in the Champions League this season, along with Robert Lewandowski (19), Erling Haaland (11), and Kylian Mbappe (10).
The combined goals (24) scored by Lewandowski (15) and Gnabry (9) are the most by a pair of team-mates in a single UEFA Champions League season, surpassing the tally by Cristiano Ronaldo (17) and Gareth Bale (6) in 2013/14 for Real Madrid.
This was Bayern's 12th appearance in the semi-finals of the Champions League with only Real Madrid (13) reaching this stage on more occasions.
Before this match, they hadn't progressed from any of their last four semi-finals.
Bayern also became only the fourth team in UCL history to reach 40 goals in a single campaign, along with Barcelona (45), Real Madrid (41), and Liverpool (41).
Love Sports news?
Subscribe to stay updated.