
Static Site Post Scheduler: Using AWS Lambda and Serverless to Schedule Blog Posts - davidwells
https://serverless.com/blog/static-site-post-scheduler/
======
foxhop
This solution is sort of weird to me. To me, the allure of a static site or a
static blog is to simplify the stack; To bring it back to the basics. Static
HTML served by a good ole-fashion web server.

Adding the cognitive burden of "serverless" and/or lambda just to schedule
seems to complicate something that isn't very complicated. Its almost like an
invented problem.

That said, long live this static site generator movement.

I'm betting this movement will continue to grow which is why I'm bootstrapping
[https://www.remarkbox.com](https://www.remarkbox.com) (comments-as-a-service)

~~~
cocktailpeanuts
I use jekyll NOT because it's simple (Actually it's 100 times more complex to
use than a simple wordpress or medium) but because:

1\. I can keep track changes with git 2\. I can host them on Github pages for
FREE 3\. I own the content 4\. More flexible

In fact I've been really annoyed with all the boilerplate code and extensions
I need to deal with in order to have a "usable" workflow set up, I almost
thought about moving back to free blog services like medium, tumblr,
wordpress, etc. but the only reasons I can't are the ones I mentioned above.

~~~
foxhop
Jekyll is way more simple from a "stack" perspective. It has no database, has
less moving parts.

Wordpress is simple from an end user perspective.

Services like medium and tumblr hide the complexity from its users. Its a
trade off.

~~~
cocktailpeanuts
What you said is all correct.

But my point was it's not just about "simplifying the stack". You said "the
allure of a static site or a static blog is to simplify the stack;", but the
thing is, not everyone thinks that way.

------
fenollp
[http://explainshell.com/explain?cmd=at](http://explainshell.com/explain?cmd=at)

Or use a CI cron running daily?

~~~
Lord_Zero
Yeah, they said its "serverless" but it requires an AWS lambda function. I use
Jekyll for my blog but I simply commit, push, and run a script that copies the
files to S3. [https://www.tberra.com/aws/amazon/meta/2016/11/12/the-
birth-...](https://www.tberra.com/aws/amazon/meta/2016/11/12/the-birth-of-a-
blog/) its not scheduled but I could easily tell linux to run that command
once at whatever time I wanted.

~~~
g_delgado14
AWS lambda functions __are__ serverless. There's no notion of uptime,
provisioning or managing servers when using lambda.

~~~
Lord_Zero
This is true, but what triggers the lambda function to run? Where does the
lambda function run when its triggered?

~~~
derefr
"Serverless" really means "your code is run as a container with a finite
lifetime on an arbitrary machine in a standardized, non-configurable PaaS
machine cluster."

In essence, it's a return to the "cgi-bin" model of scripting, where you write
a script that only runs for the lifetime of one request, and then a web server
will spin it up to respond to a relevant request and it'll terminate at the
end of that request.

The only differences in the modern instantiation of the concept, are that:

1\. the "cgi-bin" directory is a mounted object store, common to an entire
cluster; and

2\. there's some fancy preloading logic that lets Lambda functions stay "hot"
between calls to them, so that they can run very quickly. (Sort of like
Phusion Passenger does for Ruby code, except with enough isolation to make it
safe for multitenant environments. Heroku's old Alpine stack might be a better
comparison.)

------
sheraz
Wow. Talk about building a rocket ship just to cross the street.

Edit: My backyard is filled with old rocket ships, so I am an expert on this
subject :-)

~~~
davidwells
I built the rocket ship so you don't have to ™

[https://www.youtube.com/watch?v=qz72V84uWWA](https://www.youtube.com/watch?v=qz72V84uWWA)

------
zokier
Instead of hourly polling, which I find quite inelegant, couldn't you trigger
creation of new schedule rule with the correct time that then triggers the
publishing?

~~~
davidwells
Hey zokier. Thanks for the comment.

In theory yes. I could provision a new function with an exact cron schedule to
run once and then tear itself down.

In practice, this is a lot of extra logic to write to achieve this and would
also potentially make own AWS account rather messy.

The hourly cron runs about 720 times a month which is far below the 1,000,000
free invocations that lambda provides under their free tier.

~~~
gbrits
How about using the new AWS Step Functions instead? This would allow a full
push model while still keeping a nice and tight workflow:

1\. fire off AWS Step function on new post to S3 bucket

2\. read delay / schedule time in metadata from (assumable) markdown post

3\. trigger AWS Step Function using the Wait State defined based on read value
from 2.

4\. As part of Step Function: After Wait State -> Execute Lambda to publish
post.

Note: 3) requires setting variable time in Wait State based on environment.
Haven't read up so don't know if that's possible, but guess it should be.

~~~
davidwells
Hey gbrits. Thanks for the comment.

This looks like a great alternative solution!

Haven't messed around with step functions yet but was looking into it today
after I found this
[https://www.youtube.com/watch?v=9MKL5Jr2zZ4&t=226s](https://www.youtube.com/watch?v=9MKL5Jr2zZ4&t=226s)

Are you using step functions for other flows?

------
rathboma
With Jekyll you can just future-date your blog posts then trigger a republish
on a daily cron. By default future-dated posts won't show up. So a daily build
will publish them on the right day.

If you host using Netlify you can create a build hook to just curl. You could
even use Cronitor for a free cron.

~~~
nickjj
This is what I do too. It works well.

Although in my case, I host my Jekyll based site on my own server and just run
a daily build via local cron.

The workflow to post anything (present or scheduled) is nothing more than a
single git push to get the new content on the server.

It's as simple as can be. #serversforlife

------
crisopolis
Since serverless uses AWS primarily. I'm assuming if I put all my eggs in the
serverless basket and Amazon has some amazing outage. I'm screwed?

To which I don't understand the appeal of serverless besides having no servers
lol.

~~~
davidwells
Hello there! The serverless framework supports a number of different FAAS
(function as a service) providers like IBM openwhisk, AWS lambda, & Azure
functions from microsoft. See
[https://serverless.com/framework/docs/providers/](https://serverless.com/framework/docs/providers/)
for more info.

So it's up to you where your code runs =)

------
poyu
I used Serverless back in the v0.5 days, picked it up again yesterday for
another project. I have to say, the current version has improved vastly, from
project architecture to ease of use (remember all those `json` files?!) and
also documentations! Not to mention the provider support it now has. I like
the idea of Serverless, and now I love it even more!

------
rsingel
All static site projects evolve into recreating WordPress.

~~~
dexterdog
Because WordPress is a bloated mess when all you need is to host a fast,
static site.

------
cheez
I do this, though with Teamcity. More predictable, less AWS heavy, but cool
solution especially if you already have the tools to make it easy.

------
intrasight
I think this is the future of web publishing. I expect that we'll see several
such frameworks for all the major "serverless" platforms.

------
tomc1985
AWS lambda and 'serverless' to replace a cronjob

And paying Amazon for the privilege of doing so!

Well done... _golf clap_

~~~
davidwells
Thanks tom! I love golf!

> The hourly cron runs about 720 times a month which is far below the
> 1,000,000 free invocations that lambda provides under their free tier.

This entire service (the 2 functions & 1 dynamo table) should run well under
the AWS free tier. see
[https://aws.amazon.com/free/](https://aws.amazon.com/free/)

~~~
tomc1985
Does this not seem excessive? Doesn't anyone care about simplicity, or
elegance, or -- at minimum -- not relying on others?

~~~
davidwells
Good point. I care greatly about these things.

This project greatly simplifies how we publish content in an elegant out of
sight out of mind way.

Before, if someone was out of town, we would need to rely on others to push
the merge button on posts for us. Now, the robots do it for us!

~~~
tomc1985
While I don't know your situation your use case is understandable. It's just
hard to watch such big tools serving up simple HTML with what could be a shell
script or two running in cron.

