BASH脚本创建AWS IoT Thing后,如何获取ThingID并存储
获取AWS IoT Thing ID并存储到BASH变量
看起来你已经搞定了证书生成的部分,但要拿到Thing ID并存进变量里,得靠AWS CLI配合JSON解析工具jq来实现,同时也得把证书和Thing关联起来,不然mosquitto连接会出问题。我给你一步步拆解:
1. 先准备好必要工具
- 确保AWS CLI已经安装,并且配置了能操作IoT服务的权限(比如
iot:CreateThing、iot:RegisterCertificate这类权限) - 安装
jq工具(Linux发行版可以用apt install jq/yum install jq,macOS用brew install jq就能搞定)
2. 创建Thing并捕获Thing ID
在你的证书生成代码之后,加入这段命令,把Thing ID存入变量:
# 替换成你想要的Thing名称 THING_NAME="MyCustomDeviceThing" # 创建Thing,用jq提取出纯字符串格式的thingId,存入THING_ID变量 THING_ID=$(aws iot create-thing --thing-name "$THING_NAME" | jq -r '.thingId') # 验证变量是否正确获取 echo "成功创建Thing,ID是:$THING_ID"
这里jq -r的作用是把JSON里的thingId值以无引号的纯字符串形式提取出来,方便后续直接使用。
3. 解决mosquitto连接失败的问题
你第一次调用mosquitto_pub报错连接丢失,大概率是证书没和Thing绑定,也没有对应的IoT Policy允许连接。得补上这些关键步骤:
# 1. 把生成的证书注册到AWS IoT,获取证书ARN CERT_ARN=$(aws iot register-certificate --certificate-pem file://deviceCert.crt --ca-certificate-pem file://rootCA.pem --set-as-active | jq -r '.certificateArn') # 2. 将证书和刚才创建的Thing关联起来 aws iot attach-thing-principal --thing-name "$THING_NAME" --principal "$CERT_ARN" # 3. 给证书附加IoT Policy(你得先创建好这个Policy,比如允许连接、发布到foo/bar主题) # 假设你的Policy名叫"MyIoTPolicy",内容要包含允许iot:Connect、iot:Publish到对应主题的权限 aws iot attach-policy --policy-name "MyIoTPolicy" --target "$CERT_ARN"
另外,别忘了给私钥设置正确的权限,不然mosquitto无法读取:
chmod 600 deviceCert.key
4. 用Thing ID发布消息
现在你就可以在mosquitto的消息里直接使用$THING_ID变量了:
mosquitto_pub --cafile root.cert --cert deviceCertAndCACert.crt --key deviceCert.key -h xxxxx.iot.us-east-2.amazonaws.com -p 8883 -q 1 -t foo/bar -I anyclientID --tls-version tlsv1.2 -m "Thing $THING_ID 正在运行" -d
最后小提醒:如果不确定你的AWS IoT端点是否正确,可以用这个命令获取官方ATS端点:
aws iot describe-endpoint --endpoint-type iot:Data-ATS
内容的提问来源于stack exchange,提问作者IgorAlves
相关产品推荐
相关产品推荐

