Skip to content

Commit 745492c

Browse files
committed
docs: improve dropping records example
1 parent e11c718 commit 745492c

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

docs/utilities/data_classes.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -994,10 +994,12 @@ To do that, you can use `KinesisFirehoseDataTransformationResponse` class along
994994

995995
=== "Dropping invalid records"
996996

997-
```python
997+
```python hl_lines="5-6 16 34"
998998
--8<-- "examples/event_sources/src/kinesis_firehose_response_drop.py"
999999
```
10001000

1001+
1. This exception would be generated from `record.data_as_json` if invalid payload.
1002+
10011003
=== "Indicating a processing failure"
10021004

10031005
```python

examples/event_sources/src/kinesis_firehose_response_drop.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,33 @@
1+
from json import JSONDecodeError
2+
from typing import Dict
3+
14
from aws_lambda_powertools.utilities.data_classes import (
25
KinesisFirehoseDataTransformationRecord,
36
KinesisFirehoseDataTransformationResponse,
47
KinesisFirehoseEvent,
8+
event_source,
59
)
610
from aws_lambda_powertools.utilities.serialization import base64_from_json
711
from aws_lambda_powertools.utilities.typing import LambdaContext
812

913

10-
def lambda_handler(event: dict, context: LambdaContext):
11-
firehose_event = KinesisFirehoseEvent(event)
14+
@event_source(data_class=KinesisFirehoseEvent)
15+
def lambda_handler(event: KinesisFirehoseEvent, context: LambdaContext):
1216
result = KinesisFirehoseDataTransformationResponse()
1317

14-
for record in firehose_event.records:
18+
for record in event.records:
1519
try:
16-
payload = record.data_as_text # base64 decoded data as str
17-
## do all kind of stuff with payload
20+
payload: Dict = record.data_as_json # decodes and deserialize base64 JSON string
21+
1822
## generate data to return
1923
transformed_data = {"tool_used": "powertools_dataclass", "original_payload": payload}
20-
# Default result is Ok
24+
2125
processed_record = KinesisFirehoseDataTransformationRecord(
2226
record_id=record.record_id,
2327
data=base64_from_json(transformed_data),
2428
)
25-
except Exception:
26-
# encountered failure that couldn't be fixed by retry
29+
except JSONDecodeError: # (1)!
30+
# our producers ingest JSON payloads only; drop malformed records from the stream
2731
processed_record = KinesisFirehoseDataTransformationRecord(
2832
record_id=record.record_id,
2933
data=record.data,

0 commit comments

Comments
 (0)