Bottas started third in his Mercedes but led into Turn 2 after getting the jump on poleman Vettel and the other Ferrari of Kimi Raikkonen.
After an early safety car period, Bottas led comfortably in the opening half of the grand prix, extending his lead to 5.5 seconds at one stage and pitting on lap 27 of 52 with a 2.5s advantage.
He then withstood a late charge as Vettel rallied with fresher super-softs to win by 0.6s.
Russian Grand Prix
First Formula 1 win 'surreal' for Bottas
30/04/2017 AT 15:19

Valtteri Bottas (Mercedes), Sebastian Vettel (Ferrari) - GP of Russia 2017

Image credit: Getty Images

"Our start was probably a match with Valtteri," said Vettel. "Maybe he gained a bit of momentum, he had a massive tow.
"I defended the inside but when we approached the braking zone he was in front and able to shut the door on me.
"That is where he won the race, he then had an amazing first stint - I couldn't stay with him.
"It was Valtteri's race, he drove an incredible race, he had incredible pace.

Sebastian Vettel of Germany driving the (5) Scuderia Ferrari SF70H on track during the Formula One Grand Prix of Russia on April 30, 2017 in Sochi, Russia.

Image credit: Getty Images

"He deserved to win because he drove better than all of us."
Vettel added that the delayed start meant he could have made a better getaway, even though he still described his launch as good.
The original start was abandoned after Fernando Alonso's McLaren ground to a halt at the end of the lap, necessitating a second warm-up lap that took Vettel by surprise.
"I thought there was maybe a bit more in the beginning," said Vettel of his start.
"I was ready to go, I don't know why there was a delay so I didn't get a proper read of how the grip was.
Russian Grand Prix
Bottas earns maiden win for Mercedes with Hamilton stuck in fourth
30/04/2017 AT 14:34
Russian Grand Prix
Russian Grand Prix qualifying: Ferraris fearsome, Mercedes shocked
29/04/2017 AT 13:08