3

AWS 刚刚宣布了一项使用 Application Loadbalancers 调用 Lambda 函数的新功能。这是个好消息,因为我们不必为了从我的 lambda 函数获得简单的响应而为 API 网关配置所有这些映射。

我们有一个通过 API 网关在 lambda 上运行的图像大小调整服务。我想知道我们是否可以用 ALB 替换 API 网关。现在它的工作方式是我们必须将 base64 编码的图像发送到 api 网关,然后将其转换为二进制文件并发送回我们的客户端。

如果我们要用 ALB 替换 API 网关,我们将如何提供图像/二进制响应,我们必须对现有基础设施进行哪些必要的更改。

4

3 回答 3

2

如果您还没有弄清楚,您可以使用与 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 将为您解码,确保内容类型设置正确。

于 2018-12-17T18:14:27.937 回答
2

从负载均衡器接收事件是用例:

现在,应用程序负载均衡器支持通过 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"
 }

遵循将描述您的用例的官方 AWS 指南

于 2018-12-11T06:48:50.527 回答
-1

在我看来,ALB 调用 Lambda 函数的方式是基于应用程序路径的路由。假设您的应用程序有一个路径 /imageprocessing 因此当您的客户端访问所述资源时,ALB 将调用 LAMBDA 函数作为您的目标。

现在有了这个新功能,您就可以使用 ALB 或网关或两者兼而有之。现在,新功能可以轻松扩展您现有的服务。

于 2018-12-07T07:25:51.930 回答