참고: https://catalog.us-east-1.prod.workshops.aws/workshops/b3e0b830-79b8-4c1d-8a4c-e10406600035/ja-JP/phase1

일본어로 된 workshop 자료라... 최신 버전이 이것밖에 없었따..😥 번역기 돌려서 사용하세요

 


Device Setup

  • Cloud9 인스턴스 생성

서울 리전 기준으로 t3.small 이상으로 잡아야 생성 가능!

이 인스턴스가 디바이스 역할을 해줄 예정(나중에 라즈베리파이로도 진행해보자)

 

  • AWS IoT Device SDK Python v2 설치

아래의 명령어를 Cloud9 인스턴스에 입력하자.

pip3 install --user awsiotsdk
mkdir -p ~/environment/dummy_client/certs/
cd ~/environment/dummy_client/
wget https://awsj-iot-handson.s3-ap-northeast-1.amazonaws.com/aws-iot-core-workshop/dummy_client/device_main.py -O device_main.py

 

IoT Core Setup

  • IoT Core 정의

IoT 설정의 디바이스 데이터 엔드포인트 값을 복사한다.

다음으로 로그 관리를 클릭 하고 로그 설정을 해주자.

IAM 역할은 새로 생성해주자!

 

  • IoT Policy 생성

(side menu → 보안 → 정책)

❗ 현재 정책 설정을 모든 작업 모든 리소스를 허용하게끔 되어 있는데, 이건 테스트 용이니까 광범위하게 설정한 것..

프로젝트를 할 때에는 최소한의 권한으로 설정해둘 것! ❗
보통 최소한의 권한의 경우(workshop 기준, 도쿄 리전)

더보기

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "iot:Connect",
      "Resource": "arn:aws:iot:ap-northeast-1:123456789012:client/${iot:ClientId}"
    },
    {
      "Effect": "Allow",
      "Action": "iot:Publish",
      "Resource": [
        "arn:aws:iot:ap-northeast-1:123456789012:topic/data/${iot:Connection.Thing.ThingName}",
        "arn:aws:iot:ap-northeast-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update",
        "arn:aws:iot:ap-northeast-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get"
      ]
    },
    {
      "Effect": "Allow",
      "Action": "iot:Receive",
      "Resource": [
        "arn:aws:iot:ap-northeast-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/delta",
        "arn:aws:iot:ap-northeast-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/accepted",
        "arn:aws:iot:ap-northeast-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/rejected",
        "arn:aws:iot:ap-northeast-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get/accepted",
        "arn:aws:iot:ap-northeast-1:123456789012:topic/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get/rejected"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "iot:Subscribe"
      ],
      "Resource": [
        "arn:aws:iot:ap-northeast-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/delta",
        "arn:aws:iot:ap-northeast-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/accepted",
        "arn:aws:iot:ap-northeast-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/update/rejected",
        "arn:aws:iot:ap-northeast-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get/accepted",
        "arn:aws:iot:ap-northeast-1:123456789012:topicfilter/$aws/things/${iot:Connection.Thing.ThingName}/shadow/get/rejected"
      ]
    }
  ]
}

 

  • 디바이스 생성

(모든 디바이스 → 사물)

단일 사물 생성

새 인증서 자동 생성(권장)

정책의 경우 위에서 생성했던 정책 클릭

인증서랑 키 파일 다운로드

 

  • Cloud9 인스턴스에 키파일 등록

private.pem.key와 certificate.pem.crt 업로드

아래의 명령어 입력

cd ~/environment/dummy_client
wget https://www.amazontrust.com/repository/AmazonRootCA1.pem -O certs/AmazonRootCA1.pem

 

  • Device SDK

해당 명령어들 터미널에 입력한다.

cd ~/environment/dummy_client/
python3 device_main.py --device_name {Device_name} --endpoint {AWS IoT endpoint_url}

해당 커멘드를 실행하면 dummy_client는 IoT Core에 MQTT로 연결하고 5초 마다 메세지 전송(default)

 

  • Device Test

(테스트 → MQTT 테스트 클라이언트)

아까 위에서 실행했던 커멘드 출력들 중 topic을 알아두자.

해당 topic을 구독하면 device에서 보내는 메시지를 확인할 수 있다.

 

  • Device Shadow 확인

해당 클래식 섀도우에 들어가 디바이스 섀도우 문서 편집을 누른다.

해당 코드를 

{
    "state": {
        "reported": {
            "wait_time": 5
        },
        "desired": {
            "wait_time": 1
        }
    }
}

로 변경하고 업데이트 해준다.

업데이트 후 문서에 "welcome": "aws-iot" 가 남아있으면, 

위 이미지처럼 null 값을 넣어준다. wait_time 값을 변경하면 device가 data를 보내는 빈도가 바뀜.

desired: 디바이스에 지시하고 있는 상태

reported: 디바이스로부터 보고된 상태

delta: desired와 reported 상태에 차이가 있을 때 표시됨

섀도우에서 다시 해당 문서를 wait_time을 2로 변경하면 터미널에서도 확인할 수 있다.

MQTT 테스트 쪽에서 주제를 다시 구독한 후 확인하면 데이터가 전송되는 간격이 변경되었다는 것을 확인할 수 있음.

 

 

❗ 다음 포스팅은 애플리케이션용 DB 만들기에 관해 포스팅 올릴 계획!  ❗

+ Recent posts