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.
AWS SAM
MiniStack's CloudFormation engine applies the AWS::Serverless-2016-10-31 transform: a template carrying Transform: AWS::Serverless-2016-10-31 has its AWS::Serverless::* resources expanded into native CloudFormation before provisioning, via the canonical aws-sam-translator — the same library the AWS SAM CLI uses — matching AWS's server-side transform on CreateStack, UpdateStack, and CreateChangeSet.
The translator ships in the full image only (ministackorg/ministack:full). A lean image that receives a SAM template returns a clear error pointing you at the full image rather than silently failing to expand, so deploy SAM templates against the full image.
Basic AWS::Serverless::Function, AWS::Serverless::SimpleTable, and AWS::Serverless::Api shapes are expanded; SAM managed-policy templates are not fully expanded yet.
POST /_ministack/reset between test runs to start from a clean state, or use Testcontainers to get per-test isolation.