【问题标题】:Processing AWS IoT messages with Lambda functions使用 Lambda 函数处理 AWS IoT 消息
【发布时间】:2018-10-23 21:17:52
【问题描述】:

我正在尝试在 C# 中开发一个 lambda 函数来处理和转换从 AWS IoT 核心接收到的数据,就像处理来自 DynamoDB、S3 或 SQS 的数据一样。

我想知道的是我是否必须强制订阅主题,转换每条消息并最终将其发送到 s3、DyanmoDB 或其他任何东西,或者我可以直接访问这些数据而无需订阅。

代码:

 var CaCert = X509Certificate.CreateFromCertFile(@"C:\...\rootCA.pem");
                var clientCert = new X509Certificate2(@"C:\...\amazon.pfx");
                string ClientID = Guid.NewGuid().ToString();


                var IotClient = new MqttClient(IotEndPoint, BrokerPort, true, CaCert, clientCert, MqttSslProtocols.TLSv1_2);
                IotClient.MqttMsgPublishReceived += Client_MqttMsgPublishReceived;

                IotClient.Connect(ClientID);
                Console.WriteLine("Connected to IoT Core. Waiting for the frames...");
                IotClient.Subscribe(new string[] { topic }, new byte[] { MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE });

【问题讨论】:

    标签: c# amazon-web-services aws-lambda aws-iot


    【解决方案1】:

    您必须订阅主题才能访问数据。但是,您可以简单地编写您的主题订阅 SQL 表达式以使用像 this example from the official documentation 这样的通配符,以避免订阅每个单独的主题:

    您可以使用 # 通配符来匹配主题中的任何子路径 过滤器:

    例子:

    在主题“a/b”上发布的传入负载:{温度:50}。

    在主题“a/c”上发布的传入负载:{温度:60}。

    在主题“a/e/f”上发布的传入负载:{temperature: 70}。

    在主题“b/x”上发布的传入负载:{温度:80}。

    SQL: "SELECT temperature AS t FROM 'a/#'".

    该规则订阅任何以“a”开头的主题,所以它是 执行 3 次,发送 {t: 50} 的传出有效载荷(对于 a/b), {t: 60}(用于 a/c)和 {t: 70}(用于 a/e/f)对其操作。它不是 订阅了'b/x',所以规则不会被触发 {温度:80} 消息。

    【讨论】:

    • 我只是在本地工作:我在本地计算机上运行程序,然后它订阅一个主题以接收数据。但是现在,要在 lambda 函数中使用它,我怎样才能访问证书:.pem 和 .pfx?
    • 为什么需要访问 Lambda 函数中的证书?在 IoT 管理控制台中,您应该将其配置为向您的 Lambda 函数发送消息。这就是你需要做的。然后将以消息作为参数调用 Lambda 函数。
    • 你是对的。在 lambda 函数中,使用 IoT 数据的事件(在 c# 中)是什么?例如,我使用 DynamoDB 将 DynamoDBEvent 作为 FunctionHandler 参数,但我没有看到要与 IoT 一起使用的事件。我尝试使用字符串,但收到此错误:将 Lambda 事件 JSON 有效负载转换为字符串时出错。必须引用 JSON 字符串,例如“Hello World”才能转换为字符串:解析值时遇到意外字符
    • 使用(对象输入)作为 FunctionHandler 参数问题已解决,但我不确定这是否是最好的方法
    • 我通常从 Object 开始,然后让代码打印对象的类型,看看 Lambda 会传入什么事件类型。
    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2019-07-02
    • 1970-01-01
    • 2018-03-25
    • 2018-08-03
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    相关资源
    最近更新 更多