Лямбда, которая может получить аргументы как от прямого вызова, так и от сообщения SNS - PullRequest
0 голосов
/ 27 ноября 2018

Можно ли сконструировать Lambda-обработчик так, чтобы он мог получать свои аргументы из SNS, или посредством прямого вызова?
Другими словами, та же самая Lambda может быть вызвана либоявным образом или через подписку на тему SNS.

Цель состоит в том, чтобы иметь лямбду, которая обычно запускается через SNS 90% времени, но также допускает ручной вызов через консоль или веб-API.

Похоже, это может быть возможно через что-то вроде

def lambda_handler(event, context):
   args = parse_sns_event(event) if 'Records' in event else event

Предполагая, что «Записи» - это ключ верхнего уровня в событии Lambda SNS , и что «Записи» не являетсяимя одного из ожидаемых аргументов.

Есть ли лучший способ сделать это?(Если не считать двух лямбд - один основной рабочий плюс другой для получения сообщения SNS и вызова другого)

1 Ответ

0 голосов
/ 27 ноября 2018

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

Пример:

def handler(event, context):
    if 'Records' in event:
        # Handle SNS trigger
    else:
        # Handle manual trigger

Выможет передать полезную нагрузку, определенную вами через интерфейс командной строки AWS:

aws lambda invoke --function-name your-lambda-function --payload '{"Manual":"yes"}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...