

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

# MQTT 메시지 통신 시연을 위해 Raspberry Pi 준비
<a name="iot-dc-testconn-provision"></a>

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

**Topics**
+ [인증서 파일을 생성하여 MQTT 통신을 시연합니다.](#iot-dc-testconn-provision-certs)
+ [MQTT 통신을 시연하기 위해 디바이스 프로비저닝](#iot-dc-testconn-provision-aws)
+ [MQTT 통신을 보여주도록 AWS IoT Device Client 구성 파일 및 MQTT 테스트 클라이언트 구성](#iot-dc-testconn-provision-dc-config)

## 인증서 파일을 생성하여 MQTT 통신을 시연합니다.
<a name="iot-dc-testconn-provision-certs"></a>

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

**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"
   }
   }
   ```

1. 이 명령을 입력하여 인증서 디렉터리와 해당 파일에 대한 권한을 설정합니다.

   ```
   chmod 700 ~/certs/pubsub
   chmod 644 ~/certs/pubsub/*
   chmod 600 ~/certs/pubsub/private.pem.key
   ```

1. 이 명령을 실행하여 인증서 디렉터리 및 파일에 대한 권한을 검토합니다.

   ```
   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
   ```

1. 이 명령을 입력하여 로그 파일의 디렉터리를 생성합니다.

   ```
   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 통신을 시연하기 위해 디바이스 프로비저닝
<a name="iot-dc-testconn-provision-aws"></a>

이 섹션에서는에서 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}}"
   }
   ```

1. 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"
   }
   ```

1. 터미널 창에서

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

   1. 이 JSON 문서를 복사하여 열려 있는 텍스트 편집기에 붙여 넣습니다.  
****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Connect"
                  ],
                  "Resource": [
                      "arn:aws:iot:{{us-west-2:123456789012}}:client/PubSubTestThing"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Publish"
                  ],
                  "Resource": [
                      "arn:aws:iot:{{us-west-2:123456789012}}:topic/test/dc/pubtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Subscribe"
                  ],
                  "Resource": [
                      "arn:aws:iot:{{us-west-2:123456789012}}:topicfilter/test/dc/subtopic"
                  ]
              },
              {
                  "Effect": "Allow",
                  "Action": [
                      "iot:Receive"
                  ],
                  "Resource": [
                      "arn:aws:iot:{{us-west-2:123456789012}}:topic/test/dc/subtopic"
                  ]
              }
          ]
      }
      ```

   1. 편집기의 정책 문서의 각 `Resource` 섹션에서 {{us-west-2:57EXAMPLE833}}을 , 콜론 문자(:) 및 12자리 AWS 계정 숫자 AWS 리전로 바꿉니다.

   1. 텍스트 편집기에서 파일을 **\~/policies/pubsub\_test\_thing\_policy.json**으로 저장합니다.

1. 이전 단계의 정책 문서를 사용하여 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"
                                       }
   ```

1. 이 명령을 실행하여 디바이스 인증서에 정책을 연결합니다. `{{certificateArn}}`을 이 섹션에서 이전에 저장한 `certificateArn` 값으로 바꿉니다.

   ```
   aws iot attach-policy \
   --policy-name "PubSubTestThingPolicy" \
   --target "{{certificateArn}}"
   ```

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

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

   ```
   aws iot attach-thing-principal \
   --thing-name "PubSubTestThing" \
   --principal "{{certificateArn}}"
   ```

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

에서 디바이스를 성공적으로 프로비저닝하면 로 계속 진행할 준비가 된 AWS IoT것입니다[MQTT 통신을 보여주도록 AWS IoT Device Client 구성 파일 및 MQTT 테스트 클라이언트 구성](#iot-dc-testconn-provision-dc-config).

## MQTT 통신을 보여주도록 AWS IoT Device Client 구성 파일 및 MQTT 테스트 클라이언트 구성
<a name="iot-dc-testconn-provision-dc-config"></a>

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

**AWS IoT Device Client를 테스트하기 위한 구성 파일을 생성하려면**

1. Raspberry Pi에 연결된 로컬 호스트 컴퓨터의 터미널 창에서

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

   1. 이 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": ""
        }
      }
      ```

   1. {{엔드포인트}} 값을에서 찾 AWS 계정 은의 디바이스 데이터 엔드포인트로 바꿉니다[에서 디바이스 프로비저닝 AWS IoT Core](iot-dc-install-provision.md#iot-dc-install-dc-provision).

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

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

      ```
      chmod 644 ~/dc-configs/dc-pubsub-config.json
      ```

1. 모든 MQTT 메시지를 구독하도록 **MQTT 테스트 클라이언트(MQTT test client)**를 준비하려면

   1. 로컬 호스트 컴퓨터의 [AWS IoT 콘솔](https://console.aws.amazon.com//iot/home#/test)에서 **MQTT 테스트 클라이언트(MQTT test client)**를 선택합니다.

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

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

   이 자습서를 진행하면서 **MQTT 테스트 클라이언트(MQTT test client)**가 열려 있는 창을 그대로 둡니다.

파일을 저장하고 **MQTT 테스트 클라이언트(MQTT test client)**를 구성한 후 [AWS IoT Device Client를 사용하여 메시지 게시 시연](iot-dc-testconn-publish.md)으로 진행할 준비가 된 것입니다.