Eyeeshot BloG

AWS IoT Core Job 본문

Tech

AWS IoT Core Job

eyeeshot 2021. 1. 27. 16:54

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
  • 디바이스 워크 플로우는 크게 두가지로 나눠질수 있다.
  1.  Get the next Job
    1. 다비아스가 처음 온라인에 연결되면 해당 디바이스의 notify-next 토픽을 구독해야합니다.
    2. $aws/things/{디바이스이름}/jobs/{작업ID}/get 토픽에 메시지를 게시합니다.
    3. $next에 저장된 모든 상태를 포함하여 다음 작업, 작업 문서 및 기타 세부 정보를 가져옵니다.statusDetails 작업 문서에 코드 파일 서명이 있는 경우 작업 요청을 진행하기 전에 서명을 확인해야 합니다.
    4. $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시합니다. 또는 이번 단계와 이전 단계를 단일 호출로 결합하고 싶다면 디바이스에서 $aws/things/{디바이스이름}/jobs/start-next 토픽에 메시지를 게시하셔도 좋습니다.
    5. (선택 사항) $aws/things/{디바이스이름}/jobs/{작업ID}/update 또는 $aws/things/{디바이스이름}/jobs/start-next 를 호출하면 stepTimeoutInMinutes에 대한 값을 설정하여 단계 타이머를 추가할 수 있습니다.
    6. 작업 진행 상황이 변화될때마다 상태를 변경하려면 $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시합니다.
    7. $aws/things/{디바이스이름}/jobs/{작업ID}/get 토픽에 메시지를 게시하면서 작업 실행을 계속 모니터링합니다. 작업 실행이 삭제되면 ResourceNotFoundException를 반환합니다.
    8. 작업이 완료되면 $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시하여 작업 상태를 업데이트하고 성공 또는 실패 여부를 보고합니다.
    9. 이번 작업의 실행 상태는 종료 상태로 바뀌었기 때문에 다음에 실행할 수 있는 작업(있는 경우)도 바뀝니다. 그러고 나서 디바이스에게도 다음 대기 중인 작업 실행이 바뀌었다는 알림 메시지가 수신됩니다. 이때는 디바이스가 2번으로에서 설명한 대로 계속 진행되어야 합니다.
  2. Pick from available jobs
    1. 디바이스가 처음 온라인에 연결되면 해당 사물의 notify 주제를 구독해야 합니다.
    2. $aws/things/{디바이스이름}/jobs/get 토픽에 메시지를 게시하여 대기 중인 작업 실행 목록을 가져옵니다.
    3. 목록에 작업 실행이 다수인 경우에는 하나를 선택합니다.
    4. $aws/things/{디바이스이름}/jobs/{작업ID}/get 토픽에 메시지를 게시합니다. statusDetails 작업 문서에 코드 파일 서명이 있는 경우 작업 요청을 진행하기 전에 서명을 확인해야 합니다.
    5. $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시합니다. 이 명령에서 includeJobDocument 필드가 true로 설정되어 있으면 디바이스가 이전 단계를 건너뛰고 이번 단계에서 작업 문서를 가져올 수 있습니다.
    6. 선택적으로, $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시하면 stepTimeoutInMinutes에 대한 값을 설정하여 단계 타이머를 추가할 수 있습니다.
    7. 작업 진행 상황이 변화될때마다 상태를 변경하려면 $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시합니다.
    8. $aws/things/{디바이스이름}/jobs/{작업ID}/get 토픽에 메시지를 게시하면서 작업 실행을 계속 모니터링합니다. 작업 실행이 삭제되면 ResourceNotFoundException를 반환합니다.
    9. 작업이 완료되면 $aws/things/{디바이스이름}/jobs/{작업ID}/update 토픽에 메시지를 게시하여 작업 상태를 업데이트하고 성공 또는 실패 여부를 보고합니다.
    10. 이번 작업의 실행 상태는 종료 상태로 바뀌었기 때문에 다음에 실행할 수 있는 작업(있는 경우)도 바뀝니다. 그러고 나서 디바이스에게도 다음 대기 중인 작업 실행이 바뀌었다는 알림 메시지가 수신됩니다. 이때는 디바이스가 2번으로에서 설명한 대로 계속 진행되어야 합니다.
  • 디바이스에서 AWS IoT로 MQTT 통신 예제
게시할 토픽 내용 요청 payload example

$aws/things/{디바이스이름}/jobs/{작업ID}/get

  • clientToken : 선택 사항입니다. 요청과 응답의 연관성을 나타낼때 사용하는 클라이언트 토큰입니다. 여기에 임의 값을 입력하면 응답에 반영됩니다.
{ "clientToken": "string" }

$aws/things/{디바이스이름}/jobs/{작업ID}/update

  • status : 새로운 작업 실행 상태(IN_PROGRESS, FAILED, SUCCEEDED 또는 REJECTED) 이 명령은 업데이트 할 때 마다 지정해야 합니다.
  • statusDetails : 작업 실행 상태를 설명하는 이름-값 페어의 모음입니다. 지정하지 않으면 statusDetails가 바뀌지않습니다.
  • expectedVersio : 예상되는 현재 작업 실행 버전입니다. 작업 실행은 업데이트할 때마다 버전이 일정하게 증가합니다. AWS IoT 작업 서비스에 저장된 작업 실행 버전이 일치하지 않으면 VersionMismatch 오류와 함께 업데이트가 거부되고, 현재 작업 실행 상태에 대한 데이터가 포함된 ErrorResponse 반환됩니다.
  • executionNumber : 선택 사항입니다. 디바이스에서 작업 실행을 식별하기 위한 숫자입니다. 지정하지 않으면 최신 작업 실행이 사용됩니다.
  • includeJobExecutionState : 선택 사항입니다. 이 명령을 추가하여 true로 설정하면 응답에 JobExecutionState 필드가 포함됩니다. 기본값은 false입니다.
  • includeJobDocument : 선택 사항입니다. 이 명령을 추가하여 true로 설정하면 응답에 JobDocument가 포함됩니다. 기본값은 false입니다.
  • stepTimeoutInMinutes : 이 디바이스가 이 작업 실행을 마쳐야 하는 시간을 지정합니다. 이 타이머가 완료하기 전에 또는 타이머가 재설정되면(UpdateJobExecution를 다시 호출하고, 상태를 IN_PROGRESS로 설정하고, 이 필드에 새 제한 시간 값을 지정하여) 작업 실행 상태는 TIMED_OUT로 설정됩니다. 이 제한 시간을 설정 또는 재설정해도 작업이 생성되었을 때 지정했을 수도 있는 작업 실행 제한 시간에는 영향을 주지 않습니다(CreateJob와 함께 timeoutConfig 사용).
  • clientToken : 요청과 응답의 연관성을 나타낼 때 사용하는 클라이언트 토큰입니다. 여기에 임의 값을 입력하면 응답에 반영됩니다.
{
"status": "job-execution-state",
"statusDetails": { 
    "string": "string"
    ...
},
"expectedVersion": "number",
"executionNumber": long,
"includeJobExecutionState": boolean,
"includeJobDocument": boolean,
"stepTimeoutInMinutes": long,
"clientToken": "string"
}

 

 $aws/things/{디바이스이름}/jobs/start-next 

  • statusDetails : 작업 실행 상태를 설명하는 이름-값 페어의 모음입니다. 지정하지 않으면 statusDetails가 바뀌지 않습니다.
  • stepTimeOutInMinutes : 이 디바이스가 이 작업 실행을 마쳐야 하는 시간을 지정합니다. 이 타이머가 완료하기 전에 또는 타이머가 재설정되면(UpdateJobExecution를 호출하고, 상태를 IN_PROGRESS에 설정하고, 새로운 제한 시간 값을 필드 stepTimeoutInMinutes에 지정하여) 작업 실행 상태는 TIMED_OUT로 설정됩니다. 이 제한 시간을 설정해도 작업이 생성될 때 지정했을 수도 있는 작업 실행 제한 시간에는 영향을 주지 않습니다(CreateJob 필드를 사용하는 timeoutConfig).
  • clientToken : 
  • 메시지 브로커는 특정 구독 없이 $aws/things/{디바이스이름}/jobs/start-next/accepted 및 $aws/things/{디바이스이름}/jobs/start-next/rejected를 게시합니다.
{ 
"statusDetails": {
    "string": "job-execution-state"
    ...
},
"stepTimeoutInMinutes": long,
"clientToken": "string"
}
  • AWS IoT 에서 디바이스로 MQTT 통신 예제
구독할 토픽 내용 응답 payload example

$aws/things/{디바이스이름}/jobs/notify


대기 중인 사물의 작업 실행 목록에 작업이 추가되거나 제거되었을 때 혹은 목록의 첫 번째 작업 실행이 바뀌었을때 대상 디바이스에게 토픽으로 메시지 게시합니다.

 

{
  "timestamp" : 10011,
  "jobs" : {
    "IN_PROGRESS" : [ {
      "jobId" : "other-job",
      "queuedAt" : 10003,
      "lastUpdatedAt" : 10009,
      "executionNumber" : 1,
      "versionNumber" : 1
    } ],
    "QUEUED" : [ {
      "jobId" : "this-job",
      "queuedAt" : 10011,
      "lastUpdatedAt" : 10011,
      "executionNumber" : 1,
      "versionNumber" : 0
    } ]
  }
}

$aws/things/{디바이스이름}/jobs/notify-next

대기 중인 사물의 작업 실행 목록에 작업이 추가되거나 제거되었을 때 혹은 목록의 첫 번째 작업 실행이 바뀌었을때 대상 디바이스에게 토픽으로 메시지 게시합니다.
{
  "timestamp" : 10011,
  "execution" : {
    "jobId" : "other-job",
    "status" : "IN_PROGRESS",
    "queuedAt" : 10009,
    "lastUpdatedAt" : 10009,
    "versionNumber" : 1,
    "executionNumber" : 1,
    "jobDocument" : {"c":"d"}
  }
}

$aws/things/{디바이스이름}/jobs/get/accepted

 $aws/things/{디바이스이름}/jobs/get 토픽에 메시지를 게시하면 종료 상태가 아닌 사물의 모든 작업 목록을 가져옵니다.
  • inProgressJobs : IN_PROGRESS 상태인 jobs 목록입니다.
  • queuedJobs : QUEUED 상태인 Jobs 목록입니다.
  • clientToken : 요청과 응답의 연관성을 나타낼 때 사용하는 클라이언트 토큰입니다.
  • timestamp : 메시지가 전송된 이후 경과 시간(초) 입니다.
{
"inProgressJobs" : [ JobExecutionSummary ... ], 
"queuedJobs" : [ JobExecutionSummary ... ],
"timestamp" : 1489096425069,
"clientToken" : "client-001"
}

$aws/things/{디바이스이름}/jobs/get/rejected

 $aws/things/{디바이스이름}/jobs/get 토픽에 메시지를 게시하면 요청이 잘못된경우 error respone 으로 반환된다

  • code :
    • InvalidTopic : 요청이 API로 매핑되어 있지 않은 AWS IoT 작업 서비스 네임스페이스의 주제로 전송되었습니다.
    • InvalidJson : 요청 내용이 유효한 UTF-8-인코딩 JSON으로 해석되지 않습니다.
    • InvalidRequest : 요청 내용이 잘못되었습니다. 요청에 잘못된 상태 세부 정보가 포함되어 있으면 이 코드가 반환됩니다. 메시지에는 오류에 대한 세부 정보가 포함됩니다.
    • InvalidStateTransition : 작업 실행의 현재 상태로 인해 작업 실행을 잘못된 상태로 변경하려는 업데이트 시도입니다. (ex: SUCCEEDED 에서 IN_PROGRESS로 변경하려는 시도) 이때는 오류 메시지 본문에 executionState 필드도 포함됩니다.
    • ResourceNotFound : 요청 주제에서 지정한 JobExecution이 존재하지 않습니다.
    • VersionMismatch : 요청에서 지정한 예상 버전이 AWS IoT 작업 서비스의 작업 실행 버전과 일치하지 않습니다. 이때는 오류 메시지 본문에 executionState 필드도 포함됩니다.
    • InternalError : 요청을 처리하는 도중 내부 오류가 발생했습니다.
    • RequestThrottled : 요청에 병목 현상이 발생했습니다.
    • TerminalStateReached : 종료 상태의 작업에서 작업을 설명하는 명령을 실행했을 때 발생합니다.
  • message : 오류메시지 문자열입니다.
  • clientToken : 요청과 응답의 연관성을 나타내는 임의 문자열입니다.
  • timestamp : epoch 이후 경과 시간(초)입니다
  • executionState : 이 필드는 code 필드에 InvalidStateTransition 또는 VersionMismatch 값이 있을 때만 포함됩니다. 따라서 이러한 경우에는 현재 작업 실행 상태에 대한 데이터를 가져오기 위해 별도의 DescribeJobExecution 요청을 수행할 필요가 없습니다.
{
    "code": "ErrorCode",
    "message": "string",
    "clientToken": "string",
    "timestamp": timestamp,
    "executionState": JobExecutionState
}

 

$aws/things/{디바이스이름}/jobs/{jobId}/get/accepted


  • $aws/things/thingName/jobs/jobId/get 토픽에 메시지를 게시하면 반환되는 내용
  • execution
    • jobId : 작업 생성 시 할당한 고유 식별자입니다.
    • thingName : 작업을 실행 중인 사물의 이름입니다.
    • jobDocument : 작업 문서의 내용입니다.
    • status : 작업 실행의 상태입니다. 다음 중 하나일 수 있습니다. QUEUED, IN_PROGRESS, FAILED, SUCCEEDED, CANCELED, TIMED_OUT, REJECTED 또는 REMOVED.
    • statusDetails : 작업 실행 상태를 설명하는 이름-값 페어의 모음입니다.
    • queuedAt : 작업 실행이 대기 상태로 전환된 epoch 이후 경과 시간(초)입니다.
    • startedAt : 작업 실행이 시작된 epoch 이후 경과 시간(초)입니다.
    • lastUpdatedAt : 작업 실행이 마지막으로 업데이트된 epoch 이후 경과 시간(초)입니다.
    • versionNumber : 작업 실행 버전입니다. 작업 실행 버전은 디바이스에서 업데이트될 때마다 일정하게 증가합니다.
    • executionNumber : 디바이스에서 작업 실행을 식별하기 위한 숫자입니다. 나중에는 작업 실행 정보를 반환하거나 업데이트하는 명령에 사용할 수 있습니다.
{
"execution" : {
    "jobId" : "string",
    "thingName" : "string",
    "jobDocument" : "string",
    "status": "QUEUED|IN_PROGRESS|FAILED|SUCCEEDED|CANCELED|TIMED_OUT|REJECTED|REMOVED",
    "statusDetails": {
        "string": "string"
    },
    "queuedAt" : "timestamp",
    "startedAt" : "timestamp",
    "lastUpdatedAt" : "timestamp",
    "versionNumber" : "number",
    "executionNumber": long
},
"timestamp": "timestamp",
"clientToken": "string"
}

$aws/things/{디바이스이름}/jobs/{jobId}/get/rejected

  • $aws/things/{디바이스이름}/jobs/{작업ID}/update 의 요청이 잘못된경우 error respone 으로 반환된다
  • code :
    • InvalidTopic : 요청이 API로 매핑되어 있지 않은 AWS IoT 작업 서비스 네임스페이스의 주제로 전송되었습니다.
    • InvalidJson : 요청 내용이 유효한 UTF-8-인코딩 JSON으로 해석되지 않습니다.
    • InvalidRequest : 요청 내용이 잘못되었습니다. 요청에 잘못된 상태 세부 정보가 포함되어 있으면 이 코드가 반환됩니다. 메시지에는 오류에 대한 세부 정보가 포함됩니다.
    • InvalidStateTransition : 작업 실행의 현재 상태로 인해 작업 실행을 잘못된 상태로 변경하려는 업데이트 시도입니다. (ex: SUCCEEDED 에서 IN_PROGRESS로 변경하려는 시도) 이때는 오류 메시지 본문에 executionState 필드도 포함됩니다.
    • ResourceNotFound : 요청 주제에서 지정한 JobExecution이 존재하지 않습니다.
    • VersionMismatch : 요청에서 지정한 예상 버전이 AWS IoT 작업 서비스의 작업 실행 버전과 일치하지 않습니다. 이때는 오류 메시지 본문에 executionState 필드도 포함됩니다.
    • InternalError : 요청을 처리하는 도중 내부 오류가 발생했습니다.
    • RequestThrottled : 요청에 병목 현상이 발생했습니다.
    • TerminalStateReached : 종료 상태의 작업에서 작업을 설명하는 명령을 실행했을 때 발생합니다.
  • message : 오류메시지 문자열입니다.
  • clientToken : 요청과 응답의 연관성을 나타내는 임의 문자열입니다.
  • timestamp : epoch 이후 경과 시간(초)입니다
  • executionState : 이 필드는 code 필드에 InvalidStateTransition 또는 VersionMismatch 값이 있을 때만 포함됩니다. 따라서 이러한 경우에는 현재 작업 실행 상태에 대한 데이터를 가져오기 위해 별도의 DescribeJobExecution 요청을 수행할 필요가 없습니다.
{
    "code": "ErrorCode",
    "message": "string",
    "clientToken": "string",
    "timestamp": timestamp,
    "executionState": JobExecutionState
}

 

 $aws/things/thingName/jobs/start-next/accepted

  • execution
    • jobId : 작업 생성 시 할당한 고유 식별자입니다.
    • thingName : 작업을 실행 중인 사물의 이름입니다.
    • jobDocument : 작업 문서의 내용입니다.
    • status : 작업 실행의 상태입니다. 다음 중 하나일 수 있습니다. QUEUED, IN_PROGRESS, FAILED, SUCCEEDED, CANCELED, TIMED_OUT, REJECTED 또는 REMOVED.
    • statusDetails : 작업 실행 상태를 설명하는 이름-값 페어의 모음입니다.
    • queuedAt : 작업 실행이 대기 상태로 전환된 epoch 이후 경과 시간(초)입니다.
    • startedAt : 작업 실행이 시작된 epoch 이후 경과 시간(초)입니다.
    • lastUpdatedAt : 작업 실행이 마지막으로 업데이트된 epoch 이후 경과 시간(초)입니다.
    • versionNumber : 작업 실행 버전입니다. 작업 실행 버전은 디바이스에서 업데이트될 때마다 일정하게 증가합니다.
    • executionNumber : 디바이스에서 작업 실행을 식별하기 위한 숫자입니다. 나중에는 작업 실행 정보를 반환하거나 업데이트하는 명령에 사용할 수 있습니다.

 

{
"execution" : {
    "jobId" : "022",
    "thingName" : "MyThing",
    "jobDocument" : "< contents of job document >",
    "status" : "IN_PROGRESS",
    "queuedAt" : 1489096123309,
    "lastUpdatedAt" : 1489096123309,
    "versionNumber" : 1,
    "executionNumber" : 1234567890
},
"clientToken" : "client-1",
"timestamp" : 1489088524284,
}

$aws/things/thingName/jobs/start-next/rejected

  • $aws/things/{디바이스이름}/jobs/start-next 의 요청이 잘못된경우 error respone 으로 반환된다
  • code :
    • InvalidTopic : 요청이 API로 매핑되어 있지 않은 AWS IoT 작업 서비스 네임스페이스의 주제로 전송되었습니다.
    • InvalidJson : 요청 내용이 유효한 UTF-8-인코딩 JSON으로 해석되지 않습니다.
    • InvalidRequest : 요청 내용이 잘못되었습니다. 요청에 잘못된 상태 세부 정보가 포함되어 있으면 이 코드가 반환됩니다. 메시지에는 오류에 대한 세부 정보가 포함됩니다.
    • InvalidStateTransition : 작업 실행의 현재 상태로 인해 작업 실행을 잘못된 상태로 변경하려는 업데이트 시도입니다. (ex: SUCCEEDED 에서 IN_PROGRESS로 변경하려는 시도) 이때는 오류 메시지 본문에 executionState 필드도 포함됩니다.
    • ResourceNotFound : 요청 주제에서 지정한 JobExecution이 존재하지 않습니다.
    • VersionMismatch : 요청에서 지정한 예상 버전이 AWS IoT 작업 서비스의 작업 실행 버전과 일치하지 않습니다. 이때는 오류 메시지 본문에 executionState 필드도 포함됩니다.
    • InternalError : 요청을 처리하는 도중 내부 오류가 발생했습니다.
    • RequestThrottled : 요청에 병목 현상이 발생했습니다.
    • TerminalStateReached : 종료 상태의 작업에서 작업을 설명하는 명령을 실행했을 때 발생합니다.
  • message : 오류메시지 문자열입니다.
  • clientToken : 요청과 응답의 연관성을 나타내는 임의 문자열입니다.
  • timestamp : epoch 이후 경과 시간(초)입니다
  • executionState : 이 필드는 code 필드에 InvalidStateTransition 또는 VersionMismatch 값이 있을 때만 포함됩니다. 따라서 이러한 경우에는 현재 작업 실행 상태에 대한 데이터를 가져오기 위해 별도의 DescribeJobExecution 요청을 수행할 필요가 없습니다.
{
    "code": "ErrorCode",
    "message": "string",
    "clientToken": "string",
    "timestamp": timestamp,
    "executionState": JobExecutionState
}

 

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

 

 

'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