France still top the group on nine points from five games after a 1-1 draw against Bosnia on Wednesday and three days before hosting second-placed Finland, who beat Kazakhstan 1-0.
Ukraine are third behind the Finns, who also have five points, with Bosnia and Kazakhstan both on two points.
"It was much better in the second half and we have regrets in the first as we conceded the goal just after missing a chance," said coach Didier Deschamps.
"Playing all these matches in a row is tricky and very demanding but I'm not looking for excuses."
Kingsley Coman deputised in attack for Kylian Mbappe, who left the squad with calf pain, while Karim Benzema and Raphael Varane were on the bench and replaced in the starting lineup by Anthony Martial and Kurt Zouma.
France got off to a lively start but struggled to find their way past the hosts' five-man defence and they lacked inspiration throughout.
Martial also had an opportunity just before the break, but Shaparenko opened the scoring on the counter-attack with a splendid curled shot into the top corner.
Martial, however, levelled five minutes into the second half from close range after Coman's cross was deflected by Adrien Rabiot's header and bounced off a Ukraine defender.
In the 63th minute, Moussa Diaby replaced Coman and Benzema came on for Martial.
Both substitutes combined nicely in the box with 15 minutes left, but Diaby's shot hit keeper Andriy Pyatov's right-hand post.
The visitors, who looked shaky against Ukraine's quick counter-attacks, had another chance in the 85th minute when Rabiot's fierce, low 25-metre shot was saved by Pyatov.