Kumar Sangakkara made a thrilling 133 for Sri Lanka but India held their nerve.
Chasing 315 to win after Virat Kohli's brilliant 106, Sri Lanka appeared to have little hope of starting the five-match series with a win. Sangakarra almost made it happen, though, with just a lack of support from elsewhere letting him down as Sri Lanka closed on 293 for nine.
Thisara Perera offered some lower-order cheer with a breezy 44, but the lack of runs at the top of the order - Sangakarra apart - proved costly. India had no such troubles, with Kohli and Virender Sehwag's second-wicket stand of 173 putting then on course for a total of 314 for six.
With Sehwag making 96 and other key contributors including Suresh Raina (50) and Mahendra Singh Dhoni (35), Sri Lanka struggled against a side who were playing their first game in four months.
That did not show, however, as Kohli in particular impressed, posting his third successive century against Sri Lanka and an Indian record-equalling fifth consecutive score of 50 or more. He had plenty of time in which to compile it too, coming to the crease after just 14 balls when opener Gautam Gambhir was cleaned up by Nuwan Kulasekara for three.
Kohli and Sehwag then went on to take Sri Lanka's bowling on, although neither were without good fortune, with Sehwag being put down by both Tillakaratne Dilshan and Kulasekara while Perera shelled Kohli. They were made the best of their escapes and they brought up their fifties in 60 and 62 balls respectively.
Perera slightly made up for his earlier error by running out Sehwag on 96 but by the time he had Kohli caught, the batsman had already passed his 100 in 106 balls. In between times, Angelo Matthews had snared Rohit Sharma for five, meaning that despite the good work of Sehwag and Kohli, Raina and Dhoni still had work to do.
They did, it, though, adding 79 runs in 55 balls as India finished strongly.
The same could not be said of Sri Lanka's start as Tillakaratne Dilshan slipped away for just six before Sangakkara started to up the ante. Upul Tharanga stuck with him to make 28 before he chipped R Ashwin to Sehwag and when Dinesh Chandimal nicked Umesh Yadav behind, Sri Lanka were 117 for three.
They were never really in control of their chase, despite Sangakkara's efforts, and when Pragyan Ojha cleaned up Mahela Jayawardene for 12, the game was almost up. Perera offered his resistence but, once he was gone, India were home and hosed, in spite of Sangakkara's 151-ball vigil which was eventually ended by Yadav.