ЁЯПл The SchoolтА║ЁЯПл VPCтА║ЁЯПл рдзрдбрд╛ 01 тАФ VPC рдХрд╛: рд╢рд╛рд│реЗрдЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдХреБрдВрдкрдг рдШрд╛рддрд▓реЗрд▓рд╛ campus
ЁЯЦ╝я╕П See the drawing + lab ЁЯПа Course home ЁЯМ┐ Branch on GitHub тЬПя╕П View source
ЁЯЦ╝я╕П рдЖрдХреГрддреА рдЖрдгрд┐ labThe drawing + lab рдкреВрд░реНрдг рдкрд╛рдирд╛рд╡рд░ рдЙрдШрдбрд╛ тЖЧOpen full page тЖЧ

ЁЯПл рдзрдбрд╛ 01 тАФ VPC рдХрд╛: рд╢рд╛рд│реЗрдЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдХреБрдВрдкрдг рдШрд╛рддрд▓реЗрд▓рд╛ campus

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 01 ┬╖ рдкреБрдвреЗ: lesson-02-cidr-ips


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

Amazon VPC (Virtual Private Cloud) рдореНрд╣рдгрдЬреЗ рдХрд╛рдп, рдкреНрд░рддреНрдпреЗрдХ рдЦрд▒реНрдпрд╛ workload рд▓рд╛ рд╕реНрд╡рддрдГрдЪрд╛ VPC рдХрд╛ рдорд┐рд│рддреЛ, рдЖрдгрд┐ рдкреВрд░реНрдг рдХреЛрд░реНрд╕рдордзреНрдпреЗ рдЪрд╛рд▓рдгрд╛рд░рд╛ рдПрдХрдЪ рдирд┐рдпрдо: рддреБрдореНрд╣реА рдорд╛рд░реНрдЧ рдмрд╛рдВрдзрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рдХрд╛рд╣реАрд╣реА рдЖрдд рдпреЗрдд рдирд╛рд╣реА рдХреА рдмрд╛рд╣реЗрд░ рдЬрд╛рдд рдирд╛рд╣реА. рдкреВрд░реНрдг рдХреЛрд░реНрд╕рднрд░ рддреБрдореНрд╣реА рд╡рд╛рдкрд░рд╛рд▓ рддреНрдпрд╛ рдЦрд▒реНрдпрд╛ files:

ЁЯОТ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА: рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд Python 3 рд▓рд╛рдЧрддреЗ, рджреБрд╕рд░реЗ рдХрд╛рд╣реА рдирд╛рд╣реА тАФ AWS account рдирдХреЛ, pip install рдирдХреЛ. network.py рд╣реЗ рдПрдХ рд╢рд┐рдХрд╡рдгреНрдпрд╛рд╕рд╛рдареАрдЪреЗ model рдЖрд╣реЗ: рддреЗ subnets рдЖрдЦрддреЗ, routes рд╢реЛрдзрддреЗ рдЖрдгрд┐ security groups, network ACLs рдЖрдгрд┐ route tables рдордзреВрди рдПрдХ packet рдЪрд╛рд▓рд╡реВрди рджрд╛рдЦрд╡рддреЗ. рдЦрд▒реНрдпрд╛ account рдордзреНрдпреЗ VPC Reachability Analyzer рдЖрдгрд┐ flow logs "A рд▓рд╛ B рдкрд░реНрдпрдВрдд рдХрд╛ рдкреЛрд╣реЛрдЪрддрд╛ рдпреЗрдд рдирд╛рд╣реА?" рдпрд╛рдЪреЗ рдЙрддреНрддрд░ рджреЗрддрд╛рдд (рдзрдбрд╛ 11). рдЦрд▒реНрдпрд╛ account рд╡рд░ рдЕрд╕реЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓реНрдпрд╛ commands рдирд╛ AWS CLI рдЖрдгрд┐ credentials рд▓рд╛рдЧрддрд╛рдд, рдЖрдгрд┐ рдХрд╛рд╣реА resources рдирд╛ рдкреИрд╕реЗ рдкрдбрддрд╛рдд; рдмрд╛рдХреА рд╕рдЧрд│реЗ рдЗрдереЗрдЪ рдЪрд╛рд▓рддреЗ.

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

AWS рд╣реЗ рдПрдХ рдореЛрдареЗ рд╢рд╣рд░ ЁЯПЩя╕П рдЖрд╣реЗ. рд╣рдЬрд╛рд░реЛ рд╢рд╛рд│рд╛ рддреНрдпрд╛рдд рдЬрд╛рдЧрд╛ рднрд╛рдбреНрдпрд╛рдиреЗ рдШреЗрддрд╛рдд.

рддреБрдордЪреНрдпрд╛ рд╢рд╛рд│реЗрд▓рд╛ рд╕рдЧрд│реНрдпрд╛рдВрд╕реЛрдмрдд рдПрдХрдЪ рдЙрдШрдбреЗ рдореИрджрд╛рди рд╡рд╛рдЯреВрди рдШреНрдпрд╛рдпрдЪреЗ рдирд╛рд╣реА. рдореНрд╣рдгреВрди рддрд┐рд▓рд╛ рд╕реНрд╡рддрдГрдЪрд╛ campus ЁЯПл рдорд┐рд│рддреЛ, рдЬреНрдпрд╛рдЪреНрдпрд╛ рднреЛрд╡рддреА рдХреБрдВрдкрдг рдЖрд╣реЗ. рдХреБрдВрдкрдгрд╛рдЪреНрдпрд╛ рдЖрдд:

рдкрд╣рд┐рд▓реНрдпрд╛ рджрд┐рд╡рд╢реА campus рд╢рд╛рдВрдд рдЕрд╕рддреЛ. рд╢рд╣рд░рд╛рддреВрди рдХреЛрдгреАрд╣реА рдЖрдд рдпреЗрдК рд╢рдХрдд рдирд╛рд╣реА. рдЖрддреВрди рдХреЛрдгреАрд╣реА рдмрд╛рд╣реЗрд░ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА. рдкреНрд░рддреНрдпреЗрдХ рджрд░рд╡рд╛рдЬрд╛, рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдЯреА рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдпрд╛рджреА рддреБрдореНрд╣реАрдЪ рдард░рд╡рддрд╛.

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

flowchart LR
    city["ЁЯПЩя╕П AWS Region<br/>ap-south-1"]
    subgraph campus["ЁЯПл VPC 10.20.0.0/16 тАФ 65,536 addresses"]
        a["ЁЯПв building ap-south-1a<br/>wings: public ┬╖ app ┬╖ data"]
        b["ЁЯПв building ap-south-1b<br/>wings: public ┬╖ app ┬╖ data"]
        c["ЁЯПв building ap-south-1c<br/>wings: public ┬╖ app ┬╖ data"]
    end
    city --> campus
    out["ЁЯЪл nothing in or out<br/>until you build a gate"]
    campus -.-> out

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

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

ЁЯдФ рдХрд╛

рдХрд╛рд░рдг рддреБрдореНрд╣реА рди рдЖрдЦрд▓реЗрд▓реНрдпрд╛ network рдЪреЗ рддреБрдореНрд╣реА рд░рдХреНрд╖рдг рдХрд░реВ рд╢рдХрдд рдирд╛рд╣реА. рд╕реНрд╡рддрдГрдЪрд╛ VPC рдЕрд╕рд▓реНрдпрд╛рд╡рд░ рддреБрдореНрд╣реА рдореНрд╣рдгреВ рд╢рдХрддрд╛: database рд▓рд╛ internet рдХрдбреЗ рдХреЛрдгрддрд╛рд╣реА рд░рд╕реНрддрд╛ рдирд╛рд╣реА, рдлрдХреНрдд load balancer рд╢рд╣рд░рд╛рдХрдбреЗ рддреЛрдВрдб рдХрд░реВрди рдЖрд╣реЗ, рд╣реА range office рд╢реА рдХрдзреАрдЪ рднрд┐рдбрдгрд╛рд░ рдирд╛рд╣реА. рддреБрдореНрд╣реА campus рд╡рд░ рдареЗрд╡рд▓реЗрд▓реА рдкреНрд░рддреНрдпреЗрдХ AWS service тАФ EC2, RDS, EKS, VPC рдордзреАрд▓ Lambda тАФ рдпрд╛ рднрд┐рдВрддреА рдЖрдкреЛрдЖрдк рд╕реНрд╡реАрдХрд╛рд░рддреЗ.

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

vpc/demo.py рдордзреАрд▓ why() рд╢рд╛рд│реЗрдЪреА range VPC = "10.20.0.0/16" рдШреЗрддреЛ рдЖрдгрд┐ Python рдЪреНрдпрд╛ ipaddress module рдиреЗ рддрд┐рдЪрд╛ рдЖрдХрд╛рд░ рдЫрд╛рдкрддреЛ. vpc/network.py рдордзреАрд▓ overlaps() "рдпрд╛ рджреЛрди ranges рдордзреНрдпреЗ рдПрдЦрд╛рджрд╛ рддрд░реА рдкрддреНрддрд╛ рд╕рд╛рд░рдЦрд╛ рдЖрд╣реЗ рдХрд╛?" рдпрд╛рдЪреЗ рдЙрддреНрддрд░ рджреЗрддреЛ тАФ рдкреНрд░рддреНрдпреЗрдХ "рд╣реА рджреЛрди networks рдХрдзреА рдЬреЛрдбрддрд╛ рдпреЗрддреАрд▓ рдХрд╛?" рдпрд╛ рдкреНрд░рд╢реНрдирд╛рдорд╛рдЧрдЪрд╛ рд╣рд╛рдЪ рдкреНрд░рд╢реНрди.

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

python3 vpc/demo.py why
python3 - <<'EOF'
import sys; sys.path.insert(0, "vpc"); from network import overlaps
print("your default VPC vs a colleague's:", overlaps("172.31.0.0/16", "172.31.0.0/16"))
print("school campus vs a default VPC:  ", overlaps("10.20.0.0/16", "172.31.0.0/16"))
EOF
python3 vpc/test_vpc.py

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

why рдЫрд╛рдкрддреЛ:

тФАтФА a VPC is the school's own fenced campus inside the AWS city: your addresses, your wings, your gates
   10.20.0.0/16 тЖТ 65,536 addresses ┬╖ one region ┬╖ wings (subnets) live in one AZ each
   the default VPC (172.31.0.0/16, every subnet public) is for trying things тАФ real work gets its own campus

рддреБрдордЪрд╛ snippet your default VPC vs a colleague's: True рдЖрдгрд┐ school campus vs a default VPC: False рдЫрд╛рдкрддреЛ. Tests рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА 12/12 passed рдпреЗрддреЗ.

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

Campus рдореНрд╣рдгрдЬреЗ рдПрдХрд╛ Region рдордзреАрд▓ рддреБрдордЪреНрдпрд╛ рдорд╛рд▓рдХреАрдЪреНрдпрд╛ рдкрддреНрддреНрдпрд╛рдВрдЪреА range. рджреЛрди default VPCs рдиреЗрд╣рдореА рднрд┐рдбрддрд╛рдд; рдЬрд╛рдгреВрдирдмреБрдЬреВрди рдирд┐рд╡рдбрд▓реЗрд▓реА range рднрд┐рдбрдд рдирд╛рд╣реА.

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

ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд

рдкреНрд░рддреНрдпреЗрдХ AWS account review рдордзреНрдпреЗ рд╡рд┐рдЪрд╛рд░рд▓реЗ рдЬрд╛рддреЗ: рдХреЛрдгрддреЗ VPCs рдЖрд╣реЗрдд, рддреНрдпрд╛рддрд▓реЗ рдХреЛрдгрддреЗ default рдЖрд╣реЗрдд, рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛рдд рдХрд╛рдп рдЪрд╛рд▓рддреЗ? рдЦрд░реЗ workloads code (Terraform, CloudFormation, CDK) рдиреЗ рдмрд╛рдВрдзрд▓реЗрд▓реНрдпрд╛ VPCs рдордзреНрдпреЗ рдЕрд╕рддрд╛рдд, рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА range company рдЪреНрдпрд╛ IP рдЖрд░рд╛рдЦрдбреНрдпрд╛рддреВрди рдпреЗрддреЗ.

рдЦрд▒реНрдпрд╛ account рд╡рд░ (AWS CLI рдЖрдгрд┐ credentials рд▓рд╛рдЧрддрд╛рдд):

aws ec2 describe-vpcs --query 'Vpcs[].[VpcId,CidrBlock,IsDefault]' --output table
aws ec2 create-vpc --cidr-block 10.20.0.0/16 \
    --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=school}]'

рд╣реЗрдЪ Terraform рдордзреНрдпреЗ:

resource "aws_vpc" "school" {
  cidr_block           = "10.20.0.0/16"
  enable_dns_support   = true
  enable_dns_hostnames = true
  tags                 = { Name = "school" }
}

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

Campus рд▓рд╛ рдХреБрдВрдкрдг рдЖрд╣реЗ. рдЖрддрд╛ рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрд▓реАрд▓рд╛ рдирдВрдмрд░ рд╣рд╡рд╛. CIDR рдЖрдгрд┐ IP addresses тАФ /16, /20 рдЖрдгрд┐ /24 рдЪрд╛ рдЕрд░реНрде рдХрд╛рдп, рдЖрдгрд┐ range рдХрдзреАрдЪ overlap рдХрд╛ рд╣реЛрдК рдирдпреЗ.

git checkout lesson-02-cidr-ips

ЁЯПл Lesson 01 тАФ Why a VPC: the school's own fenced campus

ЁЯУН You are here: Lesson 01 of 12 ┬╖ Next: lesson-02-cidr-ips


ЁЯУж What's in this branch

What an Amazon VPC (Virtual Private Cloud) is, why every real workload gets its own, and the one rule that runs through the whole course: nothing gets in or out unless you build a way. Real files you will use all the way through:

ЁЯОТ Before you start: you need Python 3 and nothing else тАФ no AWS account, no pip install. network.py is a teaching model: it plans subnets, looks up routes and walks one packet through security groups, network ACLs and route tables. In a real account, VPC Reachability Analyzer and flow logs answer "why can't A reach B?" (lesson 11). Commands marked on a real account need the AWS CLI and credentials, and some resources cost money; everything else runs here.

ЁЯзТ Explain like I'm 5

AWS is a huge city ЁЯПЩя╕П. Thousands of schools rent space in it.

Your school does not want to share one open playground with everyone. So it gets its own campus ЁЯПл with a fence all around it. Inside the fence:

On day one the campus is quiet. Nobody from the city can walk in. Nobody inside can walk out. You decide every gate, every sign and every list.

ЁЯЧ║я╕П Diagram

flowchart LR
    city["ЁЯПЩя╕П AWS Region<br/>ap-south-1"]
    subgraph campus["ЁЯПл VPC 10.20.0.0/16 тАФ 65,536 addresses"]
        a["ЁЯПв building ap-south-1a<br/>wings: public ┬╖ app ┬╖ data"]
        b["ЁЯПв building ap-south-1b<br/>wings: public ┬╖ app ┬╖ data"]
        c["ЁЯПв building ap-south-1c<br/>wings: public ┬╖ app ┬╖ data"]
    end
    city --> campus
    out["ЁЯЪл nothing in or out<br/>until you build a gate"]
    campus -.-> out

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

тЭУ What

ЁЯдФ Why

Because a network you did not design is a network you cannot defend. Your own VPC lets you say: the database has no road to the internet, only the load balancer faces the city, this range will never collide with the office. Every AWS service you place on the campus тАФ EC2, RDS, EKS, Lambda in a VPC тАФ inherits these walls.

ЁЯФз How (in this repo)

why() in vpc/demo.py takes the school's range VPC = "10.20.0.0/16" and prints its size with Python's ipaddress module. overlaps() in vpc/network.py answers "do these two ranges share any address?" тАФ the question behind every "can these two networks ever be connected?".

ЁЯзк Try it

python3 vpc/demo.py why
python3 - <<'EOF'
import sys; sys.path.insert(0, "vpc"); from network import overlaps
print("your default VPC vs a colleague's:", overlaps("172.31.0.0/16", "172.31.0.0/16"))
print("school campus vs a default VPC:  ", overlaps("10.20.0.0/16", "172.31.0.0/16"))
EOF
python3 vpc/test_vpc.py

тЬЕ Verify тАФ what you should see

why prints:

тФАтФА a VPC is the school's own fenced campus inside the AWS city: your addresses, your wings, your gates
   10.20.0.0/16 тЖТ 65,536 addresses ┬╖ one region ┬╖ wings (subnets) live in one AZ each
   the default VPC (172.31.0.0/16, every subnet public) is for trying things тАФ real work gets its own campus

Your snippet prints your default VPC vs a colleague's: True and school campus vs a default VPC: False. The tests end with 12/12 passed.

ЁЯПБ What you just proved

A campus is a range of addresses you own in one Region. Two default VPCs always collide; a range you chose on purpose does not.

тЪая╕П Common mistakes

ЁЯПн In production

Every AWS account review asks: which VPCs exist, which are default, and what runs in them? Real workloads live in VPCs built from code (Terraform, CloudFormation, CDK) with a range from the company's IP plan.

On a real account (needs the AWS CLI and credentials):

aws ec2 describe-vpcs --query 'Vpcs[].[VpcId,CidrBlock,IsDefault]' --output table
aws ec2 create-vpc --cidr-block 10.20.0.0/16 \
    --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=school}]'

The same in Terraform:

resource "aws_vpc" "school" {
  cidr_block           = "10.20.0.0/16"
  enable_dns_support   = true
  enable_dns_hostnames = true
  tags                 = { Name = "school" }
}

тПня╕П Next

The campus has a fence. Now every room needs a number. CIDR and IP addresses тАФ what /16, /20 and /24 mean, and why the range must never overlap.

git checkout lesson-02-cidr-ips
тЖР Course homeall lessonsNext тЖТcidr ips

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