Nigerian defender Bryan Idovu put Amkar into the lead in the 19th minute, then former Manchester City midfielder Javi Garcia equalised for Zenit in the 41st minute after heading the ball home from a corner.
The game went to extra time and then to penalties. The visitors came out on top 4-3, with Javi Garcia scoring the decisive spot kick.
"If we manage to win the cup and the league title, this will be the first time in history that we will win the three main trophies in the country in the same season," said Zenit head coach Andre Villas-Boas.
Zenit will face CSKA on May 2 in Kazan after Leonid Slutskiy's side beat FC Krasnodar 3-1.
CSKA's 19-year-old midfielder Alexander Golovin scored a brace in the 35th minute and in the dying seconds before the interval. Straight after the resumption Alan Dzagoev made it 3-0.
Icelandic defender Ragnar Sigurdsson scored a conciliation for the side from the south of Russia in the 73rd minute.Published 21 Apr 2016, 01:15 IST