Amazon.Lambda.AspNetCoreServer๋ reInvent ์ค์ ๋ฐฉ๊ธ ๋ฐํ๋ Application Load Balancer ํตํฉ๊ณผ ํจ๊ป ์๋ํฉ๋๊น? ์ด๊ฒ์ ์๋ํ ๋ ์ด์ํ ๋์์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ ๊ฐ ๋ญ๊ฐ ์๋ชปํ๊ณ ์๋์ง ๋๋ ์๋ ค์ง ๋ฌธ์ ์ธ์ง ํ์คํ์ง ์์ต๋๋ค.
์ ๋ ์๋ก์ด ALB ํตํฉ์ ์ดํด๋ณด๊ณ ์์์ต๋๋ค. Lambda ํจ์๋ก ์ ์ก๋๋ JSON ์์ฒญ์ API Gateway์ ๋ค๋ฆ ๋๋ค. APIGatewayProxyFunction JSON ํ์์์ ๊ฐ์งํ๊ณ ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ค๋ฅธ ๊ตฌ๋ฌธ ๋ถ์ ๋ก์ง์ ์ํํ๋ ๊ฒ์ ๋๋ฌด ์ด๋ ต์ง ์์์ผ ํฉ๋๋ค.
์ ๋ง ์ข์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ALB๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์๋ง๋ ALB๋ฅผ ์ ํธํ๋ ํตํฉ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
ํ์ฌ APIGatewayProxyFunction์ ์ฌ์ฉํ๊ณ ์์ง๋ง API Gateway๋ ํธ๋์ญ์ ์ ์๋ฃํ๋ ๋ฐ 30์ด๋ง ํ์ฉํฉ๋๋ค. ELB๋ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋ ํฐ ๋ฐ์ดํฐ์ ๋ํ ์ข์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋๋ค. (๋๋ค ํจ์์ ํ๊ณ๊น์ง 15๋ถ)
LambdaEntryPoint : Amazon.Lambda.AspNetCoreServer.APIGatewayProxyFunction๋ง ์ฌ์ฉํ๊ณ APIGateway ๋๋ ELB์ธ์ง ์ ๊ฒฝ ์ฐ์ง ์๋๋ก ํ๋ฉด ์ ๋ง ์ข์ ๊ฒ์ ๋๋ค.
์ ๋ alb-support ๋ธ๋์น์์ ALB ์ง์ ์์
์ ํด์์ต๋๋ค. ํด๋น ๋ถ๊ธฐ์ ๋ค์ ๋จ๊ณ๋ Amazon.Lambda.AspNetCoreServer
์์
์
๋๋ค.
์์ฐ ๋นจ๋๋ค! =) ๊ฐ์ฌํฉ๋๋ค!
๊ธฐ๋ค๋ ค!
ํ๋ฅญํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์ dotnet ํต์ฌ ์น ์ฑ์ ์ฌ์ฉํ ์ ์๊ธฐ๋ฅผ ๊ธฐ๋ํฉ๋๋ค. ๊ฐ์ฌ ํด์!
๋์ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ด ๊ธฐ๋๋ฉ๋๋ค!
์ํ ์
๋ฐ์ดํธ Amazon.Lambda.AspNetCoreServer
์ ๋ํ ์
๋ฐ์ดํธ๊ฐ ํฌํจ๋ alb-support-aspnetcore ๋ถ๊ธฐ๋ฅผ ํธ์ํ์ต๋๋ค.
๋ณ๊ฒฝ ์ฌํญ์ผ๋ก ์ธํด ๋ด๊ฐ ๋ด ๊ฒ๋ณด๋ค ๋ ํฐ ๋ฆฌํฉํฐ๊ฐ ๋ฐ์ํ์ต๋๋ค. ์ฒ์์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ ๋ Lambda ํจ์์ ๋ํด ์ฌ๋ฌ HTTP ํ๋ฐํธ์๋๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์์ํ์ง ๋ชปํ์ต๋๋ค.
๋๊ตฐ๊ฐ๊ฐ ์ ์ฅ์๋ฅผ ๋ณต์ ํ๊ณ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๋ง์น๋ ๋์ ์ด๊ฒ์ ์๋ํ๋ฉด ์ข์ ๊ฒ์
๋๋ค. repo๋ฅผ ๋ณต์ ํ๊ณ Amazon.Lambda.ApplicationLoadBalancerEvents
๋ฐ Amazon.Lambda.AspNetCoreServer
๋ก ์ด๋ํ์ฌ dotnet pack
ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ฑ๋ NuGet ํจํค์ง๋ฅผ ๋ก์ปฌ ํผ๋์ ์ถ๊ฐํฉ๋๋ค.
๋๋ถ๋ถ์ ์ฑ์ ๊ฒฝ์ฐ LambdaEntryPoint
๋๋ ์ด๋ฆ์ ๋ฌด์์ผ๋ก ์ง์ ํ๋ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ APIGatewayProxyFunction
์์ ApplicationLoadBalancerFunction
๋ก ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
์ฌ๋ฏธ์๋ ์ ์ ๋ง์คํฐ๋ฅผ ์ฌ์ฉํ์ฌ LAMBDA ์ด๋ฆ์ ๋ค์ ๋ฐฐํฌํ๊ณ LambdaEntryPoint์ ํจ๊ป ELB๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. (๊ฒฝ๋ก "api/*"๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ELB Trigger์ ๋ํ ๊ท์น์ ์ค์ ํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.)
(์ด์จ๋ ์ ๋๋ค ํจ์์์ ELB ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ค์ ํ๋ฉด ๋ถ๊ธฐ ์์ด ๊ฒ์ดํธ๊ฐ ์๋ํฉ๋๋ค. ์๋ง๋ ํค๋/์๋ต์ด ๋์ผํ๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.)
๋ด๊ฐ ์๊ฐ์ด ์๋ค๋ฉด ์ค๋ ๋ฆ๊ฒ ๋น์ ์ ์ง์ ์ ํ ์คํธํ ๊ฒ์ ๋๋ค.
API ๊ฒ์ดํธ์จ์ด์ ALB ์ด๋ฒคํธ ์ฌ์ด์๋ ์๋นํ ์ ์ฌ์ ์ด ์์ด ์ด์ด ์ข์ ์ ์์ต๋๋ค. ๋ค์ค ๊ฐ ํค๋๋ฅผ ํ์ฑํํ๊ฑฐ๋ ์์ฒญ ๋ณธ๋ฌธ์ ์ด์ง ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ์คํจํฉ๋๋ค.
์ง์ ์ด ์ข์ ๋ณด์ ๋๋ค.
์ ๋ง ๋ฉ์ ธ์! ์ด ๊ธฐ๋ฅ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด๊ณ ์ถ์ต๋๋ค. ๋ณํฉ ๋ฐ ํจํค์งํํ ์ ์๋ ์์ ETA๊ฐ ์์ต๋๊น?
๊ณต์ ํจํค์ง์์ ์ด๊ฒ์ ๋ณผ ์ ์๊ธฐ๋ฅผ ์ ๋ง๋ก ๊ณ ๋ํ๊ณ ์์ต๋๋ค.
์ด๊ฒ์ด ๊ทํ๊ฐ ๋ณด์ ํ ์ต๊ณ ์ ์๋ฒ๋ฆฌ์ค ์ ํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ ๊ฐ์ง ์ฃผ์ ๋จ์ ์ด ์๋๋ผ๋ฉด ๋๋ถ๋ถ์ API์ ์น ์ฌ์ดํธ๋ฅผ ๋ง์ด๊ทธ๋ ์ด์
ํ ๊ฒ์
๋๋ค. API ๊ฒ์ดํธ์จ์ด ๋ฐ (๋๋ค) ์ฝ๋ ์คํํธ โโ์ง์ฐ. ์ด๊ฒ์ ๊ทธ๋ค ์ค ํ๋๋ฅผ ์์ ํ๊ณ ALB ์ํ ํ์ธ์ ๋๋ค๋ฅผ ๊ณ์ ํ์ฑ ์ํ๋ก ์ ์งํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์
๋๋ค :-)
@normj , Nuget์์ ์ธ์ ETA๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ๊ถ๊ธํ์ญ๋๊น?
์ด ๊ธฐ๋ฅ์ด Nuget์๋ ํฌํจ๋๊ธฐ๋ฅผ ๊ฐ์ ํ ๊ธฐ๋ค๋ฆฌ๊ณ ์์ต๋๋ค.
์ด๋ฏธ ์กด์ฌํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์์ ์ด๊ฒ์ ํ ์คํธํ์ผ๋ฉฐ ๋ฌธ์ ์์ด ์๋ํ๋ ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค.
ALB๋ฅผ ์ง์ํ๋ Amazon.Lambda.AspNetCoreServer ๋ฒ์ 3.0.0์ด ์ค๋ ์ถ์๋์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ํ์ธํ์ธ์. https://aws.amazon.com/blogs/developer/updates-for-serverless-asp-net-core/
@normj ํ๋ฅญํ ๊ฒ์๋ฌผ๊ณผ ํ๋ฅญํ ์ํ์ ๋๋ค! .NET์ AWS ์์ฝ์์คํ ์ ํตํฉํ๊ธฐ ์ํด ์๊ณ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
@ryanpagel ํ์ํฉ๋๋ค ๐
๊ธฐ๋ฅ์ด ์ถ์๋๋ฉด ์ข ๋ฃ๋ฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ ๋ alb-support ๋ธ๋์น์์ ALB ์ง์ ์์ ์ ํด์์ต๋๋ค. ํด๋น ๋ถ๊ธฐ์ ๋ค์ ๋จ๊ณ๋
Amazon.Lambda.AspNetCoreServer
์์ ์ ๋๋ค.