Kinesis Firehose - 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개발자 안내서.

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

Kinesis Firehose

Kinesis Firehose커넥터은 Amazon Kinesis Data Firehose 전송 스트림을 통해 Amazon S3, Amazon Redshift 또는 Amazon Elasticsearch Service 같은 대상에 데이터를 게시합니다.

이 커넥터는 KinenKinesis 전송 스트림을 위한 데이터 생산자입니다. MQTT 주제에 대한 입력 데이터를 수신해 지정된 전송 스트립으로 보냅니다. 그런 다음 전송 스트립에서는 해당 데이터 레코드를 구성된 대상(예: S3 버킷)으로 보냅니다.

이 커넥터에는 다음과 같은 버전이 있습니다.

버전

ARN

5

arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/5

4

arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/4

3

arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/3

2

arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/2

1

arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/1

버전 변경 사항에 대한 자세한 내용은 Changelog를 참조하십시오.

Requirements

이 커넥터에는 다음과 같은 요구 사항이 있습니다.

Version 4 - 5
  • AWS IoT Greengrass 코어 소프트웨어 v1.9.3 이상.

  • Python코어 디바이스에 설치되고 PATH 환경 변수에 추가된 Python 버전 3.7입니다.

    참고

    파이썬 3.8을 사용하려면 설치된 파이썬 3.8 바이너리에 기본 파이썬 3.7 설치 폴더에서 심볼릭 링크를 만들려면 다음 명령을 실행합니다.

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    이렇게 하면 AWS IoT Greengrass에 대한 Python 요구 사항을 충족하도록 디바이스가 구성됩니다.

  • 구성된 Kinesis 전송 스트림입니다. 자세한 내용은 단원을 참조하십시오.Amazon Kinesis Data Firehose 전송 스트림 생성Amazon Kinesis Firehose 개발자 안내서의 복제.

  • Greengrass 그룹 역할를 허용하도록 구성된firehose:PutRecordfirehose:PutRecordBatch다음 예제 IAM 정책에 나와 있는 것처럼 대상 전송 스트림에 대한 작업을 생성합니다.

    { "Version":"2012-10-17", "Statement":[ { "Sid":"Stmt1528133056761", "Action":[ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Effect":"Allow", "Resource":[ "arn:aws:firehose:region:account-id:deliverystream/stream-name" ] } ] }

    이 커넥터를 사용하면 입력 메시지 페이로드에서 기본 전송 스트림을 동적으로 재정의할 수 있습니다. 이 기능을 사용하여 구현하는 경우 IAM 정책에 모든 대상 스트림이 리소스로 포함되어야 합니다. 리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다(예: 와일드카드 * 이름 지정 스키마를 통해).

    그룹 역할 요구 사항의 경우 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 Greengrass 그룹 역할 관리(콘솔) 또는 Greengrass 그룹 역할 관리(CLI) 섹션을 참조하세요.

Versions 2 - 3
  • AWS IoT Greengrass코어 소프트웨어 v1.7 이상.

  • Python코어 디바이스에 설치되고 PATH 환경 변수에 추가된 버전 2.7입니다.

  • 구성된 Kinesis 전송 스트림입니다. 자세한 내용은 단원을 참조하십시오.Amazon Kinesis Data Firehose 전송 스트림 생성Amazon Kinesis Firehose 개발자 안내서의 복제.

  • Greengrass 그룹 역할를 허용하도록 구성된firehose:PutRecordfirehose:PutRecordBatch다음 예제 IAM 정책에 나와 있는 것처럼 대상 전송 스트림에 대한 작업을 생성합니다.

    { "Version":"2012-10-17", "Statement":[ { "Sid":"Stmt1528133056761", "Action":[ "firehose:PutRecord", "firehose:PutRecordBatch" ], "Effect":"Allow", "Resource":[ "arn:aws:firehose:region:account-id:deliverystream/stream-name" ] } ] }

    이 커넥터를 사용하면 입력 메시지 페이로드에서 기본 전송 스트림을 동적으로 재정의할 수 있습니다. 이 기능을 사용하여 구현하는 경우 IAM 정책에 모든 대상 스트림이 리소스로 포함되어야 합니다. 리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다(예: 와일드카드 * 이름 지정 스키마를 통해).

    그룹 역할 요구 사항의 경우 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 Greengrass 그룹 역할 관리(콘솔) 또는 Greengrass 그룹 역할 관리(CLI) 섹션을 참조하세요.

Version 1
  • AWS IoT Greengrass코어 소프트웨어 v1.7 이상.

  • Python코어 디바이스에 설치되고 PATH 환경 변수에 추가된 버전 2.7입니다.

  • 구성된 Kinesis 전송 스트림입니다. 자세한 내용은 단원을 참조하십시오.Amazon Kinesis Data Firehose 전송 스트림 생성Amazon Kinesis Firehose 개발자 안내서의 복제.

  • Greengrass 그룹 역할를 허용하도록 구성된firehose:PutRecord다음 예제 IAM 정책에 나와 있는 것처럼 대상 전송 스트림에 대한 작업을 실행합니다.

    { "Version":"2012-10-17", "Statement":[ { "Sid":"Stmt1528133056761", "Action":[ "firehose:PutRecord" ], "Effect":"Allow", "Resource":[ "arn:aws:firehose:region:account-id:deliverystream/stream-name" ] } ] }

    이 커넥터를 사용하면 입력 메시지 페이로드에서 기본 전송 스트림을 동적으로 재정의할 수 있습니다. 이 기능을 사용하여 구현하는 경우 IAM 정책에 모든 대상 스트림이 리소스로 포함되어야 합니다. 리소스에 대한 세부적 또는 조건부 액세스 권한을 부여할 수 있습니다(예: 와일드카드 * 이름 지정 스키마를 통해).

    그룹 역할 요구 사항의 경우 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 Greengrass 그룹 역할 관리(콘솔) 또는 Greengrass 그룹 역할 관리(CLI) 섹션을 참조하세요.

커넥터 매개변수

이 커넥터는 다음 파라미터를 제공합니다.

Versions 5
DefaultDeliveryStreamArn

데이터를 보낼 기본 Kinesis Data Firehose 전송 스트림의 ARN 입니다. 전송 스트림은 입력 메시지 페이로드에서 delivery_stream_arn 속성으로 재정의될 수 있습니다.

참고

그룹 역할이 모든 대상 전송 스트림에 대해 적절한 작업을 허용해야 합니다. 자세한 정보는 Requirements을 참조하십시오.

의 표시 이름AWS IoT콘솔: : 기본 전송 스트림 ARN

: 필수true

형식: string

유효한 패턴arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$

DeliveryStreamQueueSize

동일한 전송 스트림에 대한 새 레코드가 거부되기 전에 메모리에 유지할 최대 레코드 수입니다. 최소값은 2000입니다.

의 표시 이름AWS IoT콘솔: 버퍼링할 최대 레코드 수 (스트림당)

: 필수true

형식: string

유효한 패턴^([2-9]\\d{3}|[1-9]\\d{4,})$

MemorySize

이 커넥터에 할당할 메모리 양(KB)입니다.

의 표시 이름AWS IoT콘솔: 메모리 크기

: 필수true

형식: string

유효한 패턴^[0-9]+$

PublishInterval

Kinesis Data Firehose 레코드를 게시하는 간격 (초) 입니다. 배치를 비활성화하려면 이 값을 0으로 설정합니다.

의 표시 이름AWS IoT콘솔: 게시 간격

: 필수true

형식: string

유효한 값: 0 - 900

유효한 패턴[0-9]|[1-9]\\d|[1-9]\\d\\d|900

IsolationMode

이 커넥터의 컨테이너화 모드입니다. 기본값은 GreengrassContainer이며 이는 커넥터가 AWS IoT Greengrass 컨테이너 내부의 격리된 런타임 환경에서 실행됨을 의미합니다.

참고

그룹의 기본 컨테이너화 설정은 커넥터에는 적용되지 않습니다.

의 표시 이름AWS IoT콘솔: 컨테이너 격리 모드

: 필수false

형식: string

유효한 값: GreengrassContainer 또는 NoContainer

유효한 패턴^NoContainer$|^GreengrassContainer$

Versions 2 - 4
DefaultDeliveryStreamArn

데이터를 보낼 기본 Kinesis Data Firehose 전송 스트림의 ARN 입니다. 전송 스트림은 입력 메시지 페이로드에서 delivery_stream_arn 속성으로 재정의될 수 있습니다.

참고

그룹 역할이 모든 대상 전송 스트림에 대해 적절한 작업을 허용해야 합니다. 자세한 정보는 Requirements을 참조하십시오.

의 표시 이름AWS IoT콘솔: : 기본 전송 스트림 ARN

: 필수true

형식: string

유효한 패턴arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$

DeliveryStreamQueueSize

동일한 전송 스트림에 대한 새 레코드가 거부되기 전에 메모리에 유지할 최대 레코드 수입니다. 최소값은 2000입니다.

의 표시 이름AWS IoT콘솔: 버퍼링할 최대 레코드 수 (스트림당)

: 필수true

형식: string

Pattern:^([2-9]\\d{3}|[1-9]\\d{4,})$

MemorySize

이 커넥터에 할당할 메모리 양(KB)입니다.

의 표시 이름AWS IoT콘솔: 메모리 크기

: 필수true

형식: string

Pattern:^[0-9]+$

PublishInterval

Kinesis Data Firehose 레코드를 게시하는 간격 (초) 입니다. 배치를 비활성화하려면 이 값을 0으로 설정합니다.

의 표시 이름AWS IoT콘솔: 게시 간격

: 필수true

형식: string

유효한 값: 0 - 900

Pattern:[0-9]|[1-9]\\d|[1-9]\\d\\d|900

Version 1
DefaultDeliveryStreamArn

데이터를 보낼 기본 Kinesis Data Firehose 전송 스트림의 ARN 입니다. 전송 스트림은 입력 메시지 페이로드에서 delivery_stream_arn 속성으로 재정의될 수 있습니다.

참고

그룹 역할이 모든 대상 전송 스트림에 대해 적절한 작업을 허용해야 합니다. 자세한 정보는 Requirements을 참조하십시오.

의 표시 이름AWS IoT콘솔: : 기본 전송 스트림 ARN

: 필수true

형식: string

Pattern:arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$

커넥터 만들기 예(AWS CLI)

다음 CLI 명령은ConnectorDefinition커넥터가 포함된 초기 버전을 추가합니다.

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyKinesisFirehoseConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/KinesisFirehose/versions/5", "Parameters": { "DefaultDeliveryStreamArn": "arn:aws:firehose:region:account-id:deliverystream/stream-name", "DeliveryStreamQueueSize": "5000", "MemorySize": "65535", "PublishInterval": "10", "IsolationMode" : "GreengrassContainer" } } ] }'

에서AWS IoT Greengrass콘솔에서 커넥터를 추가할 수 있습니다.커넥터페이지로 이동합니다. 자세한 정보는 Greengrass 커넥터 시작하기(콘솔)을 참조하십시오.

입력 데이터

이 커넥터는 MQTT 주제에 대한 스트림 콘텐츠를 수락한 다음, 이 콘텐츠를 대상 전송 스트림에 전송합니다. 다음과 같은 두 가지 유형의 입력 데이터를 수락합니다.

  • kinesisfirehose/message 주제에 대한 JSON 데이터.

  • kinesisfirehose/message/binary/# 주제에 대한 이진 데이터.

Versions 2 - 5
주제 필터: kinesisfirehose/message

이 주제는 JSON 데이터가 포함된 메시지를 보내는데 사용합니다.

메시지 속성
request

기본 스트림과 다른 경우 전송 스트림과 대상 전송 스트림으로 보낸 데이터입니다.

: 필수true

Type:object다음 속성을 포함하는

data

전송 스트림으로 보낸 데이터입니다.

: 필수true

형식: string

delivery_stream_arn

대상 Kinesis 전송 스트림의 ARN 입니다. 기본 전송 스트림을 재정의하려면 이 속성을 포함합니다.

: 필수false

형식: string

Pattern:arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$

id

요청에 대한 임의의 ID입니다. 이 속성은 입력 요청을 출력 응답에 매핑하는 데 사용됩니다. 지정하면 응답 객체의 id 속성이 이 값으로 설정됩니다. 이 기능을 사용하지 않는 경우 이 속성을 생략하거나 빈 문자열로 지정할 수 있습니다.

: 필수false

형식: string

Pattern:.*

입력 예
{ "request": { "delivery_stream_arn": "arn:aws:firehose:region:account-id:deliverystream/stream2-name", "data": "Data to send to the delivery stream." }, "id": "request123" }

 

주제 필터: kinesisfirehose/message/binary/#

이 주제는 이진 데이터가 포함된 메시지를 보내는데 사용합니다. 이 커넥터는 이진 데이터를 구문 분석하지 않습니다. 이진 데이터는 있는 그대로 스트리밍됩니다.

입력 요청을 출력 응답에 매핑하려면 메시지 주제의 # 와일드카드를 임의의 요청 ID로 바꿉니다. 예를 들어, 메시지를 kinesisfirehose/message/binary/request123에 게시한 경우 응답 객체의 id 속성이 request123으로 설정됩니다.

요청을 응답에 매핑하지 않으려는 경우에는 메시지를 kinesisfirehose/message/binary/에 게시할 수 있습니다. 반드시 후행 슬래시를 포함해야 합니다.

Version 1
주제 필터: kinesisfirehose/message

이 주제는 JSON 데이터가 포함된 메시지를 보내는데 사용합니다.

메시지 속성
request

기본 스트림과 다른 경우 전송 스트림과 대상 전송 스트림으로 보낸 데이터입니다.

: 필수true

Type:object다음 속성을 포함하는

data

전송 스트림으로 보낸 데이터입니다.

: 필수true

형식: string

delivery_stream_arn

대상 Kinesis 전송 스트림의 ARN 입니다. 기본 전송 스트림을 재정의하려면 이 속성을 포함합니다.

: 필수false

형식: string

Pattern:arn:aws:firehose:([a-z]{2}-[a-z]+-\d{1}):(\d{12}):deliverystream/([a-zA-Z0-9_\-.]+)$

id

요청에 대한 임의의 ID입니다. 이 속성은 입력 요청을 출력 응답에 매핑하는 데 사용됩니다. 지정하면 응답 객체의 id 속성이 이 값으로 설정됩니다. 이 기능을 사용하지 않는 경우 이 속성을 생략하거나 빈 문자열로 지정할 수 있습니다.

: 필수false

형식: string

Pattern:.*

입력 예
{ "request": { "delivery_stream_arn": "arn:aws:firehose:region:account-id:deliverystream/stream2-name", "data": "Data to send to the delivery stream." }, "id": "request123" }

 

주제 필터: kinesisfirehose/message/binary/#

이 주제는 이진 데이터가 포함된 메시지를 보내는데 사용합니다. 이 커넥터는 이진 데이터를 구문 분석하지 않습니다. 이진 데이터는 있는 그대로 스트리밍됩니다.

입력 요청을 출력 응답에 매핑하려면 메시지 주제의 # 와일드카드를 임의의 요청 ID로 바꿉니다. 예를 들어, 메시지를 kinesisfirehose/message/binary/request123에 게시한 경우 응답 객체의 id 속성이 request123으로 설정됩니다.

요청을 응답에 매핑하지 않으려는 경우에는 메시지를 kinesisfirehose/message/binary/에 게시할 수 있습니다. 반드시 후행 슬래시를 포함해야 합니다.

출력 데이터

이 커넥터는 상태 정보를 MQTT 주제에 출력 데이터로 게시합니다.

Versions 2 - 5
구독의 주제 필터

kinesisfirehose/message/status

출력 예

응답에는 일괄 처리로 전송된 각 데이터 레코드의 상태가 포함됩니다.

{ "response": [ { "ErrorCode": "error", "ErrorMessage": "test error", "id": "request123", "status": "fail" }, { "firehose_record_id": "xyz2", "id": "request456", "status": "success" }, { "firehose_record_id": "xyz3", "id": "request890", "status": "success" } ] }
참고

커넥터에서 재시도 가능한 오류 (예: 연결 오류) 를 감지하면 다음 배치에서 게시를 다시 시도합니다. 지수 백오프는AWSSDK. 재시도할 수 있는 오류로 인해 실패한 요청은 추가 게시를 위해 다시 큐 끝에 추가됩니다.

Version 1
구독의 주제 필터

kinesisfirehose/message/status

출력 예: Success
{ "response": { "firehose_record_id": "1lxfuuuFomkpJYzt/34ZU/r8JYPf8Wyf7AXqlXm", "status": "success" }, "id": "request123" }
출력 예: 실패
{ "response" : { "error": "ResourceNotFoundException", "error_message": "An error occurred (ResourceNotFoundException) when calling the PutRecord operation: Firehose test1 not found under account 123456789012.", "status": "fail" }, "id": "request123" }

사용 예

다음 상위 수준 단계를 사용하여 커넥터를 사용해 보는 데 이용할 수 있는 예제 Python 3.7 Lambda 함수를 설정합니다.

참고
  • 다른 Python 런타임을 사용하는 경우 Python 3.7으로 심볼 링크를 만들 수 있습니다.

  • 커넥터 시작하기(콘솔)커넥터 시작하기(CLI) 주제에는 예제 Twilio 알림 커넥터를 구성하고 배포하는 방법을 보여주는 자세한 단계가 포함되어 있습니다.

  1. 커넥터에 대한 요구 사항을 충족하는지 확인합니다.

    그룹 역할 요구 사항의 경우 필수 권한을 부여하도록 역할을 구성하고 역할이 그룹에 추가되었는지 확인해야 합니다. 자세한 내용은 Greengrass 그룹 역할 관리(콘솔) 또는 Greengrass 그룹 역할 관리(CLI) 섹션을 참조하세요.

  2. 입력 데이터를 커넥터로 보내는 함수를 생성하고 게시합니다.

    예제 코드를 PY 파일로 저장합니다. 를 다운로드하고 압축을 해제합니다.AWS IoT GreengrassPython용 암호. 그런 다음 루트 수준에서 PY 파일과 greengrasssdk 폴더를 포함하는 zip 패키지를 생성합니다. 이 zip 패키지는 에 업로드하는 배포 패키지입니다.AWS Lambda.

    Python 3.7 Lambda 함수를 생성한 후 함수 버전을 게시하고 별칭을 만듭니다.

  3. Greengrass 그룹을 구성합니다.

    1. 별칭으로 Lambda 함수를 추가합니다 (권장). Lambda 수명 주기를 수명이 긴 함수 (또는"Pinned": trueCLI에서).

    2. 커넥터를 추가하고 해당 파라미터를 구성합니다.

    3. 커넥터가 JSON 입력 데이터를 수신하고 지원되는 주제 필터에서 출력 데이터를 전송할 수 있도록 허용하는 구독을 추가합니다.

      • Lambda 함수를 소스로, 커넥터를 대상으로 설정하고 지원되는 입력 주제 필터를 사용합니다.

      • 커넥터를 소스로, AWS IoT Core를 대상으로 설정하고 지원되는 출력 주제 필터를 사용합니다. 이 구독을 사용하여AWS IoT콘솔입니다.

  4. 그룹을 배포합니다.

  5. 에서AWS IoT콘솔의테스트페이지에서 출력 데이터 주제를 구독하여 커넥터의 상태 메시지를 확인합니다. 예제 Lambda 함수는 수명이 긴 함수로 그룹이 배포된 직후 메시지 전송을 시작합니다.

    테스트를 마치면 Lambda 수명 주기를 온디맨드 함수 (또는"Pinned": false그리고 그룹을 배포합니다. 이렇게 하면 함수가 메시지 전송을 중지합니다.

Example

다음 예제 Lambda 함수는 입력 메시지를 커넥터로 보냅니다. 이 메시지에는 JSON 데이터가 포함되어 있습니다.

import greengrasssdk import time import json iot_client = greengrasssdk.client('iot-data') send_topic = 'kinesisfirehose/message' def create_request_with_all_fields(): return { "request": { "data": "Message from Firehose Connector Test" }, "id" : "req_123" } def publish_basic_message(): messageToPublish = create_request_with_all_fields() print("Message To Publish: ", messageToPublish) iot_client.publish(topic=send_topic, payload=json.dumps(messageToPublish)) publish_basic_message() def lambda_handler(event, context): return

Licenses

Kinesis Firehose 커넥터에는 다음 타사 소프트웨어/라이선스가 포함되어 있습니다.

이 커넥터는 Greengrass 코어 소프트웨어 라이선스 계약에 따라 릴리스됩니다.

Changelog

다음 표에서는 커넥터의 각 버전에 변경된 사항에 대해 설명합니다.

버전

변경

5

커넥터에 대한 컨테이너화 모드를 구성하는 IsolationMode 파라미터가 추가되었습니다.

4

런타임 요구 사항을 변경하는 Python 3.7로 런Lambda 임을 업그레이드했습니다.

3

과도한 로깅을 줄이기 위한 수정 및 기타 사소한 버그 수정입니다.

2

지정된 간격으로 배치 데이터 레코드를 Kinesis Data Firehose 에 전송하는 작업에 대한 지원이 추가되었습니다.

  • 또한 그룹 역할에서 firehose:PutRecordBatch 작업이 필요합니다.

  • 새로운 MemorySize, DeliveryStreamQueueSizePublishInterval 파라미터입니다.

  • 출력 메시지는 게시 된 데이터 레코드에 대한 상태 응답의 배열을 포함한다.

1

최초 릴리스.

Greengrass 그룹은 한 번에 커넥터의 버전을 하나만 포함할 수 있습니다. 커넥터 버전 업그레이드에 대한 자세한 내용은 커넥터 버전 업그레이드 단원을 참조하십시오.

다음 사항도 참조하세요.