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.