DevDocsDev Docs
EC2

EC2 CLI Reference

AWS CLI commands for Elastic Compute Cloud

Complete reference for AWS EC2 CLI commands with examples.

Instance Management

Launch Instance

aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t3.micro \
  --key-name my-key \
  --security-group-ids sg-0123456789abcdef0 \
  --subnet-id subnet-0123456789abcdef0 \
  --count 1

Common Options:

OptionDescription
--image-idAMI ID (required)
--instance-typeInstance type (required)
--key-nameSSH key pair name
--security-group-idsSecurity group IDs
--subnet-idSubnet to launch in
--countNumber of instances
--user-dataStartup script
--iam-instance-profileIAM role
--tag-specificationsResource tags

Launch with User Data

aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t3.micro \
  --key-name my-key \
  --user-data file://startup-script.sh \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=WebServer}]'

Describe Instances

# List all instances
aws ec2 describe-instances

# Filter by state
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running"

# Filter by tag
aws ec2 describe-instances --filters "Name=tag:Name,Values=WebServer"

# Get specific instance
aws ec2 describe-instances --instance-ids i-0123456789abcdef0

# Output instance IDs only
aws ec2 describe-instances \
  --query 'Reservations[*].Instances[*].InstanceId' \
  --output text

Start/Stop/Reboot Instances

# Start instances
aws ec2 start-instances --instance-ids i-0123456789abcdef0

# Stop instances
aws ec2 stop-instances --instance-ids i-0123456789abcdef0

# Reboot instances
aws ec2 reboot-instances --instance-ids i-0123456789abcdef0

# Terminate instances
aws ec2 terminate-instances --instance-ids i-0123456789abcdef0

Modify Instance

# Change instance type (must be stopped)
aws ec2 modify-instance-attribute \
  --instance-id i-0123456789abcdef0 \
  --instance-type t3.large

# Enable detailed monitoring
aws ec2 monitor-instances --instance-ids i-0123456789abcdef0

# Disable termination protection
aws ec2 modify-instance-attribute \
  --instance-id i-0123456789abcdef0 \
  --no-disable-api-termination

AMI Management

Create AMI

aws ec2 create-image \
  --instance-id i-0123456789abcdef0 \
  --name "MyWebServerAMI" \
  --description "Web server with Apache installed" \
  --no-reboot

Describe AMIs

# List your AMIs
aws ec2 describe-images --owners self

# Find Amazon Linux 2 AMIs
aws ec2 describe-images \
  --owners amazon \
  --filters "Name=name,Values=amzn2-ami-hvm-*-x86_64-gp2" \
  --query 'Images | sort_by(@, &CreationDate) | [-1]'

Copy AMI

aws ec2 copy-image \
  --source-image-id ami-0123456789abcdef0 \
  --source-region us-east-1 \
  --region us-west-2 \
  --name "MyWebServerAMI-Copy"

Deregister AMI

aws ec2 deregister-image --image-id ami-0123456789abcdef0

Key Pairs

Create Key Pair

aws ec2 create-key-pair \
  --key-name my-key \
  --query 'KeyMaterial' \
  --output text > my-key.pem

chmod 400 my-key.pem

Import Key Pair

aws ec2 import-key-pair \
  --key-name my-imported-key \
  --public-key-material fileb://~/.ssh/id_rsa.pub

List Key Pairs

aws ec2 describe-key-pairs

Delete Key Pair

aws ec2 delete-key-pair --key-name my-key

Security Groups

Create Security Group

aws ec2 create-security-group \
  --group-name WebServerSG \
  --description "Security group for web servers" \
  --vpc-id vpc-0123456789abcdef0

Add Inbound Rules

# Allow SSH
aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 22 \
  --cidr 10.0.0.0/8

# Allow HTTP
aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 80 \
  --cidr 0.0.0.0/0

# Allow HTTPS
aws ec2 authorize-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 443 \
  --cidr 0.0.0.0/0

Remove Inbound Rules

aws ec2 revoke-security-group-ingress \
  --group-id sg-0123456789abcdef0 \
  --protocol tcp \
  --port 22 \
  --cidr 10.0.0.0/8

Describe Security Groups

aws ec2 describe-security-groups --group-ids sg-0123456789abcdef0

Delete Security Group

aws ec2 delete-security-group --group-id sg-0123456789abcdef0

Elastic IPs

Allocate Elastic IP

aws ec2 allocate-address --domain vpc

Associate Elastic IP

aws ec2 associate-address \
  --instance-id i-0123456789abcdef0 \
  --allocation-id eipalloc-0123456789abcdef0

Disassociate Elastic IP

aws ec2 disassociate-address --association-id eipassoc-0123456789abcdef0

Release Elastic IP

aws ec2 release-address --allocation-id eipalloc-0123456789abcdef0

EBS Volumes

Create Volume

aws ec2 create-volume \
  --availability-zone us-east-1a \
  --size 100 \
  --volume-type gp3 \
  --iops 3000 \
  --throughput 125

Attach Volume

aws ec2 attach-volume \
  --volume-id vol-0123456789abcdef0 \
  --instance-id i-0123456789abcdef0 \
  --device /dev/sdf

Detach Volume

aws ec2 detach-volume --volume-id vol-0123456789abcdef0

Create Snapshot

aws ec2 create-snapshot \
  --volume-id vol-0123456789abcdef0 \
  --description "Backup snapshot"

Delete Volume

aws ec2 delete-volume --volume-id vol-0123456789abcdef0

Spot Instances

Request Spot Instances

aws ec2 request-spot-instances \
  --instance-count 1 \
  --type "one-time" \
  --launch-specification file://spot-spec.json

Describe Spot Requests

aws ec2 describe-spot-instance-requests

Cancel Spot Request

aws ec2 cancel-spot-instance-requests \
  --spot-instance-request-ids sir-0123456789abcdef0

Get Spot Price History

aws ec2 describe-spot-price-history \
  --instance-types t3.micro \
  --product-descriptions "Linux/UNIX" \
  --start-time $(date -u +"%Y-%m-%dT%H:%M:%SZ")

Tags

Add Tags

aws ec2 create-tags \
  --resources i-0123456789abcdef0 \
  --tags Key=Environment,Value=Production Key=Team,Value=DevOps

Remove Tags

aws ec2 delete-tags \
  --resources i-0123456789abcdef0 \
  --tags Key=Environment

Instance Connect

Send SSH Public Key

aws ec2-instance-connect send-ssh-public-key \
  --instance-id i-0123456789abcdef0 \
  --instance-os-user ec2-user \
  --ssh-public-key file://~/.ssh/id_rsa.pub

Console Output

Get Console Output

aws ec2 get-console-output --instance-id i-0123456789abcdef0

Get Console Screenshot

aws ec2 get-console-screenshot --instance-id i-0123456789abcdef0

On this page