Bhuvneshwar Kumar's four wickets helped India beat Sri Lanka by 81 runs under the Duckworth/Lewis method to set up a Tri-Nations re-match in the final in Port of Spain on Thursday.
The result saw host nation the West Indies eliminated from the competition while India, who picked up a bonus point, finished top of the group.
Kumar took four wickets for just eight runs from his six overs as Sri Lanka were blown away for 96 after being given a victory target of 178 from 26 overs, with India having earlier made 119-3 in 29 overs before persistent rain in the Trinidad and Tobago capital forced a revised total.
Virat Kohli's men needed to restrict their opponents to under 167 to qualify for the showpiece ahead of the hosts and set up another encounter with Sri Lanka at the same venue.
Sri Lanka captain Angelo Mathews opted to field first after winning the toss and it was he who made the initial breakthrough when Shikhar Dhawan (15) could only guide an off-cutter to slip, giving Mahela Jayawardene his 200th one-day international catch.
The influential Virat Kohli contributed an uncharacteristically languid 31 off 52 balls before he was trapped plumb in front by slow left-armer Rangana Herath, who then found enough turn to bowl Dinesh Karthik after the wicketkeeper-batsman had made 12.
Rohit Sharma was a calming figure for India and had made 48 off 83 balls, with two fours and a six, before the heavens opened.
After a significant delay, Sri Lanka's hopes of victory were dealt a blow when Kumar dismissed Upul Tharanga and the dangerous Kumar Sangakkara in successive deliveries.
Kumar then also accounted for Mahela Jayawardene and Lahiru Thirimanne to leave Sri Lanka reeling on 31 for four, and any hopes they had of pushing India close were all but over when slow left-armer Ravindra Jadeja sent Mathews and Dinesh Chandimal packing, the latter of whom had made a respectable 26.
Ishant Sharma picked up two scalps as Sri Lanka were all out for 96 with eight balls of their innings still remaining.