I ssh into my machine. What should incoming and outgoing rules? Why?
You don't need to bother with any rules on the server itself. There's no need to run a firewall locally, and if you do it will just introduce some confusion.
What you want to do is create a security group for your instance and define any rules there. This is how Amazon defines access to your instance. Within the security group you would define what ports (ssh, http, etc) you want to allow access to, and what IP addresses/ranges you want for each port. So if you want to allow SSH access only from the IP address 188.8.131.52 then you would add a rule to the security group allowing TCP port 22 from 184.108.40.206 and nothing else for port 22.
I want only my ip to be able to change things on the server, but anyone to view it in their own browsers. Is this the way to make things "read-only except for myip"?
Assuming that by "read-only except for myip" and the rules you described above then your security group should allow port 22 from myip only, and ports 80 & 443 from anywhere.
Finally, is this how to set up a firewall on an ec2 instance? Or should I get ufw? Are they the same idea?
Don't bother with ufw or any other client based firewall. You'll just end up needing to modify rules in two places if you do (the security group for the instance and ufw).