Причин может быть несколько:
Несколько подключений с одинаковым ClientId
ClientId может использоваться только для одного подключения за раз. Если вы подключаетесь с тем же clientId, когда установлено другое соединение, старое соединение прерывается (что приводит к преждевременной ошибке закрытия) и устанавливается новое соединение.
Клиент использует идентификатор клиента это уже используется. В этом случае клиент, который уже подключен, будет отключен [...]. ( Источник )
Разрешения
Эта ошибка может возникать, если устройство (mqtt.Client from aws -iot-device-sdk- js) не имеет необходимых разрешений для подключения и / или публикации / подписки / получения сообщений на заданную тему c.
Дополнительную документацию см. Здесь: https://docs.aws.amazon.com/iot/latest/developerguide/pub-sub-policy.html
Политика должна выглядеть следующим образом (пример показывает Cloudformation Iot Policy ресурс):
MyIotThingsPolicy:
Type: AWS::IoT::Policy
Properties:
PolicyDocument:
Version: "2012-10-17"
Statement:
- Action: iot:Connect
Effect: Allow
Resource: !Join [ "", [!Sub "arn:aws:iot:${AWS::Region}:${AWS::AccountId}:client/",
"${iot:ClientId}"] ]
- Action: iot:Receive
Effect: Allow
Resource: !Join [ "", [!Sub "arn:aws:iot:${AWS::Region}:${AWS::AccountId}:topic/",
"${iot:ClientId}/eg/your/broadcast/topic"] ]
- Action: iot:Subscribe
Effect: Allow
Resource: !Join [ "", [!Sub "arn:aws:iot:${AWS::Region}:${AWS::AccountId}:topicfilter/",
"${iot:ClientId}/eg/your/broadcast/topic"] ]
- Action: iot:Publish
Effect: Allow
Resource: !Join [ "", [!Sub "arn:aws:iot:${AWS::Region}:${AWS::AccountId}:topic/",
"${iot:ClientId}/eg/your/publish/topic"] ]
!Join
необходим, поскольку Cloudformation будет пытаться разрешить ${iot:ClientId}
, которое является значением времени выполнения и неизвестно во время развертывания.
Устранение неполадок