Отправить сообщение MQTT в другую тему IoT, используя триггерную функцию Lambda? - PullRequest
0 голосов
/ 01 мая 2018

Я создал правило AWS IoT. Она запускает лямбда-функцию, когда клиент отправляет сообщение в тему terminal1/ (Клиент отправляет сообщения на terminal1/ с использованием файлов сертификатов, созданных из AWS IoT.). Мне нужна лямбда-функция для генерации нового сообщения с использованием клиентского сообщения и отправки в другую тему (terminal2/test).

Я попытался вызвать " Публикация сообщений в теме IoT AWS ". Тем не менее, он отправляет данные в определенную тему. Он просто пересылает одно и то же сообщение (мне нужно отправить другое сообщение).

Я создал функцию Lambda для отправки сообщения в другую тему. Но я не смог аутентифицировать конечную точку.

Вот лямбда-функция, которую я создал (согласно this ),

'use strict';

 // Load the AWS SDK
 var AWS = require("aws-sdk");

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

     var iotdata = new AWS.IotData({
     endpoint: 'akugdx70brb.iot.us-west-2.amazonaws.com:8883',
     apiVersion: '2015-05-28'
   });

         var params = {
      topic: 'terminal2/test/',
      payload: new Buffer('...') || 'STRING_VALUE',
      qos:1
    };
    iotdata.publish(params, function(err, data) {
      if (err) console.log(err, err.stack); // an error occurred
      else     console.log(data);           // successful response
    });

};

генерирует эту ошибку,

2018-05-01T06:22:02.394Z f5a570ef-4d07-11e8-b8a2-6bad8f2982f7 { Error: write EPROTO 139935652661056:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:../deps/openssl/openssl/ssl/s3_pkt.c:1493:SSL alert number 42
139935652661056:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:659:

at exports._errnoException (util.js:1018:11)
at WriteWrap.afterWrite (net.js:800:14)
message: 'write EPROTO 139935652661056:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:../deps/openssl/openssl/ssl/s3_pkt.c:1493:SSL alert number 42\n139935652661056:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:659:\n',
code: 'NetworkingError',
errno: 'EPROTO',
syscall: 'write',
region: 'us-west-2',
hostname: 'akugdx70brb.iot.us-west-2.amazonaws.com',
retryable: true,
time: 2018-05-01T06:22:02.394Z } 'Error: write EPROTO 139935652661056:error:14094412:SSL routines:ssl3_read_bytes:sslv3 alert bad certificate:../deps/openssl/openssl/ssl/s3_pkt.c:1493:SSL alert number 42\n139935652661056:error:1409E0E5:SSL routines:ssl3_write_bytes:ssl handshake failure:../deps/openssl/openssl/ssl/s3_pkt.c:659:\n\n at exports._errnoException (util.js:1018:11)\n at WriteWrap.afterWrite (net.js:800:14)'

Полагаю, это означает, что я не смог аутентифицировать хост, я не использовал никаких сертификатов при создании функции Lambda. Как отправить сообщение MQTT на тот же хост, но в другую тему, используя AWS Lambda? (Приведенная выше лямбда-функция срабатывает, когда клиент отправляет сообщение. Нужно ли повторно проходить проверку подлинности на сервере, чтобы отправить сообщение в другую тему?)

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

В зависимости от того, что вы хотите сгенерировать, вы можете преобразовать входное сообщение, используя само правило темы, и пропустить оплату за лямбда-вызов. См. https://docs.aws.amazon.com/iot/latest/developerguide/iot-substitution-templates.html для примера.

0 голосов
/ 10 мая 2018

Ваша лямбда должна использовать роль, которая имеет доступ к политике IoT. У вашей роли лямбда-выполнения недостаточно прав для записи или подключения и публикации в IoT.

0 голосов
/ 01 мая 2018

попробуйте использовать

AWS.config.update({
    accessKeyId: <accessKeyId>,
    secretAccessKey: <secretAccessKey>,
    region: <region>
  });
...