レビュー

無料でAWSをローカルでシミュレーションできるエミュレーター「MiniStack」、60以上のAWSサービスを単一ポートで利用可能でマルチアカウント&マルチリージョン対応、セルフホスト可能


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・CloudFormation
ObservabilityCloudWatch・CloudWatch Logs・CloudTrail
Integration & EventsEventBridge・EventBridge Scheduler・EventBridge Pipes・Step Functions・IoT・IoT Wireless・Amazon Location・Amazon MQ
Streams & AnalyticsKinesis・Firehose・Athena・Glue・EMR・OpenSearch・MSK(Kafka)・MediaConnect
Compute & ContainersEC2・IMDS・ECS・EKS・Batch・Auto Scaling・ALB / ELBv2
Databases & CacheAurora DSQL・RDS・RDS Data API・ElastiCache
Networking & DNSRoute53・CloudFront・CloudFront KeyValueStore・ServiceDiscovery
APIs & EdgeAPI Gateway v1・API Gateway v2・AppSync
Security & CryptoKMS・ACM・AWS Signer・WAFv2・WAF Classic・Amazon Inspector
Identity & AccountsCognito・Organizations・Account
AI & MLAmazon Bedrock・Bedrock Runtime・Bedrock Agent・Bedrock Agent Runtime・Bedrock AgentCore
CommunicationSES
Storage & TransferEFS・ECR・Transfer Family・Amazon Transcribe・Amazon Translate・S3 Files・S3 Tables
Config & Dev ToolsAppConfig・CodeBuild・AWS Config・Cloud Control API・MWAA・Cost & Usage Report
Cross-service & BackupResource Groups Tagging API・AWS Backup・Resource Groups


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

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

・関連記事
AWSの膨大で複雑なサービス群をすべて「たった1行」で説明していくとこうなる - GIGAZINE

独自のデータベースやWordPressなどのアプリを簡単にセルフホストできて管理できるオープンソースPaaS「Coolify」 - GIGAZINE

FirebaseのようにGUIでバックエンドを構築できる無料でオープンソースのシステム「PocketBase」、わずか1ファイルのみ - GIGAZINE

イランによるAmazonのデータセンターへの攻撃により顧客データが永久に失われる - GIGAZINE

AWSを10年運用してわかったことをAmazonの最高技術責任者が語る - GIGAZINE

in ソフトウェア,   レビュー, Posted by darkhorse_logmk

You can read the machine translated English article MiniStack is a free emulator that allows….