Можете ли вы изменить URI для события AWS CloudFront с помощью Lambda @ Edge на языке, отличном от Javascript? - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь провести некоторое тестирование AB, и вставка лямбды в нашу настройку AWS CloudFront кажется хорошим способом сделать это. У моей компании проблемы с NodeJ. Они были сожжены некоторыми старыми разработчиками, использующими его, и запретили его использование.

Lambda поддерживает несколько языков, так что ничего страшного. Но после некоторых исследований и глядя на источник. Похоже, что только Javascript может взаимодействовать с событиями CloudFront и передавать запрос вперед. Кажется, что все библиотеки для других языков только генерируют ответные события и не позволяют передавать запрос после модификации.

Я что-то упустил или этот сценарий поддерживается только с JS?

1 Ответ

2 голосов
/ 22 марта 2019

Lambda @ Edge поддерживает только среды выполнения Node.js.

Вы должны создавать функции со свойством времени выполнения nodejs6.10 или nodejs8.10.

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-requirements-limits.html#lambda-requirements-lambda-function-configuration

Ваше наблюдение о других средах выполнения "похоже, только генерирует события ответа и не учитывает передачу запроса после модификации" не совсем точное представление о том, что происходит. Node.js не делает никакой специальной "передачи вперед" магии. CloudFront интерпретирует полезную нагрузку ответа от функции Lambda, чтобы определить, как действовать дальше. Если это триггер запроса и функция Lambda возвращает что-то структурированное, например запрос, тогда CloudFront продолжает обрабатывать запрос с изменениями. В противном случае CloudFront интерпретирует полезную нагрузку ответа как ответ, возвращаемый вызывающей стороне. Все обрабатывается интерпретацией CloudFront того, что возвращает функция Lambda.

Теоретически любая среда выполнения Lambda могла бы достичь той же цели, но Lambda @ Egde была разработана - и в настоящее время поддерживает только - среды выполнения Node.js, которые легки и быстры, как и должно быть, потому что CloudFront вызывает функция триггера синхронно, а затем блокирует (приостанавливает свою собственную обработку), ожидая возврата функции.

...