일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 토이프로젝트
- zsh
- remote
- WebSocket
- Spring
- SSH
- MSA
- handshake
- 페이지이동경고
- byungjoo kim
- beforeunload
- socjs
- gcOverhead
- java
- Dominic
- nginx
- 커리어스킬
- GIT
- iTerm2
- 김병주
- docker-compose
- python
- failed upgrade header
- omz
- docker
- alpine
- AWS
- rsa충돌
- KPT
- Intellij
- Today
- Total
Eyeeshot BloG
AWS IoT Core Job 본문
1. AWS IoT Jobs 란?
2. AWS IoT Jobs 전제조건.
3. Jobs 디바이스와 작업.
4. 작업 생성
1. AWS IoT Jobs 란?
- AWS IoT 작업 서비스는 AWS IoT에 연결되는 하나 이상의 디바이스로 전송된 후 실행되는 원격 작업 세트를 정의하는 데 사용.
- 주된 목적은 소프트웨어 또는 펌웨어 업데이트를 디바이스에게 알리는데 사용.
- 작업 문서란 AWS IoT Job 생성시 대상이 되는 디바이스로 전송되는 문서.
2. AWS IoT Jobs 전제조건
- 작업을 생성시 작업문서는 Amazon S3 버킷의 파일 링크 또는 생성시 본문에 입력할수 있습니다.
- AWS 계정에 속한 사물 및 사물 그룹이 대상이 됩니다. 따라서 사물 및 사물 그룹이 있어야합니다.
- 작업 생성을 위해 IAM 권한 필요
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:ListAllMyBuckets",
"s3:CreateBucket",
"s3:PutBucketVersioning",
"s3:GetBucketLocation",
"s3:GetObjectVersion",
"s3:GetObject",
"s3:PutObject",
"s3:ListBucketVersions"
],
"Resource": [
"arn:aws:s3:::{{RESOURCE}}",
"arn:aws:s3:::us-east-1-greengrass-updates/*",
"arn:aws:s3:::us-west-2-greengrass-updates/*",
"arn:aws:s3:::ap-northeast-1-greengrass-updates/*",
"arn:aws:s3:::ap-northeast-2-greengrass-updates/*",
"arn:aws:s3:::ap-southeast-2-greengrass-updates/*",
"arn:aws:s3:::eu-central-1-greengrass-updates/*",
"arn:aws:s3:::eu-west-1-greengrass-updates/*"
]
},
{
"Action": [
"greengrass:CreateSoftwareUpdateJob"
],
"Effect": "Allow",
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"iot:*",
"iam:GetRole",
"iam:PassRole",
"iam:ListRoles",
"signer:GetSigningProfile",
"signer:StartSigningJob",
"signer:DescribeSigningJob"
],
"Resource": "*"
}
]
}
3. AWS IoT Jobs 디바이스와 작업
- 작업을 생성하기전 디바이스는 AWS IoT Core에 연결되어있어야 한다.
- 작업을 실행하기할 대상 디바이스는 프로그래밍을 사전에 준비해야 한다.
- 대상이 되는 디바이스는 아래의 토픽을 구독하고 있어야합니다.
- $aws/things/{디바이스이름}/jobs/notify(또는 $aws/things/{디바이스이름}/jobs/notify-next)
- $aws/things/{디바이스이름}/jobs/get/accepted
- $aws/things/{디바이스이름}/jobs/get/rejected
- $aws/things/{디바이스이름}/jobs/{jobId}/get/accepted
- $aws/things/{디바이스이름}/jobs/{jobId}/get/rejected
- 디바이스 워크 플로우는 크게 두가지로 나눠질수 있다.
- Get the next Job
- 다비아스가 처음 온라인에 연결되면 해당 디바이스의 notify-next 토픽을 구독해야합니다.
- $aws/things/{디바이스이름}/jobs/{작업ID}/get 토픽에 메시지를 게시합니다.
- $next에 저장된 모든 상태를 포함하여 다음 작업, 작업 문서 및 기타 세부 정보를 가져옵니다.statusDetails 작업 문서에 코드 파일 서명이 있는 경우 작업 요청을 진행하기 전에 서명을 확인해야 합니다.
- $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시합니다. 또는 이번 단계와 이전 단계를 단일 호출로 결합하고 싶다면 디바이스에서 $aws/things/{디바이스이름}/jobs/start-next 토픽에 메시지를 게시하셔도 좋습니다.
- (선택 사항) $aws/things/{디바이스이름}/jobs/{작업ID}/update 또는 $aws/things/{디바이스이름}/jobs/start-next 를 호출하면 stepTimeoutInMinutes에 대한 값을 설정하여 단계 타이머를 추가할 수 있습니다.
- 작업 진행 상황이 변화될때마다 상태를 변경하려면 $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시합니다.
- $aws/things/{디바이스이름}/jobs/{작업ID}/get 토픽에 메시지를 게시하면서 작업 실행을 계속 모니터링합니다. 작업 실행이 삭제되면 ResourceNotFoundException를 반환합니다.
- 작업이 완료되면 $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시하여 작업 상태를 업데이트하고 성공 또는 실패 여부를 보고합니다.
- 이번 작업의 실행 상태는 종료 상태로 바뀌었기 때문에 다음에 실행할 수 있는 작업(있는 경우)도 바뀝니다. 그러고 나서 디바이스에게도 다음 대기 중인 작업 실행이 바뀌었다는 알림 메시지가 수신됩니다. 이때는 디바이스가 2번으로에서 설명한 대로 계속 진행되어야 합니다.
- Pick from available jobs
- 디바이스가 처음 온라인에 연결되면 해당 사물의 notify 주제를 구독해야 합니다.
- $aws/things/{디바이스이름}/jobs/get 토픽에 메시지를 게시하여 대기 중인 작업 실행 목록을 가져옵니다.
- 목록에 작업 실행이 다수인 경우에는 하나를 선택합니다.
- $aws/things/{디바이스이름}/jobs/{작업ID}/get 토픽에 메시지를 게시합니다. statusDetails 작업 문서에 코드 파일 서명이 있는 경우 작업 요청을 진행하기 전에 서명을 확인해야 합니다.
- $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시합니다. 이 명령에서 includeJobDocument 필드가 true로 설정되어 있으면 디바이스가 이전 단계를 건너뛰고 이번 단계에서 작업 문서를 가져올 수 있습니다.
- 선택적으로, $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시하면 stepTimeoutInMinutes에 대한 값을 설정하여 단계 타이머를 추가할 수 있습니다.
- 작업 진행 상황이 변화될때마다 상태를 변경하려면 $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시합니다.
- $aws/things/{디바이스이름}/jobs/{작업ID}/get 토픽에 메시지를 게시하면서 작업 실행을 계속 모니터링합니다. 작업 실행이 삭제되면 ResourceNotFoundException를 반환합니다.
- 작업이 완료되면 $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시하여 작업 상태를 업데이트하고 성공 또는 실패 여부를 보고합니다.
- 이번 작업의 실행 상태는 종료 상태로 바뀌었기 때문에 다음에 실행할 수 있는 작업(있는 경우)도 바뀝니다. 그러고 나서 디바이스에게도 다음 대기 중인 작업 실행이 바뀌었다는 알림 메시지가 수신됩니다. 이때는 디바이스가 2번으로에서 설명한 대로 계속 진행되어야 합니다.
- 디바이스에서 AWS IoT로 MQTT 통신 예제
게시할 토픽 | 내용 | 요청 payload example |
$aws/things/{디바이스이름}/jobs/{작업ID}/get |
|
|
$aws/things/{디바이스이름}/jobs/{작업ID}/update |
|
|
$aws/things/{디바이스이름}/jobs/start-next |
|
|
- AWS IoT 에서 디바이스로 MQTT 통신 예제
구독할 토픽 | 내용 | 응답 payload example |
$aws/things/{디바이스이름}/jobs/notify |
|
|
$aws/things/{디바이스이름}/jobs/notify-next |
대기 중인 사물의 작업 실행 목록에 작업이 추가되거나 제거되었을 때 혹은 목록의 첫 번째 작업 실행이 바뀌었을때 대상 디바이스에게 토픽으로 메시지 게시합니다. |
|
$aws/things/{디바이스이름}/jobs/get/accepted |
$aws/things/{디바이스이름}/jobs/get 토픽에 메시지를 게시하면 종료 상태가 아닌 사물의 모든 작업 목록을 가져옵니다.
|
|
$aws/things/{디바이스이름}/jobs/get/rejected |
$aws/things/{디바이스이름}/jobs/get 토픽에 메시지를 게시하면 요청이 잘못된경우 error respone 으로 반환된다
|
|
$aws/things/{디바이스이름}/jobs/{jobId}/get/accepted |
|
|
$aws/things/{디바이스이름}/jobs/{jobId}/get/rejected |
|
|
$aws/things/thingName/jobs/start-next/accepted |
|
|
$aws/things/thingName/jobs/start-next/rejected |
|
|
4. 작업 생성
- 3번 디바이스의 작업을 할 준비가 되어 있어야한다.
- Custom Job
- AWS 코어에서는 작업파일을 추가하기 위해서는 S3에 별도로 업로드 후 그 파일을 선택해야함.
- 작업 문서 : 디바이스가 수행할 원격 작업을 정의한 JSON 문서.
- 작업을 생성하려면 반드시 작업 문서가 있어야 함.
- 작업 문서는 S3 버킷에 저장되거나, 작업 생성 요청시 인라인으로 포함될 수 있음.
- Document
- 작업 생성시 인라인으로 들어갈때 사용하는 Param
- Document Source
- 작업 생성시 S3 버킷에 저장되어있는 작업문서 위치
- Pre-signed URL : 디바이스가 작업 문서 자체에 포함된 데이터(URL)에 한시적으로 접근할 수 있도록 사용할 수 있는 기능.
- 보안 향상을 위해 사용할 수 있는 선택적 기능.
- 대상 데이터(펌웨어 등)는 반드시 S3에 저장된 후 자리 표시자 링크를 작업 문서에 추가하여 사용
- 이는 Pre-signed URL이 S3의 기능이기 때문.
- 작업문서의 예약어 aws:iot:s3-presigned-url 이 있는경우 동작.
ex)${aws:iot:s3-presigned-url:https://s3.amazonaws.com/bucket/key}
- Code Signing : 작업 문서에 반드시 Code-sign용 자리 표시자가 포함되어 있어야 한다.
- Signing을 위해선 Signing Profile이 생성되어야 한다.
- Signing Profile을 생성하려면 ACM에 signing용 Certificate가 import 되어 있어야 한다.
- 작업문서의 예약어 aws:iot:code-sign-signature 가 있는경우 동작
ex )${aws:iot:code-sign-signature:s3://<region>.<my-s3-bucket>/<my-code-file>@<code-file-version-id>}
- Signing을 위해선 Signing Profile이 생성되어야 한다.
'Tech' 카테고리의 다른 글
Python Docker Image Create (0) | 2021.01.29 |
---|---|
심볼릭 링크 (0) | 2021.01.29 |
Python Docker 이미지 생성 주의점! (0) | 2021.01.26 |
Docker 환경변수 설정 (0) | 2021.01.18 |
ssh 파일전송 scp (0) | 2021.01.18 |