Вот 3 разных варианта.Правильный выбор будет зависеть от требований вашего приложения.Может случиться так, что ни один из них не будет работать в вашем конкретном случае использования, но в целом все эти подходы будут работать.
Опция 1
Если вы используете AWS IAM на достаточно детальном уровне, то вы можете получить идентификатор пользователя из Потоковой записи .
Опция 2
Если вы можете обрабатывать небольшие накладные расходы при записи в DynamoDB, вы можете настроить лямбда-функцию (или службу на основе ec2), которая действует какзапись прокси в ваши таблицы DynamodB.Сконфигурируйте ваши разрешения так, чтобы только Lambda могла записывать в таблицу, а затем вы можете принимать любые метаданные и записывать их по своему усмотрению.Если все, что вам нужно, это регистрация событий, вам не нужно писать в S3, поскольку AWS может обрабатывать лямбда-журналы за вас.
Вот пример псевдокода для лямбда-функции, использующей запись в журнал вместо записи в S3.
handle_event(operation, item, user)
log(operation, item, user)
switch operation
case put:
dynamodb.put(item)
case update:
dynamodb.update(item)
case delete:
dynamodb.delete(item)
log(operation, item, user)
logEntry.time = now
logEntry.user = user
...
print(logEntry)
Вы, конечно, можете свободно регистрироваться непосредственно на S3, но если вы это сделаете, вы можете обнаружить, что добавленная задержка достаточно значительна, чтобы повлиять на ваше приложение.
Опция 3
Если вы можете допускать некоторые устаревшие данные в своей таблице, установите DynamoDB TTL на своих таблицах.Не устанавливайте значение TTL при создании или обновлении элемента.Затем вместо удаления элемента обновите элемент, добавив текущее время в поле TTL.Насколько я могу судить, DynamoDB не использует емкость записи при удалении элементов с истекшим TTL, а истекшие элементы удаляются с истечением 24 часов.
Это позволит вам регистрировать «добавить TTL» как удаление и иметь пользователя last modified by
для этого удаления.Вы можете безопасно игнорировать фактическое удаление, которое происходит, когда DynamodB очищает просроченные элементы.
В вашем приложении вы также можете проверить наличие значения TTL, чтобы случайно не предоставить пользователям удаленные данные.Вы также можете добавить выражение фильтра к любым запросам, в которых пропущены элементы с установленным TTL.