LocalStack (AWS Emulation)
LocalStack emulates AWS services locally — S3, Lambda, DynamoDB, SQS, SNS, API Gateway, and 50+ more — so you can develop and test AWS-dependent code without an AWS account.
Aithroyz deploys LocalStack Community Edition. Use
https://localstack.<env-name>.ops.aithroyz.com as the --endpoint-url in AWS CLI commands and endpoint_url in boto3 clients. No real AWS account is needed.Access
URL:
https://localstack.<env-name>.ops.aithroyz.comAuth: No authentication required. Use
test as both the AWS Access Key ID and Secret Access Key in any client.Region: Use
us-east-1 (or any valid AWS region string — LocalStack accepts all).AWS CLI usage
Point any AWS CLI command at LocalStack by adding --endpoint-url:
# Configure dummy credentials (only needed once)
export AWS_ACCESS_KEY_ID=test
export AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1
ENDPOINT="https://localstack.<env-name>.ops.aithroyz.com"
# Create an S3 bucket
aws s3 mb s3://my-sandbox-bucket --endpoint-url "$ENDPOINT"
# Upload a file
aws s3 cp ./data.json s3://my-sandbox-bucket/ --endpoint-url "$ENDPOINT"
# List bucket contents
aws s3 ls s3://my-sandbox-bucket --endpoint-url "$ENDPOINT"
# Create a DynamoDB table
aws dynamodb create-table --table-name Events --attribute-definitions AttributeName=id,AttributeType=S --key-schema AttributeName=id,KeyType=HASH --billing-mode PAY_PER_REQUEST --endpoint-url "$ENDPOINT"Lambda deployment
Deploy and invoke Lambda functions against LocalStack the same way you would against AWS:
ENDPOINT="https://localstack.<env-name>.ops.aithroyz.com"
# Package your handler
zip function.zip handler.py
# Deploy the function
aws lambda create-function --function-name my-handler --runtime python3.12 --role arn:aws:iam::000000000000:role/lambda-role --handler handler.lambda_handler --zip-file fileb://function.zip --endpoint-url "$ENDPOINT"
# Invoke it synchronously
aws lambda invoke --function-name my-handler --payload '{"key":"value"}' --endpoint-url "$ENDPOINT" response.json && cat response.jsonℹ
LocalStack Community supports Python, Node.js, Java, Go, and .NET runtimes for Lambda. Container-based Lambda (Docker runtime) requires LocalStack Pro.
Python (boto3)
Configure boto3 clients to point at LocalStack by setting endpoint_url:
import boto3
ENDPOINT = "https://localstack.<env-name>.ops.aithroyz.com"
# S3 client
s3 = boto3.client(
"s3",
endpoint_url=ENDPOINT,
aws_access_key_id="test",
aws_secret_access_key="test",
region_name="us-east-1",
)
s3.create_bucket(Bucket="my-sandbox-bucket")
s3.put_object(Bucket="my-sandbox-bucket", Key="hello.txt", Body=b"Hello, LocalStack!")
# DynamoDB resource
dynamodb = boto3.resource(
"dynamodb",
endpoint_url=ENDPOINT,
aws_access_key_id="test",
aws_secret_access_key="test",
region_name="us-east-1",
)
table = dynamodb.Table("Events")
table.put_item(Item={"id": "evt-001", "severity": "high", "source": "wazuh"})✓
To avoid repeating the endpoint URL everywhere, set the
AWS_ENDPOINT_URL environment variable. boto3 and the AWS CLI both pick it up automatically from boto3 1.28+ and AWS CLI v2.13+.Tips
Community edition resets on restart
LocalStack Community stores all state in memory. S3 objects, DynamoDB tables, and Lambda functions are lost when the container stops. Export important data before destroying your environment or running maintenance.
Use "test" as any credential value
LocalStack accepts any non-empty string for AWS credentials. The convention is to use "test" for both the access key ID and secret. Account IDs are normalised to 000000000000.
Visual browsing with the LocalStack Web App
Visit localstack.cloud and sign in with a free account. Connect it to your LocalStack instance to browse S3 buckets, DynamoDB tables, and Lambda functions through a visual UI — no CLI needed.
SQS + Lambda event source mappings
LocalStack supports event source mappings: create an SQS queue, map it to a Lambda function, and messages sent to the queue will trigger your function automatically — a complete serverless event pipeline, all offline.
⚠
LocalStack Community does not support IAM policy enforcement — all requests are accepted regardless of the IAM role or policy attached. If your application logic depends on IAM denies, test those paths against a real AWS account or use LocalStack Pro.