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

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

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

사용자 정의 Greengrass 구성 요소는 스트림 관리자 SDK의 StreamManagerClient를 사용하여 스트림 관리자와 상호 작용합니다. 구성 요소는 스트림을 생성하거나 스트림을 업데이트하는 경우 내보내기 정의를 포함하여 스트림 속성을 나타내는 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란 무엇인가요?를 참조하세요.

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

요구 사항

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

  • AWS IoT Analytics의 대상 채널은 Greengrass 코어 디바이스와 동일한 AWS 계정 및 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이란 무엇입니까?를 참조하세요.

스트림 관리자 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란 무엇인가요?를 참조하세요.

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

참고

AWS는 OPC-UA 소스에서 데이터를 스트리밍하는 데 사용할 수 있는 사전 빌드된 솔루션을 제공하는 AWS IoT SiteWise 구성 요소도 제공합니다. 자세한 내용은 IoT SiteWise OPC UA 수집기 단원을 참조하십시오.

요구 사항

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

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

    참고

    AWS IoT SiteWise가 지원하는 AWS 리전의 목록은 AWS 일반 참조AWS IoT SiteWise 엔드포인트 및 할당량을 참조하세요.

  • 코어 디바이스에 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 정책 추가 및 제거를 참조하세요.

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

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 구성 요소는 스트림에 데이터를 추가하기 전에 단일 자산 속성에 대해 수신한 타임스탬프-품질-값(TQV) 데이터 포인트를 풀링할 수 있습니다. 한 가지 전략은 동일한 속성에 대해 둘 이상의 항목을 보내는 대신 최대 10개의 서로 다른 속성-자산 조합 또는 속성 별칭에 대한 항목을 하나의 메시지로 일괄 처리하는 것입니다. 이렇게 하면 스트림 관리자가 AWS IoT SiteWise 할당량 이내로 유지할 수 있습니다.

Amazon S3 객체

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

스트림 관리자 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. 스트림 또는 내보내기 정의가 삭제되었거나 태스크의 TTL(Time-to-Live) 기간이 만료되어 태스크가 중지되었습니다.

    참고

    작업 상태가 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 참조: read_messages | 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. }

Java SDK 참조: readMessages | 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 참조: readMessages | StatusMessage