Подписка AWS SNS на лямбда не создает источник событий автоматически с использованием API Java.

Ниже приведены шаги для воспроизведения с использованием AWS Java API: 1. Создайте лямбда-функцию Nodejs 2. Создайте тему SNS 3. Подпишите тему SNS на лямбда-функцию, созданную с использованием ее ARN.

Теперь, если мы перейдем к функции Lambda и посмотрим на вкладку «Источники событий», мы не увидим тему SNS, указанную в качестве источника события. Таким образом, SNS вообще не запускает функцию Lambda. Мне кажется проблема с AWS.

P.S. К ключам пользователя AWS, использованным для воспроизведения описанной выше проблемы, был прикреплен общий доступ (политика администратора). Так что это не похоже на проблему с разрешениями. Если я повторю описанные выше шаги через консоль AWS, источник события будет правильно добавлен в функцию Lambda.

Кто-нибудь сталкивался с этой проблемой раньше? Как это решить? Или любые обходные пути.


person infinity    schedule 04.03.2016    source источник


Ответы (1)


Вам нужно добавить разрешение для SNS на вызов Lambda. Это можно сделать, вызвав метод Функция AddPermission.

Справочная информация: Lambda SNS использует модель Push для вызова Lambda. Это означает, что SNS напрямую вызывает вашу лямбда-функцию (аналогично тому, как вы вызываете invokeFunction из Java SDK). Модель разрешений lambda IAM требует, чтобы каждому вызывающему объекту было явно разрешено вызывать функцию.

Это отличается от источника событий Lambda Kinesis, который использует модель извлечения (лямбда-функция запускается, а затем извлекает записи из Kinesis Stream).

person Ryan Gross    schedule 05.03.2016
comment
Спасибо, Райан. Да, это правда. Позже я понял это, просмотрев их руководство для разработчиков. Очевидно, нам не нужно делать этот шаг, когда мы создаем лямбда-функции из консоли AWS. Он делает это за кулисами. - person infinity; 06.03.2016