У меня есть функция Lambda, которая обрабатывает поток DynamoDb для создания агрегата в реальном времени (разветвления).Для каждой записи в пакете, доставляемом в функцию Lambda, агрегат обновляется.
Если в записи происходит сбой функции Lambda, происходит сбой и повторная попытка всего пакета (см. Обрабатывает ли AWS Lambda поток DynamoDBсобытия строго по порядку? ).Когда пакет повторяется, это может привести к обработке уже успешно обработанных записей.Поскольку агрегатное обновление не идемпотентно, агрегат становится некорректным.
Чтобы сделать агрегатное обновление идемпотентным, я бы хотел сохранить последнюю обработанную запись SequenceNumber в агрегате.При повторной попытке пакета элементы с более ранними номерами последовательностей могут быть отброшены (т. Е. Те, которые уже были добавлены в агрегат / обработаны).
Однако, поскольку номера последовательностей относятся к каждому шарду, использование их втаким образом, не зная ShardId.Это предположение верно?
Возможно получить ShardId при использовании клиентской библиотеки Kinesis.Можно ли получить ShardId изнутри лямбда-функции?