Infrastructure as Code
MiniStack is a drop-in endpoint override for the four major IaC tools. No special plugin, no auth dance — point your provider at http://localhost:4566 and use any credentials.
Terraform
Compatible with AWS Provider v5 and v6. The minimal override:
provider "aws" {
region = "us-east-1"
access_key = "test"
secret_key = "test"
s3_use_path_style = true
skip_credentials_validation = true
skip_metadata_api_check = true
skip_requesting_account_id = true
endpoints {
s3 = "http://localhost:4566"
dynamodb = "http://localhost:4566"
sqs = "http://localhost:4566"
sns = "http://localhost:4566"
lambda = "http://localhost:4566"
iam = "http://localhost:4566"
ec2 = "http://localhost:4566"
ecs = "http://localhost:4566"
cloudformation = "http://localhost:4566"
route53 = "http://localhost:4566"
cloudwatch = "http://localhost:4566"
secretsmanager = "http://localhost:4566"
ssm = "http://localhost:4566"
kms = "http://localhost:4566"
rds = "http://localhost:4566"
sts = "http://localhost:4566"
}
}
Add any other service endpoints you hit (see the services catalog for the full list).
Multi-account
Use a provider alias with a distinct access_key for each simulated account. MiniStack reads the access key to pick the account ID (if it's 12 digits).
CDK
Use the cdklocal wrapper:
npm install -g aws-cdk-local cdklocal bootstrap cdklocal deploy
It injects AWS_ENDPOINT_URL=http://localhost:4566 and sane defaults. Works with both CDK v1 and v2.
Pulumi
Configure endpoint overrides in Pulumi.dev.yaml:
config:
aws:region: us-east-1
aws:accessKey: test
aws:secretKey: test
aws:s3UsePathStyle: true
aws:skipCredentialsValidation: true
aws:skipMetadataApiCheck: true
aws:skipRequestingAccountId: true
aws:endpoints:
- s3: http://localhost:4566
dynamodb: http://localhost:4566
sqs: http://localhost:4566
lambda: http://localhost:4566
cloudformation: http://localhost:4566
iam: http://localhost:4566
sts: http://localhost:4566
CloudFormation
MiniStack has a built-in CloudFormation engine — see CloudFormation engine for the full resource-type and intrinsic-function reference.
aws --endpoint-url=http://localhost:4566 cloudformation create-stack \ --stack-name demo \ --template-body file://template.yaml aws --endpoint-url=http://localhost:4566 cloudformation describe-stacks \ --stack-name demo
Change sets, nested outputs, and cross-stack Fn::ImportValue all work. Unsupported resource types fail at CREATE_IN_PROGRESS with UnsupportedResource.
POST /_ministack/reset between test runs to start from a clean state, or use Testcontainers to get per-test isolation.