Sergio Aguero's goal got the defending champion up and running, with Rodri heading in a controversial second from a corner that should not have been given.
Mbwana Samatta's diving header got Villa back in the contest ahead of the break but City dominated the second half before surviving an almighty late scare.
Having been on the back foot, Villa came close to a last-gasp leveller as Bjorn Engels forced Claudio Bravo into a fine save, tipping his header onto the post as City won the trophy for a third year in a row.
This trophy formed part of a historic domestic treble in the last campaign and City's hopes of FA Cup success are still alive, even if their Premier League title defence has been left in tatters by a Liverpool side which suffered a shock loss to Watford this week.
If City is to collect another hat-trick of trophies it will also require a maiden Champions League success, with a stunning 2-1 win at Real Madrid raising hopes on that front.
It was eyebrows that were raised when Guardiola's team was announced, showing eight changes from that midweek starting line-up, with Kevin De Bruyne the headline name on the bench.
Villa, which has won the competition five times but not since 1996, made a bright start and Anwar El Ghazi headed narrowly over from Ahmed Elmohamady's delivery.
With City having won seven of the last eight matches against Villa, scoring nine goals in this season's two league fixtures, it was little surprise to see it grow into the contest and Aguero looped a header onto the roof of the net.
The breakthrough came after 20 minutes when Rodri picked out Phil Foden, who nodded into the path of Aguero to convert via a slight deflection off Tyrone Mings.
City won a corner 10 minutes later that should have been a goal-kick, the ball clearly having come off Ilkay Gundogan last, and from that set-piece – taken by the German – Rodri headed home.
Dean Smith's side showed tremendous character to reduce the deficit before the break, John Stones stumbling comically under a high ball as El Ghazi capitalised, his cross converted by Samatta.
Foden bounced a shot wide from the edge of the box early in the second half as City sought to snuff out any threat of a turnaround, with De Bruyne's introduction soon after another indication of their intent.
It became a game of attack versus defence, with Villa pinned back, and it took a stunning Orjan Nyland save to keep out Rodri's downward header.
Remarkably, Villa almost snatched a leveller, but Bravo produced a superb save to push Engels' attempt onto his right-hand upright in the dying moments.