Remote Backend

Terraform uses persisted state data to keep track of the resources it manages. Most non-trivial Terraform configurations use a backend to store the state remotely. This lets multiple people access the state data and work together on that collection of infrastructure resources.

Terraform offers several state storage options, of which env0 supports Remote Backend, which has some great benefits such as:

  • No underlying infrastructure setup and management - env0 takes care of the setup as opposed to other approaches, where you need to do all the setup and management yourself (for example, S3 Backend requires you to create an S3 Bucket and an optional DynamoDB Table for locking beforehand)
  • Security - env0 stores the state securely for you and assures only you can access it
  • State consistency - Remote Backends assure that users won't overwrite each other's state with a locking mechanism and that they receive the most recent state on every Terraform operation
  • Remote plans - By providing the Remote Backend configuration and successful login, users can run Terraform plan locally, which will trigger a remote plan in env0. The remote plan will use the shared state and variables set for the env0 environment.

Using env0's Remote Backend has additional advantages:

  • No Terraform Backend configuration when running inside env0 - you don't have to provide any type of configuration; you just deploy your code as is, and env0 will automatically configure it to use the Remote Backend
  • States UI - view the current version of your state as well as all of the previous versions
  • Correlation of Deployment to State - easily figure out which deployment is responsible for a specific change to your state (Coming soon)
  • State Access Control - specify which environments should be able to access an environment's state in env0

🚧

Reusing Workspace Name

Terraform uses the workspace name to distinguish between one state and another.

In env0, when using a remote backend - the workspace name identifies that environment's state.

Hence, if a a remote backend environment is created, and then marked as inactive, and another remote backend environment is created with the same workspace name - it would inherit the 1st environment's state.

Use Remote Backend In a New Environment

Using remote backend in your Environments is simple:

  • Create a new Environment
    • Check the Enable Remote State checkbox
    • Enter a Workspace Name

Here's what it looks like for Environments based on a pre-defined template:

Here's what it looks like for Environments based on a direct VCS integration:

That's it!

🚧

Workspace name restrictions

env0 enforces that a Workspace Name must be unique among all Remote Backend Environments in the Organization. The Terraform configuration for the Remote Backend consists of Organization id and Workspace Name. Therefore, we have this limitation to block possible state conflicts.

πŸ“˜

Force Remote Backend

You can force all new Terraform environments in a project to be created with a Remote Backend. See Force Remote Backend for more info.

Viewing & Downloading State Versions

After successfully deploying an environment with a remote backend, you would have access to the "States" tab in the environment page.

There you should see all the state versions, ordered from latest to oldest.

To download a state version, simply hover on the desired version. A "Download" Button should appear.

After clicking the button, it should initiate a file download.

πŸ“˜

Note

Bigger state files may take a few moments to start downloading

If the state version was created by env0 (i.e - wasn't created locally), there would also be a quick access link to its relevant deployment log.

Using the Remote Backend Locally

Please check out this guide: Using the Remote Backend on your local machine

✏️ Suggested Blog Content

Terraform Modules Guide

Terraform Plan Examples

Managing Terraform Variable Hierarchy

Manage Terraform Remote State with a Remote Backend