Denayer, who never played a competitive game for City, has agreed a four-year contract with the Ligue 1 club in a deal that will net the Premier League champion an initial €10million, with a further €3.5million possible in incentives.
The 23 year-old spent a series of loan spells away from the Etihad Stadium with Celtic, Sunderland and Galatasaray and was under contract at City until 2020.
He has also been capped on eight occasions by Belgium but has not featured for his country since Euro 2016.
"Jason is a player we have been following for three seasons now," Lyon's head of recruitment Florian Maurice said on his club's website.
"He has all the characteristics sought by [manager] Bruno [Genesio] - versatility because he is able to play all the positions in defence, intelligence of play, placement, speed and power in the duels."