When working with Amazon EC2, these four components form the backbone of your storage architecture:
// AMI (Amazon Machine Image)
- Template containing OS, apps, and configurations
- Think of it as a "golden image" for EC2 instances
- Example: ami-0abcdef1234567890 (Amazon Linux 2)
Elastic Block Storage provides durable, network-attached storage volumes:
- Survives instance termination (unlike instance store)
- Supports multiple volume types (gp3, io1, st1, sc1)
- Can be detached/reattached to different instances
aws ec2 create-volume \
--availability-zone us-west-2a \
--size 100 \
--volume-type gp3
Key characteristics of EBS snapshots:
- Incremental backups (only changed blocks are stored)
- Stored in S3 (but you only see them in EC2 console)
- Regional (can copy across regions)
# Create snapshot from volume
aws ec2 create-snapshot \
--volume-id vol-1234567890abcdef0 \
--description "Production DB backup"
Practical volume operations:
# Attach volume to instance
aws ec2 attach-volume \
--volume-id vol-1234567890abcdef0 \
--instance-id i-0abcdef1234567890 \
--device /dev/sdf
Common scenarios where these components interact:
// Creating an AMI from a running instance
1. Stop instance (for consistency)
2. Create snapshot of root volume
3. Register new AMI using the snapshot
4. Launch new instances from AMI
Remember that AMIs are region-specific, while snapshots can be copied across regions. EBS volumes are AZ-specific, so you'll need to create snapshots to move data between availability zones.
When working with Amazon EC2, four fundamental storage concepts often cause confusion: AMI, EBS, Snapshots, and Volumes. Here's a detailed breakdown with practical examples.
An AMI is a complete template that contains:
{
"RootVolume": "OS image",
"LaunchPermissions": "account access controls",
"BlockDeviceMapping": "storage configuration",
"KernelId": "optional"
}
Example AMI creation via AWS CLI:
aws ec2 create-image \
--instance-id i-1234567890abcdef0 \
--name "MyServerImage" \
--description "Production web server AMI"
EBS provides persistent block-level storage volumes that:
- Survive instance termination
- Can be attached/detached from running instances
- Support multiple volume types (gp3, io1, st1, sc1)
Creating an EBS volume:
aws ec2 create-volume \
--availability-zone us-east-1a \
--size 100 \
--volume-type gp3 \
--tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=Prod_DB}]'
Snapshots provide point-in-time backups of EBS volumes with these key characteristics:
- Incremental backups (only changed blocks are stored)
- Regional availability (can copy across regions)
- Used for disaster recovery and AMI creation
Creating a snapshot:
aws ec2 create-snapshot \
--volume-id vol-049df61146c4d7901 \
--description "Quarterly backup of production database"
Volumes are the actual storage devices you attach to instances. Practical use cases include:
- Adding additional storage to an instance
- Migrating data between availability zones
- Creating multi-attach volumes for clustered applications
Attaching a volume to an instance:
aws ec2 attach-volume \
--volume-id vol-1234567890abcdef0 \
--instance-id i-01474ef662b89480 \
--device /dev/sdf
Component | Purpose | Persistence | Modifiable |
---|---|---|---|
AMI | Instance template | Yes (when stored in S3/EBS) | No (read-only) |
EBS Volume | Block storage | Yes | Yes |
Snapshot | Volume backup | Yes | No (but can create volumes from it) |
Here's a common development scenario:
- Launch instance from AMI (e.g., Amazon Linux 2)
- Create and attach additional EBS volume (/dev/sdf)
- Develop application on the instance
- Create snapshot of modified volume
- Register new AMI from snapshot
Python example to automate snapshot creation:
import boto3
def create_snapshot(volume_id, description):
ec2 = boto3.client('ec2')
response = ec2.create_snapshot(
VolumeId=volume_id,
Description=description,
TagSpecifications=[
{
'ResourceType': 'snapshot',
'Tags': [
{
'Key': 'BackupPolicy',
'Value': 'Daily'
},
]
},
]
)
return response['SnapshotId']
- AMI selection affects initial boot time (EBS-backed vs. instance-store)
- Volume type (gp3 vs. io2) impacts IOPS and throughput
- Snapshot frequency affects storage costs and recovery point objectives