아마존 웹 서비스(AWS)는 마이크로소프트 애저, 구글 클라우드 IoT와 더불어 IoT 선도 클라우드 플랫폼. 스마트 기기들이 인터넷 통해 AWS에 연결, 주로 MQTT 프로토콜 사용, 풍부한 클라우드 서비스와 상호작용. 기기 통신 외에도 강력한 데이터 스토리지, 분석(AI 포함), 접근 제어 등 엔드투엔드 IoT 솔루션 역량 제공.
데이터 지속성: S3
데이터 영속성 위해 단순 스토리지 서비스(S3) 제공, 확장 가능 계층적 파일 시스템. S3 각 객체는 고유 URL로 주소 지정 가능, 적절한 권한 시 웹 브라우저로 공개 접근 가능. 객체에 HTML 페이지 포함 시 임베디드 자바스크립트가 AWS API 호출해 대화형 대시보드와 브라우저로부터 직접 기기 제어 구현.
람다(Lambda) 함수
서버 프로비저닝 없이 코드 실행. 파이썬, 자바, C#, Node.js로 함수 작성해 클라우드 저장, HTTP 요청, 다른 람다 호출, 기기 MQTT 메시지로 트리거. 람다는 미들웨어 역할: 기기 데이터를 데이터베이스 연산으로 변환하거나 사용자 인터페이스 응답 렌더링 (그림 1 참조).
그림 1. AWS 컴포넌트 상호작용 아키텍처 (출처: 아우리가)
AWS는 람다에 제한: 요청당 최대 실행 시간, 메모리 사용량, 패키지 크기. 한도 초과 시 실행 종료, 배포 시 구성 가능하나 AWS 하드 캡 초과 불가.
기기 연결: MQTT over TCP
IoT 기기들은 일반적으로 AWS IoT Core 엔드포인트에 TCP 연결 수립. TCP가 데이터 무결성과 버퍼링 보장, 간헐적 링크에서도 메시지 전송 보장. AWS는 자체 재연결 로직으로 TCP 위에 구축, 네트워크 장애 후 기기 자동 재연결.
MQTT가 명령에 대해 단방향이므로 연결 문제는 람다 호출에 거의 영향 없음. 람다가 기기에 MQTT 명령 발행 후 즉시 반환, 응답은 기기 토픽 구독하는 별도 람다 처리.
AWS Jobs: 장기 작업 스케줄링·모니터링 서비스
AWS Jobs는 하나 또는 다수 IoT 기기에서 장시간 작업 스케줄, 실행, 모니터링 위해 설계된 서비스. 비교적 신규지만 콘솔과 SDK와 원활 통합.
기기 측 연산 (MQTT 기반)
GetPendingJobExecutions, StartNextPendingJobExecution, UpdateJobExecution, DescribeJobExecution 함수로 기기가 대기 작업 폴링, 진행 상황 확인, 완료 보고.
각 작업은 기기에 전송되는 JSON 작업 문서로 정의. 일반적으로 연산 이름과 작업 파라미터 가리키는 하나 이상 URL 포함. URL은 AWS 사용자가 사전 서명 가능, 기기에 임시 범위 지정 접근 권한 부여해 otherwise 접근 불가 객체 검색 가능케 함. 사전 서명 URL 자동 만료로 보안 강화.
작업 문서는 작업 정의 시 동적 생성하거나 S3 객체로 저장해 작업 생성 시 참조.
작업 속성
대상: 단일 기기 또는 그룹. 그룹 지정 시 현재 모든 멤버에서 실행.
작업 유형: 스냅샷(Snapshot) 작업은 선택된 기기에서 실행 후 완료. 연속(Continuous) 작업은 활성 유지되며 나중에 그룹에 추가된 기기에서도 자동 실행.
작업 상태 머신
실행 중 작업은 유한 상태 머신 따름. 유효 상태: QUEUED, IN_PROGRESS, FAILED, SUCCESS, CANCELED, REJECTED, REMOVED. 기기가 UpdateJobExecution으로 상태 업데이트, 관리자는 CancelJob 등 API 호출로 변경 가능. 일반적으로 실행 중 IN_PROGRESS, 완료 시 SUCCESS 또는 FAILED로 전이.