EC2 Instance Type Browser TUI
Project description
Instancepedia - EC2 Instance Type Browser
A Terminal User Interface (TUI) application for browsing AWS EC2 instance types with detailed information and free tier eligibility.
Features
- ๐บ๏ธ Region Selection: Browse instance types for any AWS region you have access to
- ๐ Categorized Instance List: View all available EC2 instance types organized by family and category
- Hierarchical tree structure: Categories โ Families โ Instances
- Categories include: General Purpose, Compute Optimized, Memory Optimized, Burstable Performance, GPU Instances, Storage Optimized, etc.
- Instances grouped by family (e.g., m5, m6i, t2, t3) within categories
- Root node and families expand automatically when parent categories are expanded
- Expand/collapse categories and families to reduce clutter
- Expanded state is preserved during pricing updates
- ๐ฐ Pricing Information: See on-demand and spot prices for each instance type
- Prices load in the background for all instance types
- Real-time pricing updates in the tree view (throttled to preserve expanded state)
- Batch fetching for optimal performance
- Automatic retry with exponential backoff on rate limits
- Pricing displayed directly in the instance list: instance type, vCPU, memory, and price per hour
- ๐ต Cost Calculator: Automatic calculation of monthly and annual costs, plus cost per vCPU and GB RAM
- ๐ Search & Filter: Search by instance type name, filter by free tier eligibility
- ๐ Detailed Information: Comprehensive details for each instance type including:
- Compute specifications (vCPU, cores, threads)
- Memory information
- Network performance
- Storage options (EBS, instance store)
- Architecture support
- Pricing and cost analysis with spot price savings
- ๐ Free Tier Indicators: Clearly marked free tier eligible instances
- โก Fast Navigation: Smooth screen transitions with loading indicators
- ๐ Debug Mode: Scrolling debug log for troubleshooting (use
--debugflag)
Installation
From PyPI (Recommended)
pip install instancepedia
From Source
- Clone the repository:
git clone https://github.com/pfrederiksen/instancepedia.git
cd instancepedia
- Install dependencies:
pip install -r requirements.txt
Or install in development mode:
pip install -e .
Configure AWS Credentials
After installation, configure AWS credentials (one of the following):
- Run
aws configure - Set environment variables:
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY - Use an AWS profile:
export AWS_PROFILE=your-profile
Usage
After installation from PyPI, simply run:
instancepedia
Or with debug mode enabled (shows scrolling debug log):
instancepedia --debug
If you installed from source (development mode), you can also run:
python3 -m src.main
Or with debug mode:
python3 -m src.main --debug
Note: Pricing information loads in the background after instance types are displayed. You'll see:
- A progress indicator in the header showing how many prices have been loaded
- "โณ Loading..." in the tree for instances that don't have pricing yet
- Real-time updates as prices load (tree updates are throttled to preserve your expanded sections)
- The application uses parallel requests and batch processing to fetch pricing efficiently, with automatic retry logic for rate-limited requests
- Your expanded categories and families remain open during pricing updates
Keyboard Shortcuts
Region Selector
โโ- Navigate regionsEnter- Select regionEsc/Q- Quit
Instance List
โโ- Navigate tree (move between categories, families, and instances)Enter- View details (on instance) or expand/collapse (on category/family)Space- Expand/collapse category or family/- Focus search inputF- Toggle free tier filter (show only free tier eligible instances)Esc- Back to region selectorQ- Quit
Tree Navigation Tips:
- The root "Instance Types" node is expanded by default
- Categories are collapsed by default to reduce initial clutter
- When you expand a category, all family nodes within it are automatically expanded
- Instance nodes show: instance type | vCPU count | memory | price | free tier indicator
- Search and filters work across all categories and families
Instance Detail
Esc- Back to listQ- Quit
Configuration
You can configure the application using environment variables:
INSTANCEPEDIA_AWS_REGION- Default AWS region (default: us-east-1)INSTANCEPEDIA_AWS_PROFILE- AWS profile to use
IAM Permissions
Instancepedia requires minimal AWS permissions to function. The application needs read-only access to EC2 instance type information and pricing data.
Required IAM Policy
Create an IAM policy with the following JSON:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeRegions",
"ec2:DescribeInstanceTypes",
"ec2:DescribeSpotPriceHistory"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"pricing:GetProducts"
],
"Resource": "*"
}
]
}
Note: The pricing:GetProducts permission is required to display on-demand pricing. The ec2:DescribeSpotPriceHistory permission is required to display current spot prices. If you don't need pricing information, you can omit these permissions and the application will still function (pricing will show as "N/A").
The application handles AWS API rate limiting automatically with exponential backoff retry logic, so you don't need to worry about rate limit errors.
Setting Up IAM Permissions
-
Create the policy (using AWS CLI):
aws iam create-policy \ --policy-name InstancepediaReadOnly \ --policy-document file://instancepedia-policy.json
-
Attach the policy to a user:
aws iam attach-user-policy \ --user-name YOUR_USERNAME \ --policy-arn arn:aws:iam::ACCOUNT_ID:policy/InstancepediaReadOnly
-
Or attach to a role (for EC2 instances, Lambda, etc.):
aws iam attach-role-policy \ --role-name YOUR_ROLE_NAME \ --policy-arn arn:aws:iam::ACCOUNT_ID:policy/InstancepediaReadOnly
Note: Replace YOUR_USERNAME, YOUR_ROLE_NAME, and ACCOUNT_ID with your actual values.
Alternatively, you can use the AWS Console:
- Go to IAM โ Policies โ Create policy
- Select JSON tab and paste the policy above
- Name it
InstancepediaReadOnlyand create it - Attach it to your user or role as needed
Performance
Instancepedia is optimized for performance:
- Parallel Pricing Fetching: Uses thread pools to fetch pricing data concurrently (5 parallel workers)
- Batch Spot Price Queries: Fetches spot prices in batches of up to 50 instance types per API call
- Automatic Retry: Handles rate limiting with exponential backoff (1s, 2s, 4s, etc.)
- Background Loading: Pricing loads in the background so you can browse instance types immediately
- Throttled UI Updates: Tree updates are throttled (every 10 pricing updates) to prevent UI flicker and preserve expanded state
- State Preservation: Expanded categories and families are preserved during tree rebuilds
Requirements
- Python 3.8+
- AWS credentials configured
- Dependencies (installed automatically with pip):
boto3>=1.28.0- AWS SDKtextual>=0.40.0- TUI frameworkpydantic>=2.0.0- Data validationpydantic-settings>=2.0.0- Settings management
Development
Setting Up Development Environment
- Clone the repository:
git clone https://github.com/pfrederiksen/instancepedia.git
cd instancepedia
- Install in development mode with dev dependencies:
pip install -e ".[dev]"
This installs the package in editable mode along with development tools (build, twine, pytest).
Creating Releases
Releases are automated using the release script. The script handles version bumping, git tagging, and triggering GitHub releases.
Prerequisites:
- Be on the
mainbranch - Have a clean working directory (no uncommitted changes)
- Be up to date with the remote repository
Usage:
# Bump patch version (0.1.1 -> 0.1.2)
./scripts/release.sh patch
# Bump minor version (0.1.1 -> 0.2.0)
./scripts/release.sh minor
# Bump major version (0.1.1 -> 1.0.0)
./scripts/release.sh major
# Use a specific version
./scripts/release.sh 0.2.0
The script will:
- Update the version in
pyproject.toml - Create a commit with the version bump
- Create an annotated git tag (e.g.,
v0.1.2) - Push the commit to
main - Push the tag (which automatically triggers the GitHub Actions workflow to create a GitHub release)
Note: After creating a release, you can publish to PyPI using the publish script (see below).
Building and Publishing
To build the package for PyPI:
- Install build tools (use a virtual environment):
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade build twine
- Build the package:
python3 -m build
- Check the package:
python3 -m twine check dist/*
- Publish to TestPyPI (recommended first):
python3 -m twine upload --repository testpypi dist/*
- Publish to PyPI:
python3 -m twine upload dist/*
Or use the helper script:
./scripts/publish.sh testpypi # Test first
./scripts/publish.sh pypi # Production
Running Tests
pytest
Project Structure
instancepedia/
โโโ src/ # Source code
โ โโโ __init__.py
โ โโโ app.py # Main application
โ โโโ main.py # Entry point
โ โโโ debug.py # Debug utilities
โ โโโ config/ # Configuration
โ โ โโโ __init__.py
โ โ โโโ settings.py # Configuration settings
โ โโโ models/ # Data models
โ โ โโโ __init__.py
โ โ โโโ free_tier.py
โ โ โโโ instance_type.py
โ โ โโโ region.py
โ โโโ services/ # AWS service wrappers
โ โ โโโ __init__.py
โ โ โโโ aws_client.py
โ โ โโโ free_tier_service.py
โ โ โโโ instance_service.py
โ โ โโโ pricing_service.py
โ โโโ ui/ # TUI screens
โ โโโ __init__.py
โ โโโ instance_detail.py
โ โโโ instance_list.py
โ โโโ region_selector.py
โโโ scripts/ # Utility scripts
โ โโโ publish.sh # PyPI publishing helper
โ โโโ release.sh # Release automation script
โโโ screenshots/ # Application screenshots
โโโ .gitignore # Git ignore rules
โโโ LICENSE # MIT License
โโโ MANIFEST.in # Package manifest for PyPI
โโโ pyproject.toml # Project configuration and metadata
โโโ requirements.txt # Python dependencies
โโโ README.md # This file
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file instancepedia-0.1.2.tar.gz.
File metadata
- Download URL: instancepedia-0.1.2.tar.gz
- Upload date:
- Size: 429.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83d5a9bb7a91e0b9e6954a144f5dbf1d3e570ee822f722e65a34fb3eb2c57781
|
|
| MD5 |
3ff4190ccf307f6cc6dfc6740c8bed3c
|
|
| BLAKE2b-256 |
c20551b54f064ed3c3e289d228c70f221c7f8644cba5447e61f11691c7ff60e4
|
File details
Details for the file instancepedia-0.1.2-py3-none-any.whl.
File metadata
- Download URL: instancepedia-0.1.2-py3-none-any.whl
- Upload date:
- Size: 41.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5715768565a25c3d3a70ed9a9186c06b2ff55549ee2e46085359d95dca49dffb
|
|
| MD5 |
9cacaaea9a39b82cdfdb8e097493039e
|
|
| BLAKE2b-256 |
bf4f3ad02f66d50906e1eb4a5da4ab55fce2c8866fa5c5ec711a1bc02b9abe38
|