Синтаксис Typescript для лямбда, который запускается из разных событий
Используя бессерверную структуру, я определил 9X_serverless-framework лямбду, которая может запускаться каждый 9X_amazon-sns час или через SNS
... functions: { fooAction: { handler: 'handler.fooAction', events: [ { schedule: 'rate(1 hour)', }, { sns: { topicName: 'fooTopic', }, }, ], }, ... } ...
Каков правильный синтаксис 9X_amazon-sns машинописного текста при определении функции 9X_aws-event-bridge fooAction
?
Я пробовал
import { SNSHandler, ScheduledHandler} from 'aws-lambda'; ... export const fooAction: ScheduledHandler | SNSHandler = async (evt) => { ... };
но evt
преобразуется в any
.
5
K
KitekatZaZa
1
Общее количество ответов: 1
Ответ #1
Ответ на вопрос: Синтаксис Typescript для лямбда, который запускается из разных событий
Похоже, что в aws-lambda sdk есть тип Handler
, который 9X_aws-lambda является универсальным и может использоваться 9X_atscript в подобных ситуациях
import { SNSEvent, EventBridgeEvent, Handler } from 'aws-lambda'; const fooHandler: Handler> = (event) => { if ('Records' in event ) { // SNSEvent const records = event.Records; // so something } else { const { id, version, region, source } = event; } };
Вы также можете определить 9X_atscript свой собственный тип на основе этих двух 9X_serverless-framework разных типов функций.
type CustomEvent = (event: SNSEvent | EventBridgeEvent<"Scheduled Event", any>, context: Context, callback: Callback) => Promise | void
А затем используйте 9X_aws-lambda этот новый тип со своей лямбда-функцией
const fooHandler: CustomEvent = (event) => { if ('Records' in event ) { // SNSEvent const records = event.Records; // so something } else { const { id, version, region, source } = event; } };
12
J
Jaimesee
-
1
-
1
-
1
-
2
-
1
-
1
-
3
-
3
-
2
-
3
-
2
-
3
-
1
-
4
-
1
-
5
-
2
-
3
-
1
-
2
-
2
-
2
-
1
-
1
-
1
-
1
-
2
-
1
-
8
-
1
-
3
-
2
-
4
-
2
-
1
-
2
-
3
-
3
-
1
-
5
-
5
-
1
-
2
-
5
-
3
-
5
-
3
-
6
-
3
-
1