[AWS] Lambda Edge

๋ณธ ํฌ์ŠคํŠธ์—์„œ๋Š” AWS์—์„œ Lambda Edge๋ฅผ ๊ตฌ์ถ•ํ•ด๋ณด๋Š” ๋ฒ•์„ ๊ฐ„๋‹จํžˆ ๋‹ค๋ค„๋ณด๊ฒ ๋‹ค.




Lambda Edge๋ž€?

๋žŒ๋‹ค ์—ฃ์ง€๋Š” ๋žŒ๋‹ค์™€ CloudFront์˜ ์บ์‹ฑ ๊ธฐ๋Šฅ์„ ์—ฎ์€ ํŒŒ์ƒ ์„œ๋น„์Šค๋‹ค.

CloudFront๋Š” ์›๋ž˜ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ตฌ์กฐ๋กœ, ์ค‘๊ฐ„์—์„œ ์บ์‹ฑ๋งŒ์„ ํ•ด์ฃผ๋Š” ์„œ๋น„์Šค์ธ๋ฐ,

์‚ฌ์šฉ์ž <-> ์บ์‹œ ์‚ฌ์ด์™€ ์บ์‹œ <-> ์‹ค์„œ๋ฒ„ ์‚ฌ์ด์— ๋ผ์–ด๋“ค์–ด์„œ Lambda๋กœ ์ถ”๊ฐ€์ ์ธ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋”ฑ ์ •ํ•ด์ง„ ๋ฆฌ์ „์—์„œ๋งŒ ์‹คํ–‰๋ผ์„œ ์‘๋‹ต์„ ๋ณด๋‚ด๋˜ Lambda์™€๋Š” ๋‹ค๋ฅด๊ฒŒ, ๊ทธ ์‹คํ–‰์„ ์š”์ฒญํ•œ ์ง€์—ญ์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด edge location์—์„œ ๋žŒ๋‹ค๋ฅผ ์•Œ์•„์„œ ๊ณจ๋ผ ์‹คํ–‰ํ•ด์ค€๋‹ค.
๊ทธ๋ž˜์„œ Lambda Edge์˜ ๋žŒ๋‹ค๋Š” ํŠน์ • ๋ฆฌ์ „์—๋งŒ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ „ ์„ธ๊ณ„์— ๊น”๋ฆฐ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ์šฉ๋„๋Š” ํ—ค๋” ๊ฐ’ ์กฐ์ •, ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง•, Next.JS ๋“ฑ์˜ SSR ํ”„๋ก ํŠธ ์„œ๋ฒ„ ๋ฐฐํฌ ๋“ฑ์ด ์žˆ๋‹ค.





S3 ๋ฒ„ํ‚ท & CloudFront ์ƒ์„ฑ

Lambda Edge๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด CloudFront๊ฐ€ ํ•„์š”ํ•˜๊ณ 
CloudFront๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด S3 ๋ฒ„ํ‚ท์ด ํ•„์š”ํ•˜๋‹ค.

์ด๋Ÿฐ๊ฑฐ ์ž๋™ํ™”์ข€ ํ•ด์ฃผ๋ฉด ์ข‹๊ฒ ๋‹ค.

S3์™€ CloudFront๋ฅผ ์—ฐ๋™ํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ฃผ์˜์  ๋“ฑ์€ ์•„๋ž˜ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ์กฐํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.
https://blog.naver.com/sssang97/222504226420




Lambda ์ƒ์„ฑํ•˜๊ธฐ

๋žŒ๋‹ค ์—ฃ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋จผ์ € ๋žŒ๋‹ค ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ ๋งŒ๋“ค ๋žŒ๋‹ค๋Š” ๊ทธ๋ƒฅ ๋งŒ๋“œ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ช‡๊ฐ€์ง€ ์กฐ๊ฑด์ด ์žˆ๋‹ค.

  1. ๋žŒ๋‹คํ•จ์ˆ˜์˜ ๋ฆฌ์ „์€ us-east-1, ๋ฏธ๊ตญ ๋ฒ„์ง€๋‹ˆ์–ด์•ผ๋งŒ ํ•œ๋‹ค. ๊ทธ๋ƒฅ ์•„๋งˆ์กด์ด ๊ทธ๋ ‡๊ฒŒ ์ •ํ•œ ๊ฒƒ์ด๋‹ค.
  2. ๋Ÿฐํƒ€์ž„์€ ํ˜„์žฌ ๊ธฐ์ค€ Node 12๋กœ ๊ณ ์ •๋œ๋‹ค. ์˜ˆ์ „ ๊ฒƒ๋“ค์€ ์ข€๋” ๋‚ฎ์„ ์ˆ˜๋„ ์žˆ๋‹ค.
  3. ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋กœ ๋“ค์–ด๊ฐ€์„œ cloudfront-modify-response-header๋ผ๋Š” ๊ฒƒ์„ ์„ ํƒํ•˜๊ณ  ์ƒ์„ฑํ•œ๋‹ค.

ํ•จ์ˆ˜ ์ƒ์„ฑ์— ๋“ค์–ด๊ฐ€์„œ ๋ธ”๋ฃจํ”„๋ฆฐํŠธ๋ฅผ ์„ ํƒ, ์•„๋ž˜ ํ•ญ๋ชฉ์„ ๊ณ ๋ฅด๊ณ  ์ƒ์„ฑํ•œ๋‹ค.

์ด๋ฆ„์€ ๋Œ€์ถฉ ์ง€์œผ๋ฉด ๋˜๊ณ , ์ € ์˜ต์…˜๋Œ€๋กœ ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
์ •์ฑ… ํ…œํ”Œ๋ฆฟ์€ ์ž๋™ ์ƒ์„ฑํ•ด์ค€๋‹ค.

๊ทธ๋Ÿผ ์ด๋Ÿฐ ์‹์˜ ํ…œํ”Œ๋ฆฟ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค.

๊ทธ๋ž˜์„œ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ตœ์ดˆ ์ง„์ž…์‹œ์— cloudfront ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋งŒ๋“ค๋ผ๊ณ  ๋œฌ๋‹ค.

๋‹น์žฅ ์†Œ์Šค๊ฐ€ ์™„์„ฑํ˜•์ธ๊ฒŒ ์•„๋‹ˆ๋ผ๋ฉด ์ด๊ฑด ๊ตณ์ด ๋ฐ”๋กœ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
๋ณ„๊ฒŒ ์•„๋‹ˆ๋ผ ์ž๋™์œผ๋กœ 1 ๋ฒ„์ „์„ ๋ฐฐํฌํ•ด์„œ cloudfront ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๋‹ฌ์•„์ฃผ๋Š” ๊ฒƒ๋ฟ์ด๋‹ค.

๋‚˜๋Š” ์ผ๋‹จ ๊ธฐ๋ณธ ์†Œ์Šค์— ๋”ํ•ด์„œ ํ—ค๋” ํ•˜๋‚˜๋งŒ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ถ”๊ฐ€ํ•ด๋ดค๋‹ค.

์ด๋Ÿฌ๋ฉด cloudfront๋กœ ์บ์‹œ๊ฐ€ ์ „๋‹ฌ๋˜๊ธฐ ์ „์— ์‘๋‹ต์— ๋ผ์–ด๋“ค์–ด์„œ 'foo' ๋“ฑ์˜ ํ—ค๋”๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค.




Lambda Edge ๋ฐฐํฌ

ํŠธ๋ฆฌ๊ฑฐ ์ถ”๊ฐ€ -> CloudFront ๋กœ cloudfront ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•ด๋„ ๋ฐฐํฌ๋Š” ์ž๋™์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

์—ฌ๊ธฐ์„œ

"๋ฐฐํฌ" ํ•ญ๋ชฉ์€ ์œ„์ฒ˜๋Ÿผ cloudfront ์‹๋ณ„๋ฒˆํ˜ธ๋กœ ์—ฐ๊ฒฐํ•  cloudfront๋ฅผ ์ง€์ •ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. E3U...๊ฐ€ ๊ทธ๊ฒƒ์ด๋‹ค.

"์บ์‹œ ๋™์ž‘"์€ ์‹ค์ œ๋กœ ์บ์‹ฑ์‹œํ‚ฌ ๊ฒฝ๋กœ๊ณ ,

"CloudFront ์ด๋ฒคํŠธ"๋Š” ์–ด๋А ์‹œ์ ์— ์ด๋ฒคํŠธ๋ฅผ ๊ฑธ์ง€์— ๋Œ€ํ•œ ๊ฒƒ์ด๋‹ค.
"์˜ค๋ฆฌ์ง„ ์‘๋‹ต"์„ ์„ ํƒํ•  ๊ฒฝ์šฐ์—๋Š” cloudfront ์บ์‹œ์— ์‘๋‹ต์„ ๋ณด๋‚ด๊ธฐ ์ „์— ์‹คํ–‰์„ ํ•œ๋‹ค.

๋งŒ์•ฝ ๋žŒ๋‹ค์—ฃ์ง€์˜ ์ƒˆ ๋ฒ„์ „์„ ๋ฐฐํฌํ•˜๊ณ ์‹ถ๋‹ค๋ฉด, ์ƒˆ ๋ฒ„์ „์„ ๊ฒŒ์‹œํ•ด์„œ ๋™์ผํ•˜๊ฒŒ ํŠธ๋ฆฌ๊ฑฐ๋ฅผ ๊ฑด ๋’ค์—, ํ•ด๋‹น cloudfront์—์„œ ๋ฌดํšจํ™”๋ฅผ ๋˜์ ธ์„œ ์บ์‹œ๋ฅผ ๋‚ ๋ ค์ฃผ๋ฉด ๋œ๋‹ค.

์ž˜ ๋ฐฐํฌ๊ฐ€ ๋๋‹ค๋ฉด, cloudfront์— ์ ‘์†ํ•  ๊ฒฝ์šฐ์—

์œ„์™€ ๊ฐ™์ด ํ—ค๋”๊ฐ’์ด ์ž˜ ์กฐ์ž‘๋ผ์„œ ์˜ฌ ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„์†Œํ•˜๊ฒŒ ํ—ค๋”๊ฐ’๋งŒ ๊นจ์ž‘๊ฑฐ๋ ธ์ง€๋งŒ, ๋‹น์—ฐํžˆ response์— ๋Œ€ํ•œ ์ „๋ฐ˜์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
Lambda ํ•ธ๋“ค๋Ÿฌ์˜ response ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ ์•Œ๊ณ , ๊ทธ์— ๋งž์ถฐ์„œ ๊ฑด๋“ค๊ธฐ๋งŒ ํ•˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค.



์ฐธ์กฐ
https://docs.aws.amazon.com/ko_kr/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works.html
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-edge-how-it-works-tutorial.html#lambda-edge-how-it-works-tutorial-cloudfront
https://github.com/serverless-nextjs/serverless-next.js/blob/master/README.md#getting-started
https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/lambda-edge.html