-
Notifications
You must be signed in to change notification settings - Fork 0
operations iot fleet connectivity
기준일: 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
| 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 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.shconnected=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.shFleet Indexing을 처음 켠 직후 IndexNotReadyException이 날 수 있다. 잠시 기다렸다가 같은 명령을
다시 실행한다.
- 시스템 아키텍처
- 제어 & 데이터 플레인
- Dashboard VPC 설계
- 하드웨어 배치
- Hub EKS 네임스페이스
- Tailscale Mesh VPN
- 데이터 생명주기
- 데이터 조회 모델
- 실시간 갱신 구조
- IoT 데이터 계약
- Reporting Pipeline
- 로컬 스토리지
- 클라우드 스토리지
- Edge Agent
- Edge AI 탐지
- Factory-A Log Adapter
- Dummy Sensor
- Edge IoT Publisher
- Lambda Data Processor
- Risk Normalizer
- Risk Score Engine
- Pipeline Status Aggregator
- Graph Aggregator 5m
- Cloud Infra Collector
- Daily Report Generator
- Risk Alert Dispatcher
- Image Snapshot Pipeline
- Dashboard Backend
- Dashboard Web
- AI 채팅 어시스턴트