Одна лямбда-функция ИЛИ несколько лямбда-функций - PullRequest
1 голос
/ 03 февраля 2020

Могу ли я написать одну лямбда-функцию для обработки нескольких запросов REST API. У меня есть данные в Dynamo DB

Поток: API Gateway -> Лямбда-функция -> Dynamo DB Пример:

Request1:GET Method-Need to pull data from Table1
/device/{device_id}/start/{start_date}/end/{end_date}/events


Request2:GET Method-Need to pull data from Table2
/device/{device_id}/start/{start_date}/end/{end_date}/event_count

Request3:POST Method-Need to put data from Table3
/device/{device_id}/start/{start_date}/end/{end_date}/fault_events

Как лучше всего написать 3 разные лямбда-функции для обработки 3 разных запросов или я могу обработать все 3 запроса в одной большой лямбда-функции.

Ответы [ 4 ]

2 голосов
/ 03 февраля 2020

Да, у вас может быть одна лямбда-функция, которая обрабатывает более одного API. Вопрос в том, почему?

Это считается (почти) анти-паттерном , поскольку вы не сможете независимо масштабировать различные сценарии.

Это два слайда из ссылки, вставленной выше из выступления Криса Маннса, в котором он, наконец, изобрел, и я полностью согласен.

enter image description here enter image description here

1 голос
/ 03 февраля 2020

Хотя я не знаю достаточно о вашем сценарии использования, чтобы рекомендовать использовать 1 или несколько лямбда-выражений, я могу объяснить один способ работы со всеми запросами внутри одной функции.

Вы можете передать параметры из лямбда-выражения событие, которое приходит из параметров API AWS и затем использует их для определения следующих логик c. Пример будет выглядеть так:

def lambda_handler(event, context):
    try:
        type_query = str(event['queryStringParameters']['type_query'])
        if type_query == 'x':
            ...do the things
        elif type_query == 'y':
            ...do the other things
        elif type_query == 'z':
            ...do the 3rd thing
    except:
        return {
            'body': "Invalid Params"
        }

Надеюсь, это поможет!

0 голосов
/ 04 февраля 2020

Как отмечали многие, это действительно зависит от вашего варианта использования. В целом, должно быть хорошо обрабатывать несколько конечных точек в одной лямбда-функции. Один из подходов, который вы можете использовать, если вы используете Node.JS, - это оборачивать веб-сервер express в функцию Lambda. Таким образом, вы сможете как протестировать функцию локально (запустив веб-сервер), так и использовать ее в лямбда-выражении (обернув сервер внутри прокси-сервера Lambda). Но опять же, это действительно зависит от вашего варианта использования, и, как упоминал Джейсон, вы также должны быть осторожны, чтобы не разделить их слишком много

0 голосов
/ 03 февраля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...