AWSを利用するアプリを開発する場合、動作確認のたびにAWS上へS3・DynamoDB・Lambdaなどのリソースを作成すると、環境の構築・削除・利用料金の管理などが必要になります。そこで、AWSのAPIをPC上で再現し、AWS CLIやTerraformなどから60以上のAWSサービスをローカル環境だけで無料で利用できるエミュレーター「MiniStack」を使ってみました。

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

◆MiniStackの構築方法

今回はWindowsにDocker DesktopとGit for WindowsのGit Bash、およびAWS CLIを用意した環境で構築します。作業フォルダー内にcompose.ymlを作成。


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


コンテナを起動すれば構築完了です。


docker compose up -d


◆MiniStackの使い方

Git Bashを開き、AWS CLIで利用するテスト用の認証情報を設定します。


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


まずS3にバケットを作成します。


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


バケットが存在しているかlsコマンドを実行すると作成したtest-bucketが表示されます。実際のAWSと同じAWS CLIを使いながらテストが可能です。


aws --endpoint-url=http://localhost:4566 s3 ls
#実行結果
2026-10-01 10:05:03 test-bucket


SQSキューも作成できます。S3とSQSでポートを切り替える必要はなく、MiniStackがAWSリクエストを解析して60以上のサービスへ振り分けます。


aws --endpoint-url=http://localhost:4566 sqs create-queue --queue-name test-queue
aws --endpoint-url=http://localhost:4566 sqs list-queues
#実行結果
{
"QueueUrls": [
"http://localhost:4566/000000000000/test-queue"
]
}


◆RDSでは実際のPostgreSQLを起動可能

MiniStackはAPIのレスポンスだけを再現するサービスに加えて、RDSではPostgreSQL・MySQL・MariaDB、Amazon ElastiCacheではRedisなどの実際のソフトウェアをDockerコンテナとして起動できます。


docker ps
#実行結果
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


RDSの場合はAWSのRDS APIに対する管理部分をMiniStackが処理し、実際のデータベース処理はローカルで起動したPostgreSQLなどが担当する構成となります。このため単純なAPIモックだけでなく、アプリケーションから実際にSQLを発行する部分までローカルで確認できます。

◆複数のAWSアカウントとリージョンを再現

MiniStackでは12桁の「AWS_ACCESS_KEY_ID」をAWSのアカウントIDとして扱い、1つのMiniStack内に複数アカウントのリソースを分離して保持できます。

AWS_ACCESS_KEY_IDに「111111111111」を設定しステータスを確認。


export AWS_ACCESS_KEY_ID=111111111111
aws --endpoint-url=http://localhost:4566 sts get-caller-identity
#実行結果
{
"UserId": "111111111111",
"Account": "111111111111",
"Arn": "arn:aws:iam::111111111111:root"
}


AWS_ACCESS_KEY_IDに「222222222222」を設定しステータスを確認。


export AWS_ACCESS_KEY_ID=222222222222
aws --endpoint-url=http://localhost:4566 sts get-caller-identity
#実行結果
{
"UserId": "222222222222",
"Account": "222222222222",
"Arn": "arn:aws:iam::222222222222:root"
}


さらにリージョン情報も分離されるため、us-east-1とeu-west-1へ同じ名前のSQSキューを作成しても、互いに独立したリソースとして扱われます。各リージョンでSQSキューを作成後、確認コマンドを実行すると以下のように表示されました。


aws --endpoint-url=http://localhost:4566 \
> --region us-east-1 \
> sqs list-queues
#実行結果
{
"QueueUrls": [
"http://localhost:4566/222222222222/jobs"
]
}

aws --endpoint-url=http://localhost:4566 \
> --region eu-west-1 \
> sqs list-queues
#実行結果
{
"QueueUrls": [
"http://localhost:4566/222222222222/jobs"
]
}


アカウントとリージョンを分けることで、1つのMiniStackで複数の開発者が利用するテスト環境の構築が可能です。

◆その他の機能

MiniStackはS3・SQS・DynamoDB・Lambdaなどの主要サービスに加えて、EC2・ECS・EKS・CloudFormation・Step Functions・Amazon Bedrockなど60以上のAWSサービスを扱えます。

カテゴリ対応サービスCoreS3・DynamoDB・SQS・SNS・Lambda・Lambda MicroVMs・Lambda Core・IAM・STS・Secrets Manager・SSM・CloudFormationObservabilityCloudWatch・CloudWatch Logs・CloudTrailIntegration & EventsEventBridge・EventBridge Scheduler・EventBridge Pipes・Step Functions・IoT・IoT Wireless・Amazon Location・Amazon MQStreams & AnalyticsKinesis・Firehose・Athena・Glue・EMR・OpenSearch・MSK(Kafka)・MediaConnectCompute & ContainersEC2・IMDS・ECS・EKS・Batch・Auto Scaling・ALB / ELBv2Databases & CacheAurora DSQL・RDS・RDS Data API・ElastiCacheNetworking & DNSRoute53・CloudFront・CloudFront KeyValueStore・ServiceDiscoveryAPIs & EdgeAPI Gateway v1・API Gateway v2・AppSyncSecurity & CryptoKMS・ACM・AWS Signer・WAFv2・WAF Classic・Amazon InspectorIdentity & AccountsCognito・Organizations・AccountAI & MLAmazon Bedrock・Bedrock Runtime・Bedrock Agent・Bedrock Agent Runtime・Bedrock AgentCoreCommunicationSESStorage & TransferEFS・ECR・Transfer Family・Amazon Transcribe・Amazon Translate・S3 Files・S3 TablesConfig & Dev ToolsAppConfig・CodeBuild・AWS Config・Cloud Control API・MWAA・Cost & Usage ReportCross-service & BackupResource Groups Tagging API・AWS Backup・Resource Groups

◆MiniStack利用時の注意点

MiniStackはAWSのすべての挙動を完全に再現する仮想クラウドではなく、VPCのパケットルーティングやDNS伝播などローカル環境では再現対象としていない機能があります。

◆MiniStackの評価

ソーシャル系ニュースサイトのHacker Newsでは、MiniStackについてさまざまな議論が行われており「主に重要なのはコストではなく、反復速度とCI環境で高速に実行できること」という評価がある一方、「DynamoDBのサービス例外・入力値検証・結果整合性・エッジケースを適切に再現していない」という意見も投稿されています。これに対して作者は「対象用途は正しい操作を正しいデータで呼び出しているかを確認する統合テストで、本番環境と完全に同じ挙動を再現することではない」と説明しています。