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

ЁЯПл рдзрдбрд╛ 13 тАФ VPC: рдХреЕрдореНрдкрд╕рдЪреНрдпрд╛ рднрд┐рдВрддреА

ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 20 рдкреИрдХреА рдзрдбрд╛ 13 тАФ рднрд╛рдЧ 3 рд╕реБрд░реВ! ┬╖ рдорд╛рдЧреЗ: lesson-12-ec2-in-real-life ┬╖ рдкреБрдвреЗ: lesson-14-s3


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

рдзрдбреЗ 01тАУ13. рднрд╛рдЧ 3 рддреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдиреЗ рд╕реБрд░реВ рд╣реЛрддреЛ рдЬреНрдпрд╛рд╡рд░ рдзрдбреЗ 7тАУ12 рд╢рд╛рдВрддрдкрдгреЗ рдЙрднреЗ рд╣реЛрддреЗ: рддреБрдордЪреЗ рдмрд╛рдХ рдЬреНрдпрд╛рдЪреНрдпрд╛ рдЖрдд рдмрд╕рддрд╛рдд рддреЗ network. рдЦрд░реА file:

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

EC2 рдмрд╛рдХ рдЦрд░реЗ рдЙрднреЗ рдХреБрдареЗ рдЕрд╕рддрд╛рдд? рдЙрдШрдбреНрдпрд╛ рдореИрджрд╛рдирд╛рдд рдирд╛рд╣реА тАФ рдЧреЗрдЯ рдЖрдгрд┐ рдкрддреНрддреНрдпрд╛рдВрдЪрд╛ рдЖрд░рд╛рдЦрдбрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХреБрдВрдкрдг рдШрд╛рддрд▓реЗрд▓реНрдпрд╛ рдХреЕрдореНрдкрд╕рдЪреНрдпрд╛ рдЖрдд. рддреЛ рдХреЕрдореНрдкрд╕ рдореНрд╣рдгрдЬреЗ VPC.

рддреБрдордЪреЗ servers рдХреБрдареЗ рдЬрд╛рддрд╛рдд? Private рд╡рд┐рднрд╛рдЧрд╛рдд, рдиреЗрд╣рдореА. рдлрдХреНрдд reception рдЪрд╛ рдмрд╛рдХ (load balancer тАФ рдкреБрдврдЪреЗ рдзрдбреЗ) public рд╡рд┐рднрд╛рдЧрд╛рдд рдЙрднрд╛ рдЕрд╕рддреЛ.

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

flowchart TB
    net["ЁЯМН the street (internet)"]
    igw["ЁЯЪз IGW тАФ the main gate"]
    subgraph vpc["ЁЯПл VPC 10.0.0.0/16 тАФ the fenced campus"]
      subgraph aza["ЁЯПв building A (AZ-a)"]
        pub["ЁЯЪк public wing 10.0.1.0/24<br/>route: 0.0.0.0/0 тЖТ gate<br/>ЁЯУо NAT lives here"]
        priv["ЁЯФТ private wing 10.0.101.0/24<br/>route: 0.0.0.0/0 тЖТ NAT<br/>ЁЯЦея╕П your desks live here"]
      end
    end
    net -->|"1"| igw -->|"2"| pub
    priv -->|"3 out only"| pub

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

ЁЯдФ рдХрд╛

Cloud рдордзрд▓реЗ рдкреНрд░рддреНрдпреЗрдХ "рдкреЛрд╣реЛрдЪрддрд╛ рдпреЗрдд рдирд╛рд╣реА" рдЧреВрдв рддреАрдирдкреИрдХреА рдПрдХрд╛ рдлрд▓рдХрд╛рдореБрд│реЗ рдЕрд╕рддреЗ: рдкрд╛рд╣реБрдгреНрдпрд╛рдВрдЪреА рдпрд╛рджреА (SG), corridor рдлрд▓рдХ (route table), рдХрд┐рдВрд╡рд╛ рдЧреЗрдЯ (IGW/NAT). рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЗрддрд░ course рдиреЗ рд╣рд╛рдЪ рдЖрд░рд╛рдЦрдбрд╛ рдЧреГрд╣реАрдд рдзрд░рд▓рд╛ рд╣реЛрддрд╛: k8s cluster рдЪреЗ nodes private рд╡рд┐рднрд╛рдЧрд╛рдд рдЙрднреЗ рдЕрд╕рддрд╛рдд; рддреНрдпрд╛рдЪрд╛ load balancer public рд╡рд┐рднрд╛рдЧрд╛рдд. рдпрд╛ рдзрдбреНрдпрд╛рдирдВрддрд░ рддреЗ рд╡рд╛рдХреНрдп рддреБрдордЪреНрдпрд╛ рдбреЛрдХреНрдпрд╛рдд рдПрдХ рдЪрд┐рддреНрд░ рдмрдирддреЗ.

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

# see the campus you never knew you had:
aws ec2 describe-vpcs --query 'Vpcs[].{id:VpcId,cidr:CidrBlock,default:IsDefault}'
aws ec2 describe-subnets --query 'Subnets[].{id:SubnetId,az:AvailabilityZone,cidr:CidrBlock,public:MapPublicIpOnLaunch}'

ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (~10 рдорд┐рдирд┐рдЯреЗ, рдореЛрдлрдд тАФ lab рдордзреНрдпреЗ NAT рдирд╛рд╣реА!)

cd vpc && terraform init && terraform apply     # campus, 2 wings, gate, signs
aws ec2 describe-route-tables --filters Name=vpc-id,Values=$(terraform output -raw vpc_id) \
  --query 'RouteTables[].Routes'                # read the corridor signs yourself
terraform destroy                               # tear the campus down (free, but tidy)

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

public subnet рд╕рд╛рдареА describe-route-tables рдПрдХ 0.0.0.0/0 тЖТ igw-тАж route рджрд╛рдЦрд╡рддреЛ; private subnet рдЪреНрдпрд╛ table рдордзреНрдпреЗ рдлрдХреНрдд local рджрд┐рд╕рддреЛ.

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

рд╕рд╛рдл рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реА рдирд╛рд╣реА тАФ рд╣рд╛ рдзрдбрд╛ рдореЛрдлрдд рдЖрд╣реЗ ЁЯОЙ

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

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

рдмрд╛рдХрд╛рдВрдирд╛ рдХреЕрдореНрдкрд╕ рдорд┐рд│рд╛рд▓рд╛. рдкрдг рд╢рд╛рд│рд╛ рд╕рд╛рдорд╛рди рдХреБрдареЗ рдареЗрд╡рддреЗ тАФ files, backups, images, рд╡рд╛рд░реНрд╖рд┐рдХ рдЕрдВрдХ? рдзрдбрд╛ 14: S3, рдЕрдорд░реНрдпрд╛рдж locker room.

ЁЯПл Lesson 13 тАФ VPC: the campus walls

ЁЯУН You are here: Lesson 13 of 20 тАФ Part 3 begins! ┬╖ Previous: lesson-12-ec2-in-real-life ┬╖ Next: lesson-14-s3


ЁЯУж What's in this branch

Lessons 01тАУ13. Part 3 opens with the thing lessons 7тАУ12 quietly stood on: the network your desks sit inside. Real file:

ЁЯзТ Explain like I'm 5

Where do EC2 desks actually stand? Not in an open field тАФ inside a fenced campus with a gate and an address plan. That campus is a VPC.

Where do your servers go? Private wings, always. Only the reception desk (the load balancer тАФ next lessons) stands in the public wing.

ЁЯЧ║я╕П Diagram

flowchart TB
    net["ЁЯМН the street (internet)"]
    igw["ЁЯЪз IGW тАФ the main gate"]
    subgraph vpc["ЁЯПл VPC 10.0.0.0/16 тАФ the fenced campus"]
      subgraph aza["ЁЯПв building A (AZ-a)"]
        pub["ЁЯЪк public wing 10.0.1.0/24<br/>route: 0.0.0.0/0 тЖТ gate<br/>ЁЯУо NAT lives here"]
        priv["ЁЯФТ private wing 10.0.101.0/24<br/>route: 0.0.0.0/0 тЖТ NAT<br/>ЁЯЦея╕П your desks live here"]
      end
    end
    net -->|"1"| igw -->|"2"| pub
    priv -->|"3 out only"| pub

тЭУ What

ЁЯдФ Why

Every "can't reach it" mystery in the cloud is one of three signs: the guest list (SG), the corridor sign (route table), or the gate (IGW/NAT). And every other course assumed this floor plan: the k8s cluster's nodes stand in private wings; its load balancer stands in the public one. After this lesson, that sentence is a picture in your head.

ЁЯФз How

# see the campus you never knew you had:
aws ec2 describe-vpcs --query 'Vpcs[].{id:VpcId,cidr:CidrBlock,default:IsDefault}'
aws ec2 describe-subnets --query 'Subnets[].{id:SubnetId,az:AvailabilityZone,cidr:CidrBlock,public:MapPublicIpOnLaunch}'

ЁЯзк Try it (~10 min, free тАФ no NAT in the lab!)

cd vpc && terraform init && terraform apply     # campus, 2 wings, gate, signs
aws ec2 describe-route-tables --filters Name=vpc-id,Values=$(terraform output -raw vpc_id) \
  --query 'RouteTables[].Routes'                # read the corridor signs yourself
terraform destroy                               # tear the campus down (free, but tidy)

тЬЕ Verify тАФ what you should see

describe-route-tables for the public subnet shows a 0.0.0.0/0 тЖТ igw-тАж route; the private subnet's table shows only local.

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

nothing to clean up тАФ this lesson is free ЁЯОЙ

тЪая╕П Common mistakes

тПня╕П Next

The desks have a campus. But where does the school keep stuff тАФ files, backups, images, the yearbook? Lesson 14: S3, the infinite locker room.

тЖР Previousec2 in real lifeNext тЖТs3

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