ЁЯПл рдзрдбрд╛ 01 тАФ VPC рдХрд╛: рд╢рд╛рд│реЗрдЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдХреБрдВрдкрдг рдШрд╛рддрд▓реЗрд▓рд╛ campus
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 01 ┬╖ рдкреБрдвреЗ: lesson-02-cidr-ips
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
Amazon VPC (Virtual Private Cloud) рдореНрд╣рдгрдЬреЗ рдХрд╛рдп, рдкреНрд░рддреНрдпреЗрдХ рдЦрд▒реНрдпрд╛ workload рд▓рд╛ рд╕реНрд╡рддрдГрдЪрд╛ VPC рдХрд╛ рдорд┐рд│рддреЛ, рдЖрдгрд┐ рдкреВрд░реНрдг рдХреЛрд░реНрд╕рдордзреНрдпреЗ рдЪрд╛рд▓рдгрд╛рд░рд╛ рдПрдХрдЪ рдирд┐рдпрдо: рддреБрдореНрд╣реА рдорд╛рд░реНрдЧ рдмрд╛рдВрдзрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рдХрд╛рд╣реАрд╣реА рдЖрдд рдпреЗрдд рдирд╛рд╣реА рдХреА рдмрд╛рд╣реЗрд░ рдЬрд╛рдд рдирд╛рд╣реА. рдкреВрд░реНрдг рдХреЛрд░реНрд╕рднрд░ рддреБрдореНрд╣реА рд╡рд╛рдкрд░рд╛рд▓ рддреНрдпрд╛ рдЦрд▒реНрдпрд╛ files:
- vpc/network.py тАФ campus рдЪрд╛ рдЖрд░рд╛рдЦрдбрд╛: рд╢реБрджреНрдз Python рдордзреАрд▓ VPC рдЪреЗ рд╢рд┐рдХрд╡рдгреНрдпрд╛рд╕рд╛рдареАрдЪреЗ model (97 рдУрд│реА, рдПрдХрд╣реА dependency рдирд╛рд╣реА)
- vpc/demo.py тАФ рдкреНрд░рддреНрдпреЗрдХ рдзрдбрд╛ рдПрдХ рдЫреЛрдЯрд╛ program;
python3 vpc/demo.py whyрд╣рд╛ рдзрдбрд╛ рдЖрд╣реЗ - vpc/test_vpc.py тАФ campus рдЪреНрдпрд╛ рдирд┐рдпрдорд╛рдВрд╡рд░ 12 checks
- demo-output.txt тАФ
python3 vpc/demo.pyрдиреАрдЯ рдЪрд╛рд▓рд▓реНрдпрд╛рд╡рд░ рдХрд╛рдп рдЫрд╛рдкрддреЗ
ЁЯОТ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА: рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд 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 ЁЯПл рдорд┐рд│рддреЛ, рдЬреНрдпрд╛рдЪреНрдпрд╛ рднреЛрд╡рддреА рдХреБрдВрдкрдг рдЖрд╣реЗ. рдХреБрдВрдкрдгрд╛рдЪреНрдпрд╛ рдЖрдд:
- рдкреНрд░рддреНрдпреЗрдХ рдЦреЛрд▓реАрд▓рд╛ рддреБрдореНрд╣реА рдирд┐рд╡рдбрд▓реЗрд▓рд╛ рдШрд░рд╛рдЪрд╛ рдирдВрдмрд░ рдЕрд╕рддреЛ (рдзрдбрд╛ 02),
- campus рдордзреНрдпреЗ wings рдЕрд╕рддрд╛рдд, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ wing рдПрдХрд╛ рдЗрдорд╛рд░рддреАрдд рдЕрд╕рддреЛ (рдзрдбреЗ 03),
- corridor рдЪреНрдпрд╛ рдкрд╛рдЯреНрдпрд╛ рд▓реЛрдХрд╛рдВрдирд╛ рдХреБрдареЗ рдЬрд╛рдпрдЪреЗ рддреЗ рд╕рд╛рдВрдЧрддрд╛рдд (рдзрдбрд╛ 04),
- рдореБрдЦреНрдп рджрд░рд╡рд╛рдЬрд╛ рдЕрд╕рддреЛ рддреЛ рдлрдХреНрдд рддреБрдореНрд╣реА рдмрд╛рдВрдзрд▓рд╛ рддрд░рдЪ (рдзрдбрд╛ 05),
- рдкреНрд░рддреНрдпреЗрдХ desk рдХрдбреЗ рдкрд╛рд╣реБрдгреНрдпрд╛рдВрдЪреА рдпрд╛рджреА рдЕрд╕рддреЗ, рдкреНрд░рддреНрдпреЗрдХ wing рд▓рд╛ рджрд╛рд░ рдЕрд╕рддреЗ (рдзрдбрд╛ 06).
рдкрд╣рд┐рд▓реНрдпрд╛ рджрд┐рд╡рд╢реА 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
тЭУ рдХрд╛рдп
- VPC тАФ AWS рдордзреАрд▓ рддреБрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдЦрд╛рдЬрдЧреА network. рддреЗ рдПрдХрд╛ Region рдордзреНрдпреЗ рдЕрд╕рддреЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде
ap-south-1, Mumbai) рдЖрдгрд┐ рддреНрдпрд╛ Region рдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ Availability Zone рд╡рд╛рдкрд░реВ рд╢рдХрддреЗ. - CIDR block тАФ campus рдЪреНрдпрд╛ рдорд╛рд▓рдХреАрдЪреНрдпрд╛ private рдкрддреНрддреНрдпрд╛рдВрдЪреА range, рдЬрд╕реЗ
10.20.0.0/16. VPC рдЪрд╛ IPv4 block /16 (65,536 рдкрддреНрддреЗ) рдкрд╛рд╕реВрди /28 (16 рдкрддреНрддреЗ) рдкрд░реНрдпрдВрдд рдЕрд╕реВ рд╢рдХрддреЛ. - Subnet тАФ VPC рдЪреНрдпрд╛ range рдЪрд╛ рдПрдХ рддреБрдХрдбрд╛. Subnet рдиреЗрдордХреНрдпрд╛ рдПрдХрд╛ Availability Zone (AZ) рдордзреНрдпреЗ рдЕрд╕рддреЛ. рдзрдбрд╛ 03 рдордзреНрдпреЗ рддреБрдореНрд╣реА рддреЗ рдХрд╛рдкрд╛рд▓.
- Default VPC тАФ рдкреНрд░рддреНрдпреЗрдХ account рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ Region рдордзреНрдпреЗ рдПрдХ рдорд┐рд│рддреЛ:
172.31.0.0/16, рдкреНрд░рддреНрдпреЗрдХ AZ рдордзреНрдпреЗ рдПрдХ default subnet, рдЬреЛрдбрд▓реЗрд▓рд╛ рдПрдХ internet gateway, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдирд╡реНрдпрд╛ instance рд▓рд╛ public IP. рдкреНрд░рдпреЛрдЧ рдХрд░реВрди рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдареАрдХ. рдЬрдЧрд╛рддрд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ default VPC рд╣реАрдЪ range рд╡рд╛рдкрд░рддреЛ, рдореНрд╣рдгреВрди рдЕрд╕реЗ рджреЛрди VPCs рдХрдзреАрдЪ рдЬреЛрдбрддрд╛ рдпреЗрдд рдирд╛рд╣реАрдд. - рддреБрдордЪрд╛ рд╕реНрд╡рддрдГрдЪрд╛ VPC тАФ рддреБрдореНрд╣реА рдирд┐рд╡рдбрд▓реЗрд▓реА range, private wings, рдЖрдгрд┐ рддреБрдореНрд╣реА рдмрд╛рдВрдзрд▓реЗрд▓реЗ рджрд░рд╡рд╛рдЬреЗрдЪ.
- VPCs рдпреЗрдгреНрдпрд╛рдкреВрд░реНрд╡реА EC2-Classic рд╣реЛрддреЗ: рдЕрдиреЗрдХ customers рдиреА рд╡рд╛рдЯреВрди рдШреЗрддрд▓реЗрд▓реЗ рдПрдХрдЪ рд╕рдкрд╛рдЯ network. рддреЗ 2023 рдордзреНрдпреЗ рдмрдВрдж рдЭрд╛рд▓реЗ. рдЖрдЬ рдкреНрд░рддреНрдпреЗрдХ instance VPC рдордзреНрдпреЗрдЪ рдЪрд╛рд▓рддреЛ.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг рддреБрдореНрд╣реА рди рдЖрдЦрд▓реЗрд▓реНрдпрд╛ 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 рднрд┐рдбрдд рдирд╛рд╣реА.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- default VPC рдордзреНрдпреЗ production рдЪрд╛рд▓рд╡рдгреЗ, рдЬрд┐рдереЗ рдкреНрд░рддреНрдпреЗрдХ subnet public рдЕрд╕рддреЛ
- default VPC рдЕрдЬреВрди рдХрд╛рдп рд╡рд╛рдкрд░рддреЗ рддреЗ рди рддрдкрд╛рд╕рддрд╛ рддреЛ delete рдХрд░рдгреЗ
- VPC рдЕрдиреЗрдХ Regions рдордзреНрдпреЗ рдкрд╕рд░рддреЛ рдЕрд╕реЗ рд╕рдордЬрдгреЗ тАФ рддрд╕реЗ рдирд╛рд╣реА; рджреБрд╕рд▒реНрдпрд╛ Region рд▓рд╛ рджреБрд╕рд░рд╛ VPC рд▓рд╛рдЧрддреЛ
- subnet рдЕрдиреЗрдХ AZs рдордзреНрдпреЗ рдкрд╕рд░рддреЛ рдЕрд╕реЗ рд╕рдордЬрдгреЗ тАФ рддрд╕реЗ рдирд╛рд╣реА; рдПрдХ subnet, рдПрдХ рдЗрдорд╛рд░рдд
network.pyрд▓рд╛ рдЦрд░реА рдЧреЛрд╖реНрдЯ рд╕рдордЬрдгреЗ тАФ рддреЗ рдПрдХ model рдЖрд╣реЗ; рдЕрдВрддрд┐рдо рдирд┐рдХрд╛рд▓ Reachability Analyzer рджреЗрддреЛ
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
рдкреНрд░рддреНрдпреЗрдХ 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