Technically S3 is not Amazon's CDN (CloudFront is) it just behaves like one and a lot of people use it like one.
For a localized readership, it is fine since all the data will be coming out of a single regional location. If you have global readership and need locality, that is where CloudFront comes in handy with 20 POPs around the globe that data is distributed to.
Serving off of S3 is not that expensive, even if your site goes gangbusters.
Serving off of CloudFront can surprise you because of the sometimes unexpected number of origin pulls that can occur as your data is expired from the edge locations.
You are sharing cache space on each edge node with every other CloudFront user, if your content is red hot it stays in the cache, but if it is low-volume (which is a relative term to the other traffic coming out of the node) it gets expired much faster, sometimes hours so any future hits for it will pull (download) it again from S3 to CloudFront, then back out from CloudFront to the client.
The performance implications aren't horrific (they can be for video) but the cost can double what you are paying with enough origin pulls occuring requiring redownload over and over and over again for the same files from the edge locations.
I have seen this catch a handful of people offguard to the tune of $100s of dollars or thousands on the forums over the last few years because they didn't realize this could happen... they just looked at the bandwidth rates on the site, multiplied by their payload sizes and thought that was the fixed rate.
For a localized readership, it is fine since all the data will be coming out of a single regional location. If you have global readership and need locality, that is where CloudFront comes in handy with 20 POPs around the globe that data is distributed to.
Serving off of S3 is not that expensive, even if your site goes gangbusters.
Serving off of CloudFront can surprise you because of the sometimes unexpected number of origin pulls that can occur as your data is expired from the edge locations.
You are sharing cache space on each edge node with every other CloudFront user, if your content is red hot it stays in the cache, but if it is low-volume (which is a relative term to the other traffic coming out of the node) it gets expired much faster, sometimes hours so any future hits for it will pull (download) it again from S3 to CloudFront, then back out from CloudFront to the client.
The performance implications aren't horrific (they can be for video) but the cost can double what you are paying with enough origin pulls occuring requiring redownload over and over and over again for the same files from the edge locations.
I have seen this catch a handful of people offguard to the tune of $100s of dollars or thousands on the forums over the last few years because they didn't realize this could happen... they just looked at the bandwidth rates on the site, multiplied by their payload sizes and thought that was the fixed rate.