No Server Required - Jekyll & Amazon S3
allthingsdistributed.com
allthingsdistributed.com
You might think of Wikileaks as "extreme," but this is an organization that was neither convicted nor even charged with breaking any laws, which Amazon dumped as a customer on very vague TOS grounds following pressure from Sen Joe Lieberman.
This could be an issue for reasons like...
-You make a Web app that Hollywood deems to somehow encourage or abet piracy
-You provide a service used by a customer deemed to be politically controversial
-You facilitate financial transactions deemed to be potential helpful to "terrorists" or the wrong sort of activists (e.g. Wikileaks).
Werner, since you submitted this entry from your personal blog, maybe you could clarify what safeguards Amazon has put in place to prevent a repeat of the Wikileaks situation. Many companies will stand behind a customer barring a court order, but for Amazon this clearly is not the case. How do you decide when to abandon a customer?
I've heard of other (large) providers pulling sites that contained "objectionable" content down. Wikileaks just had the media's attention at the time.
The technology is good, but sometimes it's not about the technology.
For most people, Wikileaks is a static site. They are unable to interact with it at all, ergo it could just be a static site.
Static vs Dynamic is orthogonal. You can still run afoul of the rules with a static site
AWS doesn't provide a way to serve from S3 without the help of a CNAME redirect, which means that you're out of luck if you want to use the Jekyll+S3 setup with a naked domain name (naked, as in no "www" or "blog" subdomain). And it also means that you're going to have to get some other server (Google Apps can do it), to redirect your *.domain.com queries to www.domain.com. And then your users' DNS is running all over the place, incurring, in my opinion, unneeded delay.
A $5/mo web host or a VPS slice would probably be overkill - you're not hitting a database at all.
You are correct; to map to an S3 bucket you need a CNAME. But DNS doesn't allow the apex to be a CNAME so you will need to redirect that. Route53 solves that for EC2 with the help of ELB. But there is no such solution for S3 (yet).
I am using the www subdomain as much as possible, so the redirect only happens if a visitor actually types in the apex name, in all other cases they will get where they need to be directly. But I agree that it would be better to solve this at a different level.
Launch and then iterate...
I also threw together a script (./publish) that first gzips the static files and then uploads them to S3 with the correct headers (gzip and cache-control). Finally, it invalidates the old files on Cloudfront. Combined I get a very fast site, while keeping the cost low. Again, you can find it all in the github repository.
S3 are kind of his "servers" no ;)
The extension and plugin mechanisms will make it easier for me to start adding my own code without having to modify the core framework. But it is always more fun to add these kind of things if there is a community to give you feedback.
But yes, I guess there is some movement back in time. I'd say the two main reasons are a return to more minimal blogging (i.e. something like tumblr as opposed to blogrolls, widgets, plugins etc.), and the fact that you can do some dynamic stuff in the client now via JavaScript (e.g. comments with Disqus).
Not entirely sure what the issue was, since I use S3 to host static assets for other sites that see similar traffic levels, and haven't gotten any 503 errors. And clearly ATD seems to be handling the HN traffic just fine.
Here's the code: https://github.com/ohrite/vacation Here's the gem: http://rubygems.org/gems/vacation