Можно ли сделать так, чтобы функция AWS Websocket + Lambda постоянно отслеживала DynamoDB и отправляла ответ клиенту? - PullRequest
0 голосов
/ 06 мая 2020

У меня бессерверный проект: AWS + Angular на интерфейсе. В настоящее время я получаю данные при инициализации страницы и обновляю sh данные при нажатии кнопки «обновить». Однако я хочу постоянно отслеживать изменения в таблице. В Firebase есть метод onSnapShot(), который отправляет новые данные при обновлении коллекции.

Я хочу сделать что-то подобное с AWS. Однако в официальной документации я не вижу, как это правильно сделать.

Итак, вот 2 вопроса:

  • Как я могу подключиться к WebSocket с помощью aws -sdk? (В настоящее время я могу подключиться только с терминала с помощью вызова wscat -c myurl. Или мне просто отправить http.Post с URL-адресом веб-сокета?
  • можно ли передать вызов в URL-адресе обратного вызова? - Я хочу получить данные из DynamoDB при инициализации страницы, а затем вызывать ее снова и снова (с URL-адресом обратного вызова)

Моя лямбда-функция выглядит так:

exports.handler = async (event, context) => {

    let params = {
        TableName: "documents"
    }

    let respond = await db.scan(params).promise();
    return  respond;
};

На интерфейсе I иметь:

 ngOnInit(): void {

    AWS.config.credentials = new AWS.Credentials({
      accessKeyId: '//mykey', secretAccessKey: '//mysecretkey'
    })
    AWS.config.update({
      region:'//myregion'
    })

    this.updateTable() // triggers post request to APi Gateway => lambda and receives a response with data.

  }

1 Ответ

1 голос
/ 06 мая 2020

Насколько я понимаю, вам нужно будет настроить поток DynamoDB и лямбда-функцию, которая отвечает на события CRUD базы данных, отправляет обновленные данные в соединение WebSocket, если данные события соответствуют критериям (например, идентификатор документа), через AWS.ApiGatewayManagementApi. (К вашему сведению: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/ApiGatewayManagementApi.html)

...