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)
|
bucket = self.get_bucket(bucket_name)
|
||||||
|
|
||||||
response_meta = {}
|
response_meta = {}
|
||||||
|
delete_key = bucket.keys.get(key_name)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if not bucket.is_versioned:
|
if not bucket.is_versioned:
|
||||||
bucket.keys.pop(key_name)
|
bucket.keys.pop(key_name)
|
||||||
|
notifications.send_event(
|
||||||
|
self.account_id,
|
||||||
|
notifications.S3NotificationEvent.OBJECT_REMOVED_DELETE_EVENT,
|
||||||
|
bucket,
|
||||||
|
delete_key,
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
if version_id is None:
|
if version_id is None:
|
||||||
delete_marker = self._set_delete_marker(bucket_name, key_name)
|
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):
|
if not bucket.keys.getlist(key_name):
|
||||||
bucket.keys.pop(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
|
return True, response_meta
|
||||||
except KeyError:
|
except KeyError:
|
||||||
return False, None
|
return False, None
|
||||||
|
@ -142,3 +142,26 @@ def test_copy_object_notification():
|
|||||||
assert event_message["detail"]["bucket"]["name"] == bucket_name
|
assert event_message["detail"]["bucket"]["name"] == bucket_name
|
||||||
assert event_message["detail"]["object"]["key"] == object_key
|
assert event_message["detail"]["object"]["key"] == object_key
|
||||||
assert event_message["detail"]["reason"] == "ObjectCreated"
|
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