지원되는 에 대한 구성 내보내기AWS 클라우드대상 - AWS IoT Greengrass

다음에 대한 설명서를 보고 있습니다.AWS IoT Greengrass Version 1.AWS IoT Greengrass Version 2의 최신 주요 버전입니다AWS IoT Greengrass. 사용에 관한 자세한 내용은 단원을 참조하십시오.AWS IoT Greengrass V2에 대한 자세한 내용은AWS IoT Greengrass Version 2개발자 안내서.

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

지원되는 에 대한 구성 내보내기AWS 클라우드대상

사용자 정의 Lambda 함수는StreamManagerClient의AWS IoT Greengrass스트림 관리자와 상호 작용하기 위한 코어 SDK. Lambda 함수스트림을 생성또는스트림 업데이트를 전달하면MessageStreamDefinition내보내기 정의를 포함하여 스트림 속성을 나타내는 개체입니다. 이ExportDefinition객체에는 스트림에 대해 정의된 내보내기 구성이 포함되어 있습니다. Stream Manager는 이러한 내보내기 구성을 사용하여 스트림을 내보내는 위치와 방법을 결정합니다.


            ExportDefinition 속성 형식의 개체 모델 다이어그램입니다.

단일 대상 유형에 대해 여러 내보내기 구성을 포함하여 스트림에 0개 이상의 내보내기 구성을 정의할 수 있습니다. 예를 들어 스트림을 두 개의AWS IoT Analytics채널과 Kinesis 데이터 스트림 1개를 구성합니다.

내보내기 시도가 실패한 경우 스트림 관리자는 데이터를AWS 클라우드최대 5 분 간격으로. 재시도 횟수입니다.

참고

StreamManagerClient은 스트림을 HTTP 서버로 내보내는 데 사용할 수 있는 대상 대상을 제공합니다. 이 대상은 테스트 목적으로만 사용됩니다. 프로덕션 환경에서 사용하기 위해 안정적이지 않거나 지원되지 않습니다.

당신은 이러한 유지 보수에 대해 의논할 수 있습니다.AWS 클라우드있습니다.

AWS IoT Analytics 채널

스트림 관리자는 다음과 같은 자동 내보내기를 지원합니다.AWS IoT Analytics.AWS IoT Analytics를 사용하면 데이터에 대한 고급 분석을 수행하여 비즈니스 의사 결정을 내리고 기계 학습 모델을 개선할 수 있습니다. 자세한 내용은 단원을 참조하십시오.란 무엇입니까?AWS IoT Analytics?AWS IoT Analytics사용 설명서.

에서AWS IoT Greengrass핵심 SDK를 사용하는 경우 Lambda 함수는IoTAnalyticsConfig을 클릭하여 이 대상 유형에 대한 내보내기 구성을 정의합니다. 자세한 내용은 대상 언어에 대한 SDK 참조를 참조하십시오.

Requirements

이 내보내기 대상에는 다음과 같은 요구 사항이 있습니다.

  • 대상 채널AWS IoT Analytics이 (가) 같아야 합니다.AWS 계정및AWS 리전Greengrass 그룹으로 정의합니다.

  • Greengrass 그룹 역할를 허용해야 합니다.iotanalytics:BatchPutMessage권한을 대상 채널에 부여할 수 있습니다. 예:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iotanalytics:BatchPutMessage" ], "Resource": [ "arn:aws:iotanalytics:region:account-id:channel/channel_1_name", "arn:aws:iotanalytics:region:account-id:channel/channel_2_name" ] } ] }

    리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다 (예: 와일드카드).*명명 체계. 자세한 내용은 단원을 참조하십시오.IAM 정책 추가 및 제거IAM 사용 설명서.

AWS IoT Analytics로 내보내기

스트림을 생성하려면AWS IoT Analytics에서 Lambda 함수스트림 생성하나 이상의 포함 된 내보내기 정의IoTAnalyticsConfig객체입니다. 이 개체는 대상 채널, 일괄 처리 크기, 배치 간격 및 우선 순위와 같은 내보내기 설정을 정의합니다.

Lambda 함수가 장치에서 데이터를 수신하면메시지 추가대상 스트림에 대한 데이터 Blob이 포함되어 있습니다.

그런 다음 스트림 관리자는 스트림의 내보내기 구성에 정의된 배치 설정 및 우선 순위에 따라 데이터를 내보냅니다.

 

Amazon Kinesis Data Streams

스트림 관리자는 Amazon Kinesis Data Streams s로 자동 내보내기를 지원합니다. Kinesis Data Streams 은 대용량 데이터를 집계하여 데이터 웨어하우스 또는 맵 축소 클러스터로 로드하는 데 일반적으로 사용됩니다. 자세한 내용은 단원을 참조하십시오.Amazon Kinesis Data StreamsAmazon Kinesis 개발자 안내서.

에서AWS IoT Greengrass핵심 SDK를 사용하는 경우 Lambda 함수는KinesisConfig을 클릭하여 이 대상 유형에 대한 내보내기 구성을 정의합니다. 자세한 내용은 대상 언어에 대한 SDK 참조를 참조하십시오.

Requirements

이 내보내기 대상에는 다음과 같은 요구 사항이 있습니다.

  • Kinesis Data Streams 의 대상 스트림은 동일한AWS 계정및AWS 리전Greengrass 그룹으로 정의합니다.

  • Greengrass 그룹 역할를 허용해야 합니다.kinesis:PutRecords권한을 사용하여 데이터 스트림을 대상으로 지정합니다. 예:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kinesis:PutRecords" ], "Resource": [ "arn:aws:kinesis:region:account-id:stream/stream_1_name", "arn:aws:kinesis:region:account-id:stream/stream_2_name" ] } ] }

    리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다 (예: 와일드카드).*명명 체계. 자세한 내용은 단원을 참조하십시오.IAM 정책 추가 및 제거IAM 사용 설명서.

Kinesis Data Streams 내보내기

Kinesis 데이터 스트림으로 내보내는 스트림을 만들려면 Lambda 함수스트림 생성하나 이상의 포함 된 내보내기 정의KinesisConfig객체입니다. 이 개체는 대상 데이터 스트림, 일괄 처리 크기, 배치 간격 및 우선 순위와 같은 내보내기 설정을 정의합니다.

Lambda 함수가 장치에서 데이터를 수신하면메시지 추가대상 스트림에 대한 데이터 Blob이 포함되어 있습니다. 그런 다음 스트림 관리자는 스트림의 내보내기 구성에 정의된 배치 설정 및 우선 순위에 따라 데이터를 내보냅니다.

스트림 관리자는 Amazon Kinesis 에 업로드된 각 레코드에 대해 고유한 임의 UUID를 파티션 키로 생성합니다.

 

AWS IoT SiteWise자산 속성

스트림 관리자는 다음과 같은 자동 내보내기를 지원합니다.AWS IoT SiteWise.AWS IoT SiteWise를 사용하면 대규모로 산업 장비 데이터를 수집, 구성 및 분석할 수 있습니다. 자세한 내용은 단원을 참조하십시오.란 무엇입니까?AWS IoT SiteWise?AWS IoT SiteWise사용 설명서.

에서AWS IoT Greengrass핵심 SDK를 사용하는 경우 Lambda 함수는IoTSiteWiseConfig을 클릭하여 이 대상 유형에 대한 내보내기 구성을 정의합니다. 자세한 내용은 대상 언어에 대한 SDK 참조를 참조하십시오.

참고

AWS는 도 제공합니다.IoT SiteWise 커넥터는 OPC-UA 소스와 함께 사용할 수 있는 사전 구축된 솔루션입니다.

Requirements

이 내보내기 대상에는 다음과 같은 요구 사항이 있습니다.

  • 의 대상 자산 속성AWS IoT SiteWise이 (가) 같아야 합니다.AWS 계정및AWS 리전Greengrass 그룹으로 정의합니다.

    참고

    지역 목록은 해당AWS IoT SiteWise지원하는 방법에 대한 자세한 내용은AWS IoT SiteWise엔드포인트 및 할당량AWS일반 참조.

  • Greengrass 그룹 역할를 허용해야 합니다.iotsitewise:BatchPutAssetPropertyValue권한을 사용하여 자산 속성을 대상으로 지정합니다. 다음 예제 정책은iotsitewise:assetHierarchyPath조건 키를 사용하여 대상 루트 자산 및 해당 자산에 대한 액세스 권한을 부여합니다. 를 제거할 수 있습니다.Condition정책에 액세스하여 모든AWS IoT SiteWise에셋을 사용하거나 개별 에셋의 ARN을 지정할 수 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iotsitewise:BatchPutAssetPropertyValue", "Resource": "*", "Condition": { "StringLike": { "iotsitewise:assetHierarchyPath": [ "/root node asset ID", "/root node asset ID/*" ] } } } ] }

    리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다 (예: 와일드카드).*명명 체계. 자세한 내용은 단원을 참조하십시오.IAM 정책 추가 및 제거IAM 사용 설명서.

    중요한 보안 정보는 단원을 참조하십시오.BatchPutAssetPropertyValue 권한 부여AWS IoT SiteWise사용 설명서.

AWS IoT SiteWise로 내보내기

스트림을 생성하려면AWS IoT SiteWise에서 Lambda 함수스트림 생성하나 이상의 포함 된 내보내기 정의IoTSiteWiseConfig객체입니다. 이 개체는 일괄 처리 크기, 일괄 처리 간격 및 우선 순위와 같은 내보내기 설정을 정의합니다.

Lambda 함수가 디바이스에서 자산 속성 데이터를 수신하면 데이터가 포함된 메시지를 대상 스트림에 추가합니다. 메시지는 JSON 직렬화됩니다.PutAssetPropertyValueEntry하나 이상의 자산 속성에 대한 속성 값을 포함하는 개체입니다. 자세한 내용은 단원을 참조하십시오.메시지 추가용AWS IoT SiteWise내보내기 대상을 선택합니다.

참고

로 데이터를 전송하면AWS IoT SiteWise에 대한 요구 사항을 충족해야 합니다.BatchPutAssetPropertyValueaction. 자세한 내용은 단원을 참조하십시오.BatchPutAssetPropertyValueAWS IoT SiteWiseAPI 참조.

그런 다음 스트림 관리자는 스트림의 내보내기 구성에 정의된 배치 설정 및 우선 순위에 따라 데이터를 내보냅니다.

 

스트림 관리자 설정과 Lambda 함수 논리를 조정하여 내보내기 전략을 설계할 수 있습니다. 예:

  • 거의 실시간으로 내보내려면 배치 크기 및 간격 설정을 낮게 설정하고 수신 시 스트림에 데이터를 추가합니다.

  • 일괄 처리를 최적화하거나 대역폭 제약 조건을 완화하거나 비용을 최소화하기 위해 Lambda 함수는 데이터를 스트림에 추가하기 전에 단일 자산 속성에 대해 수신된 타임스탬프 품질 값 (TQV) 데이터 요소를 풀링할 수 있습니다. 한 가지 전략은 동일한 속성에 대해 둘 이상의 항목을 보내는 대신 최대 10개의 서로 다른 속성-자산 조합 또는 속성 별칭에 대한 항목을 한 메시지에서 일괄 처리하는 것입니다. 이것은 스트림 관리자가AWS IoT SiteWise할당량.

 

Amazon S3 객체

스트림 관리자는 Amazon S3 으로의 자동 내보내기를 지원합니다. Amazon S3 를 사용하여 대량의 데이터를 저장 및 검색할 수 있습니다. 자세한 내용은 단원을 참조하십시오.Amazon S3이란 무엇인가요?Amazon Simple Storage Service 개발자 가이드.

에서AWS IoT Greengrass핵심 SDK를 사용하는 경우 Lambda 함수는S3ExportTaskExecutorConfig을 클릭하여 이 대상 유형에 대한 내보내기 구성을 정의합니다. 자세한 내용은 대상 언어에 대한 SDK 참조를 참조하십시오.

Requirements

이 내보내기 대상에는 다음과 같은 요구 사항이 있습니다.

  • 대상 Amazon S3 버킷은 동일한AWS 계정Greengrass 그룹으로 정의합니다.

  • 만약기본 컨테이너화Greengrass 그룹의Greengrass 컨테이너를 사용하려면스트림_관리자_읽기 전용 디렉토리매개 변수를 사용하여 입력 파일 디렉토리를/tmp또는 루트 파일 시스템에 있지 않습니다.

  • Lambda 함수가 실행되는 경우Greengrass 컨테이너모드는 입력 파일 디렉토리에 입력 파일을 쓰는 경우 디렉토리에 대한 로컬 볼륨 리소스를 생성하고 쓰기 권한이있는 컨테이너에 디렉토리를 마운트해야합니다. 이렇게하면 파일이 루트 파일 시스템에 기록되고 컨테이너 외부에서 볼 수 있습니다. 자세한 정보는 Lambda 함수와 커넥터를 사용하여 로컬 리소스에 액세스을 참조하십시오.

  • Greengrass 그룹 역할는 대상 버킷에 대해 다음 권한을 허용해야 합니다. 예:

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:AbortMultipartUpload", "s3:ListMultipartUploadParts" ], "Resource": [ "arn:aws:s3:::bucket-1-name/*", "arn:aws:s3:::bucket-2-name/*" ] } ] }

    리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다 (예: 와일드카드).*명명 체계. 자세한 내용은 단원을 참조하십시오.IAM 정책 추가 및 제거IAM 사용 설명서.

Amazon S3 로 내보내기

Amazon S3 로 내보내는 스트림을 생성하기 위해 Lambda 함수는S3ExportTaskExecutorConfig개체를 사용 하 여 내보내기 정책을 구성 합니다. 이 정책은 멀티파트 업로드 임계값 및 우선 순위와 같은 내보내기 설정을 정의합니다. Amazon S3 내보내기의 경우 스트림 관리자는 코어 디바이스의 로컬 파일에서 읽은 데이터를 업로드합니다. 업로드를 시작하기 위해 Lambda 함수는 내보내기 작업을 대상 스트림에 추가합니다. 내보내기 작업에는 입력 파일 및 대상 Amazon S3 객체에 대한 정보가 포함되어 있습니다. 스트림 관리자는 스트림에 추가되는 순서대로 작업을 실행합니다.

참고

대상 버킷은 이미 존재해야 합니다.AWS 계정. 지정된 키의 객체가 존재하지 않는 경우, 스트림 관리자는 당신을 위해 객체를 생성합니다.

이 상위 수준의 워크플로우는 다음 다이어그램에 나와 있습니다.


                    Amazon S3 내보내기를 위한 스트림 관리자 워크플로의 다이어그램입니다.

스트림 관리자는 멀티파트 업로드 임계값 속성최소 부품 크기설정 및 입력 파일의 크기를 사용하여 데이터를 업로드하는 방법을 결정할 수 있습니다. 멀티파트 업로드 임계값은 최소 파트 크기보다 크거나 이와 동일해야 합니다. 데이터를 병렬로 업로드하려면 여러 스트림을 생성할 수 있습니다.

대상 Amazon S3 객체를 지정하는 키에는 유효한자바 DateTimeFormatter문자열!{timestamp:value}자리 표시자입니다. 이러한 타임스탬프 자리 표시자를 사용하여 입력 파일 데이터가 업로드된 시간을 기준으로 Amazon S3 에서 데이터를 분할할 수 있습니다. 예를 들어 다음 키 이름은 다음과 같은 값으로 확인됩니다.my-key/2020/12/31/data.txt.

my-key/!{timestamp:YYYY}/!{timestamp:MM}/!{timestamp:dd}/data.txt
참고

스트림의 내보내기 상태를 모니터링하려면 먼저 상태 스트림을 만든 다음 내보내기 스트림을 사용하도록 구성합니다. 자세한 정보는 내보내기 작업 모니터링을 참조하십시오.

입력 데이터 관리

IoT 응용 프로그램이 입력 데이터의 수명 주기를 관리하는 데 사용하는 코드를 작성할 수 있습니다. 다음 예제 워크플로에서는 Lambda 함수를 사용하여 이 데이터를 관리하는 방법을 보여 줍니다.

  1. 로컬 프로세스는 장치 또는 주변 장치에서 데이터를 수신한 다음 코어 장치의 디렉토리에 있는 파일에 데이터를 씁니다. 다음은 스트림 관리자에 대한 입력 파일입니다.

    참고

    입력 파일 디렉터리에 대한 액세스를 구성해야 하는지 확인하려면스트림_관리자_읽기 전용 디렉토리파라미터.

    스트림 관리자가 실행하는 프로세스는 모든 파일 시스템 권한을 상속합니다.기본 액세스 ID는 그룹을 지정합니다. 스트림 관리자는 입력 파일에 액세스할 권한이 있어야 합니다. 이chmod(1)명령을 사용하여 필요한 경우 파일의 권한을 변경합니다.

  2. Lambda 함수는 디렉토리를 검색하고내보내기 작업을 추가합니다.새 파일이 생성 될 때 대상 스트림에. 작업은 JSON 직렬화 된S3ExportTaskDefinition객체를 사용하여 입력 파일의 URL, 대상 Amazon S3 버킷 및 키, 선택적 사용자 메타데이터를 지정할 수 있습니다.

  3. Stream Manager는 입력 파일을 읽고 추가된 작업 순서대로 데이터를 Amazon S3 로 내보냅니다. 대상 버킷은 이미 존재해야 합니다.AWS 계정. 지정된 키의 객체가 존재하지 않는 경우, 스트림 관리자는 당신을 위해 객체를 생성합니다.

  4. Lambda 함수메시지를 읽습니다.를 선택하여 내보내기 상태를 모니터링할 수 있습니다. 내보내기 작업이 완료되면 Lambda 함수는 해당 입력 파일을 삭제할 수 있습니다. 자세한 정보는 내보내기 작업 모니터링을 참조하십시오.

내보내기 작업 모니터링

IoT 애플리케이션이 Amazon S3 내보내기 상태를 모니터링하는 데 사용하는 코드를 작성할 수 있습니다. Lambda 함수는 상태 스트림을 만든 다음 상태 스트림에 상태 업데이트를 기록하도록 내보내기 스트림을 구성해야 합니다. 단일 상태 스트림은 Amazon S3 로 내보내는 여러 스트림에서 상태 업데이트를 수신할 수 있습니다.

첫 번째,스트림 생성를 사용하여 상태 스트림으로 사용할 수 있습니다. 스트림의 크기 및 보존 정책을 구성하여 상태 메시지의 수명을 제어할 수 있습니다. 예:

  • SetPersistencetoMemory상태 메시지를 저장하지 않으려는 경우.

  • SetStrategyOnFulltoOverwriteOldestData새 상태 메시지가 손실되지 않도록 합니다.

그런 다음 상태 스트림을 사용하도록 내보내기 스트림을 만들거나 업데이트합니다. 특히, 스트림의 상태 구성 속성을 설정S3ExportTaskExecutorConfig내보내기 구성을 선택합니다. 이것은 스트림 관리자에게 내보내기 작업에 대한 상태 메시지를 상태 스트림에 기록하도록 지시합니다. 에서StatusConfig개체에서 상태 스트림의 이름과 세부 정보 수준을 지정합니다. 다음 지원되는 값의 범위는 가장 자세한 정보 (ERROR) 을 가장 자세한 정보 (TRACE). 기본값은 INFO입니다.

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

 

다음 예제 워크플로는 Lambda 함수가 상태 스트림을 사용하여 내보내기 상태를 모니터링하는 방법을 보여 줍니다.

  1. 이전 워크플로에서 설명한 대로 Lambda 함수내보내기 작업을 추가합니다.를 내보내기 작업에 대한 상태 메시지를 상태 스트림에 기록하도록 구성된 스트림으로 변환합니다. 추가 작업은 작업 ID를 나타내는 시퀀스 번호를 반환합니다.

  2. Lambda 함수메시지를 읽습니다.를 차례로 선택한 다음 스트림 이름 및 작업 ID 또는 메시지 컨텍스트의 내보내기 작업 속성을 기반으로 메시지를 필터링합니다. 예를 들어 Lambda 함수는 내보내기 작업의 입력 파일 URL로 필터링할 수 있습니다. 이 URL은S3ExportTaskDefinition개체를 메시지 컨텍스트에서.

    다음 상태 코드는 내보내기 작업이 완료된 상태에 도달했음을 나타냅니다.

    • Success. 업로드가 성공적으로 완료되었습니다.

    • Failure. 스트림 관리자에서 오류가 발생했습니다 (예: 지정된 버킷이 존재하지 않음). 문제를 해결한 후 내보내기 작업을 스트림에 다시 추가할 수 있습니다.

    • Canceled. 스트림 또는 내보내기 정의가 삭제되었거나 작업의 TTL (지속 시간) 기간이 만료되어 작업이 중단되었습니다.

    참고

    작업의 상태도InProgress또는Warning. 스트림 관리자는 이벤트가 작업 실행에 영향을 주지 않는 오류를 반환할 때 경고를 발행합니다. 예를 들어 중단된 부분 업로드를 정리하지 못하면 경고가 반환됩니다.

  3. 내보내기 작업이 완료되면 Lambda 함수는 해당 입력 파일을 삭제할 수 있습니다.

다음 예는 Lambda 함수가 상태 메시지를 읽고 처리하는 방식을 보여줍니다.

Python
import time from greengrasssdk.stream_manager import ( ReadMessagesOptions, Status, StatusConfig, StatusLevel, StatusMessage, StreamManagerClient, ) from greengrasssdk.stream_manager.util import Util client = StreamManagerClient() try: # Read the statuses from the export status stream is_file_uploaded_to_s3 = False while not is_file_uploaded_to_s3: try: messages_list = client.read_messages( "StatusStreamName", ReadMessagesOptions(min_message_count=1, read_timeout_millis=1000) ) for message in messages_list: # Deserialize the status message first. status_message = Util.deserialize_json_bytes_to_obj(message.payload, StatusMessage) # Check the status of the status message. If the status is "Success", # the file was successfully uploaded to S3. # If the status was either "Failure" or "Cancelled", the server was unable to upload the file to S3. # We will print the message for why the upload to S3 failed from the status message. # If the status was "InProgress", the status indicates that the server has started uploading # the S3 task. if status_message.status == Status.Success: logger.info("Successfully uploaded file at path " + file_url + " to S3.") is_file_uploaded_to_s3 = True elif status_message.status == Status.Failure or status_message.status == Status.Canceled: logger.info( "Unable to upload file at path " + file_url + " to S3. Message: " + status_message.message ) is_file_uploaded_to_s3 = True time.sleep(5) except StreamManagerException: logger.exception("Exception while running") except StreamManagerException: pass # Properly handle errors. except ConnectionError or asyncio.TimeoutError: pass # Properly handle errors.

Python용 SDK읽기_메시지|StatusMessage

Java
import com.amazonaws.greengrass.streammanager.client.StreamManagerClient; import com.amazonaws.greengrass.streammanager.client.utils.ValidateAndSerialize; import com.amazonaws.greengrass.streammanager.model.ReadMessagesOptions; import com.amazonaws.greengrass.streammanager.model.Status; import com.amazonaws.greengrass.streammanager.model.StatusConfig; import com.amazonaws.greengrass.streammanager.model.StatusLevel; import com.amazonaws.greengrass.streammanager.model.StatusMessage; try (final StreamManagerClient client = GreengrassClientBuilder.streamManagerClient().build()) { try { boolean isS3UploadComplete = false; while (!isS3UploadComplete) { try { // Read the statuses from the export status stream List<Message> messages = client.readMessages("StatusStreamName", new ReadMessagesOptions().withMinMessageCount(1L).withReadTimeoutMillis(1000L)); for (Message message : messages) { // Deserialize the status message first. StatusMessage statusMessage = ValidateAndSerialize.deserializeJsonBytesToObj(message.getPayload(), StatusMessage.class); // Check the status of the status message. If the status is "Success", the file was successfully uploaded to S3. // If the status was either "Failure" or "Canceled", the server was unable to upload the file to S3. // We will print the message for why the upload to S3 failed from the status message. // If the status was "InProgress", the status indicates that the server has started uploading the S3 task. if (Status.Success.equals(statusMessage.getStatus())) { System.out.println("Successfully uploaded file at path " + FILE_URL + " to S3."); isS3UploadComplete = true; } else if (Status.Failure.equals(statusMessage.getStatus()) || Status.Canceled.equals(statusMessage.getStatus())) { System.out.println(String.format("Unable to upload file at path %s to S3. Message %s", statusMessage.getStatusContext().getS3ExportTaskDefinition().getInputUrl(), statusMessage.getMessage())); sS3UploadComplete = true; } } } catch (StreamManagerException ignored) { } finally { // Sleep for sometime for the S3 upload task to complete before trying to read the status message. Thread.sleep(5000); } } catch (e) { // Properly handle errors. } } catch (StreamManagerException e) { // Properly handle exception. }

SDK 참조:readMessages|StatusMessage

Node.js
const { StreamManagerClient, ReadMessagesOptions, Status, StatusConfig, StatusLevel, StatusMessage, util, } = require('aws-greengrass-core-sdk').StreamManager; const client = new StreamManagerClient(); client.onConnected(async () => { try { let isS3UploadComplete = false; while (!isS3UploadComplete) { try { // Read the statuses from the export status stream const messages = await c.readMessages("StatusStreamName", new ReadMessagesOptions() .withMinMessageCount(1) .withReadTimeoutMillis(1000)); messages.forEach((message) => { // Deserialize the status message first. const statusMessage = util.deserializeJsonBytesToObj(message.payload, StatusMessage); // Check the status of the status message. If the status is 'Success', the file was successfully uploaded to S3. // If the status was either 'Failure' or 'Cancelled', the server was unable to upload the file to S3. // We will print the message for why the upload to S3 failed from the status message. // If the status was "InProgress", the status indicates that the server has started uploading the S3 task. if (statusMessage.status === Status.Success) { console.log(`Successfully uploaded file at path ${FILE_URL} to S3.`); isS3UploadComplete = true; } else if (statusMessage.status === Status.Failure || statusMessage.status === Status.Canceled) { console.log(`Unable to upload file at path ${FILE_URL} to S3. Message: ${statusMessage.message}`); isS3UploadComplete = true; } }); // Sleep for sometime for the S3 upload task to complete before trying to read the status message. await new Promise((r) => setTimeout(r, 5000)); } catch (e) { // Ignored } } catch (e) { // Properly handle errors. } }); client.onError((err) => { // Properly handle connection errors. // This is called only when the connection to the StreamManager server fails. });

Node.js SDK 참조:readMessages|StatusMessage