Skip to content

operations iot fleet connectivity

JJong-03 edited this page Jun 17, 2026 · 1 revision

운영 — IoT Fleet 연결성

기준일: 2026-06-09
근거: docs/ops/34_iot_fleet_connectivity.md

AWS IoT Fleet Indexing의 Thing connectivity를 factory-a/b/c 운영 지표로 사용하는 기준이다. 이 기준은 edge-iot-publisher가 persistent MQTT 방식으로 전환된 이후의 현재 운영 기준이다.

현재 기준

  • Fleet Indexing은 thingIndexingMode=REGISTRY, thingConnectivityIndexingMode=STATUS로 활성화한다.
  • edge-iot-publisher는 프로세스 생명주기 동안 MQTT 연결을 유지한다.
  • MQTT client ID는 IoT Thing 이름과 같아야 한다.
  • 각 factory publisher Deployment는 replicaCount=1, strategy=Recreate를 유지한다.
  • outbox JSON 파일은 QoS 1 publish ack가 완료된 뒤에만 삭제한다.
  • publish 실패, ack timeout, reconnect 실패 시 outbox 파일은 유지하고 다음 loop에서 재시도한다.

현재 배포 기준:

edge-iot-publisher image: <account-id>.dkr.ecr.ap-south-1.amazonaws.com/aegis/edge-iot-publisher:sha-36eae8c

Thing과 Client ID

Factory Thing name MQTT client ID
factory-a AEGIS-IoTThing-factory-a AEGIS-IoTThing-factory-a
factory-b AEGIS-IoTThing-factory-b AEGIS-IoTThing-factory-b
factory-c AEGIS-IoTThing-factory-c AEGIS-IoTThing-factory-c

chart에서 edgeIotPublisher.iot.clientId가 비어 있으면 위 규칙을 기본값으로 사용한다. override할 때도 Thing 이름과 일치시킨다.

검증

Fleet Indexing 설정:

aws iot get-indexing-configuration

정상 기준:

thingIndexingMode: REGISTRY
thingConnectivityIndexingMode: STATUS
managedFields includes connectivity.connected, connectivity.timestamp, connectivity.disconnectReason, connectivity.clientId

Thing connectivity:

aws iot get-thing-connectivity-data --thing-name AEGIS-IoTThing-factory-a
aws iot get-thing-connectivity-data --thing-name AEGIS-IoTThing-factory-b
aws iot get-thing-connectivity-data --thing-name AEGIS-IoTThing-factory-c

정상 기준:

connected: true
disconnectReason: NONE

Kubernetes 배포 안전성:

scripts/ops/check-spoke-publisher-safety.sh

정상 기준은 factory별 publisher Deployment 1개, Running publisher Pod 1개, Recreate strategy다.

Hub-only 재시작

Hub EKS, ArgoCD, Tailscale egress는 관리/control plane이다. Hub를 삭제해도 Spoke K3s의 publisher Pod와 AWS IoT 연결은 직접 경로로 계속 동작할 수 있다. Hub-only 비용 절감 흐름에서는 stop-dummy-generators.sh, destroy-data-pipe.sh, build-data-pipe.sh를 실행하지 않는다.

scripts/destroy/destroy-hub.sh --plan-only
scripts/destroy/destroy-hub.sh --yes
scripts/build/build-hub.sh
scripts/build/build-admin-ui-after-ns.sh
HUB_ONLY_RECONNECT=true scripts/build/register-spoke-factory-a.sh
HUB_ONLY_RECONNECT=true scripts/build/register-spoke-factory-b.sh
HUB_ONLY_RECONNECT=true scripts/build/register-spoke-factory-c.sh
scripts/ops/check-spoke-publisher-safety.sh

장애 대응

connected=false인데 데이터가 들어오는 경우:

  • publisher가 아직 short-lived image를 사용 중이다.
  • AEGIS_IOT_CLIENT_ID가 Thing name과 다르다.
  • Pod가 재시작 중이거나 AWS IoT reconnect 중이다.
  • 같은 client ID를 쓰는 legacy local publisher나 다른 Pod가 동시에 연결 중이다.

확인:

aws iot search-index --query-string "connectivity.connected:true" --max-results 20
scripts/ops/check-spoke-publisher-safety.sh

Fleet Indexing을 처음 켠 직후 IndexNotReadyException이 날 수 있다. 잠시 기다렸다가 같은 명령을 다시 실행한다.

관련 문서

Aegis-Pi Wiki

· 대표 문서 목록은 홈의 문서 탐색 표 참조

시작하기

요구사항

핵심 개념

아키텍처

컴포넌트 (Edge → Cloud → Dashboard)

Dashboard & 운영

시나리오 · 사례 · 참조

Clone this wiki locally