|
10 | 10 | class SqsEventTriggerParser(EventTriggerParser): |
11 | 11 | @staticmethod |
12 | 12 | def _should_handle(event: Dict[Any, Any]) -> bool: |
13 | | - return bool(event.get("Records", [{}])[0].get("eventSource") == "aws:sqs") |
| 13 | + return bool(event.get("Records", [{}])[0].get("eventSource") == "aws:sqs") or bool( |
| 14 | + event.get("service_name") == "sqs" and event.get("operation_name") == "ReceiveMessage" |
| 15 | + ) |
| 16 | + |
| 17 | + @staticmethod |
| 18 | + def _get_messages(event: Dict[Any, Any]) -> List[Dict[Any, Any]]: |
| 19 | + return event.get("Records", []) + event.get("Messages", []) # type: ignore |
14 | 20 |
|
15 | 21 | @staticmethod |
16 | 22 | def handle(event: Dict[Any, Any], target_id: Optional[str]) -> TriggerType: |
| 23 | + messages = SqsEventTriggerParser._get_messages(event) |
17 | 24 | message_ids = [] |
18 | | - for record in event.get("Records", []): |
19 | | - record_message_id = record.get("messageId") |
| 25 | + for record in messages: |
| 26 | + record_message_id = record.get("messageId") or record.get("MessageId") |
20 | 27 | if not record_message_id: |
21 | 28 | continue |
22 | 29 | message_ids.append(record_message_id) |
23 | 30 |
|
| 31 | + arn = event.get("Records", [{}])[0].get("eventSourceARN") or "Unknown" |
24 | 32 | return EventTriggerParser.build_trigger( |
25 | 33 | target_id=target_id, |
26 | 34 | resource_type="sqs", |
27 | 35 | from_message_ids=message_ids, |
28 | 36 | extra={ |
29 | | - ExtraKeys.ARN: event["Records"][0]["eventSourceARN"], |
30 | | - ExtraKeys.RECORDS_NUM: len(event["Records"]), |
| 37 | + ExtraKeys.ARN: arn, |
| 38 | + ExtraKeys.RECORDS_NUM: len(messages), |
31 | 39 | }, |
32 | 40 | ) |
33 | 41 |
|
34 | 42 | @staticmethod |
35 | 43 | def extract_inner(event: Dict[Any, Any]) -> List[str]: |
36 | 44 | inner_messages = [] |
37 | | - for record in event.get("Records", []): |
38 | | - body = record.get("body") |
| 45 | + for record in SqsEventTriggerParser._get_messages(event): |
| 46 | + body = record.get("body") or record.get("Body") |
39 | 47 | if isinstance(body, str): |
40 | 48 | inner_messages.append(body) |
41 | 49 | return inner_messages |
0 commit comments