A Rust port of the official AWS CLI, providing a fast, single-binary alternative to the Python-based AWS CLI. Built with the official AWS SDK for Rust.
This is an active implementation of core AWS CLI functionality in Rust. Currently at 65.13% feature parity with the Python AWS CLI. Current Phase 1 progress is 100.00%. Phase 1 focuses on a smaller core subset of commands, which is why its progress percentage is higher than overall parity.
-
configure- Interactive configuration -
configure get- Get configuration value -
configure list- List all configuration
-
ls- List buckets/objects -
cp- Copy files -
sync- Sync directories -
mv- Move objects -
presign- Generate presigned URLs -
rm- Remove objects -
mb- Make bucket -
rb- Remove bucket -
website- Bucket website configuration (set/disable) -
get-acl- Get bucket/object ACL -
put-acl- Set bucket/object ACL (canned) -
get-bucket-policy- Get bucket policy JSON -
put-bucket-policy- Set bucket policy JSON -
delete-bucket-policy- Remove bucket policy -
list-object-versions- List object versions for a prefix
-
describe-instances- List instances -
describe-regions- List regions -
describe-availability-zones- List AZs -
start-instances- Start instances -
stop-instances- Stop instances -
reboot-instances- Reboot instances -
terminate-instances- Terminate instances -
describe-instance-types- List instance types -
describe-instance-status- Show instance/system status -
describe-security-groups- List security groups -
create-security-group- Create security group -
delete-security-group- Delete security group -
describe-key-pairs- List key pairs -
create-key-pair- Create a key pair -
delete-key-pair- Delete a key pair -
import-key-pair- Import a public key -
describe-images- List AMIs -
describe-volumes- List EBS volumes -
describe-snapshots- List EBS snapshots -
create-image- Create an AMI from an instance -
describe-addresses- List Elastic IPs -
allocate-address- Allocate Elastic IP -
associate-address- Associate Elastic IP -
disassociate-address- Disassociate Elastic IP -
release-address- Release Elastic IP -
run-instances- Launch instances -
authorize-security-group-ingress- Add ingress rule -
authorize-security-group-egress- Add egress rule -
revoke-security-group-ingress- Remove ingress rule -
revoke-security-group-egress- Remove egress rule -
create-volume- Create an EBS volume -
delete-volume- Delete an EBS volume -
attach-volume- Attach an EBS volume -
detach-volume- Detach an EBS volume -
create-snapshot- Create an EBS snapshot -
delete-snapshot- Delete an EBS snapshot -
copy-snapshot- Copy an EBS snapshot across regions -
describe-subnets- List subnets -
describe-vpcs- List VPCs -
describe-route-tables- List route tables -
create-tags- Add resource tags -
delete-tags- Remove resource tags
-
create-role- Create IAM roles -
create-user- Create IAM users -
delete-user- Delete IAM users -
get-user- Get IAM user details -
list-users- List users -
list-roles- List roles -
get-role- Get IAM role details -
delete-role- Delete IAM role -
get-policy- Get IAM policy details -
delete-policy- Delete IAM policy -
create-policy- Create IAM policy -
list-policies- List policies -
list-groups- List groups -
create-group- Create IAM groups -
get-group- Get IAM group details -
delete-group- Delete IAM group -
list-attached-group-policies- List attached group policies -
attach-group-policy- Attach managed policy to group -
detach-group-policy- Detach managed policy from group -
add-user-to-group- Add user to group -
remove-user-from-group- Remove user from group -
list-groups-for-user- List groups for user -
attach-user-policy- Attach managed policy to user -
detach-user-policy- Detach managed policy from user -
attach-role-policy- Attach managed policy to role -
detach-role-policy- Detach managed policy from role -
list-attached-user-policies- List attached policies for user -
list-attached-role-policies- List attached policies for role -
list-user-policies- List inline policy names for user -
list-role-policies- List inline policy names for role -
list-group-policies- List inline policy names for group -
get-user-policy- Get inline policy document for user -
get-role-policy- Get inline policy document for role -
get-group-policy- Get inline policy document for group -
put-user-policy- Add or update inline policy document for user -
delete-user-policy- Delete inline policy document from user -
put-role-policy- Add or update inline policy document for role -
delete-role-policy- Delete inline policy document from role -
put-group-policy- Add or update inline policy document for group -
delete-group-policy- Delete inline policy document from group -
create-access-key- Create an access key for an IAM user -
list-access-keys- List access keys for an IAM user -
update-access-key- Update an IAM access key status -
delete-access-key- Delete an IAM access key -
create-login-profile- Create a console login profile for an IAM user -
get-login-profile- Get login profile metadata for an IAM user -
update-login-profile- Update an IAM user login profile -
delete-login-profile- Delete an IAM user login profile -
update-assume-role-policy- Update trust policy document for an IAM role -
list-account-aliases- List account aliases
-
get-caller-identity- Get caller identity -
assume-role- Assume role -
get-session-token- Get session token -
decode-authorization-message- Decode error message
-
login -
list-accounts -
list-account-roles -
get-role-credentials
-
describe-db-instances -
create-db-instance -
delete-db-instance -
modify-db-instance -
start-db-instance -
stop-db-instance -
reboot-db-instance -
describe-db-snapshots -
create-db-snapshot -
delete-db-snapshot -
restore-db-instance-from-db-snapshot
-
create-function -
list-functions -
get-function -
delete-function -
publish-version -
invoke -
list-event-source-mappings -
update-function-code -
update-function-configuration -
put-function-event-invoke-config
-
list-tables -
describe-table -
create-table -
delete-table -
update-table -
get-item -
put-item -
delete-item -
scan -
query -
batch-get-item -
batch-write-item
Critical Priority (Phase 1 - 4-5 weeks)
- Complete S3, EC2, IAM, STS to 80%+ coverage
- Include AWS SSO for common auth/account workflows
High Priority (Phase 2 - Weeks 5-8)
- Lambda - Serverless functions (10+ commands)
- DynamoDB - NoSQL database (12+ commands)
- CloudFormation - Infrastructure as code (8+ commands)
Medium Priority (Phase 3 - Weeks 9-12)
- CloudWatch - Monitoring & logs (9+ commands)
- SNS - Notifications (7+ commands)
- SQS - Message queues (9+ commands)
Additional Services (Phase 4+)
- VPC, ELB, Route53 - Networking
- ECS - Containers
- ElastiCache - Caching
- Auto Scaling - Auto scaling
- Secrets Manager - Secret management
- Systems Manager - Operations
- And 30+ more services
Target: 50% of typical AWS CLI workflows
- Complete S3, EC2, IAM, STS to 80%+ coverage
- Include AWS SSO core account/role commands
- Implement RDS basic operations
- ~40 new commands, ~100-150 hours
Phase 1 progress snapshot (current):
- S3: 15/15 (remaining 0)
- EC2: 40/40 (remaining 0)
- IAM: 50/50 (remaining 0)
- STS: 4/4 (remaining 0)
- SSO: 4/4 (remaining 0)
Target: 70% of typical workflows
- Lambda, DynamoDB, CloudFormation
- ~30 new commands, ~80-100 hours
Target: 80% of typical workflows
- CloudWatch, SNS, SQS
- ~25 new commands, ~60-80 hours
Target: 100% feature parity
- VPC, ELB, Route53, and all remaining services
- ~150+ new commands, ~200+ hours
- Performance - Faster startup time (< 1s vs 2-5s)
- Distribution - Single binary, zero dependencies
- Memory - Lower memory footprint (< 50MB vs 100MB+)
- Containers - Ideal for containerized environments
- Windows - Better native Windows experience
# Configure credentials
aws configure --aws-access-key-id AKIA... --region us-west-2
# S3 operations
aws s3 ls
aws s3 cp file.txt s3://my-bucket/
aws s3 ls s3://my-bucket/ --recursive
# EC2 operations
aws ec2 describe-instances
aws ec2 start-instances i-1234567890abcdef0
aws ec2 describe-regions
# IAM operations
aws iam list-users
aws iam list-roles --path-prefix /admin/
aws iam list-policies --scope aws --only-attached
# Verify credentials
aws sts get-caller-identity- Binary name:
aws - Package name:
aws_cli - Language: Rust (2021 edition)
- CLI framework: clap (derive API)
- Async runtime: tokio
- AWS SDK: Official AWS SDK for Rust v1
src/
├── main.rs # CLI entry point, argument parsing
├── lib.rs # Library exports
├── config.rs # Configuration & credentials (~/.aws)
├── error.rs # Error types
└── commands/
├── mod.rs # Command module exports
├── s3.rs # S3 command handlers
├── ec2.rs # EC2 command handlers
├── iam.rs # IAM command handlers
├── sts.rs # STS command handlers
├── rds.rs # RDS command handlers
├── lambda.rs # Lambda command handlers
└── dynamodb.rs # DynamoDB command handlers
Research Phase: ✅ Complete Phase 1 Implementation: 🚧 In Progress (Week 1) Test Coverage: 🔜 Coming Soon Documentation: 🔜 Coming Soon
For detailed implementation status, see:
QUICK_REFERENCE.md- Quick reference cardIMPLEMENTATION_CHECKLIST.md- Detailed checklistRESEARCH_EXECUTIVE_SUMMARY.md- Strategic overview
This is an active development project aiming for feature parity with the Python AWS CLI. Priority is being given to the most commonly used services and commands (S3, EC2, IAM, RDS, Lambda, etc.).
This project uses the AWS SDK for Rust and follows AWS service conventions. Check LICENSE file for details.