Я создаю API, который будет обслуживаться функциями Lambda, но мне нужно, чтобы они были асинхронными, вместо того чтобы напрямую подключать API-шлюз к функции Lambda. Я использую "Service Proxy" AWS для публикации сообщений SNS и затем активируйте функцию Лямбды на соответствующую тему SNS, чтобы она получала доставку запросов. Здесь изображение, которое иллюстрирует поток:
Я тестировал как функцию Lambda в изоляции, так и pub/sub messaging между SNS и Lambda, но я борюсь с API-шлюзом для передачи обслуживания SNS. Документация довольно легкая, но сейчас я предполагаю, что в запросе POST должны быть отправлены следующие атрибуты:
-
Действие: API-шлюз предлагает установить это в пользовательском интерфейсе, и я включил действие Опубликовать, которое является соответствующим действием SNS
-
Сообщение: тело сообщения POST должно быть документом JSON. Он будет передан веб-клиентом и проксирован через шлюз к SNS.
-
ТемаArn: указывает тему SNS, которую мы публикуем. В моем дизайне это было бы статическим значением/конечной точкой, поэтому я предпочел бы, чтобы веб-клиент не должен был это пропускать, но если бы было легче сделать это, это тоже было бы хорошо.
Я пробовал много вещей, но просто застрял. Хотелось бы найти хороший пример кода где-нибудь, но любая помощь вообще была бы оценена.
Хотелось добавить немного больше контекста при моей текущей попытке:
Я попытался опубликовать свой API и использовать Postman, чтобы попытаться получить действительный ответ. Здесь экраны почтальонов (один для заголовков заголовков, один для тела JSON):
В результате появляется следующее сообщение об ошибке:
{
"Error": {
"Code": "InvalidParameter",
"Message": "Invalid parameter: TopicArn or TargetArn Reason: no value for required parameter",
"Type": "Sender"
},
"RequestId": "b33b7700-e8a3-58f7-8ebe-39e4e62b02d0"
}
ошибка, похоже, указывает на то, что параметр ТемаArn не отправляется в SNS, но я включил в API-шлюз следующее: