AWS Lambda를 AWS IoT와 함께 사용하기

AWS Lambda를 AWS IoT와 함께 사용하기 (Using AWS Lambda with AWS IoT)

AWS IoT는 인터넷에 연결된 장치(예: 센서)와 AWS 클라우드 사이에 안전한 통신을 제공해요. 이를 통해 여러 장치에서 텔레메트리 데이터를 수집·저장·분석할 수 있죠.

장치가 AWS 서비스와 상호작용하도록 AWS IoT 규칙(rule)을 만들 수 있어요. AWS IoT 규칙 엔진(Rules Engine)은 SQL 기반 언어를 제공해서 메시지 페이로드에서 데이터를 선택하고 그 데이터를 Amazon S3, Amazon DynamoDB, AWS Lambda 같은 다른 서비스로 보내요. 다른 AWS 서비스나 서드파티 서비스를 호출하고 싶을 때 Lambda 함수를 호출하는 규칙을 정의해요.

들어오는 IoT 메시지가 규칙을 트리거하면 AWS IoT가 Lambda 함수를 비동기적으로(asynchronously) 호출하고 IoT 메시지의 데이터를 함수에 전달해요.

다음 예시는 온실 센서의 수분 측정값을 보여줘요. row와 pos 값은 센서의 위치를 식별해요. 이 예시 이벤트는 AWS IoT Rules 튜토리얼의 온실 유형을 기반으로 해요.

예시 AWS IoT 메시지 이벤트

{
  "row" : "10",
  "pos" : "23",
  "moisture" : "75"
}

비동기 호출의 경우 Lambda가 메시지를 큐에 넣고, 함수가 오류를 반환하면 재시도해요. 함수가 처리할 수 없었던 이벤트를 보존하려면 함수에 대상(destination)을 구성하세요.

AWS IoT 서비스가 Lambda 함수를 호출하도록 권한을 부여해야 해요. add-permission 명령으로 함수의 리소스 기반 정책에 권한 문을 추가해요.

중요 source-arn이나 source-account를 제공하지 않고 AWS IoT 주체에 대한 권한을 추가하면, AWS Lambda 작업으로 규칙을 만드는 모든 AWS 계정이 AWS IoT에서 여러분의 Lambda 함수를 호출하는 규칙을 활성화할 수 있어요. 자세한 내용은 AWS Lambda permissions을 참고하세요.

aws lambda add-permission --function-name my-function \
--statement-id iot-events --action "lambda:InvokeFunction" --principal iot.amazonaws.com \
--source-arn arn:aws:iot:us-east-1:123456789012:rule/my-rule \
--source-account 123456789012

다음 출력이 보여야 해요.

{
  "Statement": "{\"Sid\":\"iot-events\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"iot.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-1:123456789012:function:my-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:iot:us-east-1:123456789012:rule/my-rule\"},\"StringEquals\":{\"AWS:SourceAccount\":\"123456789012\"}}}"
}

Lambda를 AWS IoT와 함께 사용하는 방법에 대한 자세한 내용은 Creating an AWS Lambda rule을 참고하세요.

출처: AWS Lambda 개발자 안내서

본문

AWS IoT 규칙이 Lambda 함수를 호출할 때 함수는 IoT 메시지의 데이터를 담은 이벤트를 받아 처리하게 돼요. 규칙이 MQTT 메시지를 수신하면 비동기 방식으로 Lambda가 호출되므로, 장치 데이터를 변환·저장·분석하는 로직을 함수에 구현할 수 있어요. 비동기 호출이라 함수 오류 시 재시도가 적용되며, 처리하지 못한 이벤트는 대상(destination)을 구성해 보존할 수 있죠. 무엇보다도 AWS IoT가 함수를 호출할 수 있도록 add-permission으로 리소스 기반 정책에 권한을 부여하고, 보안을 위해 source-arn과 source-account를 지정하는 것이 중요해요.

더 알아보기 (Learn more)