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

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

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

사용자 정의 Greengrass 구성 요소는 StreamManagerClient 스트림 관리자 SDK에서 스트림 관리자와 상호 작용하는 데 사용됩니다. 구성 요소가 스트림을 만들거나 스트림을 업데이트하면 내보내기 정의를 포함하여 스트림 속성을 나타내는 MessageStreamDefinition 개체를 전달합니다. ExportDefinition 객체에는 스트림에 대해 정의된 내보내기 구성이 포함됩니다. 스트림 관리자는 이러한 내보내기 구성을 사용하여 스트림을 내보내는 위치와 방법을 결정합니다.

ExportDefinition 속성 유형의 객체 모델 다이어그램.

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

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

참고

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

이러한 AWS 클라우드 리소스를 관리할 책임은 사용자에게 있습니다.

AWS IoT Analytics 채널

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

Stream Manager SDK에서 Greengrass 구성요소는 를 사용하여 IoTAnalyticsConfig 이 대상 유형에 대한 내보내기 구성을 정의합니다. 자세한 내용은 대상 언어에 대한 SDK 참조를 확인하십시오.

  • Python AnalyticsConfig SDK에서의 IoT

  • 자바 AnalyticsConfig SDK에서의 IoT

  • Node.js AnalyticsConfig SDK의 IoT

요구 사항

이 내보내기 대상은 다음 요구 사항을 충족해야 합니다.

  • 입력 대상 채널은 Greengrass 코어 AWS 계정 기기와 AWS IoT Analytics AWS 리전 동일해야 합니다.

  • 핵심 장치가 서비스와 상호 작용할 AWS 수 있도록 권한 부여은 채널을 타겟팅할 수 있는 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 Greengrass 구성요소는 하나 이상의 IoTAnalyticsConfig 객체를 포함하는 내보내기 정의가 있는 스트림을 생성합니다. 이 객체는 대상 채널, 배치 크기, 배치 간격, 우선 순위와 같은 내보내기 설정을 정의합니다.

Greengrass 구성 요소는 장치로부터 데이터를 수신할 때 데이터 덩어리가 포함된 메시지를 대상 스트림에 추가합니다.

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

Amazon Kinesis Data Streams

스트림 관리자는 Amazon Kinesis Data Streams로의 자동 내보내기를 지원합니다. Kinesis Data Streams는 일반적으로 대용량 데이터를 집계하여 데이터 웨어하우스나 클러스터에 로드하는 데 사용됩니다. MapReduce 자세한 내용은 Amazon Kinesis 개발자 안내서Amazon Kinesis Data Streams이란 무엇입니까?를 참조하세요.

Stream Manager SDK에서 Greengrass 구성요소는 를 사용하여 KinesisConfig 이 대상 유형에 대한 내보내기 구성을 정의합니다. 자세한 내용은 대상 언어에 대한 SDK 참조를 확인하십시오.

요구 사항

이 내보내기 대상은 다음 요구 사항을 충족해야 합니다.

  • Kinesis Data Streams의 대상 스트림은 Greengrass AWS 계정 코어 AWS 리전 디바이스와 동일해야 합니다.

  • 핵심 장치가 서비스와 상호 작용할 AWS 수 있도록 권한 부여은 데이터 스트림을 타겟팅할 수 있는 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 Data Streams로 내보내는 스트림을 생성하기 위해 Greengrass 구성 요소는 하나 이상의 객체를 포함하는 내보내기 정의가 있는 스트림을 생성합니다. KinesisConfig 이 객체는 대상 데이터 스트림, 배치 크기, 배치 간격, 우선 순위와 같은 내보내기 설정을 정의합니다.

Greengrass 구성 요소는 장치로부터 데이터를 수신할 때 데이터 덩어리가 포함된 메시지를 대상 스트림에 추가합니다. 그런 다음 스트림 관리자는 스트림의 내보내기 구성에 정의된 배치 설정 및 우선 순위에 따라 데이터를 내보냅니다.

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

AWS IoT SiteWise 자산 속성

스트림 관리자는 AWS IoT SiteWise로 자동 내보내기를 지원합니다. AWS IoT SiteWise는 대규모로 산업 장비 데이터를 수집, 구성 및 분석할 수 있습니다. 자세한 내용은 AWS IoT SiteWise 사용 설명서의 AWS IoT SiteWise란 무엇인가요?를 참조하세요.

Stream Manager SDK에서 Greengrass 구성요소는 를 사용하여 IoTSiteWiseConfig 이 대상 유형에 대한 내보내기 구성을 정의합니다. 자세한 내용은 대상 언어에 대한 SDK 참조를 확인하십시오.

  • Python SiteWiseConfig SDK에서의 IoT

  • 자바 SiteWiseConfig SDK에서의 IoT

  • Node.js SiteWiseConfig SDK의 IoT

참고

AWS또한 OPC-UA 소스에서 데이터를 스트리밍하는 데 사용할 수 있는 사전 구축된 솔루션을 제공하는 AWS IoT SiteWise 구성 요소도 제공합니다. 자세한 설명은 IoT SiteWise OPC - UA 컬렉터 섹션을 참조하세요.

요구 사항

이 내보내기 대상은 다음 요구 사항을 충족해야 합니다.

  • 의 대상 자산 속성은 Greengrass 코어 AWS 계정 AWS 리전 디바이스와 AWS IoT SiteWise 동일해야 합니다.

    참고

    AWS IoT SiteWise지원하는 서버 목록은 일반 AWS 리전 참조의 AWS IoT SiteWise엔드포인트 및 할당량을 참조하십시오. AWS

  • 핵심 장치가 서비스와 상호 작용할 AWS 수 있도록 권한 부여은 대상 자산 속성에 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 Greengrass 구성요소는 하나 이상의 IoTSiteWiseConfig 객체를 포함하는 내보내기 정의가 있는 스트림을 생성합니다. 이 객체는 배치 크기, 배치 간격 및 우선 순위와 같은 내보내기 설정을 정의합니다.

Greengrass 구성 요소가 장치로부터 자산 속성 데이터를 수신하면 데이터가 포함된 메시지를 대상 스트림에 추가합니다. 메시지는 하나 이상의 자산 속성에 대한 속성 값을 포함하는 JSON 직렬화 PutAssetPropertyValueEntry 객체입니다. 자세한 내용은 AWS IoT SiteWise 내보내기 대상에 대한 메시지 추가를 참조하십시오.

참고

AWS IoT SiteWise로 데이터를 보낼 때 데이터는 BatchPutAssetPropertyValue 작업의 요구 사항을 충족해야 합니다. 자세한 내용을 알아보려면 AWS IoT SiteWise API 참조BatchPutAssetPropertyValue 섹션을 참조하십시오.

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

스트림 관리자 설정과 Greengrass 구성 요소 로직을 조정하여 내보내기 전략을 설계할 수 있습니다. 예:

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

  • 일괄 처리를 최적화하고, 대역폭 제약을 완화하거나, 비용을 최소화하기 위해 Greengrass 구성 요소는 스트림에 데이터를 추가하기 전에 단일 자산 자산에 대해 수신된 timestamp-quality-value (TQV) 데이터 포인트를 풀링할 수 있습니다. 한 가지 전략은 동일한 속성에 대해 둘 이상의 항목을 보내는 대신 최대 10개의 서로 다른 속성-자산 조합 또는 속성 별칭에 대한 항목을 하나의 메시지로 일괄 처리하는 것입니다. 이렇게 하면 스트림 관리자가 AWS IoT SiteWise 할당량 이내로 유지할 수 있습니다.

Amazon S3 객체

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

Stream Manager SDK에서 Greengrass 구성요소는 를 사용하여 S3ExportTaskExecutorConfig 이 대상 유형에 대한 내보내기 구성을 정의합니다. 자세한 내용은 대상 언어에 대한 SDK 참조를 확인하십시오.

요구 사항

이 내보내기 대상은 다음 요구 사항을 충족해야 합니다.

  • 대상 Amazon S3 버킷은 Greengrass 코어 AWS 계정 디바이스와 동일해야 합니다.

  • Greengrass 컨테이너 모드에서 실행되는 Lambda 함수가 입력 파일을 입력 파일 디렉터리에 쓰는 경우, 디렉터리를 쓰기 권한이 있는 컨테이너에 볼륨으로 마운트해야 합니다. 이렇게 하면 파일이 루트 파일 시스템에 기록되고 컨테이너 외부에서 실행되는 스트림 관리자 구성 요소에서 볼 수 있습니다.

  • Docker 컨테이너 구성 요소가 입력 파일 디렉터리에 입력 파일을 쓰는 경우 쓰기 권한이 있는 컨테이너의 볼륨으로 디렉터리를 마운트해야 합니다. 이렇게 하면 파일이 루트 파일 시스템에 기록되고 컨테이너 외부에서 실행되는 스트림 관리자 구성 요소에서 볼 수 있습니다.

  • 핵심 장치가 서비스와 상호 작용할 AWS 수 있도록 권한 부여은 대상 버킷에 다음 권한을 허용해야 합니다. 예:

    { "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로 내보내는 스트림을 생성하기 위해 Greengrass 구성 요소는 S3ExportTaskExecutorConfig 객체를 사용하여 내보내기 정책을 구성합니다. 정책은 멀티파트 업로드 임계값 및 우선 순위와 같은 내보내기 설정을 정의합니다. Amazon S3 내보내기의 경우 스트림 관리자는 코어 디바이스의 로컬 파일에서 읽은 데이터를 업로드합니다. 업로드를 시작하기 위해 Greengrass 구성요소는 대상 스트림에 내보내기 작업을 추가합니다. 내보내기 작업에는 입력 파일 및 대상 Amazon S3 객체에 대한 정보가 포함됩니다. 스트림 관리자는 스트림에 추가된 순서대로 작업을 실행합니다.

참고

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

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

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

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

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

입력 데이터 관리

IoT 애플리케이션이 입력 데이터의 라이프사이클을 관리하는 데 사용하는 코드를 작성할 수 있습니다. 다음 예제 워크플로는 Greengrass 구성요소를 사용하여 이 데이터를 관리하는 방법을 보여줍니다.

  1. 로컬 프로세스는 디바이스 또는 주변 기기로부터 데이터를 수신한 다음 코어 디바이스의 디렉터리에 있는 파일에 데이터를 씁니다. 스트림 관리자용 입력 파일입니다.

  2. Greengrass 구성 요소는 디렉토리를 스캔하고 새 파일이 생성되면 대상 스트림에 내보내기 작업을 추가합니다. 작업은 입력 파일의 URL, 대상 Amazon S3 버킷 및 키, 선택적 사용자 메타데이터를 지정하는 JSON 직렬화 S3ExportTaskDefinition 객체입니다.

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

  4. Greengrass 구성요소는 상태 스트림에서 메시지를 읽어 내보내기 상태를 모니터링합니다. 내보내기 작업이 완료된 후 Greengrass 구성 요소는 해당 입력 파일을 삭제할 수 있습니다. 자세한 설명은 내보내기 작업 모니터링 섹션을 참조하세요.

내보내기 작업 모니터링

IoT 애플리케이션이 Amazon S3 내보내기 상태를 모니터링하는 데 사용하는 코드를 작성할 수 있습니다. Greengrass 구성 요소는 상태 스트림을 생성한 다음 상태 스트림에 상태 업데이트를 기록하도록 내보내기 스트림을 구성해야 합니다. 단일 상태 스트림은 Amazon S3로 내보내는 여러 스트림으로부터 상태 업데이트를 받을 수 있습니다.

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

  • 상태 메시지를 저장하지 않으려는 경우 PersistenceMemory로 설정합니다.

  • 새 상태 메시지가 손실되지 않도록 StrategyOnFullOverwriteOldestData로 설정합니다.

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

  • ERROR

  • WARN

  • INFO

  • DEBUG

  • TRACE

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

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

  2. Greengrass 구성 요소는 상태 스트림에서 메시지를 순차적으로 읽은 다음 스트림 이름과 작업 ID 또는 메시지 컨텍스트의 내보내기 작업 속성을 기반으로 메시지를 필터링합니다. 예를 들어 Greengrass 구성 요소는 메시지 컨텍스트의 S3ExportTaskDefinition 개체로 표시되는 내보내기 작업의 입력 파일 URL을 기준으로 필터링할 수 있습니다.

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

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

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

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

    참고

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

  3. 내보내기 작업이 완료된 후 Greengrass 구성 요소는 해당 입력 파일을 삭제할 수 있습니다.

다음 예제는 Greengrass 구성 요소가 상태 메시지를 읽고 처리하는 방법을 보여줍니다.

Python
import time from stream_manager import ( ReadMessagesOptions, Status, StatusConfig, StatusLevel, StatusMessage, StreamManagerClient, ) from 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.StreamManagerClientFactory; 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 = StreamManagerClientFactory.standard().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 레퍼런스: 읽기메시지 | StatusMessage

Node.js
const { StreamManagerClient, ReadMessagesOptions, Status, StatusConfig, StatusLevel, StatusMessage, util, } = require(*'aws-greengrass-stream-manager-sdk'*); 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 참조: 읽기메시지 | StatusMessage