将 Amazon Lambda 与 Application Load Balancer 结合使用 - Amazon Lambda
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

将 Amazon Lambda 与 Application Load Balancer 结合使用

您可使用 Lambda 函数处理来自 Application Load Balancer 的请求。Elastic Load Balancing 支持 Lambda 函数作为 Application Load Balancer 的目标。使用负载均衡器规则,基于路径或标头值将 HTTP 请求路由到一个函数。处理请求并从 Lambda 函数返回 HTTP 响应。

Elastic Load Balancing 将使用包含请求正文和元数据的事件同步调用 Lambda 函数。

例 Application Load Balancer 请求事件

{ "requestContext": { "elb": { "targetGroupArn": "arn:aws-cn:elasticloadbalancing:us-east-2: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-2.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-cn:lambda:us-west-2:123456789012:function:alb-function\"}" }

有关配置 Application Load Balancer 侦听器和目标组的说明,请参阅 Application Load Balancers 用户指南 中的作为目标组的 Lambda 函数