투케이2K

329. (TWOK/ERROR) [AWS] Connection to the broker failed. Retrying - MQTT Broker AWS 연결 시도 에러 본문

투케이2K 에러관리

329. (TWOK/ERROR) [AWS] Connection to the broker failed. Retrying - MQTT Broker AWS 연결 시도 에러

투케이2K 2025. 9. 23. 19:59
728x90

[환경 설정 및 설명]

프로그램 : AWS

설 명 : [AWS] Connection to the broker failed. Retrying - MQTT Broker AWS 연결 시도 에러

 

[설 명]

--------------------------------------------------------------------------
[개발 및 테스트 환경]
--------------------------------------------------------------------------

- 제목 : [AWS] Connection to the broker failed. Retrying - MQTT Broker AWS 연결 시도 에러


- 테스트 환경 : AWS / Iot / MQTT


- 사전) 클레임에 의한 프로비저닝 설명 : 

  >> 디바이스는 프로비저닝 클레임 인증서 및 프라이빗 키 (특수 용도의 자격 증명) 가 내장된 상태로 제조될 수 있습니다

  >> 디바이스에 내장 된 인증서가 AWS IoT에 등록된 경우, 이 서비스에서 해당 인증서를 디바이스가 일반 작업에 사용할 수 있는 고유한 디바이스 인증서와 교환할 수 있습니다

  >> 클레임에 의한 프로비저닝 예시 :

    - [1] 디바이스에서 프로비저닝에 필요한 인증서 내장된 상태로 제조

    - [2] 디바이스에서 Aws 접속에 필요한 엔드포인트 정보 및 인증서를 사용해 Aws 연결 수행 실시

    - [3] CreateProvisioningTemplate 을 호출하여 프로비저닝 템플릿을 생성

    - [4] 템플릿 생성 완료 후 응답으로 내려온 생성 된 사물 Thing Name 값 내부 저장 후 기기 연결 시 사용


- 사전) AWS Connection 시 세션 초기화 및 UUID 지정 이유 정리 : 

  >> AWS 연결 시 clientId 를 지속적으로 중복해서 사용하는 경우 AWS MQTT Connection Fail 이슈가 발생할 수 있음 (세션 충돌)

  >> 동일한 clientId 를 지정한 이후 세션에 문제가 생겨 cleanSession 초기화 시 SDK 내부에서 세션 초기화 에러가 발생할 수 있음

  >> 이러한 경우 기기를 리셋하거나 프로비저닝 과정을 처음부터 다시 해야하는 문제가 생길 수 있음

--------------------------------------------------------------------------





--------------------------------------------------------------------------
[에러 원인]
--------------------------------------------------------------------------

1. 디바이스 기기 AWS 플릿 프로비저닝 이후 사물 인증서 사용해 AWS Connection 연결 지속 유지 시 MQTT 세션에 문제가 생겨 AWS 재접속 시도를 실패하는 이슈 확인


2. 기기 에러 발생 로그 첨부 : 

  >> Connection to the broker failed. Retrying ..


3. 에러 발생 원인 분석 과정 : 

  >> 인증 문제 확인 : (정상)

    - 디바이스에 설정된 X.509 인증서, 프라이빗 키, CA 인증서가 올바른지 확인

    - 인증서가 활성화 상태인지, 정상적으로 등록되었는지 AWS 콘솔에서 확인

  >> 엔드포인트 설정 오류 확인 : (정상)

    - MQTT 브로커 주소 (<your-endpoint>.iot.<region>.amazonaws.com) 가 정확한지 확인 
  
      : 포트 번호는 일반적으로 8883 (TLS) 또는 443 (WebSocket) 사용

  >> 네트워크 문제 확인 : (정상)

    - 디바이스가 인터넷에 연결되어 있는지 확인

    - 방화벽이나 프록시가 MQTT 연결을 차단하고 있지 않은지 확인 (MQTT 브로커 주소 Ping 시도 시 정상 응답 확인)

  >> AWS IoT 정책 확인 : (정상)

    - 연결하려는 디바이스에 할당된 IAM 정책 또는 IoT 정책이 MQTT 연결을 허용하고 있는지 확인

  >> MQTT 클라이언트 설정 및 세션 문제 확인 : (문제 발견)

    - AWS Connection 시도 시 clientId 를 지속해서 중복 사용하는 것 확인

    - MQTT 연결 시 이전 세션이 제대로 종료되지 않았을 경우 문제가 발생할 수 있음

      : 브로커가 이전 세션을 유지하려고 하다가 충돌이 발생할 수 있음

      : AWS Connection 시도 시 cleanSession 옵션 값일 true 로 설정 필요

--------------------------------------------------------------------------





--------------------------------------------------------------------------
[해결 방법]
--------------------------------------------------------------------------

1. 디바이스 클라이언트 쪽에서 AWS Connection 접속 시도 시 ClinetId 값을 중복 되지 않게 UUID 랜덤 값을 사용해 접속 시도 하도록 로직 변경

  >> 안드로이드 코드 기준 예시 추가 : 

    awsMqttManager = new AWSIotMqttManager(
      String.valueOf(UUID_CLIENT_ID), // [클라이언트 아이디 : 세션 충돌 방지 랜덤 UUID 지정]
      String.valueOf(AWS_END_POINT) // [엔드 포인트 : AWS 접속 정보]
    );


2. MQTT 세션 연결 시 이전에 연결 되어 있는 세션 초기화 후 접속 하도록 옵션 설정 값 변경

  >> cleanSession = true 지정

--------------------------------------------------------------------------





--------------------------------------------------------------------------
[참고 사이트]
--------------------------------------------------------------------------

[Aws Iot Core] Fleet provisioning 플릿 프로비저닝 설명 및 동작 프로세스 정리

https://blog.naver.com/kkh0977/223691943757?trackingCode=blog_bloghome_searchlist


[Aws Iot Core] Fleet provisioning 플릿 프로비저닝 수행 방법 정리 - 클레임 인증서 , 신뢰할 수 있는 사용자

https://blog.naver.com/kkh0977/223779257161?trackingCode=blog_bloghome_searchlist


[Aws Iot Core] Aws 프로비저닝 수행 및 섀도우 Shadow 토픽 Topic 구독 시 와일드 카드 (wild card) 설명 정리

https://blog.naver.com/kkh0977/223825295723?trackingCode=blog_bloghome_searchlist

--------------------------------------------------------------------------
 
728x90
반응형
Comments