A terminal user interface (TUI) for exploring and managing AWS ECS resources, inspired by k9s for Kubernetes.
- Fast Navigation - Browse ECS clusters, services, and tasks with vim-style keybindings (↑↓/jk)
- Real-time Monitoring - Auto-refresh with configurable intervals to keep data current
- Resource Details - View comprehensive details for services and tasks with JSON/formatted toggle
- AWS SDK Native - Direct AWS SDK for Rust integration (no AWS CLI required)
- Multi-Profile/Region - Switch between AWS profiles and regions on-the-fly
- Live Search - Quickly find resources with instant case-insensitive filtering
- Regex Support - Toggle between literal and regex pattern matching (press
M) - Advanced Filters - Filter services by status (ACTIVE/DRAINING) and launch type (FARGATE/EC2/EXTERNAL)
- Task Filters - Filter tasks by status (RUNNING/PENDING/STOPPED)
- Multi-Criteria - Combine search queries with status and type filters
- CloudWatch Logs - View container logs with auto-tail, search, and log level filtering
- CloudWatch Metrics - Service CPU/Memory metrics with ASCII charts and multiple time ranges
- CloudWatch Alarms - View alarm status and state reasons for services
- Log Export - Export logs to timestamped files for analysis
- ECS Exec - Interactive shell access to running containers (Fargate & EC2)
- Service Management - Restart services with force new deployment
- Task Management - Stop tasks with interactive confirmation
- Profile/Region Switching - Change AWS context without restarting
- Beautiful Interface - Clean, intuitive TUI with loading indicators and spinners
- Context-Aware Help - Built-in help screen with all keybindings (press
?) - Configuration - TOML config file support for customization
- Responsive Layout - Adapts to different terminal sizes with minimum size validation
- Well Tested - 224 unit tests with >70% code coverage
- Comprehensive Docs - Full rustdoc documentation for all functions and methods
- Error Handling - User-friendly error messages with actionable guidance
┌ ECS Voyager - Clusters ─────────────────────────────┐
│ prod-cluster │
│ staging-cluster │
│ dev-cluster │
└──────────────────────────────────────────────────────┘
curl -sSL https://raw.githubusercontent.com/benbpyle/ecs-voyager/main/install.sh | bashThis script automatically detects your platform and installs the appropriate package.
macOS (Homebrew)
# Tap the repository and install
brew tap benbpyle/ecs-voyager
brew install ecs-voyager
# Upgrade to latest version
brew upgrade ecs-voyagerOr install directly without tapping:
brew install benbpyle/ecs-voyager/ecs-voyagerWindows (Chocolatey)
# Install using Chocolatey
choco install ecs-voyager
# Upgrade to latest version
choco upgrade ecs-voyagerRequirements:
- Chocolatey package manager
- Windows 10/11 or Windows Server 2016+
Debian/Ubuntu (.deb)
# Download and install .deb package
curl -sLO https://github.com/benbpyle/ecs-voyager/releases/download/v0.2.7/ecs-voyager_0.2.7_amd64.deb
sudo dpkg -i ecs-voyager_0.2.7_amd64.deb
# Install dependencies if needed
sudo apt-get install -fSupported:
- Ubuntu 20.04+
- Debian 11+
- Linux Mint 20+
RedHat/Fedora/CentOS (.rpm)
# Using dnf (Fedora/RHEL 8+)
sudo dnf install https://github.com/benbpyle/ecs-voyager/releases/download/v0.2.7/ecs-voyager-0.2.7-1.x86_64.rpm
# Using yum (RHEL/CentOS 7)
sudo yum install https://github.com/benbpyle/ecs-voyager/releases/download/v0.2.7/ecs-voyager-0.2.7-1.x86_64.rpmSupported:
- Fedora 36+
- RHEL/CentOS 7+
- Rocky Linux 8+
- AlmaLinux 8+
Arch Linux (AUR)
# Using yay
yay -S ecs-voyager
# Using paru
paru -S ecs-voyager
# Manual build
git clone https://aur.archlinux.org/ecs-voyager.git
cd ecs-voyager
makepkg -siGeneric Linux (Binary)
# Download and extract
curl -sL https://github.com/benbpyle/ecs-voyager/releases/download/v0.2.7/ecs-voyager-v0.2.7-x86_64-unknown-linux-gnu.tar.gz | tar -xz
# Install to /usr/local/bin
sudo install -m 755 ecs-voyager /usr/local/bin/Cargo (All Platforms)
If you have Rust installed:
cargo install --git https://github.com/benbpyle/ecs-voyager.gitBuild from Source
Requirements:
- Rust 1.70+ (Install Rust)
- Valid AWS credentials configured (AWS CLI not required - uses AWS SDK directly)
git clone https://github.com/benbpyle/ecs-voyager.git
cd ecs-voyager
cargo build --releaseThe binary will be available at target/release/ecs-voyager
Install locally:
cargo install --path .ecs-voyager --versionecs-voyagerThe application will automatically:
- Load AWS credentials from your environment/config
- Fetch the list of ECS clusters
- Display the clusters view
↑/k- Move up↓/j- Move downEnter- Select item / drill downEsc/h- Go back to previous view
1- Switch to Clusters view2- Switch to Services view3- Switch to Tasks view
r- Refresh current viewP- Switch AWS profileR- Switch AWS regiond- Describe selected item (show full details)J- Toggle JSON view (in Details view)e- Context-aware action:- On tasks: ECS Exec - Interactive shell into container
- In logs: Export logs to file
l- View CloudWatch logs (from Tasks view)m- View CloudWatch metrics (from Services view)T- Cycle time range (in Metrics view: 1h/6h/24h/7d)t- Toggle auto-tail (in Logs view)x- Execute action:- On services: Force new deployment (restart)
- On tasks: Stop task
?- Toggle help screenq- Quit application
/- Enter search modeM- Toggle regex mode for searchF- Cycle status filter (Services: ACTIVE/DRAINING, Tasks: RUNNING/PENDING/STOPPED)L- Cycle launch type filter (Services: FARGATE/EC2/EXTERNAL)C- Clear all active filtersf- Cycle log level filter (in Logs view: DEBUG/INFO/WARN/ERROR)Esc- Clear search or go back
- Start at Clusters view
- Press
/to search for a specific cluster, type to filter - Press
Enteron a cluster to view its Services - Press
/again to filter services by name, status, or launch type - Press
Enteron a service to view its Tasks - Press
lto view CloudWatch Logs for a task (auto-tail enabled) - Press
tto toggle auto-tail on/off - Press
Escto go back to tasks, thendto see detailed task description - Press
xto stop a task or restart a service - Press
Escto navigate back up the hierarchy
- Rust: 1.70+ (for building from source)
- Terminal: Minimum 80x24 characters
- AWS Credentials: Valid AWS credentials configured
To use the ECS Exec feature (e key in Tasks view):
Local Requirements:
session-manager-pluginmust be installed:# macOS brew install --cask session-manager-plugin # Linux (Amazon Linux 2/RHEL/CentOS) curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm" sudo yum install -y session-manager-plugin.rpm # Ubuntu/Debian curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb" sudo dpkg -i session-manager-plugin.deb
AWS Task Requirements:
- Task must be RUNNING
- Task definition must have
"enableExecuteCommand": true - Service or standalone task must be launched with
--enable-execute-commandflag - Works with both Fargate and EC2:
- Fargate: Platform version 1.4.0 or later
- EC2: ECS container agent version 1.50.2 or later
Example Task Definition (JSON):
{
"family": "my-task",
"executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole",
"taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole",
"containerDefinitions": [...],
"requiresCompatibilities": ["FARGATE"],
"networkMode": "awsvpc",
"cpu": "256",
"memory": "512",
"enableExecuteCommand": true // <-- Required for ECS Exec
}Enable on Service:
# New service
aws ecs create-service \
--cluster my-cluster \
--service-name my-service \
--task-definition my-task \
--enable-execute-command # <-- Required
# Existing service
aws ecs update-service \
--cluster my-cluster \
--service my-service \
--enable-execute-command- Tasks must be configured to send logs to CloudWatch Logs
- Log group and stream must exist
- Supports
awslogslog driver in task definition
- Service must be running and generating metrics
- Metrics are available for services (not individual tasks)
- Requires CloudWatch to be enabled in the region
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:ListClusters",
"ecs:ListServices",
"ecs:ListTasks",
"ecs:DescribeServices",
"ecs:DescribeTasks",
"ecs:DescribeTaskDefinition",
"ecs:DescribeClusters",
"logs:GetLogEvents",
"logs:DescribeLogStreams",
"cloudwatch:GetMetricStatistics",
"cloudwatch:DescribeAlarms"
],
"Resource": "*"
}
]
}{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:UpdateService",
"ecs:StopTask"
],
"Resource": "*"
}
]
}{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowECSExec",
"Effect": "Allow",
"Action": [
"ecs:ExecuteCommand",
"ecs:DescribeTasks"
],
"Resource": "*"
},
{
"Sid": "AllowSSMStartSession",
"Effect": "Allow",
"Action": [
"ssm:StartSession"
],
"Resource": [
"arn:aws:ecs:*:*:task/*",
"arn:aws:ssm:*:*:document/AmazonECS-ExecuteInteractiveCommand"
]
}
]
}Task Role Requirements (for ECS Exec): The ECS task's task role (not execution role) must have these permissions:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ssmmessages:CreateControlChannel",
"ssmmessages:CreateDataChannel",
"ssmmessages:OpenControlChannel",
"ssmmessages:OpenDataChannel"
],
"Resource": "*"
}
]
}ECS Voyager supports a TOML configuration file at ~/.ecs-voyager/config.toml. On first run, a default config file is created automatically.
[aws]
region = "us-east-1" # Optional: Default AWS region
profile = "default" # Optional: AWS profile from ~/.aws/credentials
[behavior]
auto_refresh = true # Enable/disable automatic refresh
refresh_interval = 30 # Seconds between refreshes
default_view = "clusters" # Initial view: "clusters", "services", or "tasks"
[ui]
theme = "dark" # Color theme (for future use)ECS Voyager uses the AWS SDK for Rust (no AWS CLI required) with the standard credential chain:
- Configuration file (
~/.ecs-voyager/config.toml- region and profile) - Environment variables (
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY,AWS_REGION) - AWS credentials file (
~/.aws/credentials) - IAM role (if running on EC2/ECS/Lambda)
Settings are resolved in this order (highest to lowest):
- Environment variables
- Configuration file (
~/.ecs-voyager/config.toml) - AWS SDK defaults
src/
├── main.rs # Application entry point and event loop
├── app.rs # Application state and business logic
├── aws.rs # AWS SDK client wrapper (ECS, CloudWatch Logs, CloudWatch Metrics)
├── config.rs # TOML configuration file handling
├── charts.rs # ASCII chart rendering for metrics
├── ui/
│ ├── mod.rs # UI module exports
│ ├── render.rs # View rendering (clusters, services, tasks, logs, metrics, help)
│ ├── theme.rs # Color themes and styling
│ ├── utils.rs # Layout helpers and utilities
│ └── widgets.rs # Reusable UI components
└── tests/ # Integration tests
cargo buildcargo run# Run all 224 unit tests
cargo test
# Run tests with output
cargo test -- --nocapture
# Run tests for specific module
cargo test app::tests
cargo test aws::tests
cargo test config::tests
cargo test ui::tests
cargo test charts::tests# Generate and view documentation
cargo doc --open --no-depsAll functions and methods include comprehensive documentation comments.
- Core Navigation - Browse clusters, services, tasks with vim-style keys
- Search & Filter - Live search with regex support and multi-criteria filtering
- CloudWatch Logs - Viewer with auto-tail, search, log level filtering, and export
- CloudWatch Metrics - Service CPU/Memory metrics with ASCII charts and alarms
- ECS Exec - Interactive shell access to containers (Fargate & EC2)
- Port Forwarding - Forward local ports to container ports using SSM
- Multi-Profile/Region - Switch AWS profiles and regions on-the-fly
- Service Management - Restart services with force new deployment
- Task Management - Stop tasks interactively
- Service Editor - Update desired count and task definition from TUI
- Configuration - TOML config file support with defaults
- Resource Details - Full service/task details with JSON/formatted toggle
- Task Definition Viewer - Browse task definition families
- Testing - 234 comprehensive unit tests with >70% coverage
- Documentation - Complete rustdoc for all functions and methods
- Multi-Platform Packaging - Homebrew, Chocolatey, .deb, .rpm packages
- Enhanced Cluster/Service/Task Headers - Overview information display
- Enhanced Error Handling - More user-friendly error messages with recovery suggestions
- Task Definition Details - View full task definition with revision history
- Read-Only Mode - Safety flag to prevent accidental modifications
- Export Functionality - Export current view to JSON/YAML/CSV
- Custom Themes - User-defined color schemes beyond dark/light
- Container Instance View - Browse and manage EC2 container instances
- Auto-Scaling Policies - View and manage service auto-scaling
- Session Recording - Record and replay TUI sessions for debugging
- Batch Operations - Multi-select and bulk actions
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE file for details
- Inspired by k9s - The amazing Kubernetes CLI
- Built with Ratatui - Terminal UI framework
- Powered by AWS SDK for Rust