Adeus Localstack, vida longa ao Ministack

Como muito de vocês sabem o LocalStack não é mais livre, a maioria dos serviços core foi colocada para dentro de um plano pago, além de eles terem arquivado o repositório do Github, ou seja, mais um projeto que ignora a comunidade, que foi realmente responsável pelo crescimento do produto por motivos meramente comerciais, mas eles tem o direito de fazer isso, infelizmente.

Mas ainda bem que a comunidade Open Source é ligeira e já há uma alternativa para ele, e uma bela alternativa, o Ministack.

Hoje ele permite emular 33 serviços da AWS em uma única porta (4566), e diferente de outros emuladores que apenas “simulam” respostas, o MiniStack sobe contêineres reais para serviços críticos:

RDS: Inicia contêineres reais de Postgres ou MySQL.

ElastiCache: Inicia instâncias reais de Redis.

ECS: Executa contêineres Docker reais através do comando RunTask.

Athena: Executa consultas SQL reais via DuckDB.

Ele suporta boa parte dos serviços mais usados da AWS, o que inclui S3, SQS, SNS, DynamoDB, Lambda, IAM, Secrets Manager, CloudWatch, EventBridge, Kinesis, SES, Step Functions, API Gateway, Route53, Cognito, EC2, EMR, EBS, EFS, ALB (Load Balancers) e WAF v2.

E tem compatibilidade total com ferramentas como AWS CLI, Terraform, CDK, Pulumi e SDKs (como o boto3 para Python).

Além de ser livre, licenciado sob a licença MIT, sem versões “Pro” ou recursos bloqueados atrás de assinaturas, não exigir criação de contas ou chaves de licença ou telemetria (ou seja, respeita sua privacidade), além de ser leve e rápido:

Imagem Docker: ~150MB (contra ~1GB do LocalStack).

Consumo de RAM: ~30MB em standby (contra ~500MB do LocalStack).

Inicialização: Menos de 2 segundos.

Se você já usa LocalStack, pode trocar para o MiniStack apenas mudando a URL do endpoint, sem alterar seu código e as suas ferramentas.

Para instalar é bem simples, você pode optar em rodar ele em um contêiner Docker:

docker run -p 4566:4566 nahuelnucera/ministack

Ou realizar a instalação através do pip, o gerenciador de pacotes do Python:

pip install ministack
ministack

Para usar o MiniStack, com as suas ferramentas basta apontar para o endpoint local (http://localhost:4566), assim como no Localstack, mas com a vantagem de ser uma porta única, no Localstack você tinha que usar portas diferentes para alguns determinados serviços.

AWS CLI

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

OpenTofu/Terraform

provider "aws" {
region = "us-east-1"
access_key = "test"
secret_key = "test"
skip_credentials_validation = true
endpoints {
s3 = "http://localhost:4566"
dynamodb = "http://localhost:4566"
}
}

SDK (Boto3/Python)

import boto3
s3 = boto3.client('s3', endpoint_url="http://localhost:4566")
s3.create_bucket(Bucket='teste-local')

Então é isso pessoal, adeus Localstack e vida longa ao Ministack e que o movimento OpenSource continue nos abençoando com projetos assim, vindos da comunidade para a comunidade.

Interações & Comentários