2022. 8. 14. 10:38ใAWS
โ๏ธ To-Be Architecture

- NLB์ Target Group์ผ๋ก ALB๋ฅผ ์์ฑํ๋ค.
- ALB์ Target Group์ผ๋ก Nginx๋ฅผ ์๋น์ค ์ค์ธ EC2๋ฅผ ์์ฑํ๋ค.
- ALB์์ Stickiness๋ฅผ ํ์ฑํํ๊ณ , NLB๋ก ์ง์ ์ธ์
ํ๋ ํธ๋ํฝ๋ ๊ฐ์ destination์ผ๋ก ๋๋ฌํ๋์ง ํ์ธํด๋ณด์.
1๏ธโฃ EC2 ๊ตฌ์ฑ
Nginx๋ฅผ ์ค์นํ EC2 4๊ฐ๋ฅผ ๊ตฌ์ฑํ๊ณ ๊ฐ ์๋ฒ์ index.html ํ์ผ์ ๊ตฌ๋ถํ๊ธฐ ์ข๊ฒ ๋ณ๊ฒฝํ๋ค.
sudo su -
yum install nginx
# OS๊ฐ Amazon Linux2์ธ ๊ฒฝ์ฐ์ nginx ์ค์น ๋ช
๋ น์ด
# amazon-linux-extras install -y nginx1
#(์ ํ์ฌํญ)๊ฐ ์๋ฒ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ข๊ฒ html ๋ณ๊ฒฝ
vi /usr/share/nginx/html/index.html
# nginx ์๋น์ค ์์
systemctl start nginx
systemctl enable nginx
๋ณธ ํฌ์คํ ์์๋ ๊ตฌ๋ถ์ ์ํด ์๋์ ๊ฐ์ด index.html์์ header๋ฅผ ๊ฐ ์๋ฒ์ ๋ฒํธ๋ก ๋ณ๊ฒฝํ์๋ค.

2๏ธโฃ ALB ๊ตฌ์ฑ
internet-facing type์ผ๋ก ALB๋ฅผ ์์ฑํ๋ค. (ํ
์คํธ๋ฅผ ์ํ internet-facing์ด๋ฉฐ, internal๋ก ์์ฑํด๋ ๋ฌด๊ดํ๋ค.)
1๋ฒ์ EC2 4๋๋ฅผ ํฌํจํ๋ Target Group์ ์์ฑํ ํ, ALB์ ์ฐ๊ฒฐํ๋ค.
์ฐธ๊ณ ๋ก, Target Type์ด instance์ธ Target Group์ default ์ค์ ์ Stickiness๊ฐ ๋นํ์ฑํ๋์ด ์์ผ๋ฉฐ Loabalancing algorithm์ Round Robin์ด๋ค.
ALB์ Target Group ์ค์ > Attributes ํญ์์ Stickiness๋ฅผ enable ํ์.

ํต์ ์ ์ํด ALB์ ๋ณด์ ๊ทธ๋ฃน์ ์์ค์ ๋ํด 80๋ฒ ํฌํธ๋ฅผ ์คํํ๋ ์ธ๋ฐ์ด๋ ๊ท์น์ ์ถ๊ฐํ๋ค.
Stickiness๋ฅผ enable ํ ํ, ๊ฐ์ ๋ธ๋ผ์ฐ์ ์์ ALB์ endpoint๋ฅผ ํธ์ถํ๋ฉด ๊ณ์ ๊ฐ์ ํ๋ฉด์ด ๋์จ๋ค.
์๋์ ๊ฐ์ด ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ์์ ALB endpoint ํธ์ถ ์, ๊ณ์ํด์ 2๋ฒ ์๋ฒ๊ฐ ํธ์ถ๋์ด ALB์ Sticky Session์ด ์ ์์ ์ผ๋ก ๋์ํ๊ณ ์์์ ์ ์ ์์๋ค.

3๏ธโฃ NLB ๊ตฌ์ฑ
- Target Type์ด Application Load Balancer์ธ ํ๊ฒ๊ทธ๋ฃน์ ์์ฑํ๊ณ , 2๋ฒ์์ ์์ฑํ ALB๋ฅผ ์ฐ๊ฒฐํ๋ค. (โ ์ฐธ๊ณ ๋ฌธ์)
- ๋จ, ALB์ ํ๊ฒ๊ทธ๋ฃน ์์ฑ ์ ์ง์ ํ ํฌํธ์ ๋์ผํ ํฌํธ์ ๋ฆฌ์ค๋๊ฐ ์์ด์ผ ํ๋ค.
- ๋จ, ํ๋กํ ์ฝ์ TCP๋ง ํ์ฉ๋๋ค.
- ALB๊ฐ Target์ธ Target Group ์ค์ ์์ Attributes๋ ์๋์ ๊ฐ์ด ํธ์ง์ด ๋นํ์ฑํ๋์ด ์๋ค.
- Stickeness๊ฐ Disabled ๋์ด ์๊ณ , ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค.

2๋ฒ์์ ํ ์คํธํ ๊ฐ์ ๋ธ๋ผ์ฐ์ ์์ NLB endpoint๋ฅผ ํธ์ถํด๋ณด์. ๊ณ์ ๊ฐ์ URL ํธ์ถ ์, 3๋ฒ ์๋ฒ๊ฐ ๊ณ์ ํธ์ถ๋๋ ๊ฒ์ ์ ์ ์์๋ค. โ NLB ํธ์ถ ์์๋ ALB์ Sticky Session์ด ์ ๋์ํจ์ ํ์ธํ ์ ์๋ค.

๐ก ๊ฒฐ๋ก
NLB์ ๋์ ๊ทธ๋ฃน์ด ALB์ธ ๊ฒฝ์ฐ, TCP ํธ๋ํฝ์ ์ฌ์ฉํ๊ณ ํ๋กํ ์ฝ, ์๋ณธ IP ์ฃผ์, ์๋ณธ ํฌํธ, ๋์ IP ์ฃผ์, ๋์ ํฌํธ, TCP ์ํ์ค ๋ฒํธ์ ๋ฐ๋ผ ํ๋ฆ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋์์ ์ ํํ๋ค. ๊ฐ ๊ฐ๋ณ TCP ์ฐ๊ฒฐ์ ์ฐ๊ฒฐ ์ฃผ๊ธฐ( the life of the connection) ๋์ ๋จ์ผ ๋์์ผ๋ก ๋ผ์ฐํ
๋๋ค. (โ ์ฐธ๊ณ ๋ฌธ์)
๋์ผํ TCP ์ฐ๊ฒฐ์์ ์ค๋ ๋ชจ๋ ์์ฒญ์ด ๋์ผํ ๋์์ผ๋ก ๋ผ์ฐํ
๋๋ฏ๋ก NLB์ ๊ณ ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ๋์ผํ ์์ค IP์์ ์ค๋ ์ฌ๋ฌ TCP ์ฐ๊ฒฐ์ ๋ชจ๋ ํธ๋ํฝ์ด ๋์ผํ ๋์์ ๋๋ฌํ๋๋ก ํ๋ ค๋ฉด NLB์ ๋์ ๊ทธ๋ฃน์์ ๊ณ ์ ์ฑ์ ํ์ฑํํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. (โ ์ฐธ๊ณ ๋ฌธ์)
NLB์ ๋์๊ทธ๋ฃน์ด ALB์ด๊ณ ALB์ Stickiness๊ฐ ํ์ฑํ๋์ด ์๋ ๊ฒฝ์ฐ, NLB๋ก ์ธ์
๋๋ ํธ๋ํฝ์ ๋ํด์๋ ๊ณ ์ ์ธ์
์ด ์ ์์ ์ผ๋ก ๋์ํ๋ค.
โ ELB์ Access Log๋ฅผ ํตํด Sticky Session ๋์ ์ฌ๋ถ๋ฅผ ํ์ธํด๋ณด์
๊ณ ์ ์ธ์
์ด ์ ๋์ํ๋์ง ์๊ธฐ ์ํด์๋ ๊ฐ์ Source์ ๋ํด ๊ฐ์ Destinaion์ผ๋ก ํธ๋ํฝ์ด ๋์ฐฉํ๋์ง ํ์ธํ๋ฉด ๋๋ค.
๋ณธ ํฌ์คํ
์์๋ EC2์ Nginx๋ฅผ ๊ตฌ๋ํ์ฌ ๊ฐ์ ์นํ์ด์ง๊ฐ ๊ณ์ ํธ์ถ๋๋ ๊ฒ์ ํตํด ๊ณ ์ ์ธ์
๋์ ์ฌ๋ถ๋ฅผ ํ์ธํ์๋ค.
์ด์ธ์, Access Log์์ ๊ฐ์ Source์ผ ๋ ๊ฐ์ Destination์ด ํธ์ถ๋๋ ๊ฒ์ ํ์ธํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
๊ทธ๋ฌ๋ ๋ณธ ํฌ์คํ
๊ณผ ๊ฐ์ด NLB์ Target Group์ด ALB์ธ ๊ฒฝ์ฐ, NLB์ Access Log๋ฅผ ์ค์ ํ ์ ์๋ค.
NLB๋ TLS ๋ฆฌ์ค๋๊ฐ ์๊ณ ์ก์ธ์ค ๋ก๊ทธ๊ฐ TLS ์์ฒญ์ ๊ดํ ์ ๋ณด๋ง ํฌํจํ๋ ๊ฒฝ์ฐ์๋ง ์ก์ธ์ค ๋ก๊ทธ๊ฐ ์์ฑ๋๋ค. ALB๋ฅผ ํ๊ฒ ๊ทธ๋ฃน์ผ๋ก ํ๋ ๊ฒฝ์ฐ์๋ TCP ํ๋กํ ์ฝ๋ง ํ์ฉ๋๋ฏ๋ก ํด๋น NLB์ Access Log๋ ์์ฑํ ์ ์๋ค. (โ ์ฐธ๊ณ ๋ฌธ์)
์ฐธ๊ณ ๋ฅผ ์ํด, ALB์ ๋ํด์๋ง Access Log๋ฅผ ์ค์ ํด๋ณด์.
1. S3 ๋ฒํท ์์ฑ
AWS Elastic LoadBalancer์ access log๋ฅผ ์ ์ฅํ S3 ๋ฒํท์ ์์ฑํ๋ค.
2. S3 Bucket Policy ์ ์ฉ
1๋ฒ์์ ์์ฑํ S3 Bucket์ ์์ ๊ฐ์ Bucket Policy๋ฅผ ์ง์ ํ๋ค.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::elb-account-id:root"
},
"Action": "s3:PutObject",
"Resource": "arn:aws:s3:::bucket_name/prefix/AWSLogs/aws-account-id/*"
}
]
}
โPrincipalโ์ โAWSโ ๊ฐ์ ํด๋นํ๋ elb-account-id๋ Region๋ง๋ค ๋ค๋ฅด๋ค.
(Seoul elb-account-id : 600734575887 โ ์ฐธ๊ณ ๋ฌธ์)
3. ELB Access logs ํ์ฑํ
ALB์ Description ํญ์ Attributes ์น์ ์์ Access Logs๋ฅผ ํ์ฑํํ๋ค.

s3 location์ 1์์ ์์ฑํ ๋ฒํท์ผ๋ก ์ง์ ํ๋ค. ์ํ๋ ๊ฒฝ์ฐ, prefix๋ฅผ ์ง์ ํ๋ค.

4. S3 ๋ฒํท ๋ด ๋ก๊ทธ ํ์ผ ํ์ธ
prefix๋ก ์ง์ ํ ํด๋ ๊ฐ์ฒด ๋ฐ ํด๋ ๋ด๋ถ์ Access Logs ํ์ผ๋ค์ด ์์ฑ๋์ด ์๋ค.
๊ฐ์ Source IP์ ๋ํด ๊ฐ์ Destination IP๋ก ์ฐ๊ฒฐ๋จ์ ํตํด ALB์ Sticky Session์ด ์ ๋์ ์ค์์ ์ ์ ์๋ค.
