A public subnet instance with a public DNS name should be accessible over the internet provided you have right VPC security group configured. You do not need an EIP.
Public DNS name of EC2 instance changes when you stop and start the instance. to avoid this, you can assign an EIP to the instance so that the IP address remains same across the instance stop/start cycles.
You need to answer these questions:
- Does your public subnet instance has a public DNS hostname? Run
curl -s http://169.254.169.254/latest/meta-data/public-hostname
on your instance to see the public DNS hostname. - Do you have VPC security group configured properly to allow incoming internet access ?