New Zealand squandered a good start, losing seven wickets for 49 runs as they made 151 for eight in their 20 overs.
Amla hit 48 and shared half-century partnerships with AB de Villiers and Rilee Rossouw before being caught off fast bowler Adam Milne with only five runs needed to win.
New Zealand captain Kane Williamson shared a quick-fire first wicket partnership of 68 in eight overs with Martin Guptill after the Black Caps were sent in.
The tourists were still in a strong position before a momentary lapse of concentration by Guptill sparked a collapse.
Guptill was run out for 42 off the third ball of the 13th over after the Black Caps reached 102 for one.
Guptill was slow to return to his crease after looking for a second run and was beaten by a pinpoint throw from the deep by Farhaan Behardien to wicketkeeper Morne van Wyk.
Colin Munro was caught off the next ball and the New Zealand innings lost momentum.
“After the start we had we would have liked a few more,” said Williamson, who made a sparkling 42 off 21 balls before being stumped off man of the match, left-arm spinner Aaron Phangiso.
South African T20 captain Faf du Plessis was a late withdrawal because of a knee injury, with De Villiers, the one-day captain, taking over.
“We started a bit slowly (with the ball), but the way we pulled it back was amazing. Credit to Aaron Phangiso, he slowed things down,” said de Villiers.
Phangiso took two for 29, medium-pacer David Wiese took two for 24 and fast bowler Kagiso Rabada claimed two late wickets.
The second and final T20 will be at Centurion on Sunday before the sides meet in a three-match ODI series.