I have apache2 and tomcat installed on Amazon ec2 instance running Ubuntu.
tomcat is serving the application and I want to create subdomains for
abc.example.com to serve to different webapps.
This tutorial explains how to setup a virtual host in ubuntu on apache2, it's really quite easy. https://help.ubuntu.com/10.04/serverguide/httpd.html
Though you do not need a CNAME, what you should be adding is an A record. Basically in your DNS management create an A record with the subdomain name and the server IP. Give it a few minutes and your subdomain will begin to resolve.
Route53 is dirt cheap for DNS management and very easy to use.
Firstly, you need to add the subdomains to DNS.
In this instance you could either create a wildcard entry for all subdomains or you could create individual entires. The type of entry should be a CNAME (alias) pointing to the EC2 instance public hostname.
Then you need to add the host to your apache configuration as a VirtualHost and also to your tomcat configuration in the server.xml resource