MiniStack is a free emulator that allows you to simulate AWS locally. It offers access to over 60 AWS services on a single port, supports multiple accounts and regions, and is self-hostable.



When developing an application that uses

AWS , creating resources such as S3, DynamoDB, and Lambda on AWS every time you want to test its functionality requires setting up and deleting environments and managing usage fees. Therefore, I tried using ' MiniStack ,' an emulator that replicates AWS APIs on a PC, allowing you to use over 60 AWS services locally for free using AWS CLI, Terraform, and other tools.

MiniStack — The Best AWS Emulator | Free Open-Source LocalStack Alternative
https://ministack.org/



ministackorg/ministack: Ministack: Free, open-source local AWS emulator - 60+ services, Terraform compatible, real databases. Free forever. MIT licensed.
https://github.com/ministackorg/ministack

◆ How to set up MiniStack
This time, we will set it up in an environment where Docker Desktop , Git Bash for Windows , and AWS CLI are installed on Windows. Create a compose.yml file in the working folder.


services:
ministack:
image: ministackorg/ministack:latest
ports:
- '4566:4566'
environment:
- PERSIST_STATE=1
- S3_PERSIST=1
- LOG_LEVEL=INFO
volume:
- ./data/state:/tmp/ministack-state
- ./data/s3:/tmp/ministack-data/s3



The setup is complete once you start the container.


docker compose up -d



◆How to use MiniStack
Open Git Bash and configure the test credentials to be used with the AWS CLI.


export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1



First, create a bucket in S3.


aws --endpoint-url=http://localhost:4566 s3 mb s3://test-bucket



Running the `ls` command will show the `test-bucket` you created to check if the bucket exists. You can test it using the same AWS CLI as in actual AWS.


aws --endpoint-url=http://localhost:4566 s3 ls
#Execution result
2026-10-01 10:05:03 test-bucket



You can also create SQS queues. There's no need to switch ports between S3 and SQS; MiniStack parses AWS requests and distributes them to over 60 services.


aws --endpoint-url=http://localhost:4566 sqs create-queue --queue-name test-queue
aws --endpoint-url=http://localhost:4566 sqs list-queues
#Execution result
{
'QueueUrls': [
'http://localhost:4566/000000000000/test-queue'
]
}



◆RDS allows you to run actual PostgreSQL.
In addition to services that only reproduce API responses, MiniStack allows you to launch actual software such as PostgreSQL , MySQL , and MariaDB for RDS, and Redis for Amazon ElastiCache , as Docker containers.


docker ps
#Execution result
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2890264044ca postgres:15-alpine 'sh -c 'chown -R pos…' About a minute ago Up 58 seconds 0.0.0.0:15432->5432/tcp, [::]:15432->5432/tcp ministack-rds-281afe4a44d7-instance-mydb
3a672c1c3863 ministackorg/ministack:latest 'python -m ministack' 2 minutes ago Up 2 minutes (healthy) 0.0.0.0:4566->4566/tcp, [::]:4566->4566/tcp ministack-ministack-1



In the case of RDS, MiniStack handles the management of the AWS RDS API, while the actual database processing is handled by a locally running database such as PostgreSQL. This configuration allows you to verify not only simple API mocks but also the part where the application actually issues SQL queries locally.

◆ Recreate multiple AWS accounts and regions
MiniStack uses a 12-digit 'AWS_ACCESS_KEY_ID' as the AWS account ID, allowing you to separate and store resources from multiple accounts within a single MiniStack.

Set AWS_ACCESS_KEY_ID to '111111111111' and check the status.


export AWS_ACCESS_KEY_ID=111111111111
aws --endpoint-url=http://localhost:4566 sts get-caller-identity
#Execution result
{
'UserId': '111111111111',
'Account': '111111111111'
'Arn': 'arn:aws:iam::111111111111:root'
}



Set AWS_ACCESS_KEY_ID to '222222222222' and check the status.


export AWS_ACCESS_KEY_ID=222222222222
aws --endpoint-url=http://localhost:4566 sts get-caller-identity
#Execution result
{
'UserId': '222222222222',
'Account': '222222222222',
'Arn': 'arn:aws:iam::222222222222:root'
}



Furthermore, because region information is also separated, even if you create SQS queues with the same name in us-east-1 and eu-west-1, they will be treated as independent resources. After creating SQS queues in each region, running the verification command displayed the following:


aws --endpoint-url=http://localhost:4566 \
> --region us-east-1 \
> sqs list-queues
#Execution result
{
'QueueUrls': [
'http://localhost:4566/222222222222/jobs'
]
}

aws --endpoint-url=http://localhost:4566 \
> --region eu-west-1 \
> sqs list-queues
#Execution result
{
'QueueUrls': [
'http://localhost:4566/222222222222/jobs'
]
}



By separating accounts and regions, it's possible to build a test environment that can be used by multiple developers on a single MiniStack.

◆Other features
MiniStack can handle over 60 AWS services, including major services like S3, SQS, DynamoDB, and Lambda, as well as EC2, ECS, EKS, CloudFormation, Step Functions, and Amazon Bedrock.

category Supported Services
Core S3・DynamoDB・SQS・SNS・Lambda・Lambda MicroVMs・Lambda Core・IAM・STS・Secrets Manager・SSM・CloudFormation
Observability CloudWatch・CloudWatch Logs・CloudTrail
Integration & Events EventBridge・EventBridge Scheduler・EventBridge Pipes・Step Functions・IoT・IoT Wireless・Amazon Location・Amazon MQ
Streams & Analytics Kinesis・Firehose・Athena・Glue・EMR・OpenSearch・MSK(Kafka)・MediaConnect
Compute & Containers EC2・IMDS・ECS・EKS・Batch・Auto Scaling・ALB/ELBv2
Databases & Cache Aurora DSQL・RDS・RDS Data API・ElastiCache
Networking & DNS Route53・CloudFront・CloudFront KeyValueStore・ServiceDiscovery
APIs & Edge API Gateway v1・API Gateway v2・AppSync
Security & Crypto KMS・ACM・AWS Signer・WAFv2・WAF Classic・Amazon Inspector
Identity & Accounts Cognito・Organizations・Account
AI & ML Amazon Bedrock・Bedrock Runtime・Bedrock Agent・Bedrock Agent Runtime・Bedrock AgentCore
Communication SES
Storage & Transfer EFS・ECR・Transfer Family・Amazon Transcribe・Amazon Translate・S3 Files・S3 Tables
Config & Dev Tools AppConfig・CodeBuild・AWS Config・Cloud Control API・MWAA・Cost & Usage Report
Cross-service & Backup Resource Groups Tagging API・AWS Backup・Resource Groups


◆Points to note when using MiniStack
MiniStack is not a virtual cloud that perfectly replicates all AWS behaviors; some features, such as VPC packet routing and DNS propagation, are not replicated in the local environment.

◆MiniStack Review
On the social news site Hacker News , there has been much discussion about MiniStack, with some praising its iteration speed and ability to run quickly in a CI environment, rather than its cost. However, others have pointed out that it does not adequately reproduce DynamoDB's service exceptions, input validation, eventual consistency, and edge cases. In response , the creator explains that its intended use is integration testing to verify that the correct operations are being called with the correct data, not to reproduce the exact same behavior as the production environment.

in Software,   Review, Posted by darkhorse_logmk