За кулисами «лямбда-функция» представляет собой сценарий 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 для всех вызовов и просто передавать полностью сформированное сообщение о событии в очередь.