AWS刚刚宣布了一项新功能使用应用程序负载平衡器调用Lambda函数。这是个好消息,因为我们不必为我的lambda函数获得简单的响应就为API网关配置所有这些映射。
我们有一个通过API网关在lambda上运行的图像大小调整服务。我想知道我们是否可以用ALB代替API网关。现在它的工作方式是,我们必须将base64编码的图像发送到api网关,然后将其转换为二进制文件并发送回我们的客户端。
如果要用ALB替换API网关,我们将如何提供图像/二进制响应,这是我们必须对现有基础架构进行的必要更改。
答案 0 :(得分:1)
从负载均衡器接收事件是用例:
现在,应用程序负载平衡器支持通过HTTP和HTTPS进行请求的Lambda调用。如果内容类型是以下类型之一,则负载平衡器会将主体按原样发送给Lambda函数,并将isBase64Encoded设置为false:text / *,application / json,application / javascript和application / xml。对于所有其他类型,负载均衡器Base64会对主体进行编码,并将isBase64Encoded设置为true
以下是示例事件。
{
"requestContext": {
"elb": {
"targetGroupArn":
"arn:awscn:elasticloadbalancing:region:123456789012:targetgroup/my-target- group/6d0ecf831eec9f09" // ALB reference
}
},
"httpMethod": "GET",
"path": "/",
"queryStringParameters": {parameters},
"headers": {
"accept": "text/html,application/xhtml+xml",
"accept-language": "en-US,en;q=0.8",
"content-type": "text/plain",
"cookie": "cookies",
"host": "lambda-846800462-us-east-2.elb.amazonaws.com", //this is where Lambda CNAME is declared
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)",
"x-amzn-trace-id": "Root=1-5bdb40ca-556d8b0c50dc66f0511bf520",
"x-forwarded-for": "72.21.198.66",
"x-forwarded-port": "443",
"x-forwarded-proto": "https"
},
"isBase64Encoded": false,
"body": "request_body"
}
following Official AWS Guide which will describe your use case
答案 1 :(得分:1)
如果您还没有弄清楚,您可以按照与API GW相同的方式从Lambda函数提供二进制数据。 ALB还支持可以在响应JSON中设置的相同“ isBase64Encode”标志。如果设置了该标志,则ALB b64会对主体进行解码。
从文档中:
{
"statusCode": 200,
"statusDescription": "HTTP OK",
**"isBase64Encoded": False,**
"headers": {
"server": "my-server",
"set-cookie": "name=value",
"Content-Type": "text/html; charset=utf-8"
},
"body": "Welcome"
}
基本上,只需b64编码您的身体并设置该标志,ALB就会为您解码,确保内容类型设置正确。
答案 2 :(得分:-1)
在我看来,ALB调用Lambda函数的方式是基于应用程序路径的路由。假设您的应用程序具有/ imageprocessing路径,因此当您的客户端访问上述资源时,ALB将调用LAMBDA函数作为目标。
现在有了这项新功能,您就可以使用ALB或网关或同时使用两者。新功能使现在轻松扩展现有服务。