Amla (103) shared a 145-run stand with Faf du Plessis (75) for the second wicket as South Africa recovered from a very slow start after being asked to bat at Kennington Oval.
Amla and fellow opening partner Quinton de Kock (23) struggled for runs initially, with Sri Lankan pacers Lasith Malinga and Suranga Lakmal keeping it tight from both ends. Assisted by the wind and a tinge of grass on the pitch, the Sri Lankans leaked only 32 runs in the first 10 overs.
The opening partnership lasted for 44 runs in 12.1 overs as left-hander de Kock edged a delivery from medium pacer Nuwan Pradeep to wicket-keeper Niroshan Dickwella.
Pradeep could have sent back du Plessis in the 17th over had Malinga not dropped a catch at fine leg after the right-handed batsman pulled a short delivery.
Later, following the introduction of spinner Seekuge Prasanna and medium pacer Asela Gunaratne, South Africa got some leeway, with Sri Lanka spreading the outfield.
It allowed Amla and du Plessis to build a partnership and they paced the innings well mixing ones and twos with occasional boundaries.
While Amla completed his fifty in 56 deliveries, du Plessis reached the half-century in 52 balls.
Pradeep broke the stand as du Plessis pulled into the hands of a jumping Dinesh Chandimal at short mid-wicket in the fourth ball of the 34th over, with South Africa at 189/2.
In the next over, Prasanna snared AB de Villiers (4) when the latter miscued one for an easy catch to Chamara Kapugedera at mid-off.
Amla was then joined in the middle by David Miller (18) as the pair faced the task of restructuring the innings.
Amla completed his century in 106 deliveries with a single towards square leg off Lakmal in the third ball of the 42nd over.
The following delivery saw Miller edge one to Prasanna at third man. Amla fell soon, trying to run a second following a throw at the bowler's end from Kusal Mendis at mid-wicket in the next over. Amla's knock featured five fours and two sixes.
With these two quick wickets, South Africa were five down for 232 in 42.3 overs and still needed a strong finish. Jean-Paul Duminy (38 not out in 20 deliveries) and Chris Morris (20 off 19) did their job to take South Africa to 299/6 in 50 overs.
Brief scores: South Africa 299/6 in 50 overs (Hashim Amla 103, Faf du Plessis 75; Nuwan Padeep 2/54) vs Sri Lanka.
Source - Agency
Pakistan's Victory over India in CT2017 Final was Special
Bowlers failed India, reckons off-spinner Harbhajan Singh
Latest ODI Team Rankings Post Champions Trophy 2017
Sarfraz Ahmed named captain of ICC Champions Trophy 2017 Team
New No.6 Pakistan inch closer to 2019 World Cup direct entry
Gautam Gambhir slams Kashmiri separatist for lauding Pakistan
Pakistan a serious contender for 2019 World Cup, feels Shahid Afridi
CT2017: Top 5 Bowlers
CT2017: Top 5 Batsmen
Pakistan beat India to lift Champions Trophy (Highlights)