AWS IoT:通过WebSocket连接
我正在尝试通过Websockets连接到 AWS IoT。
我已经做到:
- 确保我的IAM SSO用户具备权限(它拥有所有权限——沙箱环境)
- 为
SigV4创建了一个域配置,使用mqtt over websockets
我的理解是,这应该足以建立连接。现在我先在本地电脑上运行,在执行了 aws sso login 之后,我的代码:
import boto3
from botocore.credentials import get_credentials
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient
myMQTTClient = AWSIoTMQTTClient("myClientID", useWebsocket=True)
myMQTTClient.configureEndpoint("<domain>.iot.eu-central-1.amazonaws.com", 443)
session = boto3.Session()
creds = session.get_credentials().get_frozen_credentials()
print(creds)
myMQTTClient.configureIAMCredentials(creds.access_key,creds.secret_key,creds.token
)
myMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Publish queueing
myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz
myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec
myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec
myMQTTClient.connect()
myMQTTClient.publish("myTopic", "myPayload", 0)
在尝试连接时会超时。
解决方案
经过多日的挣扎,我找到了我遗漏的部分。原来我需要附上AWS证书,否则AWS就不回应,莫名其妙地导致超时。日志里没有任何数据,因此真的很难排查。
myMQTTClient.configureCredentials("AmazonRootCA1.pem")
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。