[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 ์์ฑํ๊ธฐ
๋๋ค ์ฃ์ง๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋จผ์ ๋๋ค ํจ์๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
์ฌ๊ธฐ์ ๋ง๋ค ๋๋ค๋ ๊ทธ๋ฅ ๋ง๋๋๊ฒ ์๋๋ผ ๋ช๊ฐ์ง ์กฐ๊ฑด์ด ์๋ค.
- ๋๋คํจ์์ ๋ฆฌ์ ์ us-east-1, ๋ฏธ๊ตญ ๋ฒ์ง๋์ด์ผ๋ง ํ๋ค. ๊ทธ๋ฅ ์๋ง์กด์ด ๊ทธ๋ ๊ฒ ์ ํ ๊ฒ์ด๋ค.
- ๋ฐํ์์ ํ์ฌ ๊ธฐ์ค Node 12๋ก ๊ณ ์ ๋๋ค. ์์ ๊ฒ๋ค์ ์ข๋ ๋ฎ์ ์๋ ์๋ค.
- ๋ธ๋ฃจํ๋ฆฐํธ๋ก ๋ค์ด๊ฐ์ 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