本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
處理應用程式負載平衡器請求
您可以使用 Lambda 函數處理來自 Application Load Balancer 的請求。Elastic Load Balancing 支援 Lambda 函數作為 Application Load Balancer 的目標。使用負載平衡器規則,根據路徑或標頭值將HTTP要求路由至函數。處理請求並從 Lambda 函數傳回回HTTP應。
Elastic Load Balancer 將使用含有請求內文和中繼資料的事件,同步叫用您的 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 Balancer 使用者指南中的 Lambda 函數作為目標。