ЁЯЪМ рдзрдбрд╛ 10 тАФ Transit Gateway: рдЬрд┐рд▓реНрд╣реНрдпрд╛рдЪреЗ bus station
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 12 рдкреИрдХреА рдзрдбрд╛ 10 ┬╖ рдорд╛рдЧрдЪрд╛: lesson-09-peering ┬╖ рдкреБрдврдЪрд╛: lesson-11-troubleshooting
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ09, рдЖрдгрд┐ hub: vpc/demo.py рдордзрд▓реЗ tgw() prod, dev,
shared рдЖрдгрд┐ office-vpn рдпрд╛рдВрдирд╛ рдПрдХрд╛рдЪ Transit Gateway рд▓рд╛ attach рдХрд░рддреЗ, рдЖрдгрд┐ рдПрдХ TGW route table
рдХреЛрдг рдХреЛрдгрд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рд╢рдХреЗрд▓ рддреЗ рдард░рд╡рддреЗ тАФ vpc/network.py рдордзрд▓реНрдпрд╛ tgw_path() рд╕рд╣.
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
рдЬрд┐рд▓реНрд╣реНрдпрд╛рдд рдЕрдиреЗрдХ рд╢рд╛рд│рд╛ рдЖрдгрд┐ рдПрдХ рдХрд╛рд░реНрдпрд╛рд▓рдп рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рдЬреЛрдбреАрдордзреНрдпреЗ corridor рдмрд╛рдВрдзрд╛рдпрдЪрд╛ рдореНрд╣рдгрдЬреЗ рдЦреВрдкрдЪ рдЬрд╛рд╕реНрдд corridors. рдореНрд╣рдгреВрди рдЬрд┐рд▓реНрд╣рд╛ рдордзреЛрдордз рдПрдХ bus station ЁЯЪМ рдмрд╛рдВрдзрддреЛ.
рдкреНрд░рддреНрдпреЗрдХ campus station рдкрд░реНрдпрдВрдд рдПрдХрдЪ рд░рд╕реНрддрд╛ рдмрд╛рдВрдзрддреЛ тАФ рдПрдХ attachment. рдХрд╛рд░реНрдпрд╛рд▓рдпрд╣реА рдПрдХрд╛ VPN рд░рд╕реНрддреНрдпрд╛рдиреЗ рдЬреЛрдбрд▓реЗ рдЬрд╛рддреЗ.
Station рд╡рд░ рдкреНрд░рддреНрдпреЗрдХ рд░рд╕реНрддреНрдпрд╛рдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рд╡реЗрд│рд╛рдкрддреНрд░рдХ рдЕрд╕рддреЗ тАФ TGW route table. Prod рд╢рд╛рд│реЗрдЪреНрдпрд╛
рд╡реЗрд│рд╛рдкрддреНрд░рдХрд╛рдд shared рдХрдбреЗ рдЖрдгрд┐ рдХрд╛рд░реНрдпрд╛рд▓рдпрд╛рдХрдбреЗ buses рдЖрд╣реЗрдд. Dev рд╢рд╛рд│реЗрдЪреНрдпрд╛ рд╡реЗрд│рд╛рдкрддреНрд░рдХрд╛рдд рдлрдХреНрдд shared рдХрдбреЗ
bus рдЖрд╣реЗ. рддреНрдпрд╛рдореБрд│реЗ dev рдЪреНрдпрд╛ рд╡рд┐рджреНрдпрд╛рд░реНрдерд┐рдиреА shared рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рд╢рдХрддрд╛рдд, рдкрдг prod рд╢рд╛рд│реЗрдкрд░реНрдпрдВрдд
рдХрдзреАрдЪ рдирд╛рд╣реА тАФ рддрд┐рдереЗ bus рдЪ рдирд╛рд╣реА.
Bus рдПрдХрд╛рдЪ рджрд┐рд╢реЗрдиреЗ рдЬрд╛рддреЗ. рдЙрддреНрддрд░ рдкрд░рдд рдпрд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░ рджреБрд╕рд▒реНрдпрд╛ рд╢рд╛рд│реЗрдЪреНрдпрд╛ рд╡реЗрд│рд╛рдкрддреНрд░рдХрд╛рддрд╣реА рдкрд░рддреАрдЪреА bus рд╣рд╡реА.
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart TB
tgw["ЁЯЪМ Transit Gateway"]
prod["ЁЯПл prod"] --- tgw
dev["ЁЯПл dev"] --- tgw
shared["ЁЯУЪ shared"] --- tgw
vpn["ЁЯПв office-vpn"] --- tgw
t1["timetable prod: shared ┬╖ office-vpn"]
t2["timetable dev: shared"]
tgw -.-> t1
tgw -.-> t2
dev -.->|"ЁЯЪл no bus"| prod
ЁЯЧ║я╕П рд░реЗрдЦрд╛рдЯрд▓реЗрд▓реА рдЖрд╡реГрддреНрддреА + рдПрдХ lab: https://school-edh.pages.dev/vpc/lesson-diagrams.html#l10
тЭУ рдХрд╛рдп
- Transit Gateway (TGW) тАФ networks attach рдХрд░рддрд╛ рдпреЗрдгрд╛рд░рд╛ region рдордзрд▓рд╛ router. рддреЛ hub рдЖрд╣реЗ: n VPCs рдирд╛ n attachments рд▓рд╛рдЧрддрд╛рдд, n┬╖(nтИТ1)/2 peerings рдирд╛рд╣реАрдд.
- Attachments тАФ рдПрдХ VPC (TGW рдЪреНрдпрд╛ network interfaces рд╕рд╛рдареА рддреБрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ AZ рдордзрд▓рд╛ рдПрдХ subnet рдирд┐рд╡рдбрддрд╛), рдПрдХ Site-to-Site VPN, Direct Connect (Direct Connect gateway рдордзреВрди), рджреБрд╕рд▒реНрдпрд╛ TGW рдХрдбреЗ peering (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде рджреБрд╕рд▒реНрдпрд╛ Region рдордзреНрдпреЗ), рдЖрдгрд┐ SD-WAN appliances рд╕рд╛рдареА Connect attachments.
- TGW route tables тАФ рдкреНрд░рддреНрдпреЗрдХ attachment рдПрдХрд╛ TGW route table рд╢реА associate рдЕрд╕рддреЗ (рддреНрдпрд╛ attachment рдХрдбреВрди рдпреЗрдгрд╛рд▒реНрдпрд╛ traffic рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓реА рдЬрд╛рдгрд╛рд░реА table). Table рдордзреНрдпреЗ routes attachments рдХрдбреВрди propagation рдиреЗ рдХрд┐рдВрд╡рд╛ static routes рдореНрд╣рдгреВрди рдпреЗрддрд╛рдд. рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ tables рдореБрд│реЗ segmentation рдорд┐рд│рддреЗ: dev рдЖрдгрд┐ prod station share рдХрд░рддрд╛рдд рдкрдг рд╡реЗрд│рд╛рдкрддреНрд░рдХ рдирд╛рд╣реА.
- VPC рдордзреНрдпреЗрд╣реА routes тАФ traffic station рдХрдбреЗ рдкрд╛рдард╡рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рддреНрдпреЗрдХ VPC рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ route tables
рдордзреНрдпреЗ route рд╣рд╡рд╛ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде
10.0.0.0/8 тЖТ tgw-тАж). - Transitive тАФ peering рдЪреНрдпрд╛ рдЙрд▓рдЯ, рд╡реЗрд│рд╛рдкрддреНрд░рдХреЗ рдкрд░рд╡рд╛рдирдЧреА рджреЗрдд рдЕрд╕рддреАрд▓ рддрд░ office VPN TGW рдордзреВрди prod рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рд╢рдХрддреЗ.
- рдЦрд░реНрдЪ тАФ рдкреНрд░рддрд┐ attachment-hour рдЖрдгрд┐ рдкреНрд░рддрд┐ processed GB (рдЕрдиреЗрдХ Regions рдордзреНрдпреЗ рд╕рд╛рдзрд╛рд░рдг $0.05 рдкреНрд░рддрд┐ attachment-hour рдЖрдгрд┐ $0.02 рдкреНрд░рддрд┐ GB тАФ Transit Gateway pricing page рддрдкрд╛рд╕рд╛). рджреЛрди VPCs рдордзрд▓рд╛ рдореЛрдард╛ traffic peering рд╡рд░реВрди рд╕реНрд╡рд╕реНрдд рдкрдбреВ рд╢рдХрддреЛ.
ЁЯдФ рдХрд╛
рдХрд╛рд░рдг рдЦрд▒реНрдпрд╛ рдХрдВрдкрдиреНрдпрд╛рдВрдХрдбреЗ рдЕрдиреЗрдХ VPCs рдЕрд╕рддрд╛рдд тАФ рдкреНрд░рддреНрдпреЗрдХ team рд╕рд╛рдареА, рдкреНрд░рддреНрдпреЗрдХ environment рд╕рд╛рдареА, рдкреНрд░рддреНрдпреЗрдХ account рд╕рд╛рдареА тАФ рд╢рд┐рд╡рд╛рдп offices рдЖрдгрд┐ data centres. рд╡реЗрд│рд╛рдкрддреНрд░рдХреЗ рдЕрд╕рд▓реЗрд▓рд╛ hub рдореНрд╣рдгрдЬреЗ рдХреЛрдг рдмреЛрд▓реВ рд╢рдХреЗрд▓ рд╣реЗ рд╕рд╛рдВрдЧрдгреНрдпрд╛рдЪреА рдПрдХ рдЬрд╛рдЧрд╛, рдЖрдгрд┐ office рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдПрдХ рдЬрд╛рдЧрд╛.
ЁЯФз рдХрд╕реЗ (рдпрд╛ repo рдордзреНрдпреЗ)
vpc/network.py рдордзрд▓реЗ tgw_path(attachments, route_table, a, c) рдлрдХреНрдд рддреЗрд╡реНрд╣рд╛рдЪ
true рдЕрд╕рддреЗ рдЬреЗрд╡реНрд╣рд╛ рджреЛрдШреЗрд╣реА attached рдЕрд╕рддрд╛рдд рдЖрдгрд┐ c рд╣рд╛ a рдЪреНрдпрд╛ route table рдордзреНрдпреЗ рдЕрд╕рддреЛ.
vpc/demo.py рдордзрд▓реЗ tgw() рдЪрд╛рд░ рдкреНрд░рд╢реНрди рд╡рд┐рдЪрд╛рд░рддреЗ рдЖрдгрд┐ peerings рд╡рд┐рд░реБрджреНрдз attachments
рдореЛрдЬрддреЗ. рдпрд╛ model рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ attachment рд▓рд╛ рдПрдХ table рдЖрд╣реЗ рдЖрдгрд┐ рддреЗ рдПрдХрдЪ рджрд┐рд╢рд╛ рддрдкрд╛рд╕рддреЗ; рдкрд░рддреАрдЪреА рджрд┐рд╢рд╛ рдХрд╛
рдорд╣рддреНрддреНрд╡рд╛рдЪреА рд╣реЗ snippet рджрд╛рдЦрд╡рддреЛ.
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛
python3 vpc/demo.py tgw
python3 - <<'EOF'
import sys; sys.path.insert(0, "vpc"); from network import tgw_path
att = {"prod", "dev", "shared", "office-vpn"}
rt = {"prod": ["shared", "office-vpn"], "dev": ["shared"], "shared": ["prod", "dev"], "office-vpn": ["prod"]}
print("dev тЖТ prod:", tgw_path(att, rt, "dev", "prod"))
rt["dev"].append("prod") # someone widens dev's TGW route table
print("dev тЖТ prod after the change:", tgw_path(att, rt, "dev", "prod"), "┬╖ prod тЖТ dev:", tgw_path(att, rt, "prod", "dev"))
print("not attached:", tgw_path(att, {"sandbox": ["shared"]}, "sandbox", "shared"))
for n in (4, 10, 20):
print(f"{n} VPCs: peering {n*(n-1)//2} links ┬╖ TGW {n} attachments")
EOF
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
tgw рд╣реЗ рдЫрд╛рдкрддреЗ:
prod тЖТ shared тЬЕ
dev тЖТ shared тЬЕ
dev тЖТ prod ЁЯЪл kept apart by the TGW route table
office-vpn тЖТ prod тЬЕ
4 VPCs with peering need 6 corridors (n┬╖(nтИТ1)/2); with a TGW, 4 attachments
рддреБрдордЪрд╛ snippet рдЖрдзреА dev тЖТ prod: False рдЫрд╛рдкрддреЛ, рдордЧ
dev тЖТ prod after the change: True ┬╖ prod тЖТ dev: False тАФ request рд▓рд╛ bus рдЖрд╣реЗ, рдЙрддреНрддрд░рд╛рд▓рд╛ рдирд╛рд╣реА,
рддреНрдпрд╛рдореБрд│реЗ AWS рдордзреНрдпреЗ connection рддрд░реАрд╣реА рдЕрдкрдпрд╢реА рдард░реЗрд▓. рддреНрдпрд╛рдирдВрддрд░ not attached: False, рдЖрдгрд┐
4 VPCs: peering 6 links ┬╖ TGW 4 attachments, 10 VPCs: peering 45 links ┬╖ TGW 10 attachments,
20 VPCs: peering 190 links ┬╖ TGW 20 attachments.
ЁЯПБ рддреБрдореНрд╣реА рдЖрддреНрддрд╛рдЪ рдХрд╛рдп рд╕рд┐рджреНрдз рдХреЗрд▓реЗ
Hub n┬╖(nтИТ1)/2 corridors рдЪреЗ n рд░рд╕реНрддреЗ рдХрд░рддреЛ, рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ route tables тАФ рджреЛрдиреНрд╣реА рджрд┐рд╢рд╛рдВрдиреА тАФ рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдХреЛрдг рдмреЛрд▓реВ рд╢рдХреЗрд▓ рддреЗ рдард░рд╡рддрд╛рдд.
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- default "рд╕рдЧрд│реЗ associate рдЖрдгрд┐ propagate рдХрд░рд╛" рдЪрд╛рд▓реВ рдареЗрд╡рдгреЗ тАФ рдкреНрд░рддреНрдпреЗрдХ VPC рдкреНрд░рддреНрдпреЗрдХ рджреБрд╕рд▒реНрдпрд╛ VPC рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВ рд╢рдХрддреЛ
- TGW route рдлрдХреНрдд рдПрдХрд╛рдЪ рджрд┐рд╢реЗрдиреЗ рдЬреЛрдбрдгреЗ
- TGW рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рдгрд╛рд░реА VPC рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ route table рдордзрд▓реА entry рд╡рд┐рд╕рд░рдгреЗ
- рдлрдХреНрдд рдПрдХрд╛рдЪ AZ рдЪрд╛ subnet attach рдХрд░рдгреЗ тАФ рдЗрддрд░ AZs рдордзрд▓реНрдпрд╛ instances рдЪрд╛ рдорд╛рд░реНрдЧ рддреБрдЯрддреЛ
- рддреНрдпрд╛ рджреЛрди VPCs рдордзрд▓реЗ peering рд╕реНрд╡рд╕реНрдд рдкрдбрдд рдЕрд╕рддрд╛рдирд╛ рдкреНрд░рдЪрдВрдб, рд╕рддрддрдЪрд╛ traffic TGW рдордзреВрди рдкрд╛рдард╡рдгреЗ
ЁЯПн рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд╛рдкрд░рд╛рдд
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд░рдЪрдирд╛: рдкреНрд░рддреНрдпреЗрдХ Region рдордзреНрдпреЗ рдПрдХ TGW, AWS RAM рдиреЗ accounts рдордзреНрдпреЗ share рдХреЗрд▓реЗрд▓рд╛; рдПрдХ prod table,
рдПрдХ nonprod table рдЖрдгрд┐ рдПрдХ shared table; office VPN рдХрд┐рдВрд╡рд╛ Direct Connect рд╡рд░; firewalls рд╕рд╛рдареА
inspection VPCs.
рдЦрд▒реНрдпрд╛ account рд╡рд░ (AWS CLI рдЖрдгрд┐ credentials рд▓рд╛рдЧрддрд╛рдд; IDs рдЙрджрд╛рд╣рд░рдгрд╛рджрд╛рдЦрд▓ рдЖрд╣реЗрдд):
aws ec2 create-transit-gateway --description school-hub \
--options DefaultRouteTableAssociation=disable,DefaultRouteTablePropagation=disable
aws ec2 create-transit-gateway-vpc-attachment --transit-gateway-id tgw-0123456789abcdef0 \
--vpc-id vpc-0dev000000000000a --subnet-ids subnet-0a subnet-0b subnet-0c
aws ec2 create-transit-gateway-route-table --transit-gateway-id tgw-0123456789abcdef0
aws ec2 associate-transit-gateway-route-table --transit-gateway-route-table-id tgw-rtb-0dev00000000000a \
--transit-gateway-attachment-id tgw-attach-0dev0000000000a
aws ec2 enable-transit-gateway-route-table-propagation --transit-gateway-route-table-id tgw-rtb-0dev00000000000a \
--transit-gateway-attachment-id tgw-attach-0shared00000000a
aws ec2 create-route --route-table-id rtb-0dev000000000000a --destination-cidr-block 10.0.0.0/8 \
--transit-gateway-id tgw-0123456789abcdef0
тПня╕П рдкреБрдвреЗ
Campus рдЖрддрд╛ рдЕрдиреЗрдХ рдкреНрд░рдХрд╛рд░реЗ рдЬреЛрдбрд▓реЗрд▓рд╛ рдЖрд╣реЗ тАФ рдореНрд╣рдгрдЬреЗ packet рд╣рд░рд╡рдгреНрдпрд╛рдЪреНрдпрд╛ рдЕрдиреЗрдХ рдЬрд╛рдЧрд╛. Flow logs рдЖрдгрд┐ Reachability Analyzer: A рд▓рд╛ B рдкрд░реНрдпрдВрдд рдХрд╛ рдкреЛрд╣реЛрдЪрддрд╛ рдпреЗрдд рдирд╛рд╣реА?
git checkout lesson-11-troubleshooting