ЁЯПл The SchoolтА║ЁЯЦея╕П EC2тА║ЁЯЫ╡ рдзрдбрд╛ 02 тАФ Instance types: рдХрд╛рдорд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рд╡рд╛рд╣рди
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯЫ╡ рдзрдбрд╛ 02 тАФ Instance types: рдХрд╛рдорд╛рд╕рд╛рдареА рдпреЛрдЧреНрдп рд╡рд╛рд╣рди

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 02 ┬╖ рдорд╛рдЧреЗ: lesson-01-why-ec2 ┬╖ рдкреБрдвреЗ: lesson-03-amis-launch


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

рдзрдбрд╛ 01, рдЖрдгрд┐ m7g.large рд╕рд╛рд░рдЦреЗ рдирд╛рд╡ рдХрд╕реЗ рд╡рд╛рдЪрд╛рдпрдЪреЗ, рд░реЛрдЬ рднреЗрдЯрдгрд╛рд▒реНрдпрд╛ рдЪрд╛рд░ families, Graviton рд╕реНрд╡рд╕реНрдд рдХрд╛ рдЖрд╣реЗ, рдЖрдгрд┐ CPU credits рдЪреА burstable рдЗрдВрдзрди рдЯрд╛рдХреА, рдЬрд┐рдЪреНрдпрд╛рдореБрд│реЗ t3.micro рдПрдХ рддрд╛рд╕ рд╡реЗрдЧрд╡рд╛рди рдЪрд╛рд▓рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░ рдордВрдж рд╣реЛрддреЛ.

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

рд╢рд╛рд│рд╛ рд▓реЛрдХрд╛рдВрдирд╛ рдХрд╛рдорд╛рд╕рд╛рдареА рдмрд╛рд╣реЗрд░ рдкрд╛рдард╡рддреЗ. Post office рдордзреНрдпреЗ рдкрддреНрд░ рдЯрд╛рдХрд╛рдпрдЪреЗ? Scooter ЁЯЫ╡. рдЖрдард╡рдбреНрдпрд╛рдЪрд╛ рдмрд╛рдЬрд╛рд░? Family car ЁЯЪЧ. рд╡реЗрд│реЗрд╢реА рд╢рд░реНрдпрдд? Racing car ЁЯПОя╕П. рдЧреНрд░рдВрдерд╛рд▓рдп рд╣рд▓рд╡рд╛рдпрдЪреЗ? рдЯреНрд░рдХ ЁЯЪЪ. рдкрддреНрд░рд╛рд╕рд╛рдареА рдЯреНрд░рдХ рд╡рд╛рдкрд░рд▓рд╛ рддрд░ рдкреИрд╕реЗ рд╡рд╛рдпрд╛ рдЬрд╛рддрд╛рдд; рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рд╕рд╛рдареА scooter рд╡рд╛рдкрд░рд▓реА рддрд░ рдХрд╛рдо рдХрдзреАрдЪ рд╕рдВрдкрдд рдирд╛рд╣реА.

EC2 рдбреЗрд╕реНрдХрдЪреЗрд╣реА рддрд╕реЗрдЪ рдЖрд╣реЗ: рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдХрд╛рдорд╛рдВрд╕рд╛рдареА рдмрдирд╡рд▓реЗрд▓реНрдпрд╛ families, рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ sizes рдордзреНрдпреЗ.

Scooter рдордзреНрдпреЗ рдПрдХ рдЧрдВрдордд рдЖрд╣реЗ. рддрд┐рдЪреА рдПрдХ рдЫреЛрдЯреА рдЗрдВрдзрди рдЯрд╛рдХреА тЫ╜ рдЖрд╣реЗ, рдЬреА рддреБрдореНрд╣реА рд╣рд│реВ рдЪрд╛рд▓рд╡рддрд╛ рддреЗрд╡реНрд╣рд╛ рд╣рд│реВрд╣рд│реВ рднрд░рддреЗ. рдкреВрд░реНрдг рд╡реЗрдЧрд╛рдиреЗ рдЪрд╛рд▓рд╡рд╛ рдЖрдгрд┐ рддреА рд░рд┐рдХрд╛рдореА рд╣реЛрддреЗ; рдПрдХрджрд╛ рд░рд┐рдХрд╛рдореА рдЭрд╛рд▓реА рдХреА рдЯрд╛рдХреА рдкреБрдиреНрд╣рд╛ рднрд░реЗрдкрд░реНрдпрдВрдд scooter рдлрдХреНрдд рдЪрд╛рд▓рдгреНрдпрд╛рдЪреНрдпрд╛ рд╡реЗрдЧрд╛рдиреЗ рд░реЗрдВрдЧрд╛рд│рддреЗ. рддреА рдЯрд╛рдХреА рдореНрд╣рдгрдЬреЗ CPU credits, рдЖрдгрд┐ рдореНрд╣рдгреВрдирдЪ рддрд╛рд╕рднрд░ рдЙрдбрдгрд╛рд░рд╛ t3.micro рдЕрдЪрд╛рдирдХ рд░реЗрдВрдЧрд╛рд│реВ рд▓рд╛рдЧрддреЛ.

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

flowchart LR
    name["ЁЯП╖я╕П m7g.large"]
    fam["m = family<br/>general ЁЯЪЧ"]
    gen["7 = generation"]
    attr["g = Graviton (ARM)"]
    size["large = size<br/>2 vCPU ┬╖ 8 GiB"]
    name --> fam
    name --> gen
    name --> attr
    name --> size
    t3["ЁЯЫ╡ t3.micro: tank of CPU credits<br/>earn 12/h ┬╖ hold 288"]
    full["hour 1 at 100% тЖТ 36 credits left"]
    empty["hour 2 тЖТ 0 credits тЖТ throttled to 10% baseline"]
    t3 -->|"1 burst"| full -->|"2 tank empty"| empty

ЁЯЧ║я╕П рдХрд╛рдврд▓реЗрд▓реА рдЖрдХреГрддреА + рдПрдХ lab: https://school-edh.pages.dev/ec2/lesson-diagrams.html#l02

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

ЁЯдФ рдХрд╛

рдХрд╛рд░рдг instance type рдореНрд╣рдгрдЬреЗрдЪ рдмрд┐рд▓рд╛рдЪрд╛ рдЖрдгрд┐ performance рдЪрд╛ рдореЛрдард╛ рднрд╛рдЧ, рдЖрдгрд┐ рддреЛ launch screen рд╡рд░ рджрд╣рд╛ рд╕реЗрдХрдВрджрд╛рдВрдд рдирд┐рд╡рдбрд▓рд╛ рдЬрд╛рддреЛ. рдЪреБрдХреАрдЪреА family рджрд░ рддрд╛рд╕рд╛рд▓рд╛ рдкреИрд╕реЗ рд╡рд╛рдпрд╛ рдШрд╛рд▓рд╡рддреЗ (memory рдЪреА рднреВрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ cache рд╕рд╛рдареА c рдбреЗрд╕реНрдХ) рдХрд┐рдВрд╡рд╛ bug рд╕рд╛рд░рдЦреНрдпрд╛ рджрд┐рд╕рдгрд╛рд▒реНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдЕрдкрдпрд╢реА рдард░рддреЗ (рджреБрдкрд╛рд░рдирдВрддрд░ "рдЙрдЧрд╛рдЪрдЪ" рдордВрдж рд╣реЛрдгрд╛рд░рд╛ t3).

ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)

ec2/demo.py рдордзрд▓реЗ types() ec2/costs.py рдордзрд▓реА lab рдЪреА рдХрд┐рдВрдордд-рдпрд╛рджреА рдкреНрд░рддреНрдпреЗрдХ family рдЪреНрдпрд╛ рд╡рд╛рд╣рдирд╛рд╕рд╣ рдЫрд╛рдкрддреЗ, рдордЧ ec2/fleet.py рдордзрд▓реЗ fleet.credits(3) рдЪрд╛рд▓рд╡рддреЗ: 144 credits рдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрдгрд╛рд░рд╛, рддреАрди рддрд╛рд╕ 100% рд╡рд░ рдЪрд╛рд▓рдгрд╛рд░рд╛ t3.micro, рдорд┐рдирд┐рдЯрд╛-рдорд┐рдирд┐рдЯрд╛рдиреЗ.

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛

python3 ec2/demo.py types
python3 - <<'EOF'
import sys; sys.path.insert(0, "ec2"); import costs, fleet
# price per GiB of memory: which family is the cheap way to buy RAM?
for t, (v, m, p) in costs.PRICE_PER_HOUR.items():
    print(f"{t:<11} ${p / m:.4f} per GiB-hour")
# a gentle load: 10% on both vCPUs is exactly the baseline тЖТ the tank never empties
print("10% busy:", fleet.credits(3, busy_pct=10))
# 30% busy spends 0.6 credits a minute but earns only 0.2 тЖТ it drains 24 an hour
for h, bal, got in fleet.credits(8, busy_pct=30):
    print(f"30% busy ┬╖ hour {h}: {bal:>5} credits ┬╖ CPU {got}%")
EOF

рдЦрд▒реНрдпрд╛ account рд╡рд░ (AWS credentials рд▓рд╛рдЧрддрд╛рдд; рдлрдХреНрдд рд╡рд╛рдЪрдгреЗ, рдореЛрдлрдд):

aws ec2 describe-instance-types --instance-types t3.micro m7g.large r7g.large \
    --query 'InstanceTypes[].[InstanceType,VCpuInfo.DefaultVCpus,MemoryInfo.SizeInMiB,ProcessorInfo.SupportedArchitectures[0]]' \
    --output table
aws ec2 describe-instance-type-offerings --location-type availability-zone \
    --filters Name=instance-type,Values=m7g.large --region us-east-1 --output table

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

types рдЖрда types рдЪреА рдпрд╛рджреА рджрд╛рдЦрд╡рддреЗ, t3.micro 2 vCPU 1 GiB burstable ЁЯЫ╡ ~$0.0104/h рдкрд╛рд╕реВрди r7g.large 2 vCPU 16 GiB memory ЁЯЪЪ ~$0.1071/h рдкрд░реНрдпрдВрдд, рдордЧ рдЯрд╛рдХреА: hour 1: balance 36.0 credits ┬╖ you get 100% CPU рдЖрдгрд┐, рддрд╛рд╕ 2 рдкрд╛рд╕реВрди, balance 0.0 credits ┬╖ you get 10% CPU тЖР tank empty: throttled to the 10% baseline. рддреБрдордЪрд╛ snippet рджрд╛рдЦрд╡рддреЛ рдХреА RAM рд╡рд┐рдХрдд рдШреЗрдгреНрдпрд╛рдЪрд╛ рд╕реНрд╡рд╕реНрдд рдорд╛рд░реНрдЧ memory families рдЖрд╣реЗрдд (r7g.large $0.0067 per GiB-hour рд╡рд░, рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдорд╣рд╛рдЧ c7i.xlarge $0.0223 рд╡рд░), 10% рдЪрд╛ run рджрд░ рддрд╛рд╕рд╛рд▓рд╛ 144.0 credits рд╡рд░ рд╕реНрдерд┐рд░ рд░рд╛рд╣рддреЛ, рдЖрдгрд┐ 30% рдЪрд╛ run рддрд╛рд╕рд╛рд▓рд╛ 24 рдиреЗ рдХрдореА рд╣реЛрдд рдЬрд╛рддреЛ (120.0, 96.0, тАж 0.0), рдЬреЛрдкрд░реНрдпрдВрдд рддрд╛рд╕ 7 рд▓рд╛ CPU 10% рд╡рд░ рдпреЗрдд рдирд╛рд╣реА.

ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ

рддреБрдореНрд╣реА рдХреЛрдгрддреЗрд╣реА instance рдирд╛рд╡ рд╡рд╛рдЪреВ рд╢рдХрддрд╛, рдкрд╣рд┐рд▓рд╛ рдЕрдВрджрд╛рдЬ рдХреЛрдгрддреНрдпрд╛ family рдЪрд╛ рдХрд░рд╛рдпрдЪрд╛ рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЖрд╣реЗ, рдЖрдгрд┐ рддреБрдореНрд╣реА burstable рдбреЗрд╕реНрдХрдЪреЗ рдЗрдВрдзрди рд╕рдВрдкрддрд╛рдирд╛ рдкрд╛рд╣рд┐рд▓реЗ тАФ рдкреВрд░реНрдг load рд╡рд░ рджреЛрди рддрд╛рд╕рд╛рдВрдЪреНрдпрд╛ рдЖрдд, 30% load рд╡рд░ рд╕рд╣рд╛ рддрд╛рд╕рд╛рдВрдд.

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

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд рд╣реЗ рдХрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ: рдкреНрд░рддреНрдпреЗрдХ cost review рдЪреА рдкрд╣рд┐рд▓реА рдУрд│ right-sizing рдЕрд╕рддреЗ. AWS Compute Optimizer рд╕рд╛рд░рдЦреА tools рддреБрдордЪреЗ рдЦрд░реЗ CPU рдЖрдгрд┐ memory graphs рд╡рд╛рдЪреВрди рд▓рд╣рд╛рди рдХрд┐рдВрд╡рд╛ Graviton type рд╕реБрдЪрд╡рддрд╛рдд тАФ рддреА рдмрдЪрдд рджрд░ рддрд╛рд╕рд╛рд▓рд╛, рдХрд╛рдпрдордЪреА, рд╣реЛрдд рд░рд╛рд╣рддреЗ.

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

рдХреЛрдгреА рдмрд╕рдгреНрдпрд╛рдЖрдзреА рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╕реНрдХрд╡рд░ рдХрд╛рд╣реАрддрд░реА рд╣рд╡реЗ. рдбреЗрд╕реНрдХрдЪрд╛ рд╕рд╛рдЪрд╛ рдЖрдгрд┐ recipe card тАФ AMIs рдЖрдгрд┐ launch templates.

git checkout lesson-03-amis-launch

ЁЯЫ╡ Lesson 02 тАФ Instance types: the right vehicle for the errand

ЁЯУН You are here: Lesson 02 of 12 ┬╖ Previous: lesson-01-why-ec2 ┬╖ Next: lesson-03-amis-launch


ЁЯУж What's in this branch

Lesson 01, plus how to read a name like m7g.large, the four families you will meet every day, why Graviton is cheaper, and the burstable fuel tank of CPU credits that makes a t3.micro fast for an hour and slow after it.

ЁЯзТ Explain like I'm 5

The school sends people on errands. A letter to the post office? A scooter ЁЯЫ╡. The weekly shop? A family car ЁЯЪЧ. A race against the clock? A racing car ЁЯПОя╕П. Moving the library? A lorry ЁЯЪЪ. Using the lorry for the letter wastes money; using the scooter for the library never finishes.

EC2 desks are the same: families built for different jobs, in different sizes.

The scooter has a twist. It has a small fuel tank тЫ╜ that refills slowly while you ride gently. Ride flat out and you empty it; once it is empty, the scooter only crawls at walking pace until the tank refills. That tank is CPU credits, and it is why a t3.micro that flew for an hour suddenly crawls.

ЁЯЧ║я╕П Diagram

flowchart LR
    name["ЁЯП╖я╕П m7g.large"]
    fam["m = family<br/>general ЁЯЪЧ"]
    gen["7 = generation"]
    attr["g = Graviton (ARM)"]
    size["large = size<br/>2 vCPU ┬╖ 8 GiB"]
    name --> fam
    name --> gen
    name --> attr
    name --> size
    t3["ЁЯЫ╡ t3.micro: tank of CPU credits<br/>earn 12/h ┬╖ hold 288"]
    full["hour 1 at 100% тЖТ 36 credits left"]
    empty["hour 2 тЖТ 0 credits тЖТ throttled to 10% baseline"]
    t3 -->|"1 burst"| full -->|"2 tank empty"| empty

ЁЯЧ║я╕П Drawn version + a lab: https://school-edh.pages.dev/ec2/lesson-diagrams.html#l02

тЭУ What

ЁЯдФ Why

Because the instance type is most of the bill and most of the performance, and it is chosen in ten seconds on a launch screen. The wrong family wastes money every hour (a c desk for a memory-hungry cache) or fails in a way that looks like a bug (a t3 that "randomly" slows after lunch).

ЁЯФз How (in this repo)

types() in ec2/demo.py prints the lab's price list from ec2/costs.py with each family's vehicle, then runs fleet.credits(3) from ec2/fleet.py: a t3.micro at 100% for three hours, starting with 144 credits, minute by minute.

ЁЯзк Try it

python3 ec2/demo.py types
python3 - <<'EOF'
import sys; sys.path.insert(0, "ec2"); import costs, fleet
# price per GiB of memory: which family is the cheap way to buy RAM?
for t, (v, m, p) in costs.PRICE_PER_HOUR.items():
    print(f"{t:<11} ${p / m:.4f} per GiB-hour")
# a gentle load: 10% on both vCPUs is exactly the baseline тЖТ the tank never empties
print("10% busy:", fleet.credits(3, busy_pct=10))
# 30% busy spends 0.6 credits a minute but earns only 0.2 тЖТ it drains 24 an hour
for h, bal, got in fleet.credits(8, busy_pct=30):
    print(f"30% busy ┬╖ hour {h}: {bal:>5} credits ┬╖ CPU {got}%")
EOF

On a real account (needs AWS credentials; read-only, free):

aws ec2 describe-instance-types --instance-types t3.micro m7g.large r7g.large \
    --query 'InstanceTypes[].[InstanceType,VCpuInfo.DefaultVCpus,MemoryInfo.SizeInMiB,ProcessorInfo.SupportedArchitectures[0]]' \
    --output table
aws ec2 describe-instance-type-offerings --location-type availability-zone \
    --filters Name=instance-type,Values=m7g.large --region us-east-1 --output table

тЬЕ Verify тАФ what you should see

types lists eight types from t3.micro 2 vCPU 1 GiB burstable ЁЯЫ╡ ~$0.0104/h to r7g.large 2 vCPU 16 GiB memory ЁЯЪЪ ~$0.1071/h, then the tank: hour 1: balance 36.0 credits ┬╖ you get 100% CPU and, from hour 2, balance 0.0 credits ┬╖ you get 10% CPU тЖР tank empty: throttled to the 10% baseline. Your snippet shows the memory families are the cheap way to buy RAM (r7g.large at $0.0067 per GiB-hour, c7i.xlarge the dearest at $0.0223), the 10% run holding steady at 144.0 credits every hour, and the 30% run draining 24 an hour (120.0, 96.0, тАж 0.0) until hour 7 drops to CPU 10%.

ЁЯПБ What you just proved

You can read any instance name, you know which family to guess first, and you watched a burstable desk run out of fuel тАФ at full load in under two hours, at 30% load in six.

тЪая╕П Common mistakes

ЁЯПн Why this matters in production: right-sizing is the first line on every cost review. Tools like AWS Compute Optimizer read your real CPU and memory graphs and suggest a smaller or Graviton type тАФ the saving repeats every hour, forever.

тПня╕П Next

Every desk needs something on it before anyone sits down. The desk template and the recipe card тАФ AMIs and launch templates.

git checkout lesson-03-amis-launch
тЖР Previouswhy ec2Next тЖТamis launch

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