Terraform

Simfra works with the standard Terraform AWS provider. No custom provider, skip_* flags, or endpoints {} block is needed.

Set one environment variable and use a normal provider block:

export AWS_ENDPOINT_URL=http://localhost:4599
export AWS_S3_USE_PATH_STYLE=true
provider "aws" {
  region = "us-east-1"
}

Every Terraform operation - init, plan, apply, destroy - works the same way it does against real AWS. The AWS provider reads AWS_ENDPOINT_URL and routes all service API calls to Simfra automatically.

Why Simfra for Terraform

  • No AWS account required - develop and test Terraform modules offline.
  • No costs - apply and destroy as many times as you want.
  • No rate limits - Simfra serves requests as fast as your machine allows.
  • Fast feedback - Simfra is in-memory by default. Resources create in milliseconds.
  • Real behavior - IAM policies are enforced, cross-service integrations work, resource validation matches AWS.
  • Deterministic IDs - pin resource IDs with simfra: override tags so your tests are reproducible.

Guides

Provider Configuration

The canonical Terraform provider setup: environment variables, provider block, multi-region aliases, and HTTPS configuration.

Testing Patterns

Patterns for testing Terraform modules against Simfra: plan/apply/verify/destroy cycles, data source validation, and terraform test.

Bootstrapping Your Account

Making Simfra match your real AWS account: default VPCs, KMS keys, IAM roles, and custom bootstrap configurations.

Resource ID Overrides

Creating resources with exact IDs using simfra: tags, so test code that references hardcoded resource IDs works without modification.

Multi-Account Terraform

Testing cross-account resources: creating accounts via the admin API, provider aliases with separate credentials, and cross-account IAM role assumption.