Overview
localaws is an AWS-compatible cloud for your home lab. Use the AWS CLI, SDKs, and Terraform against one local HTTP endpoint. Docker runs container workloads; LXD runs EC2 instances.
Start here
- Quick start: launch the server and create your first bucket.
- Installation: install a release or build from source.
- Usage: configure credentials, discover resources, and clean up.
- Choose a service under Usage for its prerequisites and commands.
Two addresses, two jobs
The AWS API listens at http://localhost:4566 by default. The optional StackPort browser console listens at http://localhost:8080 when started with --ui. Replace localhost with your server address when connecting from another machine.
Every signed request selects its service and region through the SigV4 credential scope. Use a region enabled in config.json; these examples use us-east-1.
Local behavior
localaws implements a subset of AWS APIs. Some settings are metadata only, and some integrations need host services. Each resource guide calls out prerequisites. S3, IAM, messaging, logs, and several other catalogs persist locally; other service metadata remains in memory. Restarting can leave running containers without their old metadata.
The repository README, service guides, and AWS_SERVICE_CAPABILITIES.json describe the detailed compatibility limits. Do not assume full AWS parity.
For automation and agents
Start with the documentation index to discover an individual Markdown page for every guide. Download all guides in one request, or use the existing complete Markdown reference. These contain the same guides and commands as this site, without requiring JavaScript. Download the example configuration and read the operation inventory for local capabilities.
Use explicit endpoints and regions in automation, read returned IDs instead of inventing them, and inspect resources before deleting them. Examples use demo names and assume a fresh installation.
Quick start
Install the Linux x86_64 release from an empty directory. It requires glibc 2.36+, curl, tar, and sha256sum. Have the AWS CLI installed for the resource commands below.
curl -fsSL https://my-stack-prod-production.up.railway.app/install.sh | sh
cd localaws
export LOCALAWS_CONFIG=$PWD/config.json
./localaws > localaws.log 2>&1 &
Wait for the server to listen on port 4566; check localaws.log if it exits. Keep the same working directory and config for subsequent start and stop commands.
Create, inspect, and delete a bucket
The example configuration has IAM enforcement off, so the test credentials below work for this S3 example. Use your authorized credentials when enforcement is enabled.
export LOCALAWS_ENDPOINT=http://localhost:4566
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1 AWS_REGION=us-east-1
export AWS_PAGER=""
unset AWS_SESSION_TOKEN AWS_PROFILE AWS_DEFAULT_PROFILE
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api list-buckets
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api create-bucket --bucket hello-localaws
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api list-buckets
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api delete-bucket --bucket hello-localaws
The last command deletes the empty demo bucket. Choose a new bucket name if it already exists. For stored IAM keys required by STS, KMS, and some other APIs, follow Usage.
Add the browser console
Python 3.10+ with venv and pip is required. From the installed localaws directory:
python3 scripts/setup_ui.py
./localaws --stop
./localaws --ui > localaws.log 2>&1 &
Open http://localhost:8080. The console offers Dashboard, Resources, and guided Learn lessons. Its Documentation link returns here. Node.js is only needed to change the frontend.
Stop the server
LOCALAWS_CONFIG=$PWD/config.json ./localaws --stop
This also stops the companion console. See Installation for host prerequisites and source builds.
Installation
Host prerequisites
- Linux x86_64 with glibc 2.36+ for the published binary.
- curl, tar, and sha256sum for the installer.
- AWS CLI for the examples; newer S3 families need CLI versions that include their service models.
- Docker for ECS tasks, RDS databases, Lambda runtimes, and the ECR registry.
- LXD with the lxc client for EC2 instances; ssh-keygen for key pairs.
- OpenSSL for ACM certificate operations.
- Python 3.10+ with venv and pip for the optional browser console.
Published release
Run one installer command from an empty directory:
curl -fsSL https://my-stack-prod-production.up.railway.app/install.sh | sh
Or include the browser console's Python dependencies:
curl -fsSL https://my-stack-prod-production.up.railway.app/install.sh | sh -s -- -ui
The installer verifies the archive checksum, extracts ./localaws, and creates config.json. It refuses to overwrite an existing localaws path. It does not start a server or install Docker or LXD. Both -ui and --ui are accepted by the installer.
Keep stackport/ and scripts/ next to the installed binary. From the installed directory, choose a launch mode:
cd localaws
export LOCALAWS_CONFIG=$PWD/config.json
./localaws --ui > localaws.log 2>&1 &
Use ./localaws without --ui for the API alone. Stop an existing instance before switching modes.
Update the executable
./localaws --update
Updates to the latest published Linux x86_64 binary, using the same archive and SHA-256 verification as the installer. An identical binary reports that it is already up to date. The command needs tar and write access to the executable's directory; it does not require LOCALAWS_CONFIG. Download or verification failures leave the existing executable intact. Restart a running server to use the update.
Configuration, data, and bundled browser-console files are preserved. To update the console as well, install a fresh bundle in another directory and retain your configuration and data. Set LOCALAWS_DOWNLOAD_BASE_URL to use a custom download origin. Updates require HTTPS, except for HTTP on loopback hosts (localhost, 127.0.0.1, or ::1); redirects follow the same rule. Updates follow the latest published build by binary contents; the current publication does not provide semantic version ordering.
Build from source
From a source checkout, install Rust 1.92 and copy the example configuration:
rustup toolchain install 1.92
cp config.example.json config.json
export LOCALAWS_CONFIG=$PWD/config.json
make start
# Stop the background server:
make stop
For the console in a source checkout:
python3 scripts/setup_ui.py
make start ARGS=--ui
The frontend build is committed, so normal use needs no Node.js installation.
Configuration
Set LOCALAWS_CONFIG to an absolute config path. The example binds the AWS API to 0.0.0.0:4566, stores local state under ./data, and enables several regions. Relative data paths resolve from the server's working directory.
The iam.enforcement setting controls authorization: off, record, iam-only, or all. Stored IAM credentials still undergo signature validation when enforcement is off. Configure credentials before enabling enforcement.
StackPort listens on all network interfaces and has no login. Use it on a trusted network. Set STACKPORT_PORT=9090 to change its port, or STACKPORT_ALLOW_WRITES=false to block console changes. Lambda invocation remains available and can have side effects. When credentials are omitted, the localaws launcher provisions console credentials; supply both AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY to use your own.
Download config.example.json for the complete starting configuration. Optional providers, such as S3 Files NFS and Outposts, require additional configuration described in the repository's service guides.
Usage
Select a service in the left navigation for a creation example, prerequisites, and discovery commands. The examples use Bash and demo names on a fresh localaws installation.
Connect the AWS CLI
For an unmodified example configuration with IAM enforcement off:
export LOCALAWS_ENDPOINT=http://localhost:4566
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test
export AWS_DEFAULT_REGION=us-east-1 AWS_REGION=us-east-1
export AWS_PAGER=""
unset AWS_SESSION_TOKEN AWS_PROFILE AWS_DEFAULT_PROFILE
Replace localhost for a remote server and select a configured region. Always include --endpoint-url "$LOCALAWS_ENDPOINT"; this directs the command to your local server.
Create stored credentials
STS and KMS require stored keys even when enforcement is off. With the fresh example configuration, create a demo administrator, then use its returned credentials:
aws --endpoint-url "$LOCALAWS_ENDPOINT" iam create-user --user-name demo-cli-user
aws --endpoint-url "$LOCALAWS_ENDPOINT" iam put-user-policy \
--user-name demo-cli-user --policy-name demo-local-admin \
--policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"*","Resource":"*"}]}'
read -r AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY <<< "$(aws --endpoint-url "$LOCALAWS_ENDPOINT" iam create-access-key \
--user-name demo-cli-user --query 'AccessKey.[AccessKeyId,SecretAccessKey]' --output text)"
export AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY
aws --endpoint-url "$LOCALAWS_ENDPOINT" sts get-caller-identity
This grants broad local permissions. If IAM enforcement is already enabled, use existing authorized credentials and skip this bootstrap. Keep returned secrets private. Repeatable scripts should reuse an existing demo user or choose unique names.
Discover and inspect resources
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api list-buckets
aws --endpoint-url "$LOCALAWS_ENDPOINT" dynamodb list-tables
aws --endpoint-url "$LOCALAWS_ENDPOINT" ec2 describe-instances
The localaws binary accepts server startup, --ui, and --stop; it has no native resource-list or delete subcommands. Use service-specific AWS CLI or SDK calls for headless management.
In the browser console, Dashboard shows service counts and Resources provides service views. Some localaws APIs have no console view; their CLI commands still work. Learn lessons create real local resources.
SDKs and scripts
Use the same endpoint, credentials, and region with SDK clients. This Python example requires boto3 installed in your environment:
import os
import boto3
s3 = boto3.client(
"s3",
endpoint_url=os.environ["LOCALAWS_ENDPOINT"],
region_name=os.environ.get("AWS_DEFAULT_REGION", "us-east-1"),
)
print([bucket["Name"] for bucket in s3.list_buckets()["Buckets"]])
For Terraform, point every used service endpoint at localaws. The repository's terraform directory contains complete examples and acceptance fixtures.
Delete deliberately
Use the IDs, URLs, and ARNs returned by create/list operations. Inspect the selected resource first. Empty S3 buckets before deletion; versioned buckets also require deleting versions and delete markers. Remove dependent resources before their parent. Terminating instances and deleting databases can discard workload data.
# These remove the empty resources with these exact demo names:
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api delete-bucket --bucket demo-bucket
aws --endpoint-url "$LOCALAWS_ENDPOINT" dynamodb delete-table --table-name demo-items
Stopping localaws is separate from resource deletion. Persistent catalogs survive restarts, and workload containers can outlive memory-only metadata. Back up data directories together with their encryption keys.
Troubleshooting
- Connection refused: check localaws.log, the configured listener, and whether the server is running.
- InvalidRegion: choose a region in config.json.
- Access denied or signature errors: verify credentials, session token, region, and IAM enforcement mode.
- Unsupported operation: check the operation inventory and the service guide; localaws implements a subset of AWS.
- Container or instance failures: check Docker or LXD access on the server host.
- Console unavailable: run scripts/setup_ui.py, check STACKPORT_PORT, and restart with --ui.
S3
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Create a general-purpose bucket in us-east-1.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api create-bucket --bucket demo-bucket
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api list-buckets
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
DynamoDB
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Create a table with a string partition key and on-demand billing.
aws --endpoint-url "$LOCALAWS_ENDPOINT" dynamodb create-table \
--table-name demo-items \
--attribute-definitions AttributeName=id,AttributeType=S \
--key-schema AttributeName=id,KeyType=HASH \
--billing-mode PAY_PER_REQUEST
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" dynamodb list-tables
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
Kinesis
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Local Kinesis supports one shard per stream.
aws --endpoint-url "$LOCALAWS_ENDPOINT" kinesis create-stream \
--stream-name demo-stream --shard-count 1
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" kinesis list-streams
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
Lambda
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Requires Docker and Python 3. Creates its own execution role and ZIP package; Python 3.12 is in the example configuration.
LAMBDA_ROLE=$(aws --endpoint-url "$LOCALAWS_ENDPOINT" iam create-role \
--role-name demo-lambda-role \
--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"lambda.amazonaws.com"},"Action":"sts:AssumeRole"}]}' \
--query Role.Arn --output text)
python3 - <<'PYTHON'
import zipfile
with zipfile.ZipFile("demo-function.zip", "w") as archive:
archive.writestr("handler.py", 'def handler(event, context):\n return {"message": "Hello from localaws"}\n')
PYTHON
aws --endpoint-url "$LOCALAWS_ENDPOINT" lambda create-function \
--function-name demo-function --runtime python3.12 --handler handler.handler \
--role "$LAMBDA_ROLE" --zip-file fileb://demo-function.zip
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" lambda list-functions
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
ECS
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates an empty cluster. Running tasks in it requires Docker.
aws --endpoint-url "$LOCALAWS_ENDPOINT" ecs create-cluster --cluster-name demo-cluster
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" ecs list-clusters
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
ECR
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Requires Docker; the local registry starts on first use.
aws --endpoint-url "$LOCALAWS_ENDPOINT" ecr create-repository --repository-name demo-app
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" ecr describe-repositories
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
EC2
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Requires LXD. Uses the configured Ubuntu image and the default us-east-1 subnet; leave NO_DEFAULTS unset.
aws --endpoint-url "$LOCALAWS_ENDPOINT" ec2 run-instances \
--image-id ami-ubuntu-2404 --instance-type t3.micro --count 1
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" ec2 describe-instances
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
VPC networking (EC2)
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates a network record. Local VPCs do not change the host network.
aws --endpoint-url "$LOCALAWS_ENDPOINT" ec2 create-vpc --cidr-block 10.42.0.0/16
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" ec2 describe-vpcs
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
EFS
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates local filesystem storage. Encryption and AWS Backup must remain disabled; no NFS endpoint is advertised.
aws --endpoint-url "$LOCALAWS_ENDPOINT" efs create-file-system \
--creation-token demo-efs --no-encrypted --no-backup \
--tags Key=Name,Value=demo-files
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" efs describe-file-systems
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
RDS
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Requires Docker. The password is for this local example; choose your own before using the database.
aws --endpoint-url "$LOCALAWS_ENDPOINT" rds create-db-instance \
--db-instance-identifier demo-db --engine postgres --db-instance-class db.t3.micro \
--allocated-storage 20 --master-username demo --master-user-password 'LocalDemoPass123!'
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" rds describe-db-instances
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
IAM
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates an IAM user. Access keys are created separately with iam create-access-key.
aws --endpoint-url "$LOCALAWS_ENDPOINT" iam create-user --user-name demo-user
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" iam list-users
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
STS
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
STS has no create-resource API. This supported call shows the account and identity used for requests.
aws --endpoint-url "$LOCALAWS_ENDPOINT" sts get-caller-identity
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" sts get-caller-identity
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
KMS
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates a local symmetric encryption key.
aws --endpoint-url "$LOCALAWS_ENDPOINT" kms create-key
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" kms list-keys
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
Secrets Manager
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Stores a local example secret.
aws --endpoint-url "$LOCALAWS_ENDPOINT" secretsmanager create-secret \
--name demo/credentials --secret-string '{"username":"demo","password":"local-example"}'
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" secretsmanager list-secrets
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
SSM Parameter Store
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
PutParameter creates a named parameter.
aws --endpoint-url "$LOCALAWS_ENDPOINT" ssm put-parameter \
--name /demo/greeting --type String --value 'Hello from localaws'
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" ssm describe-parameters
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
SQS
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates a standard queue.
aws --endpoint-url "$LOCALAWS_ENDPOINT" sqs create-queue --queue-name demo-queue
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" sqs list-queues
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
SNS
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates a standard notification topic.
aws --endpoint-url "$LOCALAWS_ENDPOINT" sns create-topic --name demo-topic
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" sns list-topics
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
SES
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates a local identity with the SES v2 API. Verification is a separate step; local mail is captured rather than sent externally.
aws --endpoint-url "$LOCALAWS_ENDPOINT" sesv2 create-email-identity \
--email-identity demo@example.com
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" sesv2 list-email-identities
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
ACM
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Requests a certificate from the local CA. Add the returned DNS validation records to local Route 53 to complete issuance.
aws --endpoint-url "$LOCALAWS_ENDPOINT" acm request-certificate \
--domain-name demo.example.com --validation-method DNS
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" acm list-certificates
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
API Gateway
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates an empty REST API; add resources, methods and a deployment before invoking it.
aws --endpoint-url "$LOCALAWS_ENDPOINT" apigateway create-rest-api --name demo-api
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" apigateway get-rest-apis
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
Route 53
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates a local hosted zone.
aws --endpoint-url "$LOCALAWS_ENDPOINT" route53 create-hosted-zone \
--name demo.example.com --caller-reference "demo-$(date +%s)"
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" route53 list-hosted-zones
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
Route 53 Domains
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates a local registry entry and hosted zone. This does not register a domain on the public internet.
CONTACT='{"FirstName":"Demo","LastName":"User","ContactType":"PERSON","AddressLine1":"123 Example St","City":"Seattle","State":"WA","CountryCode":"US","ZipCode":"98101","PhoneNumber":"+1.2065550100","Email":"demo@example.com"}'
aws --endpoint-url "$LOCALAWS_ENDPOINT" route53domains register-domain \
--domain-name localaws-demo.com --duration-in-years 1 \
--admin-contact "$CONTACT" --registrant-contact "$CONTACT" --tech-contact "$CONTACT"
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" route53domains list-domains
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
ELBv2 / ALB
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates its own VPC and two subnets in different availability zones. Add a target group and listener to route requests.
VPC_ID=$(aws --endpoint-url "$LOCALAWS_ENDPOINT" ec2 create-vpc \
--cidr-block 10.43.0.0/16 --query Vpc.VpcId --output text)
SUBNET_A=$(aws --endpoint-url "$LOCALAWS_ENDPOINT" ec2 create-subnet \
--vpc-id "$VPC_ID" --cidr-block 10.43.1.0/24 --availability-zone us-east-1a \
--query Subnet.SubnetId --output text)
SUBNET_B=$(aws --endpoint-url "$LOCALAWS_ENDPOINT" ec2 create-subnet \
--vpc-id "$VPC_ID" --cidr-block 10.43.2.0/24 --availability-zone us-east-1b \
--query Subnet.SubnetId --output text)
aws --endpoint-url "$LOCALAWS_ENDPOINT" elbv2 create-load-balancer \
--name demo-alb --type application --scheme internet-facing \
--subnets "$SUBNET_A" "$SUBNET_B"
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" elbv2 describe-load-balancers
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
EventBridge
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates a custom event bus. Add rules and targets to deliver events.
aws --endpoint-url "$LOCALAWS_ENDPOINT" events create-event-bus --name demo-bus
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" events list-event-buses
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
Step Functions
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates its own service role and a minimal Pass workflow.
STATES_ROLE=$(aws --endpoint-url "$LOCALAWS_ENDPOINT" iam create-role \
--role-name demo-states-role \
--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"states.amazonaws.com"},"Action":"sts:AssumeRole"}]}' \
--query Role.Arn --output text)
aws --endpoint-url "$LOCALAWS_ENDPOINT" stepfunctions create-state-machine \
--name demo-workflow --role-arn "$STATES_ROLE" \
--definition '{"StartAt":"Hello","States":{"Hello":{"Type":"Pass","Result":"Hello from localaws","End":true}}}'
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" stepfunctions list-state-machines
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
CloudWatch Logs
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates a group and a stream ready for log events.
aws --endpoint-url "$LOCALAWS_ENDPOINT" logs create-log-group --log-group-name /demo/app
aws --endpoint-url "$LOCALAWS_ENDPOINT" logs create-log-stream \
--log-group-name /demo/app --log-stream-name demo-stream
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" logs describe-log-groups
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
CloudTrail
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Local management history is recorded automatically with the example configuration. Trail creation is unsupported; look up the events from your other commands.
aws --endpoint-url "$LOCALAWS_ENDPOINT" cloudtrail lookup-events --max-results 10
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" cloudtrail lookup-events --max-results 10
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
S3 Control
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Creates its own bucket. S3 Control adds the account to the request hostname; the proxy settings below route that hostname to localaws without extra DNS setup.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api create-bucket --bucket demo-access-bucket
ACCOUNT_ID=$(aws --endpoint-url "$LOCALAWS_ENDPOINT" sts get-caller-identity \
--query Account --output text)
HTTP_PROXY="$LOCALAWS_ENDPOINT" http_proxy="$LOCALAWS_ENDPOINT" NO_PROXY= no_proxy= \
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3control create-access-point \
--account-id "$ACCOUNT_ID" --name demo-access --bucket demo-access-bucket
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
HTTP_PROXY="$LOCALAWS_ENDPOINT" http_proxy="$LOCALAWS_ENDPOINT" NO_PROXY= no_proxy= \
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3control list-access-points --account-id "$ACCOUNT_ID"
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
S3 Tables
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Requires an AWS CLI version with the s3tables service model.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3tables create-table-bucket --name demo-tables
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3tables list-table-buckets
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
S3 Vectors
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
Requires an AWS CLI version with the s3vectors service model. Vector search is local and exact.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3vectors create-vector-bucket \
--vector-bucket-name demo-vectors
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3vectors list-vector-buckets
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
S3 Files
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
First configure s3.files_nfs on the server and use an AWS CLI with the s3files service model. This example creates a versioned bucket and a service role with access to that bucket. Without the NFS provider, creation returns an unsupported error.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api create-bucket --bucket demo-files-bucket
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3api put-bucket-versioning \
--bucket demo-files-bucket --versioning-configuration Status=Enabled
FILES_ROLE=$(aws --endpoint-url "$LOCALAWS_ENDPOINT" iam create-role \
--role-name demo-files-role \
--assume-role-policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Principal":{"Service":"s3files.amazonaws.com"},"Action":"sts:AssumeRole"}]}' \
--query Role.Arn --output text)
aws --endpoint-url "$LOCALAWS_ENDPOINT" iam put-role-policy \
--role-name demo-files-role --policy-name demo-files-access \
--policy-document '{"Version":"2012-10-17","Statement":[{"Effect":"Allow","Action":"s3:*","Resource":["arn:aws:s3:::demo-files-bucket","arn:aws:s3:::demo-files-bucket/*"]}]}'
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3files create-file-system \
--bucket arn:aws:s3:::demo-files-bucket --role-arn "$FILES_ROLE"
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3files list-file-systems
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.
S3 on Outposts
Complete the CLI and credentials setup before running these Bash examples. Use stored credentials for all service guides so STS and KMS calls work too.
First configure an Outpost under s3.regional.outposts. Set OUTPOST_ID, OUTPOST_SUBNET_ID and OUTPOST_SECURITY_GROUP_ID to that configured record’s IDs. Use the stored credentials from the setup above; Outposts requests require verified credentials and permission for s3-outposts:CreateEndpoint.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3outposts create-endpoint \
--outpost-id "${OUTPOST_ID:?Set the configured Outpost ID}" \
--subnet-id "${OUTPOST_SUBNET_ID:?Set the configured subnet ID}" \
--security-group-id "${OUTPOST_SECURITY_GROUP_ID:?Set the configured security group ID}" \
--access-type Private
Inspect resources
List the local resources and use the returned identifiers for detail or cleanup calls.
aws --endpoint-url "$LOCALAWS_ENDPOINT" s3outposts list-endpoints
Local compatibility
These commands target localaws. Support depends on the configured host and providers; AWS feature parity is limited. Consult the operation inventory for supported actions and the usage guide for cleanup and troubleshooting.