Yes, uploading a .zip manually is a bad idea.
But it's easy to automate. I've got a build script that zips up the final JavaScript and uploads to Lambda via the aws-sdk. It runs on Circle CI. So all I have to do is commit code and it magically appears on Lambda in about 2 minutes.
Circle CI provides options to treat branches differently. So I've got master branch commits going to production and develop branch commits going to a staging environment.