일본어로 된 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 만들기에 관해 포스팅 올릴 계획! ❗
'Cloud > AWS' 카테고리의 다른 글
[AWS] IoT Core 살펴보기 -3(실시간 시각화) (0) | 2022.09.26 |
---|---|
[AWS] IoT Core 살펴보기 -2(애플리케이션용 DB) (0) | 2022.09.26 |
[AWS] S3 트리거를 사용하여 Lambda 함수 호출 (1) | 2022.09.23 |
[AWS] AWS Rekognition - Custom Labels (1) | 2022.09.23 |
[AWS] Amazon Athena로 S3의 로그 쿼리 하기(easy) (0) | 2022.09.22 |