Skip to main content

Backends Auto-Provisioned on Terraform Init

· 3 min read
Erik Osterman
Founder @ Cloud Posse

Atmos now automatically provisions backends during terraform init, eliminating the need for a separate backend create command. When provision.backend.enabled: true is set, backends are created just-in-time during your first Terraform operation.

What Changed

Previously, automatic backend provisioning required running atmos terraform backend create explicitly before initializing Terraform. Now, backends are provisioned automatically when you run any Terraform command that triggers initialization:

# Before: Two commands required
atmos terraform backend create vpc -s dev
atmos terraform plan vpc -s dev

# After: Single command - backend auto-provisioned on init
atmos terraform plan vpc -s dev
# ⠋ Provisioning S3 backend `my-terraform-state` for `vpc` in stack `dev`...
# ✓ Provisioned S3 backend `my-terraform-state` for `vpc` in stack `dev`
# ... terraform init continues automatically

How It Works

When provision.backend.enabled: true is configured, Atmos registers a hook that runs before terraform init:

  1. Check if enabled - Silent skip if provision.backend.enabled is not true
  2. Check if exists - Silent skip if backend already exists (idempotent)
  3. Provision with feedback - Create backend with spinner showing progress
  4. Continue init - Terraform initialization proceeds automatically

This behavior is completely opt-in. Without the provision configuration, nothing changes.

Configuration

The configuration remains the same - just add provision.backend.enabled: true:

components:
terraform:
vpc:
backend_type: s3
backend:
bucket: my-terraform-state
key: vpc/terraform.tfstate
region: us-east-1
provision:
backend:
enabled: true

You can also set this at the global terraform level for all components:

terraform:
provision:
backend:
enabled: true

components:
terraform:
vpc:
# Inherits provision.backend.enabled: true from above
backend_type: s3
backend:
bucket: my-terraform-state
key: vpc/terraform.tfstate
region: us-east-1

UX Improvements

This release also includes improved output formatting:

  • Spinner feedback - Visual progress indicator during provisioning
  • Consolidated messages - Single line output instead of multiple status messages
  • Backend type and name - Shows backend type (S3, GCS, etc.) and resource name (bucket)
  • Markdown-friendly formatting - Backticks around names render correctly in terminals

Idempotent Behavior

The auto-provisioning is idempotent:

  • First run: Backend is created with spinner feedback
  • Subsequent runs: Silent skip (backend already exists)
  • After Terraform import: Safe to leave enabled - no conflicts

This means you can safely leave provision.backend.enabled: true in your configuration permanently.

Explicit Command Still Available

The explicit backend create command remains available for CI/CD pipelines or manual provisioning:

atmos terraform backend create vpc -s dev

Getting Started

Enable automatic backend provisioning in your stack configuration and run any Terraform command:

atmos terraform plan vpc -s dev

That's it - no separate provisioning step required.

For more details, see our original announcement and CLI documentation.