Lambda로 Application Load Balancer 요청 처리
Lambda 함수를 사용하여 Application Load Balancer의 요청을 처리할 수 있습니다. Elastic Load Balancing은 Application Load Balancer의 대상으로 Lambda 함수를 지원합니다. 로드 밸런서 규칙을 사용하여 경로 또는 헤더 값을 기반으로 HTTP 요청을 함수에 라우팅합니다. 요청을 처리하고 Lambda 함수의 HTTP 응답을 반환합니다.
Elastic Load Balancing은 요청 본문 및 메타데이터가 포함된 이벤트와 동기적으로 Lambda 함수를 호출합니다.
예 Application Load Balancer 요청 이벤트
{ "requestContext": { "elb": { "targetGroupArn": "arn:aws:elasticloadbalancing:us-east-1:123456789012:targetgroup/lambda-279XGJDqGZ5rsrHC2Fjr/49e9d65c45c6791a" } }, "httpMethod": "GET", "path": "/lambda", "queryStringParameters": { "query": "1234ABCD" }, "headers": { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", "accept-encoding": "gzip", "accept-language": "en-US,en;q=0.9", "connection": "keep-alive", "host": "lambda-alb-123578498.us-east-1.elb.amazonaws.com", "upgrade-insecure-requests": "1", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36", "x-amzn-trace-id": "Root=1-5c536348-3d683b8b04734faae651f476", "x-forwarded-for": "72.12.164.125", "x-forwarded-port": "80", "x-forwarded-proto": "http", "x-imforwards": "20" }, "body": "", "isBase64Encoded": False }
함수는 이벤트를 처리하고 JSON 형식의 응답 문서를 로드 밸런서에 반환합니다. Elastic Load Balancing은 이 문서를 HTTP 성공 또는 오류 응답으로 변환하고 사용자에게 반환합니다.
예 응답 문서 형식
{ "statusCode": 200, "statusDescription": "200 OK", "isBase64Encoded": False, "headers": { "Content-Type": "text/html" }, "body": "<h1>Hello from Lambda!</h1>" }
Application Load Balancer를 함수 트리거로 구성하려면 함수 실행 권한을 Elastic Load Balancing에 부여하고 해당 요청을 함수로 라우팅하는 대상 그룹을 만든 다음, 대상 그룹에 요청을 보내는 로드 밸런서에 하나의 규칙을 추가하세요.
add-permission
명령을 사용하여 권한 설명문을 함수의 리소스 기반 정책에 추가하세요.
aws lambda add-permission --function-name
alb-function
\ --statement-id load-balancer --action "lambda:InvokeFunction" \ --principal elasticloadbalancing.amazonaws.com
다음 결과가 표시됩니다:
{ "Statement": "{\"Sid\":\"load-balancer\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"elasticloadbalancing.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-west-2:123456789012:function:alb-function\"}" }
Application Load Balancer 리스너와 대상 그룹을 구성하는 방법에 대한 지침은 Application Load Balancers 사용 설명서에서 대상으로서 Lambda 함수를 참조하세요.