- PVSM.RU - https://www.pvsm.ru -

Lambdify — новый взгляд на работу с AWS Lambda

Данная статя расскажет о попытке подружить AWS Lamba и python в истинном смысле этого слова. Под истинным смыслом я понимаю возможность взаимодействовать c сервисом (создавать, обновлять и вызывать лябда-функции) непосредственно из пайтона. Если вам интересны AWS Lambda и python, представляю вашему вниманию proof-of-concept библиотеки lambdify [1].

Дисклеймер

Данная библиотека является work-in-progress а также proof-of-concept, поэтому любой фидбек очень приветсвуется.

В последнее время большой популярностью пользуется такой сервис как AWS Lambda [2]. О том, что это такое и с чем его едят, уже писалось, например тут [3]. В связи с этим, появилось много инструментов для работы с Lambda, в том числе, написанных на пайтоне, например Zappa [4], python-lambda [5] и т.п. Но все их объединяет отсутствие возможности создавать лямбда-фунции динамически. Пользователю так или иначе приходится косвенно манипулировать файлами, содержащими код лямда-обработчиков, что мешает использовать их програмно.

В свою очередь, lambdify обходит это ограничение, позволяя, написав слудующий код, получить рабочую лямбда функцию:

Установка

pip install awscli
aws configure
pip install lambdify

Теперь Вы можете создать свою лямбда-функцию в 5 строчек кода:

from lambdify import Lambda


@Lambda.f(name='echo')
def echo(*args, **kwargs):
    return args, kwargs

# здесь, мы должны создать фунцию явно, хотя библиотека позволяет 
# синхронизировать код функции с ее облачным инстансом автоматически
echo.create() 

if __name__ == '__main__':
    import getpass
    echo(msg='Hello, {user}!'.format(user=getpass.getuser()))

Теперь, если зайти в AWS консоль [6], вы сможете увидеть новенькую echo лямбда-функцию. Одной из особенностей есть то, что сигнатура оригинальной функции автоматически приводится к сигнатуре, определенной в документации http://docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.html [7].

Если вышеприведенный пример не показался Вам слишком убедительным, то вот вам снипет для размышления:

@Lambda(name='meta')
def meta(name=None):
    @Lambda(name=name or 'foo')
    def foo(*args):
        return 42

    return foo.get()

… да-да, это лямбда, которая создает новые лямбды…

image

… и все это происходит в облаке. Правда, для этого нужно будет поиграться с ролями и политиками амазона, но это уже не входит в скоуп
данной статьи.

А теперь вернемся в реальный мир. Пользователи, которые сталкивались с использованием очередей задач (далее ОЗ), таких как Celery или RQ, возможно, заметят некую аналогию с их интерфейсами. И будут правы: одной из целей lambdify является попытка соеденить в себе удобство использования ОЗ для масштабирования системы, с теми преимуществами, которые предоставляет AWS Lambda, в частности, отсутствие необходимости администрировать воркеров и обеспечивать масштабирование (в отличие от традиционных ОЗ). Возможно, в будущем, данная тулза поможет кому-то мигрировать с использования ОЗ на AWS Lambda.

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

Ссылки:

Автор: LeonExt

Источник [10]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/117382

Ссылки в тексте:

[1] lambdify: http://zhukovalexander.github.io/lambdify/

[2] AWS Lambda: https://aws.amazon.com/lambda/

[3] тут: https://habrahabr.ru/company/epam_systems/blog/245949/

[4] Zappa: https://github.com/Miserlou/Zappa

[5] python-lambda: https://github.com/nficano/python-lambda

[6] AWS консоль: https://console.aws.amazon.com/lambda/

[7] http://docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.html: http://docs.aws.amazon.com/lambda/latest/dg/python-programming-model-handler-types.html

[8] GitHub репозиторий: https://github.com/ZhukovAlexander/lambdify

[9] Документация по AWS Lambda: http://aws.amazon.com/documentation/lambda/

[10] Источник: https://habrahabr.ru/post/281216/