작업을 실행할 Raspberry Pi 준비 - AWS IoT Core

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

작업을 실행할 Raspberry Pi 준비

이 섹션의 절차에서는 AWS IoT Device Client를 사용하여 Raspberry Pi가 작업을 실행하도록 준비하는 방법을 설명합니다.

참고

이러한 절차는 디바이스에 따라 다릅니다. 동시에 여러 디바이스로 이 섹션의 절차를 수행하려면 각 디바이스에 고유한 정책과 고유한 디바이스별 인증서 및 사물 이름이 필요합니다. 각 디바이스에 고유한 리소스를 제공하려면 절차에 설명된 대로 디바이스별 요소를 변경하면서 각 디바이스에 대해 이 절차를 한 번 수행합니다.

Raspberry Pi를 프로비저닝하여 직업 시연

이 섹션의 절차는 Raspberry Pi에 대한 AWS IoT 리소스 및 디바이스 인증서를 생성 AWS IoT 하여 에서 Raspberry Pi를 프로비저닝합니다.

디바이스 인증서 파일을 생성하고 다운로드하여 AWS IoT 작업 시연

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

여러 디바이스를 준비하는 경우 각 디바이스에서 이 절차를 수행해야 합니다.

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

Raspberry Pi에 연결된 로컬 호스트 컴퓨터의 터미널 창에서 이 명령을 입력합니다.

  1. 다음 명령을 입력하여 디바이스에 대한 디바이스 인증서 파일을 만듭니다.

    aws iot create-keys-and-certificate \ --set-as-active \ --certificate-pem-outfile "~/certs/jobs/device.pem.crt" \ --public-key-outfile "~/certs/jobs/public.pem.key" \ --private-key-outfile "~/certs/jobs/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/jobs chmod 644 ~/certs/jobs/* chmod 600 ~/certs/jobs/private.pem.key
  3. 이 명령을 실행하여 인증서 디렉터리 및 파일에 대한 권한을 검토합니다.

    ls -l ~/certs/jobs

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

    -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

디바이스 인증서 파일을 Raspberry Pi에 다운로드했으면 Raspberry Pi를 프로비저닝하여 직업 시연으로 진행할 준비가 된 것입니다.

AWS IoT 작업을 시연하기 위한 AWS IoT 리소스 생성

이 디바이스에 대한 AWS IoT 리소스를 생성합니다.

여러 디바이스를 준비하는 경우 각 디바이스에 대해 이 절차를 수행해야 합니다.

AWS IoT에서 디바이스를 프로비저닝하려면

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

  1. 다음 명령을 입력하여 AWS 계정에 대한 디바이스 데이터 엔드포인트의 주소를 가져옵니다.

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

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

    describe-endpoint 명령은 다음과 같은 응답을 반환합니다. 나중에 사용하기 위해 endpointAddress 값을 적어 둡니다.

    { "endpointAddress": "a3qjEXAMPLEffp-ats.iot.us-west-2.amazonaws.com" }
  2. Replace uniqueThingName 디바이스의 고유한 이름을 사용합니다. 여러 디바이스에서 이 튜토리얼을 수행하려면 각 디바이스에 고유한 이름을 지정합니다. 예: TestDevice01, TestDevice02 등.

    Raspberry Pi에 대한 새 AWS IoT 사물 리소스를 생성하려면 이 명령을 입력합니다.

    aws iot create-thing --thing-name "uniqueThingName"

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

    참고

    여러 장치에 대한 정책을 보호하려는 경우 고정 사물 이름인 uniqueThingName 대신 ${iot:Thing.ThingName}을 사용할 수 있습니다.

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

    AWS IoT 사물 리소스가 생성된 경우 명령은 이와 같은 응답을 반환합니다. 나중에 이 디바이스에서 실행할 작업을 생성할 때 사용할 thingArn 값을 기록합니다.

    { "thingName": "uniqueThingName", "thingArn": "arn:aws:iot:us-west-2:57EXAMPLE833:thing/uniqueThingName", "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/uniqueThingName" ] }, { "Effect": "Allow", "Action": [ "iot:Publish" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/pubtopic", "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/job/*", "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/jobExecution/*", "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName/jobs/*" ] }, { "Effect": "Allow", "Action": [ "iot:Subscribe" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/test/dc/subtopic", "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/events/jobExecution/*", "arn:aws:iot:us-west-2:57EXAMPLE833:topicfilter/$aws/things/uniqueThingName/jobs/*" ] }, { "Effect": "Allow", "Action": [ "iot:Receive" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/test/dc/subtopic", "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName/jobs/*" ] }, { "Effect": "Allow", "Action": [ "iot:DescribeJobExecution", "iot:GetPendingJobExecutions", "iot:StartNextPendingJobExecution", "iot:UpdateJobExecution" ], "Resource": [ "arn:aws:iot:us-west-2:57EXAMPLE833:topic/$aws/things/uniqueThingName" ] } ] }
    3. 편집기의 모든 정책 설명 Resource 섹션에서 를 바꿉니다.us-west-2:57EXAMPLE833 AWS 리전, 콜론 문자(:) 및 12자리 AWS 계정 숫자로 구성됩니다.

    4. 편집기의 모든 정책 문에서 를 바꿉니다.uniqueThingName 이 사물 리소스를 제공한 사물 이름을 사용합니다.

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

      여러 디바이스에 대해 이 절차를 실행하는 경우 파일을 각 디바이스에 이 파일 이름으로 저장합니다.

  4. Replace uniqueThingName 를 디바이스의 사물 이름으로 설정한 다음 이 명령을 실행하여 해당 디바이스에 맞게 조정된 AWS IoT 정책을 생성합니다.

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

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

    { "policyName": "JobTestPolicyForuniqueThingName", "policyArn": "arn:aws:iot:us-west-2:57EXAMPLE833:policy/JobTestPolicyForuniqueThingName", "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. Replace uniqueThingName 는 디바이스의 사물 이름과 이 디바이스에 대해 이 섹션의 앞부분에서 저장한 certificateArn 값을 certificateArn 가진 다음 이 명령을 실행하여 디바이스 인증서에 정책을 연결합니다.

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

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

  6. Replace uniqueThingName 를 디바이스의 사물 이름으로 지정하고 이 섹션에서 이전에 저장한 certificateArn certificateArn 값으로 바꾼 다음 이 명령을 실행하여 디바이스 인증서를 AWS IoT 사물 리소스에 연결합니다.

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

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

Raspberry Pi를 성공적으로 프로비저닝한 후에는 테스트에서 다른 Raspberry Pi에 대해 이 섹션을 반복할 준비가 된 것입니다. 모든 디바이스가 프로비저닝된 경우 작업 에이전트를 실행하도록 AWS IoT Device Client 구성으로 진행합니다.

작업 에이전트를 실행하도록 AWS IoT Device Client 구성

이 절차에서는 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/jobs/device.pem.crt", "key": "~/certs/jobs/private.pem.key", "root-ca": "~/certs/AmazonRootCA1.pem", "thing-name": "uniqueThingName", "logging": { "enable-sdk-logging": true, "level": "DEBUG", "type": "STDOUT", "file": "" }, "jobs": { "enabled": true, "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": false, "publish-topic": "", "publish-file": "", "subscribe-topic": "", "subscribe-file": "" } }, "config-shadow": { "enabled": false }, "sample-shadow": { "enabled": false, "shadow-name": "", "shadow-input-file": "", "shadow-output-file": "" } }
    3. 교체 endpoint 에서 찾은 에 대한 디바이스 데이터 엔드포인트 값이 AWS 계정 있는 값입니다에서 디바이스 프로비저닝 AWS IoT Core.

    4. Replace uniqueThingName 이 디바이스에 사용한 사물 이름을 사용합니다.

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

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

    chmod 644 ~/dc-configs/dc-jobs-config.json

MQTT 테스트에는 테스트 클라이언트를 사용하지 않습니다. 디바이스가 와 작업 관련 MQTT 메시지를 교환하지만 AWS IoT작업 진행률 메시지는 작업을 실행하는 디바이스와만 교환됩니다. 작업 진행률 메시지는 작업을 실행하는 디바이스와만 교환되므로 AWS IoT 콘솔과 같은 다른 디바이스에서 메시지를 구독할 수 없습니다.

구성 파일을 저장한 후에는 AWS IoT Device Client를 AWS IoT 사용하여 에서 작업 생성 및 실행 단계를 진행할 준비가 된 것입니다.