Я пытаюсь подключиться к уже развернутому AWS стеку IoT
const AWS = require('aws-sdk');
const iotData = new AWS.IotData({ endpoint: MYENDPOINT });
exports.handler = async (event) => {
try {
const request = event;
console.log(request);
const params = {
topic: common.topicOut,
payload: 'MYPAYLOAD'
}
console.log("endpoint:",iotData.endpoint,"params:",params);
iotData.publish(params, (err,res) => {
if (err) throw err;
return { statusCode: 200, body: res };
})
} catch (e) {
console.error(e);
return { statusCode: 400, body: 'error, see lambda console' };
}
};
формально все «компилируется» (без ошибок), но затем я не получаю ответа. Сужая проблему, я вижу, что я пытаюсь использовать конечную точку REST https, но MYENDPOINT поддерживает только wss
Я знаю https://aws.amazon.com/es/blogs/compute/announcing-websocket-apis-in-amazon-api-gateway/, но это для того, чтобы лямбды назывались 'server' клиента wscat. Я также прочитал некоторые обескураживающие сообщения здесь , но я предпочитаю перепроверить, если кто-то из вас, ребята, уже нашел решение для он использует AWS -Lambda
Если нет, я начну использовать этот обходной путь , но я не контролирую конечную точку wss, поэтому мне придется сделать один на моем владеть и предложить коллеге внести изменения для меня на своей стороне (а я совсем не контролирую их)
Ваш опыт (даже если они дают советы о том, «не следовать по этому пути» - я sh) очень приветствуется.
ОБНОВЛЕНИЕ : у меня есть консольный тестовый клиент, который может подключаться к конечной точке через awsIot.device и предоставляет keyPath, certPath, caPath и clientId.
Может ли быть, что я получаю тихую ошибку из-за разрешений? Когда я пытаюсь использовать awsIot.device без сертификата, происходит сбой с Error: No "keyPath" or "privateKey" option supplied.
, поэтому я не могу проверить, что если бы на консоли я получил ту же (тихую) ошибку
UPDATE2 : Follow https://docs.aws.amazon.com/iot/latest/developerguide/http.html Я могу сделать
$ curl --tlsv1.2 --cacert ./certificates/Amazon_Root_CA_1.pem --cert ./certificates/MYCRT --key ./certificates/MYKEY -X POST -d"PAYLOAD" "https://XXX.iot.REGION.amazonaws.com:8443/topics/MYTOPIC?qos=0"
, и это работает. Так что я еще больше убежден, чем раньше, что это сработает, если я смогу добавить сертификаты к запросу
UPDATE3 : в настоящее время я ничего не использую AWS для это и просто создание запроса https, который имитирует вышеупомянутый вызов curl