Russia has flattened part of an apartment building while residents slept in missile attacks near Ukraine’s port of Odesa that authorities say killed at least 21 people.

The attack on Friday came hours after Russian troops abandoned the Black Sea outpost of Snake Island.

Residents in the resort village of Serhiivka helped workers pick through the rubble of the nine-storey apartment block, a section of which had been destroyed in the early morning strike.

Walls and windows of a neighbouring 14-storey apartment block were damaged by the blast wave. Nearby holiday camps were also hit.

“We came here to the site, assessed the situation together with emergency workers and locals, and together helped those who survived. And those who unfortunately died. We helped to carry them away,” said Oleksandr Abramov, who lives nearby and who rushed to the scene when he heard the blast.

Serhiy Bratchuk, spokesman for the Odesa regional administration, said 21 people had been confirmed killed, including a 12-year-old boy. 

Among the fatalities was an employee of the Children’s Rehabilitation Centre set up by Ukraine’s neighbour Moldova in the resort.

The regional governor said the missiles had been fired from the direction of the Black Sea.

The Kremlin denied targeting civilians.

“I would like to remind you of the president’s words that the Russian Armed Forces do not work with civilian targets,” Kremlin spokesman Dmitry Peskov said.

In his nightly video address on Friday, Ukrainian President Volodymyr Zelenskiy denounced the strike on the apartments and seaside site as “conscious, deliberately targeted Russian terror and not some sort of error or a coincidental missile strike”.

The strike on Serhiivka took place shortly after Russia pulled its troops off Snake Island, a strategically important outcrop about 140km southeast of Odesa that it seized on the war’s first day.

Chief of Ukraine’s General Staff Valeriy Zaluzhny accused Russia of failing to abide by its assertions that it had left Snake Island as a “gesture of good will”. 

On his Telegram channel, Zaluzhny said two Russian warplanes had taken off from a base in Crimea and bombed targets on the island on Friday evening.

He posted a video of what he said was the attack. Reuters had no way of confirming the video or the Russian action. There was no immediate Russian comment.

Earlier this week, Russia struck a crowded shopping mall in central Ukraine, killing at least 19 people.

Kyiv says Moscow has intensified its long-range missile attacks, hitting civilian targets far from the frontline. Russia says it has been aiming at military sites.

Thousands of civilians have been killed since Russia invaded Ukraine on February 24. 

Russia calls the invasion a “special operation” to root out nationalists. Ukraine and its Western allies say it is an unprovoked war of aggression.