如何在AWS IoT Core规则动作中使用主题通配符的值?
解决方案
你可以通过AWS IoT Core规则SQL的内置函数获取原始主题并提取通配符对应的值,无需在payload中冗余携带序列号,具体步骤如下:
1. 在规则SQL中提取通配符对应的值
AWS IoT Core规则SQL支持topic()内置函数,用于获取消息的原始主题。结合字符串处理函数,就能提取出主题中+通配符对应的序列号:
方法一:使用split()函数
如果主题格式固定为equipment/{serial}/counters/xxx,可以按/分割主题字符串,取第2个元素(索引从0开始):
SELECT timestamp, split(topic(), '/')[1] AS serial_number FROM 'equipment/+/counters/#'
方法二:使用regexp_extract()函数
如果主题格式有变化,正则表达式更灵活,匹配equipment/之后、下一个/之前的内容:
SELECT timestamp, regexp_extract(topic(), 'equipment/([^/]+)/counters/.+', 1) AS serial_number FROM 'equipment/+/counters/#'
2. 在TimeStream写入动作中引用提取的字段
配置TimeStream写入动作时,无论是设置维度(Dimensions)还是记录属性(Record Properties),都可以直接选择SQL中定义的serial_number字段:
- 比如在维度配置中,将
serial_number作为维度值关联;或者将其作为TimeStream记录的属性字段直接写入。
这样就能安全地将主题中的序列号传递到TimeStream,避免了在payload中携带敏感信息的风险。
内容的提问来源于stack exchange,提问作者Jurgen Devlieghere
相关产品推荐
相关产品推荐

