An early goal from Christoph Baumgartner helped Austria to the knock-out stages to end almost forty years since they got past the group stage in any tournament.
Ukraine will be kicking themselves after a dreadful performance though. A draw would have been enough to finish second, but this result may see them eliminated.
Franco Foda welcomed Marko Arnautovich back to the side after his suspension versus Netherlands. Florian Grillitsch also started in midfield. Andreas Ulmer and Michael Gregoritsch both dropped to the bench. Ukraine made just one change. Taras Stepanenko was dropped for Serhiy Sydorchuk.
Austria knew that a win was necessary and started the brighter. They won a couple of corners and set about their opponents. Marcel Sabitzer took aim but failed to really trouble Georgi Bushchan. The Leipzig player then received a knock-down from Arnautovich. He was off-target yet again. Alexsander Dragovich then had an opportunity from a corner that went wide.
Oleksander Karavaev had the first chance for Ukraine chased a ball down the right. Austria were able to clear in time. They were struggling to really create much as Roman Yaremchuk and Andriy Yarmelenko found themselves isolated up front. A clash of heads from a corner saw both Christoph Baumgartner and Illia Zabarnyi down needing treatment.
It was the former who got the opening goal though. Austria won another corner down on the left. David Alaba swung it in, and he was able to escape his marker to tap it home. It was the final major involvement of the midfielder as he was still struggling with the effects of his knock.
Ukraine were now in the position of having to get something from the game. Mykola Shaparenko produced a decent saved from Daniel Bachmann who was able to push the ball out of the oncoming Yarmelenko. They countered at pace from an Austrian move but Martin Hinteregger was back in time to rescue them.
Arnautovich should have made it two though. Austria conjured an excellent move on the right through Xaver Schlager. He had a low ball across the area to the unmarked forward. He only managed to slice his attempt to the left and wide.
Much more was needed from the Ukrainians as the second-half began. A coming together between Yaremchuk and Hinteregger demonstrated the wrong degree of aggression demanded. The forward was lucky to not get a least a booking for a kick out. Meanwhile, Yarmelenko was presented with a chance at the back post that went over.
Austria were still able to get players forward though. An Alaba free-kick caused concern as it landed at the feet of Arnautovich. He had a cross-shot which failed to get any connection despite the numbers in the area. He was left annoyed again when Laimer misplaced a final ball after a three on two breakaway. Alaba needed attention when he threatened to get clear on the left.
Any chances Ukraine had were few and far between. The energy of the Austrian midfield meant little space and time to get on the ball and create much. The likes of Schlager, Laimer and Grillitsch overshadowed their more illustrious opponents. Adreiy Shevchenko did attempt to change things up with a number of subs. They were unable to make any sort of impact though.
Austria saw it out to joyous celebrations from their fans. Italy in Wembley on Saturday await them. For Ukraine, it is a nervous wait to see if their points total is enough to qualify.
Ukraine: Heorhiy Bushchan; Vitaliy Mykolenko (Artem Besedin 84), Mykola Matviyenko, Oleksandr Karavaev, Illia Zabarnyi; Mykola Shaparenko (Marlos Bonfim 67), Serhiy Sydorchuk, Oleksandr Zinchenko; Ruslan Malinovskyi (Viktor Tsygankov 46), Roman Yaremchuk, Andriy Yarmolenko.
Subs not used: Andriy Pyatov, Yehven Makarenko, Serhiy Kryvtsov, Artem Dovbyk, Eduard Sobol, Taras Stepanenko, Heorhii Sudakov, Anatolii Trubin, Oleksandr Tymchyk.
Austria: Daniel Bachmann; Stefan Lainer (Stefan Ilsanker 71), Martin Hinteregger, Aleksandar Dragovic, David Alaba (c); Konrad Laimer, Florian Grillitsch, Christoph Baumgartner (Alessandro Schopf 31), Marcel Sabitzer, Xaver Schlager; Marko Arnautovic (Sasa Kalajdzic 89).
Subs not used: Michael Gregoritsch, Philipp Lienhart, Karim Onisiwo, Pavao Pervan, Stefan Posch, Louis Schaub, Alexander Schlager, Christopher Trimmel, Andreas Ulmer.
Referee: Cuneyt Cakir