You're binding your local gameserver to udpPort (TNServerInstance.Start). On your local client, you connect, join a channel, then attempt to bind your local client to the same udpPort (TNManager.StartUDP). This should cause an exception which should be output to Unity's console. The call should return false if the socket is ever null (always check your return values!).
Additionally, your call to Tools.ResolveEndPoint [within TNManager.Ping(...)] passes the same udpPort. It's unlikely every game server that registers itself with the lobby server has the same udpPort, right? ;p (udpPort = Random.Range(...)). You should bind your gameserver's to a known port (like you pass the constant 5127 for TCP, pass 5128 for UDP). Only the client should bind to the random port.
A few modifications to the source you provided and this should work for you:
Start your game server with a constant UDP port:
TNServerInstance.Start(5127, 5128, null, TNServerInstance.Type.Tcp, Tools.ResolveEndPoint(...))
Bind your client to the random UDP port:
TNManager.StartUDP(udpPort);
Ping each server's constant UDP port:
TNManager.Ping(Tools.ResolveEndPoint(ent.externalAddress.Address.ToString(), 5128), PingCallback);
A minor optimization:
TNManager.Ping(new IPEndPoint(ent.externalAddress.Address, 5128), PingCallback);
Also, I don't know if Amazon Web Services will support UDP. I've never used any Amazon service so I dunno.