Boto3 get_records: во входных данных отсутствует обязательный параметр: «ShardId»

Я использую Boto3 с Kinesis. Я хочу, чтобы Kinesis возвращал один элемент из потока.

Это мой код:

kinesis = boto3.client('kinesis')
iterator = kinesis.get_shard_iterator(
     StreamName = "requests",
     ShardIteratorType='LATEST'
)

response = kinesis.get_records(
     ShardIterator = iterator,
     Limit = 1,
     StreamName = "requests",
)

print(response)

Это терпит неудачу с этой ошибкой:

botocore.exceptions.ParamValidationError: Parameter validation failed:
Missing required parameter in input: "ShardId"

в строке, где я инициализирую итератор, поэтому я знаю, что мне не хватает параметра, но что мне установить ShardId? Если ответ варьируется от потока к потоку, что такое ShardId?

Заранее спасибо!

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основная проблема заключается в том, что get_shard_iterator требует передачи аргумента ShardId.


Идентификатор сегмента — это уникальный идентификатор сегмента в потоке.

Чтобы получить ShardId (или ShardId для последующего выбора) для вашего потока, сначала вызовите describe_stream.

stream = client.describe_stream(StreamName='requests')

Это вернет вам объект ответа со списком объектов потока с JsonPath response.StreamDescription.Shards.

Каждый объект в этом массиве будет иметь ShardId. В зависимости от того, как вы настроили поток Kinesis, в этом массиве может быть 1 или несколько объектов сегментов.

Если у вас есть 1 сегмент, ниже вы должны выбрать идентификатор первого сегмента и продолжить работу с остальным кодом:

kinesis = boto3.client('kinesis')

stream = client.describe_stream(StreamName='requests')
shard_id = stream['StreamDescription']['Shards'][0]['ShardId']

iterator = kinesis.get_shard_iterator(
     StreamName = "requests",
     ShardIteratorType='LATEST',
     ShardId = shard_id
)

response = kinesis.get_records(
     ShardIterator = iterator,
     Limit = 1
)

print(response)

Чтобы узнать больше о самих осколках (вне области), начните с прочтения замечательного ТАК ответ от Джон Ротенштейн.

Другие вопросы по теме