Является ли Appsync / GraphQL хорошим решением для отображения в реальном времени сокращенных данных временных рядов на основе S3?

У меня есть файлы JSON, содержащие образцы данных временных рядов, которые загружаются в S3. У меня есть клиент React с компонентом, который должен отображать актуальное статистическое среднее значение выборки данных за последние x минут.

В идеале обновления должны запускаться загрузкой S3, а не браузером, который должен опрашивать веб-службу. Веб-сокеты и события, отправленные сервером, не подходят. Могу ли я практически использовать подписки AWS Appsync для предоставления данных в реальном времени с учетом этих требований?

Я не против использования промежуточной базы данных, если это необходимо. Я предполагаю, что это будет полезно для этапа запроса данных для временного диапазона для вычисления среднего, и я предполагаю, что я бы запустил Lambda с S3 и использовал его для извлечения данных объекта S3 в БД.

Amazon объявила о добавлении локальных резольверов в феврале

Например, функция Lambda может вызывать мутации GraphQL в AWS AppSync в ответ на какое-то событие, такое как обработка данных, загруженных в корзину S3.

Это звучит многообещающе, за исключением того, что я не могу найти никаких примеров с участием локальных преобразователей и Lambda / S3. Единственная документация, которую я смог найти, - это здесь .

РЕДАКТИРОВАТЬ:

Прочитав GraphQL, я узнал об API и, похоже, смогу использовать HTTP-клиент в лямбда-выражении для мутаций. Пробовал это с помощью curl, и это сработало:

curl -X POST \
   https://censored.appsync-api.us-east-1.amazonaws.com/graphql \
   -H 'Content-Type: application/json' \
   -H 'x-api-key: censored' \
   -d '{"query": "mutation CreateEvent {createEvent(name: \"testName\", when: \"Now\", where: \"here\", description: \"testDescription\") {name when where description}}"}'

Я полагаю, что теперь я могу вызвать мутацию «addIntervalData» через Lambda, чтобы добавить содержимое каждого объекта S3 в базу данных и использовать лямбда-преобразователь для реализации «getAverage» и выполнения вычисления усреднения. Кажется, хорошее направление?


person davegravy    schedule 10.04.2018    source источник


Ответы (1)


Звучит возможно - вам нужно иметь функцию Lambda, которая выполняет мутацию GraphQL в AppSync, с этой мутацией с помощью директивы @aws_subscribe() для уведомления клиентов, которые подписались. Затем, чтобы вызвать эту лямбда-функцию, вы должны использовать источник события S3 для ее вызова. Вот руководство для этого: https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html.

person Richard    schedule 15.04.2018
comment
Со второй частью все в порядке, но как мне получить функцию Lambda, которая изменяет GraphQL на AppSync? Единственное руководство, которое я могу найти, находится здесь: docs.aws .amazon.com / appsync / latest / devguide / ... но он предназначен для вызова из AppSync с функцией обратного вызова, которая выполняет фактическую мутацию. Если вызывающим является событие S3, этот обратный вызов не будет предоставлен. - person davegravy; 16.04.2018
comment
@davegravy - это просто стандартная мутация GraphQL в NodeJS (или другом языке, если у вас есть клиент GraphQL), как и в любом другом клиенте. Таким образом, событие S3 вызовет лямбду, а лямбда произведет мутацию. Одна из возможностей может заключаться в использовании категории API AWS Amplify для мутации: aws.github.io / aws-ampify / media / api_guide - person Richard; 19.04.2018