Gopher Rodeo

Escape from the Amazon

10 Jul 2026

A long time ago, I saw an amazing offer. Amazon was offering a free EC2 instance on Amazon Web Services for an entire year. Free cloud computing resources sounds pretty incredible so I used my free trial. I then continued to use it after my year. It wasn't very much, my needs were not particularly egregious, and it was useful to have a VM to run stuff on, that was contactable from the public internet. I'd used my free EC2 instance for quite a few different purposes over the years, but most recently it was hosting Woolymap.

Woolymap was (and essentially still is) a messy Python script that pulls data from websites and REST APIs, then uses a basic Jinja2 template to make an HTML page with predicted departures, previous departures and timetabled departures. It was running in cron every 5 minutes. When I bought my DNS domain I created a subdomain for Woolymap and set it up behind a CDN. I didn't bother making any other changes at all, since it "just worked".

However recently it irked me having to pay Amazon every month for the privilege of running a Python script every 5 minutes. The cost eventually crept up to something like £15, which is hard to justify for such a simple application. I vowed to escape.

The concept of running scripts on someone else's hardware is not new. I decided to try to use GitHub Actions, as they are a fairly decent analogue to cronjobs. I first had to rewrite the script to be suitable to run in a GitHub Action runner. It turns out I way overdid it and had to revert all my refactoring at a much later stage - but I got things running with uv which I am a huge fan of for making Python scripts much easier to handle.

I had initially thought to deploy to Cloudflare Pages - but I realised that's quite unnecessary when GitHub Pages are right there, available for free. I put my configuration together and waited for the first run. And I waited. And then I waited some more. It turns out if you are on a free GitHub plan that your GitHub Actions schedule is very much not guaranteed. When you need to run every 5 minutes that is a problem. Luckily an intrepid adventurer had left breadcrumbs. Now all I needed was an external service to fire HTTP requests at 5 minute intervals. I didn't really know what to use for that but luckily Cron-Job.org exists and it works perfectly! My creation lives!

I then just had to hook up the GitHub Pages setup to my DNS provider (Cloudflare) so I could restore the access via the usual URL. It took a while to apply correctly but it works! I had one last step, to delete my EC2 instance and then completely close my AWS account. I had no desire to ever use their services again (outside of my professional life) and it felt good to completely cancel the account.

I'm aware this solution is still contingent on a free account on GitHub (massive tech company owned by Microsoft), a free account on Cloudflare (massive tech company that is basically now a load-bearing piece of the modern web) and a free account on Cron-Job.org (completely free and open source, but you can optionally support them for as little as 12 Euros a year). At some point I'd love to go with fully open source providers and pay them (now I'm saving £15 a month) but for now I'm happy with my escape.