๐Ÿงฐ DevOps

S3, CloudFront, Lambda@Edge๋ฅผ ์ด์šฉํ•œ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ฆˆ(1) - Lambda@Edge๋ž€?

์—ฐ_์šฐ๋ฆฌ 2023. 5. 28. 15:47
๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

     

     

     

     

     

    ํšŒ์‚ฌ ์„œ๋น„์Šค์— ๋„์ž…ํ•˜๊ธฐ ์œ„ํ•ด ์„œ์น˜ํ•˜๊ณ  ์ •๋ฆฌํ–ˆ๋˜ ๋‚ด์šฉ ์˜ฌ๋ ค๋ด…๋‹ˆ๋‹ค

    ๊ธฐ๋‚˜๊ธด ์‚ฝ์งˆ์˜ ๊ธฐ๋ก๋“ค...

     

     

    Lambda@Edge๋Š” ๋ญ”๊ฐ€์š”?

    Lambda@Edge๋Š” AWS CloudFront์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋กœ, 

    CloudFront์˜ ๋‹ค์–‘ํ•œ ์ด๋ฒคํŠธ์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๋žŒ๋‹ค์ž…๋‹ˆ๋‹ค.

     

    AWS CloudFront๋Š” Edge Location(๋ฐ์ดํ„ฐ ์„ผํ„ฐ์˜ ์ „ ์„ธ๊ณ„ ๋„คํŠธ์›Œํฌ)๋ฅผ ํ†ตํ•ด ์ฝ˜ํ…์ธ ๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ,

    Lambda๋Š” Region๋ณ„๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

    ๊ทธ๋ ‡๋‹ค๋ฉด ์ „ ์„ธ๊ณ„ Region์— ๋˜‘๊ฐ™์€ Lambda๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์–ด์•ผํ• ๊นŒ์š”?

    ์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด Lambda@Edge์ž…๋‹ˆ๋‹ค.

     

    ๋ฒ„์ง€๋‹ˆ์•„ ๋ฆฌ์ „(us-east-1)์— Lambda@Edge๋ฅผ ๋งŒ๋“ค์–ด๋‘๋ฉด

    AWS๊ฐ€ ์•Œ์•„์„œ ํ•ด๋‹น ๋žŒ๋‹ค๋ฅผ Edge Location์œผ๋กœ ๋ณต์ œํ•ด์ค๋‹ˆ๋‹ค.

    ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ฐ€๊นŒ์šด ๋žŒ๋‹ค๊ฐ€ ์‹คํ–‰๋˜์–ด ์ง€์—ฐ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๊ณ , ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

     

    ์—ฌ๊ธฐ์„œ๋Š” ์‹ค์‹œ๊ฐ„ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•์— ๋žŒ๋‹ค ์—ฃ์ง€๋ฅผ ์‚ฌ์šฉํ•ด๋ณด๋ คํ•ฉ๋‹ˆ๋‹ค!

     

     

     

    ์˜ˆ์‹œ์ƒํ™ฉ

    ์ธ์Šคํƒ€๊ทธ๋žจ ์˜ˆ์‹œ

    ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋‹ค๋ณด๋ฉด ํ•˜๋‚˜์˜ ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ UI์— ๋งž์ถ”์–ด ๋‹ค์•ผํ•œ ํฌ๊ธฐ๋กœ ๋ณด์—ฌ์ฃผ์–ด์•ผํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

     

    ํ˜„์žฌ์˜ ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค.

    1. ์›๋ณธ ์ด๋ฏธ์ง€(happy.jpg) S3์— ์ €์žฅ

    2. ์‚ฌ์ด์ฆˆ ๊ทœ๊ฒฉ๋ณ„๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋ฆฌ์‚ฌ์ด์ง•ํ•˜์—ฌ S3์— ์ €์žฅ

    3. ํด๋ผ์ด์–ธํŠธ๋Š” ๊ทœ๊ฒฉ์— ๋งž๊ฒŒ /happy_300x300.jpg๋ฅผ ํ˜ธ์ถœ 

     

    ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ์ ์€ 2๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

    1. ์›๋ณธ ์ด๋ฏธ์ง€ 1๊ฐœ + ์‚ฌ์ด์ฆˆ ๊ทœ๊ฒฉ N๊ฐœ= ์ด N+1๊ฐœ์˜ ์ด๋ฏธ์ง€๊ฐ€ S3์— ์ €์žฅ๋จ

    2. ์ƒˆ๋กœ์šด ์‚ฌ์ด์ฆˆ ๊ทœ๊ฒฉ์ด ์ƒ๊ธธ๋•Œ๋งˆ๋‹ค ์›๋ณธ ์ด๋ฏธ์ง€๋ฅผ ์ฐพ์•„ ๋ฆฌ์‚ฌ์ด์ง• ์ฒ˜๋ฆฌ ํ›„ S3์— ์ €์žฅํ•ด์•ผํ•จ.

     

     

     

     

    ์˜ˆ์‹œ์ƒํ™ฉ์— Lambda@Edge๋ฅผ ๋„์ž…ํ•œ๋‹ค๋ฉด?

    1. S3์—๋Š” ์›๋ณธ ์ด๋ฏธ์ง€๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Œ

    2. ์ƒˆ๋กœ์šด ๊ทœ๊ฒฉ์ด ์ƒ๊ฒจ๋„ ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์— ์ž…๋ ฅํ•˜๋Š”๋Œ€๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋ฆฌ์‚ฌ์ด์ง•ํ•˜๋‹ˆ ๋ฌธ์ œ ์—†์Œ.

    /happy.jpg?w=100&h=200

    3. ํ•œ๋ฒˆ ์š”์ฒญํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋Š” CloudFront์—์„œ ์บ์‹ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅธ ์‘๋‹ต ๊ฐ€๋Šฅ.

     

     

     

    ์ฃผ์˜

    ์•„๋ž˜์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ๋žŒ๋‹คํ•จ์ˆ˜๋Š”

    ํด๋ผ์šฐ๋“œํ”„๋ก ํŠธ์— ์บ์‹ฑ ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ๋˜์–ด์žˆ์„ ๋•Œ๋งŒ ์‹คํ–‰๋˜๊ฒŒ ๋งŒ๋“ค๊ฒ๋‹ˆ๋‹ค.

     

    ๋งŒ์•ฝ ์บ์‹ฑ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ๋œ ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ 10000๊ฐœ ์š”์ฒญํ•˜๋ฉด ์–ด๋–ป๊ฒŒ๋ ๋ผ์š”?

    ์ผ๋ฐ˜์ ์œผ๋กœ ๋žŒ๋‹ค๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ๊ฐœ์ˆ˜๋Š” 1000๊ฐœ์ž…๋‹ˆ๋‹ค.

    ๋‹ค์‹œ๋งํ•ด ์บ์‹ฑ์ฒ˜๋ฆฌ๊ฐ€ ์•ˆ๋œ ์ด๋ฏธ์ง€๋Š” 1000๊ฐœ๊นŒ์ง€๋งŒ ๋™์‹œ์— ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

     

    ๊ทธ๋ž˜์„œ Lambda@Edge๋ฅผ ์ด์šฉํ•œ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ์ž‘์—…์€

    ์„œ๋น„์Šค ์ด์šฉ์ด ๋‚ฎ์€ ์‹œ๊ฐ„๋Œ€์— ํ•œ๋ฒˆ์”ฉ ๋ฐฐ์น˜๋ฅผ ๋Œ๋ ค ์บ์‹ฑ ์ฒ˜๋ฆฌ๋˜๊ฒŒ๋” ์ฒ˜๋ฆฌํ•˜๊ธฐ๋„ ํ•œ๋‹ค๋„ค์š”..!

     

     

     

     

     

    Lambda@Edge EventType

    ์ด๋ฒคํŠธ ์œ ํ˜• ์„ ํƒ ๊ฐ€์ด๋“œ

    • Viewer Request
      • ์š”์ฒญํ•œ ๊ฐœ์ฒด๊ฐ€ CloudFront ์บ์‹œ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์ „์— ๋žŒ๋‹ค๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
      • ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋žŒ๋‹ค๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉด CloudFront ์บ์‹œ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋งค ์š”์ฒญ๋งˆ๋‹ค ๋žŒ๋‹ค๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

     

    • Origin Request
      • ์š”์ฒญํ•œ ๊ฐœ์ฒด๊ฐ€ CloudFront ์บ์‹œ์— ์—†์„ ๋•Œ, ์˜ค๋ฆฌ์ง„์œผ๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•  ๋•Œ ๋žŒ๋‹ค๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
      • ์š”์ฒญํ•œ ๊ฐœ์ฒด๊ฐ€ CLoudFront ์บ์‹œ์— ์žˆ์„ ๋•Œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

     

    • Origin Response << ํ•ด๋‹น ์ด๋ฒคํŠธ์—์„œ ์›๋ณธ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ์ฒ˜๋ฆฌ!
      • ์˜ค๋ฆฌ์ง„์œผ๋กœ๋ถ€ํ„ฐ ์‘๋‹ต์„ ์ˆ˜์‹ ํ•˜๊ณ , ์‘๋‹ต์—์„œ ๊ฐœ์ฒด๋ฅผ ์บ์‹œํ•˜๊ธฐ ์ „์— ๋žŒ๋‹ค๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
      • ์˜ค๋ฆฌ์ง„์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜ํ™˜๋œ ๊ฒฝ์šฐ์—๋„ ๋žŒ๋‹ค๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

     

    • Viewer Response
      • ์š”์ฒญํ•œ ๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— ๋žŒ๋‹ค๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
      • ํ•ด๋‹น ์ด๋ฒคํŠธ์— ๋žŒ๋‹ค๋ฅผ ํŠธ๋ฆฌ๊ฑฐํ•˜๋ฉด CloudFront ์บ์‹œ ์—ฌ๋ถ€์— ๊ด€๊ณ„์—†์ด ๋งค ์š”์ฒญ๋งˆ๋‹ค ๋žŒ๋‹ค๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

     

     

     

     

     

    ๊ฒฐ๊ณผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ

    ์›๋ณธ์ด๋ฏธ์ง€

    ์š”์ฒญ url : https://d39leqiptum1or.cloudfront.net/harry.jpg

    ์‚ฌ์ด์ฆˆ : 1058 * 1411

     

    ์œ„์˜ ์›๋ณธ์ด๋ฏธ์ง€ url์— ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์„ ๋ถ™์—ฌ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๋ฆฌ์‚ฌ์ด์ง•์ฒ˜๋ฆฌํ•˜๊ณ ,

    ๋ฆฌ์‚ฌ์ด์ง•๋œ ์ด๋ฏธ์ง€๊ฐ€ ์บ์‹ฑ์ฒ˜๋ฆฌ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด์ž.

     

     

     

     

    ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ์ตœ์ดˆ์š”์ฒญ

    ์š”์ฒญ url : https://d39leqiptum1or.cloudfront.net/harry.jpg?w=200

    ๊ฒฐ๊ณผ

    • ์‚ฌ์ด์ฆˆ : 200 * 267
    • x-cache : Miss from cloudfront (= CloudFront์— ์บ์‹ฑ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์•„์„œ S3์—์„œ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™”๋‹ค.)
    • ๊ฒฝ๊ณผ์‹œ๊ฐ„:  182.07ms

     

     

     

     

    ๋ฆฌ์‚ฌ์ด์ง•๋œ ์ด๋ฏธ์ง€ ์žฌ์š”์ฒญ

    ์š”์ฒญ url : https://d39leqiptum1or.cloudfront.net/harry.jpg?w=200

    ๊ฒฐ๊ณผ

    • ์‚ฌ์ด์ฆˆ : 200 * 267
    • x-cache : Hit from cloudfront (= CloudFront์— ์บ์‹ฑ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์กด์žฌํ•˜์—ฌ ์บ์‹ฑ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ตํ•ด์ฃผ์—ˆ๋‹ค.)
    • ๊ฒฝ๊ณผ์‹œ๊ฐ„: 8.23ms

     

     

     

     

    ์ž‘์—… ์ˆœ์„œ๋Œ€๋กœ ๋”ฐ๋ผํ•˜๊ธฐ

    1. S3, CloudFront ์…‹ํŒ…
    2. CloudFront ์ฟผ๋ฆฌ์ŠคํŠธ๋ง ์บ์‹œ ์…‹ํŒ…
    3. IAM ์—ญํ•  ์ƒ์„ฑ
    4. Lambda@Edge ๋ฐฐํฌ ์…‹ํŒ… ๋ฐ ๋กœ๊ทธ ํ™•์ธ
    5. ๋ฆฌ์‚ฌ์ด์ง• ๋กœ์ง ์ž‘์„ฑ ๋ฐ ํ…Œ์ŠคํŠธ

     

    5๋ฒˆ๊นŒ์ง€ ํ•˜๋ฉด ๊ธฐ๋ณธ์ ์ธ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ์ฒ˜๋ฆฌ๋Š” ๋๋‚ฉ๋‹ˆ๋‹ค.

    ์ดํ›„ ์ถ”๊ฐ€๋กœ CloudFront๋ฅผ Route53์— ๋ถ™์ธ๋‹ค๊ฑฐ๋‚˜,

    CloudFront ์—๋Ÿฌ๋ฐœ์ƒ ์‹œ ๊ธฐ๋ณธ์ด๋ฏธ์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋„๋ก ์…‹ํŒ…ํ•˜๊ฑฐ๋‚˜ ๋“ฑ์˜ ์ž‘์—…๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!

     

     

     

     

    ๋ฐ˜์‘ํ˜•
    • ๋„ค์ด๋ฒ„ ๋ธ”๋Ÿฌ๊ทธ ๊ณต์œ ํ•˜๊ธฐ
    • ํŽ˜์ด์Šค๋ถ ๊ณต์œ ํ•˜๊ธฐ
    • ํŠธ์œ„ํ„ฐ ๊ณต์œ ํ•˜๊ธฐ
    • ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌ์Šค ๊ณต์œ ํ•˜๊ธฐ
    • ์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ