The AG2R La Mondiale rider, who placed fifth in this year’s Trofeo Laigueglia, completed the 181km alpine stage that featured 3 000m of total elevation in 4:41:34.
Esteban Chaves (Mitchelton-Scott) and Davide Formolo (Bora-Hansgrohe) secured second and third respectively.
“It’s huge. It’s my first professional victory, and to do it at a Grand Tour is magic,” said Peters.
Peters attacked from an 18-man breakaway with 16km to the finish.
With 4km remaining he had 56 seconds over Valerio Conti (UAE Team Emirates), Chaves and Krists Neilands (Israel Cycling Academy), plus a bit more over the rest of the breakaway.
Peters extended his lead to the trio to over a minute as he headed for victory.
“I wanted to focus on the finale, and didn’t want to go after people on the first climbs, so when the attacks came I was happy to follow. Then I put in one big attack and behind they looked at each other a little. I managed my effort well and that was it.”
Earlier, Jan Bakelants (Sunweb) was the first to attack from the original 18-rider breakaway.
When he hit the first categorised climb to Elvas, he had a lead of 30 seconds to the chasing group and seven minutes to the peloton.
He extended his lead to a maximum of over a minute over his former breakaway companions before hitting the second categorised climb to Terento.
Bakelants was caught with 45km to go, as he joined Peters, Thomas De Gendt (Lotto Soudal), Gianluca Brambilla (Trek-Segafredo), Formolo, Neilands, Fausto Masnada (Androni Giocattoli-Sidermec) and Chris Hamilton (Sunweb).
The rest of the original 18-man group, which also included Andrea Vendame (Androni Giocattoli-Sidermec), Amaro Antunes (CCC), Victor De La Parte (CCC), Tanel Kangert (EF Education First), Chaves, Nicola Conci (Trek-Segafredo), Koen Bouwman (Jumbo-Visma), Bob Jungels (Deceuninck-QuickStep), Conti and Mirco Maestri (Bardiani-CSF), linked up with them.
This was when Peters, who came fifth in last year’s Tour de l’Ain, attacked from the break and made his way to the finish.
Richard Carapaz (Movistar Team), who celebrated his birthday today, kept hold of the maglia rosa.