Преобразование лямбда-функции AWS в контейнер - PullRequest
0 голосов
/ 04 июня 2019

В настоящее время у меня есть несколько функций AWS Lambda, и я хотел бы объединить их в контейнеры (предпочтительно Docker) для интеграции с текущим конвейером CICD.Вполне нормально, что эти контейнеры вращаются в сервисе Amazon, таком как Fargate, - важно то, что он должен вращаться в контейнере.Самое близкое, что я нашел, это это репо от Amazon, который конвертирует изображения в Lambdas, хотя это противоположно тому, что я ищу.

Возможна ли эта задача, и еслитак как лучше это сделать?

1 Ответ

0 голосов
/ 05 июня 2019

За кулисами «лямбда-функция» представляет собой сценарий Python, который прослушивает события вызова и вызывает фактическую функцию-обработчик.Это означает, что вы можете довольно легко вызвать функцию, используя стандартный код Python «script»:

if __name__ == "__main__":
    args = # this is the tricky part
    ctx  = # some dict that looks like what Lambda expects
    handler(args, ctx)

Эти два параметра являются просто диктовками, поэтому, если вы можете заполнить их чем-то, что выглядит правильно, вы можете обернутьвсе это в контейнере и развернуть его в ECS или Batch, или в вашем собственном демоне Docker.

Проблема в том, как вы их заполняете, и это зависит от того, что делают ваши лямбда-функции - чего вы не делаетескажем - и как они вызываются - что вы тоже не говорите.

Вы можете использовать параметры командной строки.Например, если ваша лямбда предназначена для ответа на операцию S3 PutObject, то все, что вам действительно нужно, это имя корзины и ключа.Исходя из этого, вы можете легко создать фиктивное событие вызова S3 , используя поддельные значения для всех остальных полей.

Если вы вызываете свою лямбду в ответ на сообщение SQS, это еще проще:Обработчик «main» входит в цикл, который опрашивает SQS и переформатирует сообщения, которые он выводит из очереди.

Другие источники событий будут намного сложнее.Может иметь смысл (в зависимости от того, почему вы это делаете) использовать SQS для всех вызовов и просто передавать полностью сформированное сообщение о событии в очередь.

...