I am creating my own VPC and was reading some documentation. AWS documentation for DNS with VPC (click here to view) says
To enable an EC2 instance to be publicly accessible, it must have a public IP address, a DNS hostname, and DNS resolution.
Is this true? Why?
Is a private IP address in combination with an elastic IP address not enough to access the instance publicly and privately?
An Elastic IP address is a public IP address, so that takes care of public access.
While you can access your instance from within AWS's network with the public ElasticIP address instead of using the private IP address, you'll pay for it:
https://aws.amazon.com/ec2/pricing/
You don't need DNS to access the instance -- the IP alone is sufficient.