Ultimate Amazon EC2 Cheatsheet

Introduction to Amazon EC2

Amazon Elastic Compute Cloud (EC2) is a core service of Amazon Web Services (AWS) that provides scalable compute capacity in the cloud. EC2 eliminates the need to invest in hardware upfront, allowing users to develop and deploy applications faster. It enables you to launch virtual servers (instances), configure security and networking, and manage storage. EC2’s pay-as-you-go model lets you scale capacity up or down as needed, paying only for what you use. EC2 is the foundation of many cloud architectures, offering the flexibility, reliability, and affordability needed for workloads ranging from web applications to high-performance computing.

EC2 Core Concepts

Instance Types Overview

FamilyPrefixOptimized ForUse Cases
General Purposet3, t4g, m5, m6gBalanced CPU, memory, networkWeb servers, dev environments
Compute Optimizedc5, c6gHigh CPU performanceBatch processing, gaming, HPC
Memory Optimizedr5, r6g, x1, z1dLarge memory operationsIn-memory databases, real-time analytics
Storage Optimizedd2, h1, i3, i4iHigh I/O performanceData warehousing, distributed file systems
Accelerated Computingp3, p4d, g4, g5GPU, FPGA accelerationMachine learning, video processing

Instance Size Scaling

SizevCPUMemoryRelative CapacityPricing
nano20.5 GBSmallest0.25x of small
micro21 GBVery small0.5x of small
small22 GBBaseline1x (baseline)
medium24 GBModerate2x of small
large28 GBSignificant4x of small
xlarge416 GBLarge8x of small
2xlarge832 GBVery large16x of small
4xlarge1664 GBHuge32x of small
24xlarge96384 GBMassive192x of small

Note: Exact specifications vary by instance family. This is a general pattern.

EC2 Instance States

StateDescriptionBillingState Code
PendingInstance is preparing to enter running stateNo charges0
RunningInstance is running and ready for useFull charges apply16
StoppingInstance is preparing to stopNo charges for EBS-backed; charges continue for instance-store backed64
StoppedInstance is shut down but can be restartedNo instance charges; EBS storage charges apply80
Shutting-downInstance is preparing for terminationNo charges32
TerminatedInstance has been permanently deletedNo charges48

EC2 Storage Options

Amazon EBS Volume Types

Volume TypeCodeUse CaseIOPSThroughputPrice Point
General Purpose SSDgp3General workloads, boot volumes3,000-16,000125-1,000 MB/s$
General Purpose SSDgp2Boot volumes, dev/test100-16,000Scales with volume$
Provisioned IOPS SSDio2Critical business applicationsUp to 256,000Higher than io1$$$
Provisioned IOPS SSDio1Databases, I/O intensive workloadsUp to 64,000Up to 1,000 MB/s$$$
Throughput Optimized HDDst1Big data, data warehouses500Up to 500 MB/s$
Cold HDDsc1Infrequently accessed workloads250Up to 250 MB/s$

Instance Store vs EBS Comparison

FeatureInstance StoreEBS
PersistenceTemporary, lost on stop/terminatePersistent, independent of instance
LatencyLowest (physically attached)Very low
Use casesCache, scratch data, temporary contentBoot volumes, databases, applications
Size limitsVaries by instance typeUp to 64 TiB per volume
BackupsManual onlySnapshots to S3
Data lifecycleTied to instance lifecycleIndependent of instance
BillingIncluded in instance priceSeparate charges

Networking Features

VPC and EC2 Networking

FeatureDescriptionUse Case
Elastic IPStatic public IPv4 addressApplications requiring fixed IP
ENI (Elastic Network Interface)Virtual network cardMulti-homed instances
Enhanced NetworkingHigh performance networkingHigh throughput workloads
Security GroupsInstance-level firewallControl inbound/outbound traffic
NACL (Network ACL)Subnet-level firewallAdditional security layer
Placement GroupsControl instance placementLow-latency, high throughput needs
VPC EndpointsPrivate connection to AWS servicesSecure access without internet

Security Group Rules Syntax

Inbound Rules Format:

Protocol: [tcp/udp/icmp/all]
Port Range: [port or range]
Source: [CIDR block / security group ID / prefix list]
Description: [optional description]

Outbound Rules Format:

Protocol: [tcp/udp/icmp/all]
Port Range: [port or range]
Destination: [CIDR block / security group ID / prefix list]
Description: [optional description]

Common Security Group Configurations:

Use CaseInboundOutbound
Web ServerTCP 80, 443 from 0.0.0.0/0All traffic
SSH AccessTCP 22 from specific IPsAll traffic
DatabaseTCP 3306 from web tier SGAll traffic
ApplicationCustom ports from load balancer SGAll traffic

EC2 Purchasing Options

Instance Purchasing Model Comparison

OptionDescriptionDiscountCommitmentBest For
On-DemandPay per hour or second, no commitmentNoneNoneVariable workloads, short-term needs
Reserved InstancesPre-purchase capacity for 1 or 3 yearsUp to 72%1 or 3 yearsSteady, predictable workloads
Savings PlansCommit to spend per hour for 1 or 3 yearsUp to 72%1 or 3 yearsFlexible resource usage
Spot InstancesBid for unused EC2 capacityUp to 90%None (can be terminated)Fault-tolerant, flexible workloads
Dedicated HostsPhysical server with EC2 instance capacityNoneOn-demand or reservationCompliance, licensing requirements
Capacity ReservationsReserve capacity in specific AZNoneAs neededEnsure capacity for critical periods

Reserved Instance Types

TypePayment OptionsFlexibilityDiscount Level
Standard RIAll Upfront, Partial Upfront, No UpfrontLimited modification optionsHighest (up to 72%)
Convertible RIAll Upfront, Partial Upfront, No UpfrontCan change family, OS, tenancyGood (up to 66%)
Scheduled RIAll UpfrontReserved for specific time windowsVaries based on schedule

EC2 Management and Deployment

AMI Creation and Management

# Create AMI from running instance
aws ec2 create-image --instance-id i-1234567890abcdef0 --name "My AMI" --description "My custom AMI"

# Copy AMI to another region
aws ec2 copy-image --source-region us-east-1 --source-image-id ami-12345678 --name "My AMI Copy" --region us-west-2

# Share AMI with another account
aws ec2 modify-image-attribute --image-id ami-12345678 --launch-permission "Add={UserId=123456789012}"

# Make AMI public (use with caution)
aws ec2 modify-image-attribute --image-id ami-12345678 --launch-permission "Add={Group=all}"

EC2 Launch Templates vs. Launch Configurations

FeatureLaunch TemplatesLaunch Configurations
VersioningSupports multiple versionsNo versioning (immutable)
Service integrationEC2, Spot Fleet, Auto ScalingAuto Scaling only
Partial configurationSupports parametersRequires complete configuration
ModificationCan create new versionMust create new configuration
InheritanceCan use as base for new templateNot inheritable
Instance type diversitySupports multiple typesSingle instance type

User Data Example (Linux)

#!/bin/bash
# Update system packages
yum update -y

# Install web server
yum install -y httpd

# Start web server
systemctl start httpd
systemctl enable httpd

# Create a simple web page
echo "<html><body><h1>Hello from EC2</h1></body></html>" > /var/www/html/index.html

User Data Example (Windows)

<powershell>
# Install IIS
Install-WindowsFeature -name Web-Server -IncludeManagementTools

# Create a simple web page
New-Item -Path "C:\inetpub\wwwroot\index.html" -ItemType File -Value "<html><body><h1>Hello from EC2</h1></body></html>"

# Set administrator password
$admin = [adsi]("WinNT://./administrator, user")
$admin.SetPassword("MySecurePassword123!")
</powershell>

EC2 Auto Scaling

Auto Scaling Components

ComponentDescriptionPurpose
Auto Scaling GroupCollection of EC2 instances treated as logical unitManages instance count and distribution
Launch Template/ConfigurationTemplate for new instance launchesDefines instance configuration
Scaling PolicyRules that control scaling actionsDetermines when to add/remove instances
Scheduled ActionsTime-based scalingPredictable load changes
Scaling CooldownsPause between scaling activitiesPrevents rapid scaling fluctuations
Health ChecksInstance health monitoringEnsures only healthy instances serve traffic

Common Scaling Policies

Policy TypeConfigurationUse Case
Target TrackingMaintain metric at target valueKeep CPU utilization at 70%
Step ScalingAdd/remove specified capacity based on alarm thresholdsAdd 2 instances when CPU > 80%
Simple ScalingAdd/remove fixed capacity when alarm triggeredAdd 1 instance when alarm triggers
Scheduled ScalingChange capacity at specific timesIncrease capacity before business hours
Predictive ScalingScale based on historical patternsWeekend traffic patterns

Auto Scaling CLI Examples

# Create Auto Scaling group
aws autoscaling create-auto-scaling-group \
  --auto-scaling-group-name my-asg \
  --launch-template LaunchTemplateId=lt-1234567890abcdef0,Version='$Latest' \
  --min-size 2 \
  --max-size 10 \
  --desired-capacity 2 \
  --vpc-zone-identifier "subnet-1234567890abcdef0,subnet-0987654321abcdef0"

# Configure target tracking scaling policy
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name my-asg \
  --policy-name cpu70-target-tracking-scaling-policy \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration file://config.json

# Content of config.json:
# {
#   "TargetValue": 70.0,
#   "PredefinedMetricSpecification": {
#     "PredefinedMetricType": "ASGAverageCPUUtilization"
#   }
# }

EC2 Load Balancing

Load Balancer Types

TypeUse CaseProtocol SupportLayerSpecial Features
Application Load Balancer (ALB)HTTP/HTTPS applicationsHTTP, HTTPS, WebSocketLayer 7Path-based routing, host-based routing, TLS termination
Network Load Balancer (NLB)TCP/UDP/TLS traffic, extreme performanceTCP, UDP, TLSLayer 4Ultra-low latency, static IP, preserve source IP
Gateway Load Balancer (GWLB)Network appliances (firewalls, IDS/IPS)IP packetsLayer 3Transparent network gateway, high availability
Classic Load Balancer (CLB)Legacy applications (not recommended for new)HTTP, HTTPS, TCP, SSLLayer 4/7Basic load balancing, legacy support

Common Load Balancer Settings

SettingDescriptionTypical Configuration
Idle TimeoutHow long connection can be idle60 seconds
Cross-Zone Load BalancingDistribute traffic across all zonesEnabled
Connection DrainingTime to complete in-flight requests300 seconds
Health ChecksVerify instance healthHTTP:80/health, Interval: 30s
Sticky SessionsSession persistenceCookie-based (application-generated or load balancer generated)
SSL/TLS CertificatesSecure connectionsACM-managed certificates

EC2 Monitoring and Management

CloudWatch Metrics for EC2

MetricDescriptionNamespaceDimensions
CPUUtilizationCPU usage percentageAWS/EC2InstanceId
DiskReadOpsDisk read operationsAWS/EC2InstanceId
DiskWriteOpsDisk write operationsAWS/EC2InstanceId
NetworkInBytes receivedAWS/EC2InstanceId
NetworkOutBytes sentAWS/EC2InstanceId
StatusCheckFailedFailed status checksAWS/EC2InstanceId
StatusCheckFailed_InstanceFailed instance status checksAWS/EC2InstanceId
StatusCheckFailed_SystemFailed system status checksAWS/EC2InstanceId

CloudWatch Alarm Example (CLI)

# Create alarm for high CPU utilization
aws cloudwatch put-metric-alarm \
  --alarm-name ec2-high-cpu \
  --alarm-description "Alarm when CPU exceeds 80%" \
  --metric-name CPUUtilization \
  --namespace AWS/EC2 \
  --statistic Average \
  --period 300 \
  --threshold 80 \
  --comparison-operator GreaterThanThreshold \
  --dimensions Name=InstanceId,Value=i-1234567890abcdef0 \
  --evaluation-periods 2 \
  --alarm-actions arn:aws:sns:us-east-1:123456789012:my-topic

CloudWatch Agent Configuration (Basic)

{
  "metrics": {
    "append_dimensions": {
      "InstanceId": "${aws:InstanceId}"
    },
    "metrics_collected": {
      "mem": {
        "measurement": ["mem_used_percent"]
      },
      "disk": {
        "measurement": ["used_percent"],
        "resources": ["/"]
      }
    }
  },
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/messages",
            "log_group_name": "/var/log/messages"
          }
        ]
      }
    }
  }
}

EC2 Security Best Practices

Security Checklist

  1. Instance Hardening

    • Use up-to-date AMIs
    • Regularly patch OS and applications
    • Remove unnecessary services and ports
    • Implement host-based firewalls
  2. Access Control

    • Use IAM roles instead of access keys
    • Implement least privilege principles
    • Rotate credentials regularly
    • Use SSH keys for Linux, complex passwords for Windows
  3. Network Security

    • Restrict security groups to necessary traffic
    • Place instances in private subnets where possible
    • Use VPC endpoints for AWS service access
    • Implement network monitoring and logging
  4. Data Protection

    • Encrypt EBS volumes and snapshots
    • Encrypt sensitive data in transit
    • Implement backup and recovery procedures
    • Secure AMIs with sensitive configurations
  5. Compliance and Auditing

    • Enable CloudTrail for API call logging
    • Configure CloudWatch for monitoring
    • Implement tagging for resource tracking
    • Regular security assessments and audits

EC2 Compliance Summary

FrameworkKey RequirementsImplementation on EC2
PCI DSSNetwork segmentation, encryption, access controlSecurity groups, encrypted EBS, IAM roles
HIPAAData encryption, access controls, auditingEncrypted volumes, VPC isolation, CloudTrail
GDPRData protection, breach notificationEncryption, IAM policies, monitoring
SOC 2Security, availability, confidentialityHA configurations, encryption, access controls
ISO 27001Information security managementSecurity groups, IAM, encryption, monitoring

EC2 Cost Optimization

Cost Optimization Strategies

StrategyImplementationPotential Savings
Right-sizingMatch instance size to workload10-20%
Reserved InstancesPurchase 1-3 year reservations40-72%
Spot InstancesUse for fault-tolerant workloads60-90%
Auto ScalingScale based on demand15-30%
Scheduled ScalingTurn off dev/test instances after hours65% for 12hr/day usage
Instance GenerationUse current generation instances10-20% + performance gains
Consolidated BillingAggregate usage across accountsVaries with volume discounts
Savings PlansCommit to usage for 1-3 yearsUp to 72%

Cost Analysis Tools

ToolPurposeKey Features
Cost ExplorerAnalyze and visualize costsUsage patterns, forecasting, RI recommendations
AWS BudgetsSet cost budgets and alertsBudget tracking, notifications
AWS Trusted AdvisorCost optimization recommendationsIdle resources, reservation coverage
Cost Allocation TagsTrack costs by project/departmentCustom tagging, cost reports
Compute OptimizerInstance right-sizing recommendationsAI-powered analysis, specific recommendations

AWS CLI Commands for EC2

Instance Management

# Launch a new instance
aws ec2 run-instances --image-id ami-0abcdef1234567890 --instance-type t3.micro --key-name MyKeyPair --security-group-ids sg-0abcdef1234567890 --subnet-id subnet-0abcdef1234567890 --count 1

# Describe instances (list all running instances)
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running"

# Stop an instance
aws ec2 stop-instances --instance-ids i-1234567890abcdef0

# Start an instance
aws ec2 start-instances --instance-ids i-1234567890abcdef0

# Terminate an instance
aws ec2 terminate-instances --instance-ids i-1234567890abcdef0

# Get console output
aws ec2 get-console-output --instance-id i-1234567890abcdef0

Volume Management

# Create a new EBS volume
aws ec2 create-volume --availability-zone us-east-1a --size 50 --volume-type gp3

# Attach volume to instance
aws ec2 attach-volume --volume-id vol-1234567890abcdef0 --instance-id i-1234567890abcdef0 --device /dev/sdf

# Create snapshot of volume
aws ec2 create-snapshot --volume-id vol-1234567890abcdef0 --description "My snapshot"

# Copy snapshot to another region
aws ec2 copy-snapshot --source-region us-east-1 --source-snapshot-id snap-1234567890abcdef0 --region us-west-2 --description "Copy of snapshot"

Security Group Management

# Create security group
aws ec2 create-security-group --group-name MySecurityGroup --description "My security group" --vpc-id vpc-1234567890abcdef0

# Add inbound rule (allow SSH)
aws ec2 authorize-security-group-ingress --group-id sg-1234567890abcdef0 --protocol tcp --port 22 --cidr 203.0.113.0/24

# Add outbound rule (allow all traffic)
aws ec2 authorize-security-group-egress --group-id sg-1234567890abcdef0 --protocol all --port all --cidr 0.0.0.0/0

# Delete rule
aws ec2 revoke-security-group-ingress --group-id sg-1234567890abcdef0 --protocol tcp --port 22 --cidr 203.0.113.0/24

EC2 Troubleshooting

Common Issues and Solutions

IssuePossible CausesTroubleshooting Steps
Instance won’t startInsufficient capacity, corrupt filesystemCheck status check results, console output
Can’t connect via SSHSecurity group rules, key issues, network ACLsVerify SG rules, key permissions, VPC routing
High CPU utilizationUndersized instance, application issuesMonitor CloudWatch metrics, check processes
Insufficient IOPSEBS volume type limitations, throughput limitsUpgrade volume type, check instance limits
Instance terminationSpot instance interruption, scheduled events, billing issuesCheck termination protection, activity history
Boot failureMissing OS files, configuration errorsCheck system log, use recovery AMI

Instance Status Checks

Check TypeWhat It VerifiesFailed When
System Status CheckPhysical host issuesHost has hardware/network problems
Instance Status CheckInstance’s software/network configurationOS not booting, network not configured

Recovery Procedures

  1. Unresponsive Instance:

    # Stop and start (EBS-backed only)
    aws ec2 stop-instances --instance-ids i-1234567890abcdef0
    aws ec2 start-instances --instance-ids i-1234567890abcdef0
    
    # If still failing, create AMI and launch new instance
    aws ec2 create-image --instance-id i-1234567890abcdef0 --name "Recovery-AMI" --no-reboot
    
  2. Volume Recovery:

    # Create snapshot of problematic volume
    aws ec2 create-snapshot --volume-id vol-1234567890abcdef0 --description "Recovery snapshot"
    
    # Create new volume from snapshot
    aws ec2 create-volume --availability-zone us-east-1a --snapshot-id snap-1234567890abcdef0
    
    # Attach to recovery instance
    aws ec2 attach-volume --volume-id vol-0abcdef1234567890 --instance-id i-0abcdef1234567890 --device /dev/sdf
    

Advanced EC2 Features

EC2 Nitro System

FeatureDescriptionBenefits
Nitro HypervisorLightweight hypervisorImproved performance, security
Nitro CardsSpecialized hardwareOffloads network, storage, management functions
Nitro Security ChipHardware security moduleEnhanced protection, verification
Bare Metal SupportNo hypervisor optionDirect hardware access for specialized workloads

EC2 Instance Connect

# Install EC2 Instance Connect CLI
pip install ec2instanceconnectcli

# Connect to instance (no need for key management)
mssh ec2-user@i-1234567890abcdef0 --region us-east-1

Hibernation vs. Stop vs. Terminate

FeatureHibernationStopTerminate
Memory stateSaved to EBSLostLost
BillingEBS only (no instance charges)EBS only (no instance charges)No charges
Boot timeFaster (no OS boot)Standard boot timeN/A (new provision)
IP addressChanged (unless EIP)Changed (unless EIP)New IP
Instance IDPreservedPreservedNew instance ID
Data persistenceRAM + EBS preservedOnly EBS preservedAll data lost (unless separate EBS)

EC2 Fleet Types

Fleet TypeDescriptionBest For
EC2 FleetManage mix of instance types, purchase optionsOptimizing for price and performance
Spot FleetGroup of Spot Instances with defined capacityFault-tolerant applications, batch jobs
Instance RefreshReplace Auto Scaling instancesRolling updates, replacing outdated configurations

Resources for Further Learning

Official AWS Documentation

AWS Training and Certification

  • AWS Certified Solutions Architect
  • AWS Certified SysOps Administrator
  • AWS Technical Essentials
  • Architecting on AWS

Community Resources

  • AWS re:Invent sessions (YouTube)
  • AWS This Week (A Cloud Guru)
  • AWS Blog
  • Reddit r/aws community
  • Stack Overflow aws tag

Quick Reference: EC2 Resource Limits

ResourceDefault LimitAdjustable
Running On-Demand instances5-32 per region (varies by type)Yes
Spot Instance requests20 per regionYes
Active Elastic IP addresses5 per regionYes
Launch templates5,000 per regionNo
Security groups per VPC500Yes
Rules per security group60 inbound, 60 outboundYes
AMIs50,000 per regionNo
Volumes per instance40No
Snapshots100,000 per regionNo

Note: Limits may change over time. Check AWS Service Quotas for current values.

Scroll to Top