Hampered by the absences of John Stones and Aymeric Laporte due to injury, City boss Pep Guardiola named Fernandinho alongside Nicolas Otamendi at the heart of his defense and was able to celebrate a clean sheet despite the odd shaky moment.
Riyad Mahrez scored his first goal of the season to settle City's nerves after 24 minutes and his interplay with Ilkay Gundogan produced the visitors' best moments at Metalist Stadium.
Mahrez in the right place at the right time 🌟 pic.twitter.com/MMbjQjOR7G— Bleacher Report Live (@brlive) September 18, 2019
Gundogan, ably assisted by Rodri and Kevin De Bruyne, ran the show from midfield and surged forward at every opportunity, getting himself on the scoresheet thanks to Mahrez's assist seven minutes before half-time.
Guardiola warned of the danger Shakhtar posed on the counter-attack in his pre-match comments and Luis Castro's men did manage to set Moraes free on a number of occasions, but the Brazil-born striker failed to carry his impressive domestic form onto Europe's biggest stage.
City rounded off a highly satisfying Group C opener when Gabriel Jesus rolled a third goal home 14 minutes from time to secure a repeat result of last season's clash between these teams on this ground.
Gabriel Jesus makes it 3 🌟 pic.twitter.com/IaEo03iluy— Bleacher Report Live (@brlive) September 18, 2019
City pressed Shakhtar from the outset and Rodri should have done better when De Bruyne's cross hit the back of his head.
Marlos sent a thundering drive flashing past Ederson's net as Shakhtar countered, but City's pressure paid off when Gundogan curled a shot onto the post and it bounced into the path of Mahrez, who guided it into the empty net from close range.
Moraes had a gilt-edged chance to equalize from the corner of the six-yard box but his shot hit Ederson in the chest and City punished his wastefulness.
Rodri's cross-field ball found Mahrez and the Algeria international played in Gundogan, who fired a first-time shot just inside the post with deadly accuracy.
9 - Since the start of the 2017-18 Champions League campaign, only James Milner (10) has recorded more assists in the competition than Kevin De Bruyne (9). Creator. pic.twitter.com/AMcVZ8Fsf2— OptaJoe (@OptaJoe) September 18, 2019
Moraes made a poor attempt to chip Ederson when the City keeper got caught outside his box early in the second half but Raheem Sterling missed an even better chance at the other end, hitting the outside of the post after Sergey Krivtsov gifted him possession 12 yards out.
Jesus made no such mistake when De Bruyne capitalized on sloppy Shakhtar passing and released the Brazilian, who rolled a shot into the bottom-right corner of the net and made certain of his side's winning start in the Champions League.
What does it mean? City reign in Ukraine
After becoming the first English team to beat Shakhtar away from home when they triumphed here by the same scoreline last season, City earned a repeat result without a number of key players.
Gunning for a regular place
Ilkay Gundogan has only started three of City's five domestic games this season but when he is on this kind of form he looks undroppable.
The 28-year-old covered a huge amount of ground, gathered loose balls and ensured Guardiola's men turned defence into devastating attacks with remarkable efficiency.
Shakhtar need more from Moraes
Shakhtar went into this game knowing chances would be few and far between, but Moraes had more than enough opportunities to get on the scoresheet and squandered them all.
After their shock loss to Norwich, City will hope to get back to winning ways in the Premier League when they entertain Watford on Saturday, while Shakhtar look to extend their seven-game domestic winning streak at Desna.