기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS IoT Device Client로 메시지 구독 시연
이 섹션에서는 두 가지 유형의 메시지 구독을 보여줍니다.
-
단일 주제 구독
-
와일드카드 주제 구독
이러한 연습을 위해 생성한 정책의 이러한 정책 설명은 Raspberry Pi에 다음 작업을 수행할 수 있는 권한을 부여합니다.
-
iot:Receive
AWS IoT Device Client에
Resource
객체에 명명된 항목과 일치하는 MQTT 주제를 수신할 수 있는 권한을 부여합니다.{ "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic" ] }
-
iot:Subscribe
AWS IoT Device Client에
Resource
객체에 명명된 항목과 일치하는 MQTT 주제 필터를 구독할 수 있는 권한을 부여합니다.{ "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic" ] }
단일 MQTT 메시지 주제 구독
이 절차에서는 AWS IoT Device Client가 MQTT 메시지를 구독하고 기록하는 방법을 보여줍니다.
Raspberry Pi에 연결된 로컬 호스트 컴퓨터의 터미널 창에서 ~/dc-configs/dc-pubsub-custom-config.json
의 내용을 나열하거나 텍스트 편집기에서 파일을 열어 내용을 검토합니다. 다음과 같은 samples
객체를 찾습니다.
"samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "~/messages/sample-ws-message.json", "subscribe-topic": "
test/dc/subtopic
", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"
subscribe-topic
값은 AWS IoT Device Client가 실행 시 구독할 MQTT 주제입니다. AWS IoT Device Client는 이 구독으로부터 수신하는 메시지 페이로드를 subscribe-file
값에 명명된 파일에 씁니다.
AWS IoT Device Client에서 MQTT 메시지 주제를 구독하려면
-
이 절차를 수행하는 동안 터미널 창과 MQTT 테스트 클라이언트(MQTT test client)가 있는 창이 모두 표시되는지 확인합니다. 또한 MQTT 테스트 클라이언트(MQTT test client)가 여전히 # 주제 필터를 구독하고 있는지 확인합니다. 그렇지 않은 경우 # 주제 필터를 다시 구독합니다.
-
터미널 창에서 이 명령을 입력하여 구성 파일 생성에서 생성한 config 파일을 사용하여 AWS IoT Device Client를 실행합니다.
cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-custom-config.json
터미널 창에서 AWS IoT Device Client는 실행 시 발생하는 오류와 정보 메시지를 표시합니다.
터미널 창에 오류가 표시되지 않으면 AWS IoT 콘솔에서 계속합니다.
-
AWS IoT 콘솔의 MQTT 테스트 클라이언트(MQTT test client)에서 주제 구독(Subscribe to a topic) 탭을 선택합니다.
-
주제 이름(Topic name)에
test/dc/subtopic
을 입력합니다. -
메시지 페이로드(Message payload)에서 메시지 내용을 검토합니다.
-
게시(Publish)를 선택하여 MQTT 메시지를 게시합니다.
-
터미널 창에서 AWS IoT Device Client로부터 다음과 같은 메시지 수신 항목을 찾습니다.
2021-11-10T16:02:20.890Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 45 bytes
-
메시지가 수신되었음을 보여주는 메시지 수신 항목이 있으면
^C
(Ctrl-C)를 입력하여 AWS IoT Device Client를 중지합니다. -
이 명령을 입력하여 메시지 로그 파일의 끝을 보고 MQTT 테스트 클라이언트(MQTT test client)에서 게시한 메시지를 확인합니다.
tail ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
로그 파일에서 메시지를 보고 AWS IoT Device Client가 MQTT 테스트 클라이언트에서 게시한 메시지를 수신했음을 보여줍니다.
와일드카드 문자를 사용하여 여러 MQTT 메시지 주제 구독
이 절차는 AWS IoT Device Client가 와일드카드 문자를 사용하여 MQTT 메시지를 구독하고 로그하는 방법을 보여줍니다. 이를 위해 다음을 수행합니다.
-
AWS IoT Device Client가 MQTT 주제를 구독하는 데 사용하는 주제 필터를 업데이트합니다.
-
새 구독을 허용하도록 디바이스에서 사용하는 정책을 업데이트합니다.
-
AWS IoT Device Client를 실행하고 MQTT 테스트 콘솔에서 메시지를 게시합니다.
와일드카드 MQTT 주제 필터를 사용하여 여러 MQTT 메시지 주제를 구독하는 구성 파일을 생성하려면
-
Raspberry Pi에 연결된 로컬 호스트 컴퓨터의 터미널 창에서 편집을 위해
~/dc-configs/dc-pubsub-custom-config.json
을 열고samples
객체를 찾습니다. -
텍스트 편집기에서
samples
객체를 찾고subscribe-topic
값을 다음과 같이 업데이트합니다."samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "~/messages/sample-ws-message.json", "subscribe-topic": "
test/dc/#
", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log"새
subscribe-topic
값은 끝에 MQTT 와일드카드 문자가 있는 MQTT 주제 필터입니다. 이는test/dc/
로 시작하는 모든 MQTT 주제에 대한 구독을 설명합니다. AWS IoT Device Client는 이 구독으로부터 수신하는 메시지 페이로드를subscribe-file
에 명명된 파일에 씁니다. -
수정된 구성 파일을
~/dc-configs/dc-pubsub-wild-config.json
으로 저장하고 편집기를 종료합니다.
여러 MQTT 메시지 주제 구독 및 수신을 허용하도록 Raspberry Pi에서 사용하는 정책을 수정하려면
-
Raspberry Pi에 연결된 로컬 호스트 컴퓨터의 터미널 창에서 즐겨 사용하는 텍스트 편집기에서 편집을 위해
~/policies/pubsub_test_thing_policy.json
을 연 다음 파일에서iot::Subscribe
및iot::Receive
정책 설명을 찾습니다. -
iot::Subscribe
정책 설명에서 Resource 개체의 문자열을 업데이트하여subtopic
을*
로 바꾸면 다음과 같이 됩니다.{ "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/
*
" ] }참고
MQTT 주제 필터 와일드 카드 문자는
+
(더하기 기호)와#
(파운드 기호)입니다. 끝에#
이 있는 구독 요청은#
문자 앞에 오는 문자열(예: 이 경우test/dc/
)로 시작하는 모든 주제를 구독합니다.그러나 이 구독 권한을 부여하는 정책 설명의 리소스 값은 주제 필터 ARN에서
#
(파운드 기호) 대신*
(별표)를 사용해야 합니다. 이는 정책 프로세서가 MQTT에서 사용하는 것과 다른 와일드카드 문자를 사용하기 때문입니다.정책의 주제 및 주제 필터에 와일드카드 문자 사용에 대한 자세한 내용은 MQTT 및 AWS IoT Core 정책에 와일드카드 문자 사용 섹션을 참조하세요.
-
iot::Receive
정책 설명에서 Resource 개체의 문자열을 업데이트하여subtopic
을*
로 바꾸면 다음과 같이 됩니다.{ "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/
*
" ] } -
업데이트된 정책 문서를
~/policies/pubsub_wild_test_thing_policy.json
으로 저장하고 편집기를 종료합니다. -
이 명령을 입력하여 새 리소스 정의를 사용하도록 이 튜토리얼의 정책을 업데이트합니다.
aws iot create-policy-version \ --set-as-default \ --policy-name "PubSubTestThingPolicy" \ --policy-document "file://~/policies/pubsub_wild_test_thing_policy.json"
명령이 성공하면 다음과 같은 응답이 반환됩니다.
policyVersionId
는 이제2
로, 이 정책의 두 번째 버전임을 나타냅니다.정책을 성공적으로 업데이트했으면 다음 절차로 진행할 수 있습니다.
{ "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/PubSubTestThingPolicy", "policyDocument": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Connect\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Publish\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Subscribe\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/*\"\n ]\n },\n {\n \"Effect\": \"Allow\",\n \"Action\": [\n \"iot:Receive\"\n ],\n \"Resource\": [\n \"arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/*\"\n ]\n }\n ]\n}\n", "policyVersionId": "2", "isDefaultVersion": true }
정책 버전이 너무 많아 새 버전을 저장할 수 없다는 오류가 발생하면 이 명령을 입력하여 정책의 현재 버전을 나열합니다. 이 명령이 반환하는 목록을 검토하여 삭제할 수 있는 정책 버전을 찾습니다.
aws iot list-policy-versions --policy-name "PubSubTestThingPolicy"
이 명령을 입력하여 더 이상 필요 없는 버전을 삭제합니다. 기본 정책 버전은 삭제할 수 없습니다. 기본 정책 버전은
isDefaultVersion
값이true
인 버전입니다.aws iot delete-policy-version \ --policy-name "PubSubTestThingPolicy" \ --policy-version-id
policyId
정책 버전을 삭제한 후 이 단계를 다시 시도합니다.
업데이트된 구성 파일 및 정책을 사용하여 AWS IoT Device Client러 와일드 카드 구독을 시연할 준비가 되었습니다.
AWS IoT Device Client가 여러 MQTT 메시지 주제를 구독하고 수신하는 방법을 보여주려면
-
MQTT 테스트 클라이언트(MQTT test client)에서 구독을 확인합니다. MQTT 테스트 클라이언트가
#
주제 필터를 구독하는 경우 다음 단계로 진행합니다. 그렇지 않은 경우 MQTT 테스트 클라이언트(MQTT test client)의 주제 구독(Subscribe to a topic) 탭에 있는 주제 필터(Topic filter)에#
(파운드 기호)를 입력한 다음 구독(Subscribe)을 선택하여 이를 구독합니다. -
Raspberry Pi에 연결된 로컬 호스트 컴퓨터의 터미널 창에서 이 명령을 입력하여 AWS IoT Device Client를 시작합니다.
cd ~/aws-iot-device-client/build ./aws-iot-device-client --config-file ~/dc-configs/dc-pubsub-wild-config.json
-
로컬 호스트 컴퓨터의 터미널 창에서 AWS IoT Device Client 출력을 보면서 MQTT 테스트 클라이언트(MQTT test client)로 돌아갑니다. 주제에 게시(Publish to a topic) 탭의 주제 이름(Topic name)에
test/dc/subtopic
을 입력한 다음 게시(Publish)를 선택합니다. -
터미널 창에서 다음과 같은 메시지를 찾아 메시지가 수신되었는지 확인합니다.
2021-11-10T16:34:20.101Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 76 bytes
-
로컬 호스트 컴퓨터의 터미널 창에서 AWS IoT Device Client 출력을 보면서 MQTT 테스트 클라이언트(MQTT test client)로 돌아갑니다. 주제에 게시(Publish to a topic) 탭의 주제 이름(Topic name)에
test/dc/subtopic2
을 입력한 다음 게시(Publish)를 선택합니다. -
터미널 창에서 다음과 같은 메시지를 찾아 메시지가 수신되었는지 확인합니다.
2021-11-10T16:34:32.078Z [DEBUG] {samples/PubSubFeature.cpp}: Message received on subscribe topic, size: 77 bytes
-
두 메시지가 모두 수신되었음을 확인하는 메시지가 표시되면
^C
(Ctrl-C)를 입력하여 AWS IoT Device Client를 중지합니다. -
이 명령을 입력하여 메시지 로그 파일의 끝을 보고 MQTT 테스트 클라이언트(MQTT test client)에서 게시한 메시지를 확인합니다.
tail -n 20 ~/.aws-iot-device-client/log/pubsub_rx_msgs.log
참고
로그 파일에는 메시지 페이로드만 포함됩니다. 수신한 메시지 로그 파일에는 메시지 주제가 기록되지 않습니다.
수신한 로그에서 AWS IoT Device Client가 게시한 메시지를 볼 수도 있습니다. 이는 와일드카드 주제 필터에 해당 메시지 주제가 포함되어 있으며, 게시된 메시지가 구독자에게 전송되기 전에 메시지 브로커가 구독 요청을 처리할 수도 있기 때문입니다.
로그 파일의 항목은 메시지가 수신되었음을 보여줍니다. 다른 주제 이름을 사용하여 이 절차를 반복할 수 있습니다. 주제 이름이 test/dc/
로 시작하는 모든 메시지는 수신되고 로그되어야 합니다. 주제 이름이 다른 텍스트로 시작하는 메시지는 무시됩니다.
AWS IoT Device Client가 MQTT 메시지를 게시하고 구독할 수 있는 방법을 설명한 후 튜토리얼: AWS IoT Device Client를 사용한 원격 작업 시연으로 진행합니다.