Skip to content

s3_handler doesn't handle delete events #209

@npatel44

Description

@npatel44

Expected Behavior

I want to forward logs from s3 delete event
s3_handler._extract_data shouldn't try to retreive an object if it has delete marker or even is of type delete

Actual Behavior

following method in s3_handler fails as it tries to access deleted object.
def _extract_data(self):
s3_client = self._get_s3_client()
response = s3_client.get_object(
Bucket=self.data_store.bucket, Key=self.data_store.key
)

body = response.get("Body")
self.data_store.data = body.read()

Steps to Reproduce the Problem

  1. Set up s3 bucket notification to trigger templated lambda upon object delete

Specifications

  • Datadog CloudFormation template version:

Stacktrace

[ERROR] NoSuchKey: An error occurred (NoSuchKey) when calling the GetObject operation: The specified key does not exist.
Traceback (most recent call last):
File "/var/task/datadog_lambda/wrapper.py", line 239, in __call__
  """Executes when the wrapped function gets called"""
File "/var/task/ddtrace/contrib/internal/aws_lambda/patch.py", line 119, in __call__
  self.response = self.func(*args, **kwargs)
File "/var/task/datadog_lambda/wrapper.py", line 242, in __call__
  self.response = self.func(event, context, **kwargs)
File "/var/task/lambda_function.py", line 84, in datadog_forwarder
  parsed = parse(event, context, cache_layer)
File "/var/task/steps/parsing.py", line 56, in parse
  return normalize_events(events, metadata)
File "/var/task/steps/parsing.py", line 125, in normalize_events
  for event in events:
File "/var/task/steps/handlers/s3_handler.py", line 64, in handle
  self._extract_data()
File "/var/task/steps/handlers/s3_handler.py", line 118, in _extract_data
  response = s3_client.get_object(
File "/var/lang/lib/python3.12/site-packages/botocore/client.py", line 569, in _api_call
  return self._make_api_call(operation_name, kwargs)
File "/var/task/ddtrace/contrib/trace_utils.py", line 336, in wrapper
  return func(mod, pin, wrapped, instance, args, kwargs)
File "/var/task/ddtrace/contrib/internal/botocore/patch.py", line 200, in patched_api_call
  return patching_fn(
File "/var/task/ddtrace/contrib/internal/botocore/patch.py", line 260, in patched_api_call_fallback
  result = original_func(*args, **kwargs)
File "/var/lang/lib/python3.12/site-packages/botocore/client.py", line 1023, in _make_api_call
  raise error_class(parsed_response, operation_name)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions