generated from amazon-archives/__template_MIT-0
- Notifications
You must be signed in to change notification settings - Fork 460
Closed
Labels
Description
We're attempting to use aws_lambda_powertools.utilities.batch to handle retries etc. for an SQS queue. We're observing differences between a cold lambda and a warm lambda (i.e. previously processed an SQS message) for a batch containing a single failing message:
- cold lambda: we get the
BatchProcessingError: All records failed processing. 1 individual errors loggedseparately below.exception (i.e. the whole invocation fails) - warm lambda: we get a successful invocation reporting
{"batchItemFailures": ...}
This difference in behaviour makes us a bit suspicious that there's a deeper bug hiding?
Expected Behavior
The cold and warm lambdas should behave the same.
Current Behavior
Cold lambdas have the invocation fail, warm lambdas have it succeed.
Possible Solution
🤷
Steps to Reproduce (for bugs)
This is the distilled version of our code, without the business logic.
from typing import Any from aws_lambda_powertools.logging import Logger from aws_lambda_powertools.tracing import Tracer from aws_lambda_powertools.utilities.batch import ( batch_processor, BatchProcessor, EventType, ) from aws_lambda_powertools.utilities.data_classes.sqs_event import SQSRecord logger = Logger() tracer = Tracer() from . import client processor = BatchProcessor(event_type=EventType.SQS) @tracer.capture_method def record_handler(record: SQSRecord) -> None: raise Exception() @logger.inject_lambda_context @tracer.capture_lambda_handler @batch_processor(record_handler=record_handler, processor=processor) def handler(event: Any, context: Any) -> Any: response = processor.response() logger.info(response) return responseWe observe the difference when the lambda is invoked with a batch containing a single record. I haven't checked for batches with multiple records.
Environment
- Powertools version used: 1.24.2
- Packaging format (Layers, PyPi): layers
- AWS Lambda function runtime: python3.9
- Debugging logs
Cold start:
START RequestId: 3bd01a85-d651-5443-a0b9-40fa74025d5e Version: $LATEST 2022-02-10 23:30:39,023 aws_lambda_powertools.tracing.tracer [DEBUG] Annotating cold start 2022-02-10 23:30:39,023 aws_lambda_powertools.tracing.tracer [DEBUG] Calling lambda handler 2022-02-10 23:30:39,024 aws_lambda_powertools.tracing.tracer [DEBUG] Calling method: record_handler 2022-02-10 23:30:39,024 aws_lambda_powertools.tracing.tracer [ERROR] Exception received from 'record_handler' method Traceback (most recent call last): File "/opt/python/aws_lambda_powertools/tracing/tracer.py", line 632, in decorate response = method(*args, **kwargs) File "/var/task/shared/notifications/pinpoint_sender.py", line 22, in record_handler raise Exception() Exception 2022-02-10 23:30:39,024 aws_lambda_powertools.utilities.batch.base [DEBUG] Record processing exception: <class 'Exception'>: 2022-02-10 23:30:39,024 aws_lambda_powertools.middleware_factory.factory [ERROR] Caught exception in batch_processor Traceback (most recent call last): File "/opt/python/aws_lambda_powertools/middleware_factory/factory.py", line 133, in wrapper response = middleware() File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 197, in batch_processor processor.process() File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 95, in __exit__ self._clean() File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 381, in _clean raise BatchProcessingError( aws_lambda_powertools.utilities.batch.exceptions.BatchProcessingError: All records failed processing. 1 individual errors loggedseparately below. Traceback (most recent call last): File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 367, in _process_record result = self.handler(record=data) File "/opt/python/aws_lambda_powertools/tracing/tracer.py", line 632, in decorate response = method(*args, **kwargs) File "/var/task/shared/notifications/pinpoint_sender.py", line 22, in record_handler raise Exception() Exception 2022-02-10 23:30:39,025 aws_lambda_powertools.tracing.tracer [ERROR] Exception received from handler Traceback (most recent call last): File "/opt/python/aws_lambda_powertools/tracing/tracer.py", line 315, in decorate response = lambda_handler(event, context, **kwargs) File "/opt/python/aws_lambda_powertools/middleware_factory/factory.py", line 133, in wrapper response = middleware() File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 197, in batch_processor processor.process() File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 95, in __exit__ self._clean() File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 381, in _clean raise BatchProcessingError( aws_lambda_powertools.utilities.batch.exceptions.BatchProcessingError: All records failed processing. 1 individual errors loggedseparately below. Traceback (most recent call last): File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 367, in _process_record result = self.handler(record=data) File "/opt/python/aws_lambda_powertools/tracing/tracer.py", line 632, in decorate response = method(*args, **kwargs) File "/var/task/shared/notifications/pinpoint_sender.py", line 22, in record_handler raise Exception() Exception [ERROR] BatchProcessingError: All records failed processing. 1 individual errors loggedseparately below.Traceback (most recent call last): File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 367, in _process_record result = self.handler(record=data) File "/opt/python/aws_lambda_powertools/tracing/tracer.py", line 632, in decorate response = method(*args, **kwargs) File "/var/task/shared/notifications/pinpoint_sender.py", line 22, in record_handler raise Exception()ExceptionTraceback (most recent call last): File "/opt/python/aws_lambda_powertools/logging/logger.py", line 354, in decorate return lambda_handler(event, context) File "/opt/python/aws_lambda_powertools/tracing/tracer.py", line 315, in decorate response = lambda_handler(event, context, **kwargs) File "/opt/python/aws_lambda_powertools/middleware_factory/factory.py", line 133, in wrapper response = middleware() File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 197, in batch_processor processor.process() File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 95, in __exit__ self._clean() File "/opt/python/aws_lambda_powertools/utilities/batch/base.py", line 381, in _clean raise BatchProcessingError( END RequestId: 3bd01a85-d651-5443-a0b9-40fa74025d5e REPORT RequestId: 3bd01a85-d651-5443-a0b9-40fa74025d5e Duration: 4.89 ms Billed Duration: 5 ms Memory Size: 1024 MB Max Memory Used: 131 MB Init Duration: 2747.49 ms XRAY TraceId: 1-6205a01b-7a6ccc85114d85b16cae1bf2 SegmentId: 027240f94d75adf6 Sampled: true Warm start:
START RequestId: 4c561c3a-8657-5c98-bf47-46452430d17f Version: $LATEST 2022-02-10 23:31:05,393 aws_lambda_powertools.tracing.tracer [DEBUG] Annotating cold start 2022-02-10 23:31:05,394 aws_lambda_powertools.tracing.tracer [DEBUG] Calling lambda handler 2022-02-10 23:31:05,394 aws_lambda_powertools.tracing.tracer [DEBUG] Calling method: record_handler 2022-02-10 23:31:05,394 aws_lambda_powertools.tracing.tracer [ERROR] Exception received from 'record_handler' method Traceback (most recent call last): File "/opt/python/aws_lambda_powertools/tracing/tracer.py", line 632, in decorate response = method(*args, **kwargs) File "/var/task/shared/notifications/pinpoint_sender.py", line 22, in record_handler raise Exception() Exception 2022-02-10 23:31:05,394 aws_lambda_powertools.utilities.batch.base [DEBUG] Record processing exception: <class 'Exception'>: { "level": "INFO", "location": "/var/task/shared/notifications/pinpoint_sender.py:handler:56", "message": { "batchItemFailures": [ { "itemIdentifier": "490fd65e-664f-48be-b264-0a569ba14a51" } ] }, "timestamp": "2022-02-10 23:31:05,394+0000", "service": "api", "sampling_rate": "1", "commit": "6b83e37dab11205fd9a78a08d3221b8a405a5c6e", "cold_start": false, "function_name": "serverless-pr-2250-pinpoint_sender", "function_memory_size": "1024", "function_arn": "arn:aws:lambda:ap-southeast-2:561074087650:function:serverless-pr-2250-pinpoint_sender", "function_request_id": "4c561c3a-8657-5c98-bf47-46452430d17f", "xray_trace_id": "1-6205a039-5b188aab3a9891836e5a5de5" } 2022-02-10 23:31:05,394 aws_lambda_powertools.tracing.tracer [DEBUG] Received lambda handler response successfully END RequestId: 4c561c3a-8657-5c98-bf47-46452430d17f REPORT RequestId: 4c561c3a-8657-5c98-bf47-46452430d17f Duration: 2.68 ms Billed Duration: 3 ms Memory Size: 1024 MB Max Memory Used: 131 MB XRAY TraceId: 1-6205a039-5b188aab3a9891836e5a5de5 SegmentId: 1ad8d244381e4642 Sampled: true