ЁЯПл The SchoolтА║ЁЯкк AWSтА║ЁЯЧДя╕П рдзрдбрд╛ 11 тАФ EBS, snapshots & AMIs: рдбреНрд░реЙрд╡рд░, photocopy, рдмрд╛рдХрд╛рдЪрд╛ template
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯЧДя╕П рдзрдбрд╛ 11 тАФ EBS, snapshots & AMIs: рдбреНрд░реЙрд╡рд░, photocopy, рдмрд╛рдХрд╛рдЪрд╛ template

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 11 ┬╖ рдорд╛рдЧреЗ: lesson-10-security-groups ┬╖ рдкреБрдвреЗ: lesson-12-ec2-in-real-life


ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ

рдзрдбреЗ 01тАУ10, рдЖрдгрд┐ рддреНрдпрд╛рд╕реЛрдмрдд: рдХрд╛рдп рдХрд╢рд╛рдирдВрддрд░рд╣реА рдЯрд┐рдХрддреЗ тАФ EC2 рдЪреА storage рдЪреА рдЧреЛрд╖реНрдЯ. рдЦрд░реА file:

ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ

рдлрд░реНрдирд┐рдЪрд░рдЪреЗ рддреАрди рддреБрдХрдбреЗ, рддреАрди рдЖрдпреБрд╖реНрдпреЗ:

  1. рдбреНрд░реЙрд╡рд░ ЁЯЧДя╕П (EBS volume) тАФ рдмрд╛рдХрд╛рдЦрд╛рд▓реА рдкрдХреНрдХрд╛ рдмрд╕рд╡рд▓реЗрд▓рд╛, рддреБрдордЪреНрдпрд╛ рд╕рдЧрд│реНрдпрд╛ files рдареЗрд╡рддреЛ. рдмрд╛рдХ stop рдХрд░рд╛ (рдЬреЗрд╡рдгрд╛рдЪреА рд╕реБрдЯреНрдЯреА): рдбреНрд░реЙрд╡рд░ рд░рд╛рд╣рддреЛ. Reboot: рдбреНрд░реЙрд╡рд░ рд░рд╛рд╣рддреЛ. рд╣рд╛ рд╕реНрд╡рддрдГрдЪреЗ рдЖрдпреБрд╖реНрдп рдЕрд╕рд▓реЗрд▓рд╛ рдЦрд░рд╛ network-attached storage рдЖрд╣реЗ тАФ рддреЛ рдХрд╛рдвреВрди рджреБрд╕рд▒реНрдпрд╛ рдмрд╛рдХрд╛рдЦрд╛рд▓реАрд╣реА рдЬреЛрдбрддрд╛ рдпреЗрддреЛ. (рдУрд│рдЦрд▓реЗ? k8s course рдордзрд▓реЗ EKS рд╡рд░рдЪреЗ PersistentVolumes рдореНрд╣рдгрдЬреЗрдЪ рд╣реЗ рдбреНрд░реЙрд╡рд░ тАФ PVC тЖТ EBS, рдЕрдХреНрд╖рд░рд╢рдГ.)

  2. Photocopy ЁЯУ╕ (snapshot) тАФ рдбреНрд░реЙрд╡рд░рдордзрд▓реНрдпрд╛ рд╕рд╛рдордЧреНрд░реАрдЪреА рдкреНрд░рдд, рд╕рдВрдЧреНрд░рд╣рд╛рдд (S3) рдареЗрд╡рд▓реЗрд▓реА. Incremental: рджреБрд╕рд░реА photocopy рдлрдХреНрдд рдмрджрд▓рд▓реЗрд▓реА рдкрд╛рдиреЗ copy рдХрд░рддреЗ. рдбреНрд░реЙрд╡рд░ рдореЗрд▓рд╛, region рд▓рд╛ рдЕрдбрдЪрдг рдЖрд▓реА, рдЪреБрдХреВрди rm -rf рдЭрд╛рд▓реЗ? Photocopy рдордзреВрди рдирд╡рд╛ рдбреНрд░реЙрд╡рд░ restore рдХрд░рд╛. рд╣реАрдЪ backup рдЪреА рдЧреЛрд╖реНрдЯ.

  3. рдмрд╛рдХрд╛рдЪрд╛ template ЁЯЦ╝я╕П (AMI) тАФ рдЧреЛрдард╡рд▓реЗрд▓рд╛ рд╕рдВрдкреВрд░реНрдг рдмрд╛рдХ: рдбреНрд░реЙрд╡рд░рдордзрд▓реА рд╕рд╛рдордЧреНрд░реА

    • settings. рдПрдХрд╛ template рдордзреВрди 1 рдХрд┐рдВрд╡рд╛ 100 рдПрдХрд╕рд╛рд░рдЦреЗ рдмрд╛рдХ рдЫрд╛рдкрд╛. ec2.tf Amazon рдЪреНрдпрд╛ al2023 template рдордзреВрди boot рд╣реЛрддреЛ; рдХрдВрдкрдиреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреЗ рдмрдирд╡рддрд╛рдд ("рдЖрдордЪрд╛ рдореВрд│ рдмрд╛рдХ: patched, agents installed, logo рдЪрд╛ wallpaper").

рдУрд│рдЦреАрдЪреЗ рд╡рд╛рдЯрддреЗ? AMI : instance = image : container тАФ Docker course рдЪреА рдбрдмреНрдпрд╛рдЪреА рдЧреЛрд╖реНрдЯ, рдлрдХреНрдд рдЬрдб рдлрд░реНрдирд┐рдЪрд░. ЁЯН▒тЖТЁЯЦея╕П

рдПрдХ рд╕рд╛рдкрд│рд╛: рдХрд╛рд╣реА рдмрд╛рдХрд╛рдВрдирд╛ рдЕрдВрдЧрднреВрдд рдХрдЪреНрдЪреЗ рдлрд│ рдЕрд╕рддреЗ (instance store) рдЬреЗ рдмрд╛рдХ stop рдЭрд╛рд▓рд╛ рдХреА рдкреБрд╕рд▓реЗ рдЬрд╛рддреЗ. рд╡реЗрдЧрд╡рд╛рди, рддрд╛рддреНрдкреБрд░рддреНрдпрд╛ files рд╕рд╛рдареА рдареАрдХ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд┐рдп рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХрд╢рд╛рд╕рд╛рдареАрд╣реА рдХрдзреАрдЪ рдирд╛рд╣реА.

ЁЯЧ║я╕П рдЖрдХреГрддреА

flowchart LR
    desk["ЁЯЦея╕П instance<br/>disposable"]
    ebs["ЁЯЧДя╕П EBS volume<br/>survives stop/reboot<br/>detachable, re-attachable"]
    snap["ЁЯУ╕ snapshot in S3<br/>incremental photocopies<br/>restore anywhere"]
    ami["ЁЯЦ╝я╕П AMI - desk template<br/>drawer + settings, frozen"]
    fleet["ЁЯЦея╕ПЁЯЦея╕ПЁЯЦея╕П 100 identical desks"]
    desk ---|"1 bolted under"| ebs
    ebs -->|"2 backup"| snap
    snap -->|"3 becomes"| ami
    ami -->|"4 stamps out"| fleet

тЭУ рдХрд╛рдп

ЁЯдФ рдХрд╛

рд╣реА storage рдордзреВрди рдХрд╛рдврд▓реЗрд▓реА cattle-рд╡рд┐рд░реБрджреНрдз-pets рдЪреА рд░реЗрд╖рд╛ рдЖрд╣реЗ: рдмрд╛рдХ рд╡рд╛рдкрд░реВрди рдЯрд╛рдХрдгреНрдпрд╛рдЬреЛрдЧреЗ, рдбреНрд░реЙрд╡рд░ рдЯрд┐рдХрд╛рдК, рдЖрдкрддреНрддреАрдВрд╕рд╛рдареА photocopies, рддрд╛рдлреНрдпрд╛рдВрд╕рд╛рдареА templates. рдкреНрд░рддреНрдпреЗрдХ "рдЖрдордЪрд╛ data рдЧреЗрд▓рд╛" рд╣реА рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рдХреЛрдгреАрддрд░реА рдПрдХрд╛ рдЖрдпреБрд╖реНрдпрд╛рд▓рд╛ рджреБрд╕рд░реЗ рд╕рдордЬрд▓реЗрд▓реЗ рдЕрд╕рддреЗ тАФ рдмрд╣реБрддреЗрдХрджрд╛ instance store рд▓рд╛ рдбреНрд░реЙрд╡рд░, рдХрд┐рдВрд╡рд╛ "AMI рдореНрд╣рдгрдЬреЗ рдЬрд╡рд│рдЬрд╡рд│ backup рдЪ" (рддрд╕реЗ рдирд╛рд╣реА; snapshots backup рдЖрд╣реЗрдд).

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (~10 рдорд┐рдирд┐рдЯреЗ, ~1┬в)

cd ec2 && terraform apply -var my_ip=$(curl -s ifconfig.me)/32

# meet the drawer:
VOL=$(aws ec2 describe-instances --filters Name=tag:Name,Values=school-desk \
  --query 'Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.VolumeId' --output text)
aws ec2 describe-volumes --volume-ids $VOL \
  --query 'Volumes[0].{size:Size,type:VolumeType,az:AvailabilityZone}'

# photocopy it:
SNAP=$(aws ec2 create-snapshot --volume-id $VOL --description "lesson-11 photocopy" \
  --query SnapshotId --output text)
aws ec2 describe-snapshots --snapshot-ids $SNAP --query 'Snapshots[0].{state:State,progress:Progress}'

# which template did we boot from?
aws ec2 describe-instances --filters Name=tag:Name,Values=school-desk \
  --query 'Reservations[0].Instances[0].ImageId'

# ЁЯз╣ cleanup тАФ desk AND photocopy:
terraform destroy -var my_ip=$(curl -s ifconfig.me)/32
aws ec2 delete-snapshot --snapshot-id $SNAP

тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ

stop/start рдирдВрддрд░ EBS volume рдордзреНрдпреЗ рддреБрдореНрд╣реА рд▓рд┐рд╣рд┐рд▓реЗрд▓реА file рдЕрдЬреВрдирд╣реА рддрд┐рдереЗрдЪ рдЕрд╕рддреЗ; aws ec2 describe-snapshots --owner-ids self рддреБрдордЪреА photocopy рджрд╛рдЦрд╡рддреЛ.

ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдХрд╛рд╣реАрд╣реА рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛

terraform destroy, рдордЧ snapshot delete рдХрд░рд╛ рдЖрдгрд┐ AMI deregister рдХрд░рд╛ тАФ рд╡рд╛рд▒реНрдпрд╛рд╡рд░ рд╕реЛрдбрд▓реЗрд▓реНрдпрд╛ photocopies рдЪреЗ bill GB-month рдиреЗ рдпреЗрддреЗ

тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛

тПня╕П рдкреБрдвреЗ

рд╢реЗрд╡рдЯрдЪрд╛ рдзрдбрд╛: рд╕реНрд╡рддрдГрдЪ рд╕реНрд╡рддрдГрд▓рд╛ setup рдХрд░рдгрд╛рд░реЗ, рд╕реНрд╡рддрдГрд▓рд╛ badge рд▓рд╛рд╡рдгрд╛рд░реЗ, рдЖрдгрд┐ рддрд╛рдлреНрдпрд╛рдВрдордзреНрдпреЗ рд╡рд╛рдврдгрд╛рд░реЗ рдмрд╛рдХ тАФ рдЖрдгрд┐ EKS nodes рдЦрд░реЗ рдХрд╛рдп рдЖрд╣реЗрдд рд╣реЗ рдУрд│рдЦрдгреНрдпрд╛рдЪрд╛ рдХреНрд╖рдг.

git checkout lesson-12-ec2-in-real-life

ЁЯЧДя╕П Lesson 11 тАФ EBS, snapshots & AMIs: drawer, photocopy, desk template

ЁЯУН You are here: Lesson 11 of 12 ┬╖ Previous: lesson-10-security-groups ┬╖ Next: lesson-12-ec2-in-real-life


ЁЯУж What's in this branch

Lessons 01тАУ10, plus: what survives what тАФ the storage story of EC2. Real file:

ЁЯзТ Explain like I'm 5

Three pieces of furniture, three lifespans:

  1. The drawer ЁЯЧДя╕П (EBS volume) тАФ bolted under the desk, holds all your files. Stop the desk (lunch break): drawer stays. Reboot: drawer stays. It's real network-attached storage with a life of its own тАФ it can even be unbolted and attached under a different desk. (Recognize it? The k8s course's PersistentVolumes on EKS ARE these drawers тАФ PVC тЖТ EBS, literally.)

  2. The photocopy ЁЯУ╕ (snapshot) тАФ a copy of the drawer's contents filed in the archive (S3). Incremental: the second photocopy only copies changed pages. Drawer dies, region hiccups, you fat-finger rm -rf? Restore a new drawer from the photocopy. This is the backup story.

  3. The desk template ЁЯЦ╝я╕П (AMI) тАФ a whole desk, frozen: drawer contents + settings. From one template, stamp out 1 or 100 identical desks. ec2.tf boots from Amazon's al2023 template; companies bake their own ("our base desk: patched, agents installed, logo wallpaper").

Sound familiar? AMI : instance = image : container тАФ the Docker course's lunchbox story, just heavier furniture. ЁЯН▒тЖТЁЯЦея╕П

One trapdoor: some desks have a built-in scratch shelf (instance store) that is wiped when the desk stops. Fast, fine for temp files тАФ never for anything you love.

ЁЯЧ║я╕П Diagram

flowchart LR
    desk["ЁЯЦея╕П instance<br/>disposable"]
    ebs["ЁЯЧДя╕П EBS volume<br/>survives stop/reboot<br/>detachable, re-attachable"]
    snap["ЁЯУ╕ snapshot in S3<br/>incremental photocopies<br/>restore anywhere"]
    ami["ЁЯЦ╝я╕П AMI - desk template<br/>drawer + settings, frozen"]
    fleet["ЁЯЦея╕ПЁЯЦея╕ПЁЯЦея╕П 100 identical desks"]
    desk ---|"1 bolted under"| ebs
    ebs -->|"2 backup"| snap
    snap -->|"3 becomes"| ami
    ami -->|"4 stamps out"| fleet

тЭУ What

ЁЯдФ Why

This is the cattle-vs-pets line drawn through storage: desks disposable, drawers durable, photocopies for disasters, templates for fleets. Every "we lost data" story is someone confusing one lifespan for another тАФ usually instance store for a drawer, or "the AMI is basically a backup" (it isn't; snapshots are).

ЁЯзк Try it (~10 min, ~1┬в)

cd ec2 && terraform apply -var my_ip=$(curl -s ifconfig.me)/32

# meet the drawer:
VOL=$(aws ec2 describe-instances --filters Name=tag:Name,Values=school-desk \
  --query 'Reservations[0].Instances[0].BlockDeviceMappings[0].Ebs.VolumeId' --output text)
aws ec2 describe-volumes --volume-ids $VOL \
  --query 'Volumes[0].{size:Size,type:VolumeType,az:AvailabilityZone}'

# photocopy it:
SNAP=$(aws ec2 create-snapshot --volume-id $VOL --description "lesson-11 photocopy" \
  --query SnapshotId --output text)
aws ec2 describe-snapshots --snapshot-ids $SNAP --query 'Snapshots[0].{state:State,progress:Progress}'

# which template did we boot from?
aws ec2 describe-instances --filters Name=tag:Name,Values=school-desk \
  --query 'Reservations[0].Instances[0].ImageId'

# ЁЯз╣ cleanup тАФ desk AND photocopy:
terraform destroy -var my_ip=$(curl -s ifconfig.me)/32
aws ec2 delete-snapshot --snapshot-id $SNAP

тЬЕ Verify тАФ what you should see

after stop/start the file you wrote in the EBS volume is still there; aws ec2 describe-snapshots --owner-ids self lists your photocopy.

ЁЯз╣ Clean up тАФ do not leave running

terraform destroy, then delete the snapshot and deregister the AMI тАФ orphan photocopies bill by the GB-month

тЪая╕П Common mistakes

тПня╕П Next

The finale: desks that set THEMSELVES up, badge themselves, and multiply into fleets тАФ and the moment you recognize EKS nodes for what they are.

git checkout lesson-12-ec2-in-real-life
тЖР Previoussecurity groupsNext тЖТec2 in real life

This page is the lesson's README from the lesson-11-ebs-snapshots-ami branch, shown here so the whole School stays on one site. Code files open on GitHub at the same branch.