S3: Add EventBridge Notification for DeleteObject (#7420)
This commit is contained in:
parent
dae651f62e
commit
ef7653335b
@ -2599,10 +2599,17 @@ class S3Backend(BaseBackend, CloudWatchMetricProvider):
|
||||
bucket = self.get_bucket(bucket_name)
|
||||
|
||||
response_meta = {}
|
||||
delete_key = bucket.keys.get(key_name)
|
||||
|
||||
try:
|
||||
if not bucket.is_versioned:
|
||||
bucket.keys.pop(key_name)
|
||||
notifications.send_event(
|
||||
self.account_id,
|
||||
notifications.S3NotificationEvent.OBJECT_REMOVED_DELETE_EVENT,
|
||||
bucket,
|
||||
delete_key,
|
||||
)
|
||||
else:
|
||||
if version_id is None:
|
||||
delete_marker = self._set_delete_marker(bucket_name, key_name)
|
||||
@ -2645,6 +2652,13 @@ class S3Backend(BaseBackend, CloudWatchMetricProvider):
|
||||
|
||||
if not bucket.keys.getlist(key_name):
|
||||
bucket.keys.pop(key_name)
|
||||
notifications.send_event(
|
||||
self.account_id,
|
||||
notifications.S3NotificationEvent.OBJECT_REMOVED_DELETE_EVENT,
|
||||
bucket,
|
||||
delete_key,
|
||||
)
|
||||
|
||||
return True, response_meta
|
||||
except KeyError:
|
||||
return False, None
|
||||
|
@ -142,3 +142,26 @@ def test_copy_object_notification():
|
||||
assert event_message["detail"]["bucket"]["name"] == bucket_name
|
||||
assert event_message["detail"]["object"]["key"] == object_key
|
||||
assert event_message["detail"]["reason"] == "ObjectCreated"
|
||||
|
||||
|
||||
@mock_aws
|
||||
def test_delete_object_notification():
|
||||
resource_names = _seteup_bucket_notification_eventbridge()
|
||||
bucket_name = resource_names["bucket_name"]
|
||||
s3_client = boto3.client("s3", region_name=REGION_NAME)
|
||||
|
||||
# Put Object
|
||||
s3_client.put_object(Bucket=bucket_name, Key="keyname", Body="bodyofnewobject")
|
||||
|
||||
# Delete Object
|
||||
s3_client.delete_object(Bucket=bucket_name, Key="keyname")
|
||||
|
||||
events = _get_send_events()
|
||||
assert len(events) == 2
|
||||
event_message = json.loads(events[1]["message"])
|
||||
assert event_message["detail-type"] == "Object Deleted"
|
||||
assert event_message["source"] == "aws.s3"
|
||||
assert event_message["account"] == ACCOUNT_ID
|
||||
assert event_message["region"] == REGION_NAME
|
||||
assert event_message["detail"]["bucket"]["name"] == bucket_name
|
||||
assert event_message["detail"]["reason"] == "ObjectRemoved"
|
||||
|
Loading…
Reference in New Issue
Block a user