Служите двоичным ответам через ALB и лямбда-интеграцию - PullRequest
0 голосов
/ 07 декабря 2018

AWS только что анонсировала новую функцию Вызов лямбда-функций с помощью Application Loadbalancers .Это отличная новость, поскольку нам не нужно настраивать все эти сопоставления для шлюза API, чтобы получить простой ответ от моей лямбда-функции.

У нас есть служба изменения размера изображения, работающая в lambda через шлюз API.Мне интересно, можем ли мы заменить шлюз API на ALB.Теперь, как это работает, мы должны отправить изображение в кодировке base64 на шлюз API, который, в свою очередь, преобразует его в двоичный файл и отправляет обратно нашим клиентам.

Если бы мы заменили API-шлюз на ALB, как бы мы обслуживали изображения / двоичные ответы, какими будут необходимые изменения, которые мы должны сделать в нашей существующей инфраструктуре.

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Получение событий от балансировщика нагрузки - это вариант использования:

Теперь балансировщик нагрузки приложения поддерживает Lambda-вызов для запросов как по HTTP, так и по HTTPS.Если тип содержимого относится к одному из следующих типов, балансировщик нагрузки отправляет тело функции 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, которое опишет вашеслучай использования

0 голосов
/ 17 декабря 2018

если вы еще не выяснили, вы можете предоставить двоичные данные из вашей функции Lambda так же, как вы делали это для API GW.ALB также поддерживает тот же флаг «isBase64Encode», который можно установить в ответе JSON.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 декодирует его для вас, сделайтеубедитесь, что тип содержимого установлен правильно.

0 голосов
/ 07 декабря 2018

На мой взгляд, ALB будет вызывать лямбда-функцию - это маршрутизация на основе пути приложения.скажем, у вашего приложения есть обработка пути / изображения, поэтому, когда ваш клиент получит доступ к указанному ресурсу, ALB будет вызывать функцию LAMBDA в качестве вашей цели.

теперь с этой новой функцией у вас есть возможность использовать ALB или шлюз илии то и другое.Новая возможность облегчает расширение существующего сервиса сейчас.

...