ЁЯПл The SchoolтА║ЁЯкк AWSтА║ЁЯЧДя╕П рдзрдбрд╛ 14 тАФ S3: рдЕрдорд░реНрдпрд╛рдж locker room (object storage)
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯЧДя╕П рдзрдбрд╛ 14 тАФ S3: рдЕрдорд░реНрдпрд╛рдж locker room (object storage)

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 20 рдкреИрдХреА рдзрдбрд╛ 14 ┬╖ рдорд╛рдЧреЗ: lesson-13-vpc ┬╖ рдкреБрдвреЗ: lesson-15-load-balancers


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

рдзрдбреЗ 01тАУ14. AWS рдЪреА рд╕рд░реНрд╡рд╛рдд рдЬрд╛рд╕реНрдд рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдгрд╛рд░реА service тАФ рдЖрдгрд┐ рдпрд╛ course рдордзрд▓реА рдкрд╣рд┐рд▓реА service рдЬреА рддреБрдордЪреНрдпрд╛ рдХреЕрдореНрдкрд╕рдЪреНрдпрд╛ рдЖрдд рдирд╛рд╣реА. рдЦрд░реА file:

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

рд╢рд╛рд│реЗрд▓рд╛ рд╕рд╛рдорд╛рди рдареЗрд╡рд╛рдпрд▓рд╛ рдЬрд╛рдЧрд╛ рд╣рд╡реА тАФ рдлреЛрдЯреЛ, рдЧреГрд╣рдкрд╛рдард╛рдЪреЗ рд╕рдВрдЧреНрд░рд╣, backup photocopies, рд╡рд╛рд░реНрд╖рд┐рдХ рдЕрдВрдХ. рдмрд╛рдХрд╛рдВрдЪреНрдпрд╛ рдбреНрд░реЙрд╡рд░рдордзреНрдпреЗ рдирд╛рд╣реА (EBS рддреНрдпрд╛рдЪреНрдпрд╛ рдмрд╛рдХрд╛рдЪреНрдпрд╛ рдЖрд░рд╛рдЦрдбреНрдпрд╛рд╕реЛрдмрдд рдорд░рддреЛ, рдЖрдард╡рддреЗ?). рд╢рд╛рд│рд╛ рдЕрдорд░реНрдпрд╛рдж locker room рднрд╛рдбреНрдпрд╛рдиреЗ рдШреЗрддреЗ: S3.

рдердВрдб рдкрдбрд▓реЗрд▓реЗ рдбрдмреЗ рддрд│рдШрд░рд╛рдд (Infrequent Access, рд╕реНрд╡рд╕реНрдд) рдХрд┐рдВрд╡рд╛ рдорд┐рдард╛рдЪреНрдпрд╛ рдЦрд╛рдгреАрдд (Glacier, рд╕рд░реНрд╡рд╛рдд рд╕реНрд╡рд╕реНрдд, рдЖрдгрд╛рдпрд▓рд╛ рдХрд╛рд╣реА рддрд╛рд╕) рдЬрд╛рддрд╛рдд тАФ рдзрдбрд╛ 20 рддреЗ bill рд╡рд╛рдЪрддреЛ.

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

flowchart LR
    app["ЁЯЦея╕П your app / CLI"]
    b["ЁЯкг bucket: school-files<br/>ЁЯУж 2026/class-3A/photo.jpg"]
    az["ЁЯПвЁЯПвЁЯПв stored redundantly across AZs<br/>(11 nines durability, automatic)"]
    guest["ЁЯзС visitor with presigned URL<br/>works until it expires тП░"]
    app -->|"1 PUT (IAM-checked ЁЯкк)"| b
    b -->|"2 automatic"| az
    app -->|"3 issue pass"| guest
    guest -->|"4 GET, no account"| b

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

ЁЯдФ рдХрд╛

EBS (рдзрдбрд╛ 11) рдореНрд╣рдгрдЬреЗ рдПрдХрд╛ рдмрд╛рдХрд╛рд▓рд╛ рдкрдХреНрдХрд╛ рдмрд╕рд╡рд▓реЗрд▓рд╛ рдбреНрд░реЙрд╡рд░ тАФ рд╡реЗрдЧрд╡рд╛рди, рд▓рд╣рд╛рди, рдПрдХ рдЗрдорд╛рд░рдд. S3 рдореНрд╣рдгрдЬреЗ locker room тАФ рдЕрдорд░реНрдпрд╛рдж, рддреАрди рдЗрдорд╛рд░рддреА, рдУрд│рдЦрдкрддреНрд░ рдЕрд╕реЗрд▓ рддрд░ рдХреБрдареВрдирд╣реА рдкреЛрд╣реЛрдЪрддрд╛ рдпреЗрдгрд╛рд░реЗ. рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдмрд╛рдХрд╛рд╡рд░ files рдареЗрд╡рдгрд╛рд░реЗ apps рдПрдХрд╛ рдмрд╛рдХрд╛рдкрд▓реАрдХрдбреЗ рд╡рд╛рдвреВ рд╢рдХрдд рдирд╛рд╣реАрдд; S3 рдордзреНрдпреЗ files рдареЗрд╡рдгрд╛рд░реЗ apps shared-disk рдЪреНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдирд╛рдЯреНрдпрд╛рд╢рд┐рд╡рд╛рдп рддрд╛рдлреНрдпрд╛рдкрд░реНрдпрдВрдд (рдзрдбрд╛ 12) рд╡рд╛рдврддрд╛рдд.

ЁЯФз рдХрд╕реЗ

aws s3 mb s3://school-lab-$RANDOM              # claim a locker wall
echo "hello locker" > note.txt
aws s3 cp note.txt s3://YOUR_BUCKET/notes/note.txt
aws s3 presign s3://YOUR_BUCKET/notes/note.txt --expires-in 300   # 5-min visitor pass

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

cd s3 && bash presign-lab.sh        # bucket тЖТ upload тЖТ pass тЖТ prove the pass expires тЖТ cleanup

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

presigned URL рд╕рд╣ curl file рдкрд░рдд рджреЗрддреЛ; рддреЛрдЪ URL рдореБрджрдд рд╕рдВрдкрд▓реНрдпрд╛рдирдВрддрд░ 403 рджреЗрддреЛ; рд╕рд╛рдзрд╛ object URL рд╕реБрд░реБрд╡рд╛рддреАрдкрд╛рд╕реВрдирдЪ 403 рджреЗрддреЛ.

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

aws s3 rb s3://BUCKET --force тАФ lab script рд╣реЗ рддреБрдордЪреНрдпрд╛рд╕рд╛рдареА рдХрд░рддреЗ

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

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

Files рд▓рд╛рдЧрд▓реНрдпрд╛. рдкрдг рд╕рдВрдкреВрд░реНрдг рдЧрд╛рд╡ рдПрдХрд╛рдЪ рд╡реЗрд│реА рд╢рд╛рд│реЗрдЪреНрдпрд╛ website рд▓рд╛ рднреЗрдЯ рджреЗрддреЗ рддреЗрд╡реНрд╣рд╛ рдЧрд░реНрджреА рддреБрдордЪреНрдпрд╛ рдмрд╛рдХрд╛рдВрдордзреНрдпреЗ рдХреЛрдг рд╡рд╛рдЯрддреЗ? рдзрдбрд╛ 15: reception рдЪрд╛ рдмрд╛рдХ тАФ load balancers.

ЁЯЧДя╕П Lesson 14 тАФ S3: the infinite locker room (object storage)

ЁЯУН You are here: Lesson 14 of 20 ┬╖ Previous: lesson-13-vpc ┬╖ Next: lesson-15-load-balancers


ЁЯУж What's in this branch

Lessons 01тАУ14. The most-used AWS service there is тАФ and the first one in this course that is NOT inside your campus. Real file:

ЁЯзТ Explain like I'm 5

The school needs somewhere to keep stuff тАФ photos, homework archives, backup photocopies, the yearbook. Not in desk drawers (EBS dies with its desk plans, remember?). The school rents the infinite locker room: S3.

Cold boxes move to the basement (Infrequent Access, cheaper) or the salt mine (Glacier, cheapest, hours to fetch) тАФ lesson 20 reads that bill.

ЁЯЧ║я╕П Diagram

flowchart LR
    app["ЁЯЦея╕П your app / CLI"]
    b["ЁЯкг bucket: school-files<br/>ЁЯУж 2026/class-3A/photo.jpg"]
    az["ЁЯПвЁЯПвЁЯПв stored redundantly across AZs<br/>(11 nines durability, automatic)"]
    guest["ЁЯзС visitor with presigned URL<br/>works until it expires тП░"]
    app -->|"1 PUT (IAM-checked ЁЯкк)"| b
    b -->|"2 automatic"| az
    app -->|"3 issue pass"| guest
    guest -->|"4 GET, no account"| b

тЭУ What

ЁЯдФ Why

EBS (lesson 11) is a drawer bolted to one desk тАФ fast, small, one building. S3 is the locker room тАФ infinite, three buildings, reachable from anywhere with an ID card. Apps that keep files on their own desk can't scale past one desk; apps that keep files in S3 scale to a fleet (lesson 12) with zero shared-disk drama.

ЁЯФз How

aws s3 mb s3://school-lab-$RANDOM              # claim a locker wall
echo "hello locker" > note.txt
aws s3 cp note.txt s3://YOUR_BUCKET/notes/note.txt
aws s3 presign s3://YOUR_BUCKET/notes/note.txt --expires-in 300   # 5-min visitor pass

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

cd s3 && bash presign-lab.sh        # bucket тЖТ upload тЖТ pass тЖТ prove the pass expires тЖТ cleanup

тЬЕ Verify тАФ what you should see

curl with the presigned URL returns the file; the same URL after expiry returns 403; the plain object URL returns 403 from the start.

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

aws s3 rb s3://BUCKET --force тАФ the lab script does it for you

тЪая╕П Common mistakes

тПня╕П Next

Files sorted. But when the whole town visits the school website at once, who splits the crowd across your desks? Lesson 15: the reception desk тАФ load balancers.

тЖР PreviousvpcNext тЖТload balancers

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