투케이2K

175. (TWOK/WORK) [업무 이슈] AWS Job 디바이스 펌웨어 업데이트 파일 순차 업데이트 미동작 이슈 - IN_PROGRESS, QUEUED 배열 펌웨어 처리 본문

투케이2K 업무정리

175. (TWOK/WORK) [업무 이슈] AWS Job 디바이스 펌웨어 업데이트 파일 순차 업데이트 미동작 이슈 - IN_PROGRESS, QUEUED 배열 펌웨어 처리

투케이2K 2025. 8. 1. 13:50
728x90

[제 목]

[업무 이슈] AWS Job 디바이스 펌웨어 업데이트 파일 순차 업데이트 미동작 이슈 - IN_PROGRESS, QUEUED 배열 펌웨어 처리

 

[내 용]

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

- 제목 : [업무 이슈] AWS Job 디바이스 펌웨어 업데이트 파일 순차 업데이트 미동작 이슈 - IN_PROGRESS, QUEUED 배열 펌웨어 처리


- 테스트 환경 : Aws 콘솔 대시 보드 / Aws 콘솔 수동 Job 생성


- 사전) Aws Iot Core 간단 설명 : 

  >> AWS IoT 는 IoT 디바이스를 다른 디바이스 및 AWS 클라우드 서비스에 연결하는 클라우드 서비스를 제공합니다.

  >> 디바이스가에 연결할 수 있는 경우 AWS IoT는 AWS 가 제공하는 클라우드 서비스에 디바이스를 AWS IoT 연결할 수 있습니다.

  >> AWS IoT Core 메시지 브로커는 MQTT 및 MQTT over WSS 프로토콜을 사용하여 메시지를 게시하고 구독하는 디바이스 및 클라이언트를 지원합니다. 
  
    - HTTPS 프로토콜을 사용하여 메시지를 게시하는 디바이스와 클라이언트도 지원합니다.


- 사전) AWS Iot Core Job 간단 설명 : 

  >> AWS 원격 작업 이란 작업자 또는 기술자의 물리적 존재 없이 원격으로 수행할 수 있는 업데이트 작업입니다 (무선 업데이트 (OTA) 수행)

  >> AWS IoT 작업 서비스는 AWS IoT 에 연결 되는 하나 이상의 디바이스로 전송 된 후 실행 되는 원격 작업 세트를 정의하는데 사용됩니다

    - 주목적 : 소프트웨어 및 펌웨어 업데이트를 디바이스 기기에게 알리는데 사용 (기기에게 작업 문서 전송)

    - 작업 문서 : AWS IoT Job 생성 시 대상이 되는 디바이스로 전송 되는 문서 (펌웨어 다운로드 URL 정보 등 포함)

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





------------------------------------------------------------------------------
[이슈 사항]
------------------------------------------------------------------------------

1. AWS Iot Core 에서 수동 Job 을 생성 후 디바이스 기기로 펌웨어 업데이트 명령을 연속적으로 반복 테스트 내릴 시 

   디바이스가 순차적으로 내려온 명령 대로 펌웨어 파일 업데이트 하지 않고 QUEUED 배열에 담긴 마지막 펌웨어만 업데이트하는 이슈 확인


2. 참고) AWS 수동 job 생성 및 특정 사물 notify 펌웨어 업데이트 요청 방법 : 

  >> 펌웨어 파일 S3 에 업로드 수행 및 파일 다운로드 Get PresignedUrl 생성 (또는 public 으로 접근 가능한 URL 이 있으면 해당 경로에 파일 업로드)

  >> Job Document 작성 (특정 기기에게 전송 예제) 및 S3 에 .json 파일 업로드 수행

  >> AWS IOT Core 콘솔에서 [원격 작업] > [작업] 생성 수행

  >> 디바이스 기기에서 펌웨어 업데이트 Job 알림 수신 완료 후 펌웨어 업데이트 로직 처리 수행

    - Job Document 에서 S3 펌웨어 다운로드 URL 에서 펌웨어 파일 다운로드 수행

    - 펌웨어 파일 다운로드 진행 상태 publish 보고 수행

      # Publish 요청 주소 : $aws/things/{thingName}/jobs/{JobId}/update
      # Publish 토픽 예시 : 

        {
            "status": "IN_PROGRESS",
            "statusDetails": {
                "detail": "Firmware update in progress"
            }
        }

    - 펌웨어 업데이트 완료 및 기기 재부팅 수행

    - 펌웨어 파일 다운로드 완료 상태 publish 보고 수행

      # Publish 요청 주소 : $aws/things/{thingName}/jobs/{JobId}/update
      # Publish 토픽 예시 : 

        {
            "status": "SUCCEEDED",
            "statusDetails": {
                "detail": "Firmware update completed successfully"
            }
        }

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





------------------------------------------------------------------------------
[원인 파악 및 증상 재현]
------------------------------------------------------------------------------

1. 사전) 펌웨어 업데이트 할 Bin 파일과 Job Document 파일은 S3 에 올라가 있는 상태


2. [A 펌웨어 업데이트 작업 생성 ]AWS IOT Core 콘솔 대시 보드에서 원격 작업 Job 생성 수행

  >> 특정 사물 (ThingName) 지정 후 펌웨어 업데이트 요청 명령 게시 수행

  >> 디바이스는 구독하고 있는 $aws/things/{thingName}/jobs/notify 토픽에서 펌웨어 업데이트 요청 명령이 내려 온 것 확인

  >> 디바이스는 펌웨어 업데이트 상태 및 준비 IN_PROGRESS, QUEUED 배열 확인 수행

  >> 디바이스는 새롭게 업데이트 할 펌웨어 파일이 IN_PROGRESS 에 저장 되어 있는 것 확인


2. [B 펌웨어 업데이트 작업 생성 ]AWS IOT Core 콘솔 대시 보드에서 원격 작업 Job 생성 수행

  >> 특정 사물 (ThingName) 지정 후 펌웨어 업데이트 요청 명령 게시 수행

  >> 디바이스는 구독하고 있는 $aws/things/{thingName}/jobs/notify 토픽에서 펌웨어 업데이트 요청 명령이 내려 온 것 확인

  >> 디바이스는 펌웨어 업데이트 상태 및 준비 IN_PROGRESS, QUEUED 배열 확인 수행

  >> 디바이스는 B 명령으로 내려 온 것이 QUEUED 에 저장 되어 있는 것 확인


3. 디바이스는 IN_PROGRESS 에 있는 펌웨어 파일을 먼저 업데이트 하는 작업을 진행해야 하지만, 중간에 QUEUED 에 펌웨어 업데이트 작업이 담겨 내려오면

   이전에 진행 중이 던 IN_PROGRESS 펌웨어 업데이트 작업을 완료하지 않고, QUEUED 에 담긴 펌웨어 업데이트 작업을 새롭게 시작하는 이슈 확인

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





------------------------------------------------------------------------------
[조치 내용]
------------------------------------------------------------------------------

1. 디바이스에게 펌웨어 업데이트 로직을 IN_PROGRESS 에 있는 작업 먼저 처리 후 순차적으로 QUEUED 에 담긴 작업을 처리하도록 로직 변경 요청

  >> 중간에 펌웨어 업데이트 요청 명령이 내려 오더라도 IN_PROGRESS, QUEUED 배열 각각 확인 후 진행 중 이던 작업을 먼저 완료 처리하도록 요청


2. 디바이스 로직 변경 후 테스트 및 확인 사항 : 

  >> AWS 에서 수동 Job 생성 후 [A] 펌웨어 업데이트 명령 전송

  >> 디바이스는 구독하고 있는 토픽에서 펌웨어 업데이트 명령이 내려 온 것 확인

  >> 디바이스는 펌웨어 업데이트 진행 중 상태 보고 수행 후 펌웨어 업데이트 로직 수행

  >> AWS 에서 수동 Job 생성 후 [B] 펌웨어 업데이트 명령 전송

  >> 디바이스는 구독하고 있는 토픽에서 펌웨어 업데이트 명령이 내려 온 것 확인

  >> 디바이스는 IN_PROGRESS 배열에 이미 진행 중인 작업이 있는 것 확인 후 QUEUED 에 저장 된 B 작업을 A 작업 완료 된 이후에 처리 하기 위해 별도 메모리에 저장 수행

  >> 디바이스는 [A] 펌웨어 업데이트 작업 완료 후 QUEUED 에 담긴 [B] 펌웨어 업데이트 작업 순차 처리 수행 확인

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





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

[AWS 원격 펌웨어 업데이트 OTA 수동 job 생성 및 특정 사물 notify 펌웨어 업데이트 요청 방법 정리]

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


[AWS 원격 펌웨어 업데이트 job 알림 수신 jobs/notify 토픽과 jobs/notify-next 토픽 차이점 정리]

https://blog.naver.com/kkh0977/223954213087

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