ЁЯПл рдзрдбрд╛ 13 тАФ VPC: рдХреЕрдореНрдкрд╕рдЪреНрдпрд╛ рднрд┐рдВрддреА
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 20 рдкреИрдХреА рдзрдбрд╛ 13 тАФ рднрд╛рдЧ 3 рд╕реБрд░реВ! ┬╖ рдорд╛рдЧреЗ: lesson-12-ec2-in-real-life ┬╖ рдкреБрдвреЗ: lesson-14-s3
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ13. рднрд╛рдЧ 3 рддреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдиреЗ рд╕реБрд░реВ рд╣реЛрддреЛ рдЬреНрдпрд╛рд╡рд░ рдзрдбреЗ 7тАУ12 рд╢рд╛рдВрддрдкрдгреЗ рдЙрднреЗ рд╣реЛрддреЗ: рддреБрдордЪреЗ рдмрд╛рдХ рдЬреНрдпрд╛рдЪреНрдпрд╛ рдЖрдд рдмрд╕рддрд╛рдд рддреЗ network. рдЦрд░реА file:
- vpc/vpc.tf тАФ code рд╕реНрд╡рд░реВрдкрд╛рддрд▓рд╛ рд╕рдВрдкреВрд░реНрдг рдХреЕрдореНрдкрд╕: VPC, рджреЛрди subnets, рдЧреЗрдЯ, рдлрд▓рдХ
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
EC2 рдмрд╛рдХ рдЦрд░реЗ рдЙрднреЗ рдХреБрдареЗ рдЕрд╕рддрд╛рдд? рдЙрдШрдбреНрдпрд╛ рдореИрджрд╛рдирд╛рдд рдирд╛рд╣реА тАФ рдЧреЗрдЯ рдЖрдгрд┐ рдкрддреНрддреНрдпрд╛рдВрдЪрд╛ рдЖрд░рд╛рдЦрдбрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХреБрдВрдкрдг рдШрд╛рддрд▓реЗрд▓реНрдпрд╛ рдХреЕрдореНрдкрд╕рдЪреНрдпрд╛ рдЖрдд. рддреЛ рдХреЕрдореНрдкрд╕ рдореНрд╣рдгрдЬреЗ VPC.
- VPC ЁЯПл рдореНрд╣рдгрдЬреЗ рдХреБрдВрдкрдг рдЖрдгрд┐ рдкрддреНрддреНрдпрд╛рдВрдЪрд╛ рдЖрд░рд╛рдЦрдбрд╛ (CIDR,
рдЙрджрд╛.
10.0.0.0/16= "рдЖрдкрд▓реНрдпрд╛ рдХреЕрдореНрдкрд╕рдХрдбреЗ 65,536 рдмрд╛рдХ-рдХреНрд░рдорд╛рдВрдХ рдЖрд╣реЗрдд"). - Subnets ЁЯЪк рдореНрд╣рдгрдЬреЗ рдЗрдорд╛рд░рддреАрдВрдЪреЗ рд╡рд┐рднрд╛рдЧ (wings). рдкреНрд░рддреНрдпреЗрдХ subnet рдПрдХрд╛рдЪ рдЗрдорд╛рд░рддреАрдд рд░рд╛рд╣рддреЗ (AZ тАФ рдзрдбрд╛ 07 рдордзрд▓реНрдпрд╛ рдЗрдорд╛рд░рддреА!). Public рд╡рд┐рднрд╛рдЧ рд░рд╕реНрддреНрдпрд╛рдХрдбреЗ рддреЛрдВрдб рдХрд░рддреЛ; private рд╡рд┐рднрд╛рдЧрд╛рд▓рд╛ рд░рд╕реНрддреНрдпрд╛рдХрдбреЗ рдПрдХрд╣реА рдЦрд┐рдбрдХреА рдирд╕рддреЗ.
- Internet Gateway (IGW) ЁЯЪз рдореНрд╣рдгрдЬреЗ рдореБрдЦреНрдп рдЧреЗрдЯ. рдкреНрд░рддреНрдпреЗрдХ рдХреЕрдореНрдкрд╕рд▓рд╛ рдиреЗрдордХреЗ рдПрдХ. рддреБрдордЪреНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рдорд╛рд░реНрдЧрд╛рд╡рд░ рдЧреЗрдЯ рдирд╛рд╣реА = рддреБрдореНрд╣реА рд░рд╕реНрддреНрдпрд╛рдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪреВрдЪ рд╢рдХрдд рдирд╛рд╣реА.
- Route tables ЁЯкз рдореНрд╣рдгрдЬреЗ corridor рдордзрд▓реЗ рдлрд▓рдХ: "10.0.0.0/16 рдЪреЗ рдЯрдкрд╛рд▓ тЖТ рдЖрддрдЪ рд░рд╛рд╣рддреЗ; рдмрд╛рдХреА рд╕рдЧрд│реЗ тЖТ рдореБрдЦреНрдп рдЧреЗрдЯ." рдПрдЦрд╛рджрд╛ рд╡рд┐рднрд╛рдЧ "public" рдлрдХреНрдд рдпрд╛рдореБрд│реЗрдЪ рдЕрд╕рддреЛ рдХреА рддреНрдпрд╛рдЪрд╛ рдлрд▓рдХ рдЧреЗрдЯрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЛ тАФ рд╣реАрдЪ рд╕рдВрдкреВрд░реНрдг рдпреБрдХреНрддреА.
- NAT gateway ЁЯУо рдореНрд╣рдгрдЬреЗ public рд╡рд┐рднрд╛рдЧрд╛рддрд▓реА рдПрдХрдорд╛рд░реНрдЧреА рдЯрдкрд╛рд▓рдкреЗрдЯреА: private рд╡рд┐рднрд╛рдЧрд╛рддреАрд▓ рдореБрд▓реЗ рдкрддреНрд░реЗ рдмрд╛рд╣реЗрд░ рдкрд╛рдард╡реВ рд╢рдХрддрд╛рдд (updates pull рдХрд░рдгреЗ, APIs call рдХрд░рдгреЗ), рдкрдг рдЕрдиреЛрд│рдЦреА рд▓реЛрдХ рдЖрдд рдпреЗрдК рд╢рдХрдд рдирд╛рд╣реАрдд. тЪая╕П рдЗрдерд▓реА рд╣реАрдЪ рдПрдХ рдЧреЛрд╖реНрдЯ рджрд░ рддрд╛рд╕рд╛рд▓рд╛ рдЦрд░реЗ рдкреИрд╕реЗ рдЦрд╛рддреЗ тАФ рдзрдбрд╛ 20 рддреЗ bill рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рдЪреВрди рджрд╛рдЦрд╡реЗрд▓.
рддреБрдордЪреЗ 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
тЭУ рдХрд╛рдп
- VPC: region рдЪреНрдпрд╛ network рдордзрд▓рд╛ рддреБрдордЪрд╛ рдЦрд╛рдЬрдЧреА рддреБрдХрдбрд╛ тАФ рдореЛрдлрдд, рдЕрджреГрд╢реНрдп рдХреБрдВрдкрдг. рдкреНрд░рддреНрдпреЗрдХ account рд▓рд╛ рдПрдХ default VPC рдорд┐рд│рддреЗ (рдзрдбреЗ 7тАУ12 рддрд┐рдереЗрдЪ рдЪрд╛рд▓рд▓реЗ рд╣реЛрддреЗ тАФ рддреБрдореНрд╣реА рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рдПрдХрд╛ рдХреЕрдореНрдкрд╕рд╡рд░ рд╣реЛрддрд╛).
- Subnet = CIDR рдЪрд╛ рддреБрдХрдбрд╛ + рдПрдХ AZ. рдЦрд░реЗ рдХреЕрдореНрдкрд╕: рдкреНрд░рддреНрдпреЗрдХ AZ рдордзреНрдпреЗ рдПрдХ public
- рдПрдХ private subnet, 2тАУ3 AZs рдордзреНрдпреЗ (k8s рдЪрд╛ multi-AZ рдзрдбрд╛, рдПрдХ рдерд░ рдЦрд╛рд▓реА).
- Public subnet = рддреНрдпрд╛рдЪреНрдпрд╛ route table рдордзреНрдпреЗ
0.0.0.0/0 тЖТ igwрдЕрд╕рддреЗ. рджреБрд╕рд░реЗ рдХрд╛рд╣реАрд╣реА рддреНрдпрд╛рд▓рд╛ public рдмрдирд╡рдд рдирд╛рд╣реА. рддрд┐рдерд▓реНрдпрд╛ instances рдирд╛ public IP рд╕реБрджреНрдзрд╛ рд▓рд╛рдЧрддреЛ. - NAT gateway: managed, рдкреНрд░рддреНрдпреЗрдХ AZ рд╕рд╛рдареА, ~$32/month + рдкреНрд░рддрд┐ GB. рдХреНрд▓рд╛рд╕рд┐рдХ budget рдзрдХреНрдХрд╛ (рдзрдбрд╛ 20).
- Security groups (рдзрдбрд╛ 10) рдмрд╛рдХрд╛рдЪреЗ рд░рдХреНрд╖рдг рдХрд░рддрд╛рдд; NACLs рд╡рд┐рднрд╛рдЧрд╛рдЪреЗ рд░рдХреНрд╖рдг рдХрд░рддрд╛рдд тАФ stateless corridor рдирд┐рдпрдо, рдХреНрд╡рдЪрд┐рддрдЪ рд╣рд╛рдд рд▓рд╛рд╡рд▓реЗ рдЬрд╛рдгрд╛рд░реЗ. рдЖрдзреА SGs, рдиреЗрд╣рдореА.
ЁЯдФ рдХрд╛
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 рджрд┐рд╕рддреЛ.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдХрд╛рд╣реАрд╣реА рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛
рд╕рд╛рдл рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реА рдирд╛рд╣реА тАФ рд╣рд╛ рдзрдбрд╛ рдореЛрдлрдд рдЖрд╣реЗ ЁЯОЙ
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- 'рд╡рд╛рд╕реНрддрд╡рд╡рд╛рджреА рд╡реНрд╣рд╛рд╡реЗ рдореНрд╣рдгреВрди' lab рдордзреНрдпреЗ NAT gateway тАФ рдиреБрд╕рддреЗ рдЕрд╕рдгреНрдпрд╛рдЪреЗ ~$32/month
- app servers public рд╡рд┐рднрд╛рдЧрд╛рдд рдареЗрд╡рдгреЗ
- рдПрдХрд╛ AZ рдордзреНрдпреЗ рдПрдХрдЪ subnet рдЖрдгрд┐ рддреНрдпрд╛рд▓рд╛ рдХреЕрдореНрдкрд╕ рдореНрд╣рдгрдгреЗ
тПня╕П рдкреБрдвреЗ
рдмрд╛рдХрд╛рдВрдирд╛ рдХреЕрдореНрдкрд╕ рдорд┐рд│рд╛рд▓рд╛. рдкрдг рд╢рд╛рд│рд╛ рд╕рд╛рдорд╛рди рдХреБрдареЗ рдареЗрд╡рддреЗ тАФ files, backups, images, рд╡рд╛рд░реНрд╖рд┐рдХ рдЕрдВрдХ? рдзрдбрд╛ 14: S3, рдЕрдорд░реНрдпрд╛рдж locker room.