Как построить индекс объектов S3, когда данные превышают лимит метаданных объекта?
Создание индекса объектов S3 может быть очень полезным для быстрого поиска по ним: естественный, наиболее очевидный способ - сохранить дополнительные данные в метаданных объекта и использовать лямбду для записи в DynamoDB или RDS, как описано здесь: https://aws.amazon.com/blogs/big-data/building-and-maintaining-an-amazon-s3-metadata-index-without-servers/
Однако эта стратегия ограничена объемом данных, которые можно хранить в метаданных объекта, который составляет 2 КБ, как описано здесь: https://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html. Предположим, вам нужно построить систему, в которой каждый раз, когда объект загружается на S3, который вы сохраняете, необходимо добавить некоторую информацию, не содержащуюся в файле, и имя объекта в базу данных, и эти данные превышают 2 КБ: вы не можете сохранить его в объекте. метаданные.
Каковы жизнеспособные стратегии для обновления корзины и индекса?
Реализуйте два связанных API-вызова, где каждый вызов идемпотентен: если второй сбой при первом успешном, можно повторить попытку до успеха. Что произойдет, если вы выполняете PUT идентичного объекта на S3 и у вас активировано управление версиями? Будет ли S3 увеличивать версию? В этом случае реализация идемпотентности требует, чтобы каждый раз был активен один писатель
Для отслеживания этого двухэтапного поведения используйте какой-либо механизм рабочих процессов, например AWS Step. Какие ошибки с этим решением?