As a Sales Engineer at Fastly, I spend much of my time building and testing services. Services are our unit of configuration: typically, you would have a service for each domain that you cache through Fastly.
Here’s the basic workflow: you make changes to a new version of the configuration for a service. Once you’re happy with the changes, you activate the version. Within a few seconds, the new version of the configuration is live and serving your traffic.
I love this rapid, iterative workflow, and at times while prototyping an experiment I end up with tens or hundreds of versions. I sometimes need to check which version introduced what logic. A neat tool in the Fastly web application is version diff, which allows you to inspect the changes between any two different versions of a service. I thought it would be nice if I could explore the versions interactively on my local computer using command line tools. For example, I could annotate every part of the configuration with what version that part was introduced in to help track down logic bugs.
I built a little tool you might use to help you dig into a Fastly service’s configuration using command line tools on your local computer and quickly figure out where certain logic was introduced. Let me take you through my thought processes.
I had a little think about this. I noticed three things:
- Everything you see in the Fastly application is based on the Fastly API, so I could access all the information about service versions programmatically.
- We number service versions as increasing integers (1, 2, 3…), but you can activate old versions, so your activation history can look like (1, 2, 4, 3, 5, 6…). This reminded me a little of source code version control systems like Subversion or Git.
- Changing our configuration either the easy way (in the application) or in a more involved way that also provides greater power (by uploading Custom VCL) results in changes to one file. We call this the “generated VCL” which is compiled and distributed to our cache nodes.
I’ve previously investigated the internals of version control systems and this led me to wonder if I could expose the versions of a service in a Git repository. With a little help from the Fastly API and Rugged Ruby modules, and a small amount of programming later, I present: fastly2git.
Given a Fastly API key, a service ID and a local directory, fastly2git will download the generated VCL for all of the versions of a service and create a Git repository containing them:
You can investigate the changes between the current and previous versions or arbitrary versions. Here I’m using
git log -p --word-diff=color to show additions in green and removals in red for all versions:
You can even annotate which version any line in the latest configuration has come from, for example, to see which version introduced a particular piece of logic:
You may also like:
Announcing Event Logs
Event Logs help you keep track of key changes to your Fastly service, increasing visibility and improving troubleshooting.
We now support Log Streaming for Google Cloud Storage
We’re pleased to announce we now support log streaming to Google Cloud Storage (GCS) endpoints. Fastly’s GCS support strengthens our existing Log Streaming capabilities for common endpoints.
Announcing Edge Dictionaries: Make faster decisions at the edge
We’re always seeking ways to give our customers more control at the edge. With this in mind, we’re excited to announce Edge Dictionaries, which give you the ability to create readable key/value pairs using our…