[AWS] NLB-ALB-EC2 ๊ตฌ์กฐ์—์„œ ALB์˜ ๊ณ ์ • ์„ธ์…˜(Stickiness) ๊ธฐ๋Šฅ ํ™œ์šฉํ•˜๊ธฐ (+ALB Access Logs)

2022. 8. 14. 10:38ใ†AWS

โ˜„๏ธ To-Be Architecture

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์ด ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ALB ํ˜ธ์ถœ ์‹œ ์›นํŽ˜์ด์ง€ > 2๋ฒˆ ์„œ๋ฒ„ ํ˜ธ์ถœ๋จ

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์ด ์ž˜ ๋™์ž‘ํ•จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

ALB ํ˜ธ์ถœ ์‹œ ์›นํŽ˜์ด์ง€ > 3๋ฒˆ ์„œ๋ฒ„ ํ˜ธ์ถœ๋จ




๐Ÿ’ก ๊ฒฐ๋ก 

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๋ฅผ ํ™œ์„ฑํ™”ํ•œ๋‹ค.

AWS ELB > Attributes Settins > Enable Access Logs

s3 location์„ 1์—์„œ ์ƒ์„ฑํ•œ ๋ฒ„ํ‚ท์œผ๋กœ ์ง€์ •ํ•œ๋‹ค. ์›ํ•˜๋Š” ๊ฒฝ์šฐ, prefix๋ฅผ ์ง€์ •ํ•œ๋‹ค.

4. S3 ๋ฒ„ํ‚ท ๋‚ด ๋กœ๊ทธ ํŒŒ์ผ ํ™•์ธ

prefix๋กœ ์ง€์ •ํ•œ ํด๋” ๊ฐ์ฒด ๋ฐ ํด๋” ๋‚ด๋ถ€์— Access Logs ํŒŒ์ผ๋“ค์ด ์ƒ์„ฑ๋˜์–ด ์žˆ๋‹ค.
๊ฐ™์€ Source IP์— ๋Œ€ํ•ด ๊ฐ™์€ Destination IP๋กœ ์—ฐ๊ฒฐ๋จ์„ ํ†ตํ•ด ALB์˜ Sticky Session์ด ์ž˜ ๋™์ž‘ ์ค‘์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.





๐Ÿ”— ์ฐธ๊ณ  ๋งํฌ

  1. AWS Docs: ๋Œ€์ƒ์œผ๋กœ์˜ Application Load Balancer
  2. AWS Docs: Network Load Balancer ๊ฐœ์š”
  3. AWS Docs: Network Load Balancer > ๋Œ€์ƒ ๊ทธ๋ฃน > ๊ณ ์ • ์„ธ์…˜
  4. AWS Docs: Network Load Balancer์˜ ์•ก์„ธ์Šค ๋กœ๊ทธ
  5. AWS Docs: Classic Load Balancer > Enable Access Logs > Attach a policy to your S3 bucket