This is a project at Copyleft.io where we explore good practices for using Terraform to automate the provisioning of an AWS Infrastructure.

Through a series of posts we will be publishing our ideas and experience along with our code base.

Get Started!

Infrastructure as Code...

When thinking about Infrastructure as a Service (IaaS) and using Infrastructure as Code to achieve that objective we are concerned with thinking about the "Configuration" and "State" of the things we manage... how we use patterns... and the separation of roles (e.g. single role per node). And while we will often reuse patterns and roles to manage the “Configuration" in a consistent manner, we don't dare intermingle the "State" between devices.

So, when thinking about "Environment as a Service" (EaaS) and how best to implement we should approach it with a similar mindset as IaaS considering Configuration, State, and the Separation of Responsibility.

The goal with using Infrastructure as Code to implement IaaS and more broadly EaaS/PaaS capabilities is to be objectively simple. As a team we'll want to avoid creating unneccessary and unintentional complexity by specifically focusing on how we use Patterns and Roles to manage Configuration and State in a variety of contexts.

At the end of the day... what will make your day better?

  • An objectively simple design that allows you to reason about the system and its moving parts.
  • An implementation that provides you with flexibility while limiting risk from changes.
  • A solution that delivers value today and continues to build momentum over the long haul.

Good Practices...

Here is a quick summary of what we will be covering in more detailed posts...

(1) Managing "State" separately for every Environment

(2) Implementing Modules for consistent "Configuration"

(3) Keeping it real simple with "Patterns".


an arrangement of elements in a particular form, figure, or combination.


the particular condition that someone or something is in at a specifc time.