Aws-lambda-dotnet: Application Load Balancer๊ฐ€ ์žˆ๋Š” Amazon.Lambda.AspNetCoreServer

์— ๋งŒ๋“  2018๋…„ 12์›” 02์ผ  ยท  20์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: aws/aws-lambda-dotnet

Amazon.Lambda.AspNetCoreServer๋Š” reInvent ์ค‘์— ๋ฐฉ๊ธˆ ๋ฐœํ‘œ๋œ Application Load Balancer ํ†ตํ•ฉ๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ? ์ด๊ฒƒ์„ ์‹œ๋„ํ•  ๋•Œ ์ด์ƒํ•œ ๋™์ž‘์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋ญ”๊ฐ€ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋Š”์ง€ ๋˜๋Š” ์•Œ๋ ค์ง„ ๋ฌธ์ œ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

feature-request

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ €๋Š” alb-support ๋ธŒ๋žœ์น˜์—์„œ ALB ์ง€์› ์ž‘์—…์„ ํ•ด์™”์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ถ„๊ธฐ์˜ ๋‹ค์Œ ๋‹จ๊ณ„๋Š” Amazon.Lambda.AspNetCoreServer ์ž‘์—…์ž…๋‹ˆ๋‹ค.

๋ชจ๋“  20 ๋Œ“๊ธ€

์ €๋Š” ์ƒˆ๋กœ์šด 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 ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ˜„

๊ธฐ๋Šฅ์ด ์ถœ์‹œ๋˜๋ฉด ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰