Raspberry Pi를 준비하여 MQTT 메시지 커뮤니케이션 시연 - AWS IoT Core

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Raspberry Pi를 준비하여 MQTT 메시지 커뮤니케이션 시연

이 절차에서는 Raspberry Pi의 AWS IoT 및 에 리소스를 생성하여 AWS IoT Device Client를 사용한 MQTT 메시지 통신을 보여줍니다.

MQTT 통신을 시연하기 위한 인증서 파일 생성

이 절차는 이 데모에 대한 디바이스 인증서 파일을 생성합니다.

Raspberry Pi에 대한 디바이스 인증서 파일을 생성하고 다운로드하려면

  1. 로컬 호스트 컴퓨터의 터미널 창에서 다음 명령을 입력하여 디바이스에 대한 디바이스 인증서 파일을 만듭니다.

    mkdir ~/certs/pubsub aws iot create-keys-and-certificate \ --set-as-active \ --certificate-pem-outfile "~/certs/pubsub/device.pem.crt" \ --public-key-outfile "~/certs/pubsub/public.pem.key" \ --private-key-outfile "~/certs/pubsub/private.pem.key"

    이 명령은 다음과 같은 응답을 반환합니다. 나중에 사용할 수 있도록 certificateArn 값을 저장합니다.

    { "certificateArn": "arn:aws:iot:us-west-2:57EXAMPLE833:cert/76e7e4edb3e52f52334be2f387a06145b2aa4c7fcd810f3aea2d92abc227d269", "certificateId": "76e7e4edb3e52f5233EXAMPLE7a06145b2aa4c7fcd810f3aea2d92abc227d269", "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWTCCAkGgAwIBAgI_SHORTENED_FOR_EXAMPLE_Lgn4jfgtS\n-----END CERTIFICATE-----\n", "keyPair": { "PublicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BA_SHORTENED_FOR_EXAMPLE_ImwIDAQAB\n-----END PUBLIC KEY-----\n", "PrivateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQE_SHORTENED_FOR_EXAMPLE_T9RoDiukY\n-----END RSA PRIVATE KEY-----\n" } }
  2. 이 명령을 입력하여 인증서 디렉터리와 해당 파일에 대한 권한을 설정합니다.

    chmod 700 ~/certs/pubsub chmod 644 ~/certs/pubsub/* chmod 600 ~/certs/pubsub/private.pem.key
  3. 이 명령을 실행하여 인증서 디렉터리 및 파일에 대한 권한을 검토합니다.

    ls -l ~/certs/pubsub

    명령의 출력은 파일 날짜와 시간이 다르다는 점을 제외하고 여기에 표시되는 것과 같아야 합니다.

    -rw-r--r-- 1 pi pi 1220 Oct 28 13:02 device.pem.crt -rw------- 1 pi pi 1675 Oct 28 13:02 private.pem.key -rw-r--r-- 1 pi pi 451 Oct 28 13:02 public.pem.key
  4. 이 명령을 입력하여 로그 파일의 디렉터리를 생성합니다.

    mkdir ~/.aws-iot-device-client mkdir ~/.aws-iot-device-client/log chmod 745 ~/.aws-iot-device-client/log echo " " > ~/.aws-iot-device-client/log/aws-iot-device-client.log echo " " > ~/.aws-iot-device-client/log/pubsub_rx_msgs.log chmod 600 ~/.aws-iot-device-client/log/*

MQTT 통신을 시연하도록 디바이스 프로비저닝

이 섹션에서는 에서 Raspberry Pi를 프로비저닝하는 AWS IoT 리소스를 생성합니다 AWS IoT.

AWS IoT에서 디바이스를 프로비저닝하려면
  1. 로컬 호스트 컴퓨터의 터미널 창에서 이 명령을 입력하여 AWS 계정의 디바이스 데이터 엔드포인트 주소를 가져옵니다.

    aws iot describe-endpoint --endpoint-type IoT:Data-ATS

    엔드포인트 값은 이전 튜토리얼에서 이 명령을 실행한 이후로 변경되지 않았습니다. 여기에서 명령을 다시 실행하면 데이터 엔드포인트 값을 쉽게 찾아 이 튜토리얼에서 사용하는 구성 파일에 붙여 넣을 수 있습니다.

    이전 단계의 명령에서 다음과 같은 응답이 반환됩니다. 나중에 사용하기 위해 endpointAddress 값을 적어 둡니다.

    { "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com" }
  2. Raspberry Pi에 대한 새 AWS IoT 사물 리소스를 생성하려면 이 명령을 입력합니다.

    aws iot create-thing --thing-name "PubSubTestThing"

    AWS IoT 사물 리소스는 클라우드에서 디바이스를 가상으로 표현 AWS IoT 하기 때문에 에서 여러 용도로 사용할 여러 사물 리소스를 생성할 수 있습니다. 모두 동일한 물리적 IoT 디바이스에서 사용하여 디바이스의 다양한 속성을 나타낼 수 있습니다.

    이 튜토리얼에서는 Raspberry Pi를 표현하기 위해 한 번에 하나의 사물 리소스만 사용합니다. 이렇게 하면 이러한 자습서에서 서로 다른 데모를 나타내므로 데모용 AWS IoT 리소스를 생성한 후 각각에 대해 특별히 생성한 리소스를 사용하여 다시 돌아가서 데모를 반복할 수 있습니다.

    AWS IoT 사물 리소스가 생성된 경우 명령은 이와 같은 응답을 반환합니다.

    { "thingName": "PubSubTestThing", "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/PubSubTestThing", "thingId": "8ea78707-32c3-4f8a-9232-14bEXAMPLEfd" }
  3. 터미널 창에서

    1. nano 등의 텍스트 편집기를 엽니다.

    2. 이 JSON 문서를 복사하여 열린 텍스트 편집기에 붙여넣습니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iot:Connect" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:client/PubSubTestThing" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic" ] } ] }
    3. 편집기의 정책 문서의 각 Resource 섹션에서 를 바꿉니다.us-west-2:57EXAMPLE833 AWS 리전, 콜론 문자(:) 및 12자리 AWS 계정 숫자로 구성됩니다.

    4. 텍스트 편집기에서 파일을 ~/policies/pubsub_test_thing_policy.json으로 저장합니다.

  4. 이 명령을 실행하여 이전 단계의 정책 문서를 사용하여 AWS IoT 정책을 생성합니다.

    aws iot create-policy \ --policy-name "PubSubTestThingPolicy" \ --policy-document "file://~/policies/pubsub_test_thing_policy.json"

    정책이 생성되면 명령에서 다음과 같은 응답을 반환합니다.

    { "policyName": "PubSubTestThingPolicy", "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/subtopic\"\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": "1"
  5. 이 명령을 실행하여 디바이스 인증서에 정책을 연결합니다. certificateArn을 이 섹션에서 이전에 저장한 certificateArn 값으로 바꿉니다.

    aws iot attach-policy \ --policy-name "PubSubTestThingPolicy" \ --target "certificateArn"

    성공한 경우 이 명령은 아무 것도 반환하지 않습니다.

  6. 이 명령을 실행하여 AWS IoT 사물 리소스에 디바이스 인증서를 연결합니다. certificateArn을 이 섹션에서 이전에 저장한 certificateArn 값으로 바꿉니다.

    aws iot attach-thing-principal \ --thing-name "PubSubTestThing" \ --principal "certificateArn"

    성공한 경우 이 명령은 아무 것도 반환하지 않습니다.

에서 디바이스를 성공적으로 프로비저닝한 후에는 로 계속할 준비가 AWS IoT되었습니다AWS IoT Device Client 구성 파일 및 MQTT 테스트 클라이언트를 구성하여 MQTT 통신 시연.

AWS IoT Device Client 구성 파일 및 MQTT 테스트 클라이언트를 구성하여 MQTT 통신 시연

이 절차에서는 AWS IoT Device Client를 테스트하는 구성 파일을 생성합니다.

AWS IoT Device Client를 테스트하는 구성 파일을 생성하려면
  1. Raspberry Pi에 연결된 로컬 호스트 컴퓨터의 터미널 창에서

    1. nano 등의 텍스트 편집기를 엽니다.

    2. 이 JSON 문서를 복사하여 열린 텍스트 편집기에 붙여넣습니다.

      { "endpoint": "a3qEXAMPLEaffp-ats.iot.us-west-2.amazonaws.com", "cert": "~/certs/pubsub/device.pem.crt", "key": "~/certs/pubsub/private.pem.key", "root-ca": "~/certs/AmazonRootCA1.pem", "thing-name": "PubSubTestThing", "logging": { "enable-sdk-logging": true, "level": "DEBUG", "type": "STDOUT", "file": "" }, "jobs": { "enabled": false, "handler-directory": "" }, "tunneling": { "enabled": false }, "device-defender": { "enabled": false, "interval": 300 }, "fleet-provisioning": { "enabled": false, "template-name": "", "template-parameters": "", "csr-file": "", "device-key": "" }, "samples": { "pub-sub": { "enabled": true, "publish-topic": "test/dc/pubtopic", "publish-file": "", "subscribe-topic": "test/dc/subtopic", "subscribe-file": "~/.aws-iot-device-client/log/pubsub_rx_msgs.log" } }, "config-shadow": { "enabled": false }, "sample-shadow": { "enabled": false, "shadow-name": "", "shadow-input-file": "", "shadow-output-file": "" } }
    3. 교체 endpoint 에서 찾은 에 대한 디바이스 데이터 엔드포인트 AWS 계정 가 있는 값입니다에서 디바이스 프로비저닝 AWS IoT Core.

    4. 텍스트 편집기에서 파일을 ~/dc-configs/dc-pubsub-config.json으로 저장합니다.

    5. 이 명령을 실행하여 새로운 구성 파일에 대한 권한을 설정합니다.

      chmod 644 ~/dc-configs/dc-pubsub-config.json
  2. MQTT 테스트 클라이언트가 모든 MQTT 메시지를 구독하도록 준비하려면:

    1. 로컬 호스트 컴퓨터의 AWS IoT 콘솔 에서 MQTT 클라이언트 테스트 를 선택합니다.

    2. 주제 구독(Subscribe to a topic) 탭의 주제 필터(Topic filter)#(파운드 기호 1개)를 입력하고 구독(Subscribe)을 선택합니다.

    3. 구독(Subscriptions) 레이블 아래에 #(파운드 기호 1개)가 표시되는지 확인합니다.

    이 자습서를 계속 진행하는 동안 MQTT 테스트 클라이언트가 열린 상태로 창을 그대로 둡니다.

파일을 저장하고 MQTT 테스트 클라이언트 를 구성한 후에는 로 계속할 준비가 되었습니다AWS IoT Device Client를 사용하여 메시지 게시 시연.