ЁЯУо рдзрдбрд╛ 22 тАФ NAT gateway: рдПрдХрдорд╛рд░реНрдЧреА рдЯрдкрд╛рд▓рдкреЗрдЯреА, рдЦреЛрд▓рд╛рдд
ЁЯУН рддреБрдореНрд╣реА рдЗрдереЗ рдЖрд╣рд╛рдд: 25 рдкреИрдХреА рдзрдбрд╛ 22 ┬╖ рдорд╛рдЧреАрд▓: lesson-21-subnet-networking ┬╖ рдкреБрдвреАрд▓: lesson-23-route53-routing
ЁЯУж рдпрд╛ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдХрд╛рдп рдЖрд╣реЗ
рдзрдбреЗ 01тАУ22. Campus рдирдХрд╛рд╢рд╛рд╡рд░рдЪреНрдпрд╛ рд╕рдЧрд│реНрдпрд╛рдд рдЬрд╛рд╕реНрдд bill рд╣реЛрдгрд╛рд▒реНрдпрд╛ рдбрдмреНрдпрд╛рд▓рд╛ рд╕реНрд╡рддрдГрдЪрд╛ рдзрдбрд╛ рдорд┐рд│рддреЛ. рдЦрд░реА file:
- vpc/nat.tf тАФ рдкреНрд░рддреНрдпреЗрдХ рдЗрдорд╛рд░рддреАрд╕рд╛рдареА рдПрдХ рдЯрдкрд╛рд▓рдкреЗрдЯреА, рдЦрд░реНрдЪрд╛рдЪреНрдпрд╛ рдЗрд╢рд╛рд▒реНрдпрд╛рд╕рд╣ рд▓рд┐рд╣рд┐рд▓реЗрд▓реА
ЁЯзТ 5 рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рдореБрд▓рд╛рд▓рд╛ рд╕рдордЬрд╛рд╡рд▓реНрдпрд╛рд╕рд╛рд░рдЦреЗ
Private рд╡рд┐рднрд╛рдЧрд╛рддрд▓реНрдпрд╛ рдмрд╛рдХрд╛рдВрдирд╛ рд░рд╕реНрддреНрдпрд╛рдХрдбреЗ рдЦрд┐рдбрдХреНрдпрд╛ рдирд╛рд╣реАрдд (рдзрдбрд╛ 13) тАФ рдкрдг рддреНрдпрд╛рдВрдирд╛ рддрд░реАрд╣реА рдкрддреНрд░реЗ рдкрд╛рдард╡рд╛рд╡реА рд▓рд╛рдЧрддрд╛рдд: updates рдЖрдгрдгреЗ, API рд▓рд╛ call рдХрд░рдгреЗ, image pull рдХрд░рдгреЗ. NAT gateway ЁЯУо рдореНрд╣рдгрдЬреЗ public рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рднрд┐рдВрддреАрд▓рд╛ рдмрд╕рд╡рд▓реЗрд▓реА рдЯрдкрд╛рд▓рдкреЗрдЯреА:
- рдмрд╛рдХ рддреНрдпрд╛рдд рдкрддреНрд░ рдЯрд╛рдХрддреЛ; рдЯрдкрд╛рд▓рдкреЗрдЯреА рдкрд░рддреАрдЪрд╛ рдкрддреНрддрд╛ рдмрджрд▓реВрди рд╕реНрд╡рддрдГрдЪрд╛ public рдкрддреНрддрд╛ рд▓рд┐рд╣рд┐рддреЗ (Elastic IP ЁЯП╖я╕П), рддреЗ gate рдордзреВрди рдмрд╛рд╣реЗрд░ рдиреЗрддреЗ, рдЖрдгрд┐ рдЙрддреНрддрд░ рдпреЛрдЧреНрдп рдмрд╛рдХрд╛рдХрдбреЗ рдкрд░рдд рджреЗрддреЗ. Campus рдмрд╛рд╣реЗрд░ рдлрдХреНрдд рдЯрдкрд╛рд▓рдкреЗрдЯреАрдЪрд╛рдЪ рдкрддреНрддрд╛ рдХрдзреАрд╣реА рджрд┐рд╕рддреЛ тАФ рдЕрдиреЛрд│рдЦреА рд▓реЛрдХ private рдмрд╛рдХрд╛рд▓рд╛ рдкрддреНрд░ рдкрд╛рдард╡реВ рд╢рдХрдд рдирд╛рд╣реАрдд рдХрд╛рд░рдг рддреНрдпрд╛рдВрдирд╛ рддреНрдпрд╛рдЪрд╛ рдЖрдХрдбрд╛ рдорд╛рд╣реАрдд рдирд╕рддреЛ, рдЖрдгрд┐ рдлрд▓рдХ рддреНрдпрд╛рдВрдирд╛ рдЖрдд рдпреЗрдгреНрдпрд╛рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рдорд╛рд░реНрдЧ рджреЗрдд рдирд╛рд╣реА. рдмрд╛рд╣реЗрд░ рд╣реЛрдп, рдЖрдд рдирд╛рд╣реА. рд╣реАрдЪ рд╕рдВрдкреВрд░реНрдг security рдЪреА рдЧреЛрд╖реНрдЯ.
- рддреЗ managed рдЖрд╣реЗ: AWS рддреЗ рдЪрд╛рд▓реВ рдареЗрд╡рддреЛ рдЖрдгрд┐ ~100 Gbps рдкрд░реНрдпрдВрдд scale рдХрд░рддреЛ.
- рддреЗ рдПрдХрд╛рдЪ рдЗрдорд╛рд░рддреАрдд (AZ) рд░рд╛рд╣рддреЗ. рдЗрдорд╛рд░рдд A рдЬрд│рд▓реА, рддрд░ A рдордзрд▓реА рдЯрдкрд╛рд▓рдкреЗрдЯреАрд╣реА рдЬрд╛рддреЗ тАФ рдЖрдгрд┐ рдЬреНрдпрд╛ рдЗрдорд╛рд░рдд B рдордзрд▓реНрдпрд╛ рдмрд╛рдХрд╛рдВрдирд╛ "A рдордзрд▓реНрдпрд╛ рдЯрдкрд╛рд▓рдкреЗрдЯреАрддреВрди рдкрддреНрд░ рдкрд╛рдард╡рд╛" рдЕрд╕реЗ рд╕рд╛рдВрдЧрд┐рддрд▓реЗ рд╣реЛрддреЗ, рддреЗ рдЕрдЪрд╛рдирдХ рдореБрдХреЗ рд╣реЛрддрд╛рдд. рдЦрд░реЗ campuses рд╕рд╣рд╕рд╛ рдкреНрд░рддреНрдпреЗрдХ рдЗрдорд╛рд░рддреАрдд рдПрдХ рдЯрдкрд╛рд▓рдкреЗрдЯреА рдареЗрд╡рддрд╛рдд тАФ рд╣рд╛ рдирд┐рдпрдо рдирд╛рд╣реА, resilience рдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдЖрд╣реЗ тАФ рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ private рд╡рд┐рднрд╛рдЧрд╛рд▓рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдЗрдорд╛рд░рддреАрдЪреНрдпрд╛ рдЯрдкрд╛рд▓рдкреЗрдЯреАрдХрдбреЗ рд╡рд│рд╡рддрд╛рдд (nat.tf рдиреЗрдордХреЗ рддреЗрдЪ рдХрд░рддреЗ).
рдЖрддрд╛ bill ЁЯз╛ (рдзрдбрд╛ 20 рдЪрд╛ рдкрд╛рд░рдВрдкрд░рд┐рдХ): рдЯрдкрд╛рд▓рдкреЗрдЯреАрдЪрд╛ рдЦрд░реНрдЪ рдлрдХреНрдд рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рдгреНрдпрд╛рд╕рд╛рдареА ~$32/month рдЕрдзрд┐рдХ рддреНрдпрд╛рддреВрди рдЬрд╛рдгрд╛рд▒реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ GB рд▓рд╛ ~4┬в тАФ рджреЛрдиреНрд╣реА рджрд┐рд╢рд╛рдВрдиреА. рджреЛрди рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛: (1) A рдЪреНрдпрд╛ рдЯрдкрд╛рд▓рдкреЗрдЯреАрддреВрди рдкрддреНрд░ рдкрд╛рдард╡рдгрд╛рд░реЗ B рдордзрд▓реЗ рдмрд╛рдХ рд╡рд░реВрди cross-AZ data рд╢реБрд▓реНрдХ рднрд░рддрд╛рдд; (2) рдЦрд╛рдЬрдЧреА corridor (рдзрдбрд╛ 21 рдЪрд╛ endpoint) рдореЛрдлрдд рдиреЗрдИрд▓ рдЕрд╕рд╛ gigabytes S3/ECR traffic рдЯрдкрд╛рд▓рдкреЗрдЯреАрддреВрди рдкрд╛рдард╡рдгреЗ.
рдирд╛рддреЗрд╡рд╛рдИрдХ: рдЬреБрдирд╛ NAT instance (рдЯрдкрд╛рд▓рдкреЗрдЯреА рдореНрд╣рдгреВрди рддреБрдореНрд╣реА рд╕реНрд╡рддрдГ рдЪрд╛рд▓рд╡рд▓реЗрд▓рд╛ рдмрд╛рдХ тАФ рд╕реНрд╡рд╕реНрдд, рдкрдг patch рддреБрдореНрд╣реА рдХрд░рддрд╛ рдЖрдгрд┐ рддреЛ scale рд╣реЛрдд рдирд╛рд╣реА), рдЖрдгрд┐ IPv6 рд╕рд╛рдареА egress-only internet gateway (рддреЗрдЪ "рдмрд╛рд╣реЗрд░ рд╣реЛрдп, рдЖрдд рдирд╛рд╣реА", NAT рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА рдХрд╛рд░рдг IPv6 рдкрддреНрддреЗ рдЖрдзреАрдЪ public рдЕрд╕рддрд╛рдд).
ЁЯЧ║я╕П рдЖрдХреГрддреА
flowchart LR
d["ЁЯЦея╕П private desk (AZ-a)<br/>10.0.101.7"]
nat["ЁЯУо NAT gateway (public wing, AZ-a)<br/>Elastic IP 3.7.x.x"]
igw["ЁЯЪз IGW"]
net["ЁЯМН internet"]
d -->|"1 letter, from 10.0.101.7"| nat
nat -->|"2 return address rewritten"| igw --> net
net -.->|"3 reply тЖТ postbox тЖТ desk"| nat
net -. "тЬЧ no way to reach 10.0.101.7 directly" .-> d
тЭУ рдХрд╛рдп
- рдЧрд░рдЬрд╛: рдПрдХ public subnet, рдПрдХ Elastic IP, рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХ private subnet рдЪреНрдпрд╛
table рдордзреНрдпреЗ route
0.0.0.0/0 тЖТ nat-xxxx. - HA pattern (рд╢рд┐рдлрд╛рд░рд╕, рд╕рдХреНрддреА рдирд╛рд╣реА): рдкреНрд░рддреНрдпреЗрдХ AZ рд▓рд╛ рдПрдХ NAT; рдкреНрд░рддреНрдпреЗрдХ private subnet рддреНрдпрд╛рдЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ AZ рдЪреНрдпрд╛ NAT рдХрдбреЗ route рдХрд░рддреЛ. рдПрдХрдЪ рд╕рд╛рдорд╛рдпрд┐рдХ NAT = рд╕реНрд╡рд╕реНрдд, failure рдЪрд╛ рдПрдХрдЪ рдмрд┐рдВрджреВ, cross-AZ рд╢реБрд▓реНрдХ.
- рдЦрд░реНрдЪ рдХрдореА рдХрд░рдгреНрдпрд╛рдЪреЗ рдЙрдкрд╛рдп: S3/DynamoDB рд╕рд╛рдареА gateway endpoints (рдореЛрдлрдд), рдмрдбрдмрдбреНрдпрд╛ AWS APIs рд╕рд╛рдареА interface endpoints, рдореЛрдареЗ downloads (AMIs, images) рддреБрдордЪреНрдпрд╛ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ region рдордзреНрдпреЗрдЪ рдареЗрд╡рд╛, internet рдХрдбреЗ рддреЛрдВрдб рдЕрд╕рд▓реЗрд▓реЗ рдХрд╛рдо рддреНрдпрд╛рдРрд╡рдЬреА ALB рдорд╛рдЧреЗ рдареЗрд╡рд╛.
- рдХрд┐рдВрдордд (us-east-1, рдЕрдВрджрд╛рдЬреЗ): $0.045/hour + $0.045/GB processed.
ЁЯдФ рдХрд╛
рд▓рд╣рд╛рди account рдордзрд▓реЗ рдЬрд╡рд│рдЬрд╡рд│ рдкреНрд░рддреНрдпреЗрдХ "рдзрдХреНрдХрд╛рджрд╛рдпрдХ" AWS bill рдореНрд╣рдгрдЬреЗ рдХреЛрдгреАрддрд░реА рд╡рд┐рд╕рд░рд▓реЗрд▓рд╛ NAT gateway, рдХрд┐рдВрд╡рд╛ endpoint рд╡реНрд╣рд╛рдпрд▓рд╛ рд╣рд╡рд╛ рд╣реЛрддрд╛ рдЕрд╕рд╛ NAT traffic. рдЯрдкрд╛рд▓рдкреЗрдЯреА рдиреЗрдордХреЗ рдХрд╛рдп рдХрд░рддреЗ тАФ рдЖрдгрд┐ рдХрд╛рдп рдХрд░рдд рдирд╛рд╣реА тАФ рд╣реЗ рдорд╛рд╣реАрдд рдЕрд╕рд▓реЗ рдХреА campus рдЕрд╕рд╛ design рдХрд░рддрд╛ рдпреЗрддреЛ рдХреА рдЯрдкрд╛рд▓рдкреЗрдЯреА рд▓рд╣рд╛рди, рдкреНрд░рддреНрдпреЗрдХ рдЗрдорд╛рд░рддреАрдд рдПрдХ, рдЖрдгрд┐ рдлрдХреНрдд рдмрд╛рд╣реЗрд░ рдЬрд╛рдпрд▓рд╛рдЪ рд╣рд╡реЗ рддреЗрдЪ рдиреЗрдгрд╛рд░реА рдЕрд╕реЗрд▓.
ЁЯФз рдХрд╕реЗ
aws ec2 describe-nat-gateways --filter Name=state,Values=available \
--query 'NatGateways[].{id:NatGatewayId,az:SubnetId,eip:NatGatewayAddresses[0].PublicIp}'
# what's flowing through it (last hour, GB out):
aws cloudwatch get-metric-statistics --namespace AWS/NATGateway --metric-name BytesOutToDestination \
--dimensions Name=NatGatewayId,Value=$NAT --start-time $(date -u -v-1H +%FT%TZ) \
--end-time $(date -u +%FT%TZ) --period 3600 --statistics Sum
ЁЯзк рдХрд░реВрди рдкрд╛рд╣рд╛ (~15 рдорд┐рдирд┐рдЯреЗ, ~10┬в тАФ рддрд╛рд╕рд╛рдкреНрд░рдорд╛рдгреЗ bill рд╣реЛрдгрд╛рд░рд╛ рдкрд╣рд┐рд▓рд╛ lab, рдореНрд╣рдгреВрди DESTROY рдХрд░рд╛)
cd vpc && terraform apply -var enable_nat=true # adds a postbox in AZ-a + the private route
# from a private desk (SSM, lesson 09): curl -s ifconfig.me тЖТ prints the postbox's Elastic IP
terraform destroy # тП░ before you do anything else
тЬЕ рддрдкрд╛рд╕рд╛ тАФ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рдп рджрд┐рд╕рд╛рдпрд▓рд╛ рд╣рд╡реЗ
Private рдмрд╛рдХрд╛рд╡рд░реВрди curl ifconfig.me NAT рдЪрд╛ Elastic IP рдЫрд╛рдкрддреЛ; рдмрд╛рд╣реЗрд░реВрди, рдмрд╛рдХрд╛рдЪрд╛ private IP рдкреЛрд╣реЛрдЪрдгреНрдпрд╛рдЬреЛрдЧрд╛ рдирд╕рддреЛ.
ЁЯз╣ рд╕рд╛рдлрд╕рдлрд╛рдИ тАФ рдЪрд╛рд▓реВ рдареЗрд╡реВ рдирдХрд╛
рд▓рдЧреЗрдЪ terraform destroy тАФ NAT gateway рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рддрд╛рд╕рд╛рд▓рд╛ ~$0.045 bill рдХрд░рддреЛ; рдордЧ describe-nat-gateways рд░рд┐рдХрд╛рдореЗ рдЖрд╣реЗ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛ рдЖрдгрд┐ Elastic IP release рдХрд░рд╛
тЪая╕П рдиреЗрд╣рдореАрдЪреНрдпрд╛ рдЪреБрдХрд╛
- рд╕рдЧрд│реНрдпрд╛ AZs рд╕рд╛рдареА рдПрдХрдЪ NAT тАФ failure рдЪрд╛ рдПрдХрдЪ рдмрд┐рдВрджреВ рдЖрдгрд┐ рд╡рд░реВрди cross-AZ рд╢реБрд▓реНрдХ
- NAT private subnet рдордзреНрдпреЗ рдареЗрд╡рдгреЗ тАФ рддреНрдпрд╛рд▓рд╛ public рд╡рд┐рднрд╛рдЧ рд▓рд╛рдЧрддреЛ
- Elastic IP release рдХрд░рд╛рдпрд▓рд╛ рд╡рд┐рд╕рд░рдгреЗ (рди рдЬреЛрдбрд▓реЗрд▓рд╛ EIP рд╕реБрджреНрдзрд╛ bill рд╣реЛрддреЛ)
тПня╕П рдкреБрдвреЗ
Campus рдмрд╛рд╣реЗрд░ рдкрддреНрд░реЗ рдкрд╛рдард╡реВ рд╢рдХрддреЛ. рдЖрддрд╛ phonebook рд▓рд╛ "рдПрдХ рдирд╛рд╡ тЖТ рдПрдХ рдЖрдХрдбрд╛" рдкреЗрдХреНрд╖рд╛ рд╣реБрд╢рд╛рд░ рдмрдирд╡реВрдпрд╛. рдзрдбрд╛ 23: Route 53 routing policies рдЖрдгрд┐ private zones.