Amazon Data Firehose 데이터 변환 - Amazon Data Firehose

Amazon Data Firehose는 이전에 Amazon Kinesis Data Firehose로 알려졌습니다.

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

Amazon Data Firehose 데이터 변환

Amazon Data Firehose는 Lambda 함수를 호출하여 들어오는 소스 데이터를 변환하고 변환된 데이터를 목적지로 전송할 수 있습니다. Firehose 스트림을 생성할 때 Amazon 데이터 Firehose 데이터 변환을 활성화할 수 있습니다.

데이터 변환 흐름

Firehose 데이터 변환을 활성화하면 Firehose는 들어오는 데이터를 버퍼링합니다. 버퍼링 크기 힌트의 범위는 0.2MB에서 3MB 사이입니다. 기본 Lambda 버퍼링 크기 힌트는 Splunk와 Snowflake를 제외한 모든 대상에 대해 1MB입니다. 스플렁크와 스노우플레이크의 경우 기본 버퍼링 힌트는 256KB입니다. Lambda 버퍼링 간격 힌트의 범위는 0초에서 900초 사이입니다. Snowflake를 제외한 모든 대상에 대한 기본 Lambda 버퍼링 간격 힌트는 60초입니다. Snowflake의 경우 기본 버퍼링 힌트 간격은 30초입니다. 버퍼링 크기를 조정하려면 호출된 및 를 UpdateDestination사용하여 CreateDeliveryStream또는 API의 ProcessingConfiguration파라미터를 설정합니다. ProcessorParameterBufferSizeInMBsIntervalInSeconds 그런 다음 Firehose는 동기 호출 모드를 사용하여 버퍼링된 각 배치와 함께 지정된 Lambda 함수를 비동기적으로 호출합니다. AWS Lambda 변환된 데이터는 Lambda에서 Firehose로 전송됩니다. 그런 다음 Firehose는 지정된 대상 버퍼링 크기 또는 버퍼링 간격에 도달하면 (둘 중 먼저 발생하는 시점) 대상을 대상으로 전송합니다.

중요

Lambda 동기식 호출 모드는 요청 및 응답 모두 페이로드 크기 제한이 6MB입니다. 함수로 요청을 전송하기 위한 버퍼링 크기가 6MB 이하인지 확인해야 합니다. 또한 함수에서 반환하는 응답이 6MB를 초과하지 않는지 확인합니다.

데이터 변환 및 상태 모델

Lambda에서 변환된 모든 레코드에는 다음 파라미터가 포함되어야 합니다. 그렇지 않으면 Amazon Data Firehose가 파라미터를 거부하고 데이터 변환 실패로 간주합니다.

Kinesis Data Streams와 Direct PUT의 경우:

recordId

레코드 ID는 호출 중에 Amazon Data Firehose에서 Lambda로 전달됩니다. 변환된 레코드에는 동일한 레코드 ID가 포함되어야 합니다. 원래 레코드의 ID와 변환된 레코드의 ID 간 불일치는 데이터 변환 실패로 간주됩니다.

결과

레코드의 데이터 변환 상태입니다. 가능한 값은 Ok(레코드가 성공적으로 변환되었음), Dropped(처리 로직에 의해 의도적으로 레코드가 삭제됨), ProcessingFailed(레코드를 변환하지 못함)입니다. 레코드 상태가 Ok Dropped '또'인 경우 Amazon Data Firehose는 해당 레코드를 성공적으로 처리된 것으로 간주합니다. 그렇지 않으면 Amazon Data Firehose는 처리가 실패한 것으로 간주합니다.

data

base64 인코딩 후 변환된 데이터 페이로드입니다.

다음은 Lambda 결과 출력 예입니다.

{ "recordId": "<recordId from the Lambda input>", "result": "Ok", "data": "<Base64 encoded Transformed data>" }

Amazon MSK의 경우

recordId

레코드 ID는 호출 중에 Firehose에서 Lambda로 전달됩니다. 변환된 레코드에는 동일한 레코드 ID가 포함되어야 합니다. 원래 레코드의 ID와 변환된 레코드의 ID 간 불일치는 데이터 변환 실패로 간주됩니다.

결과

레코드의 데이터 변환 상태입니다. 가능한 값은 Ok(레코드가 성공적으로 변환되었음), Dropped(처리 로직에 의해 의도적으로 레코드가 삭제됨), ProcessingFailed(레코드를 변환하지 못함)입니다. 레코드 상태가 Ok 또는 Dropped 인 경우 Firehose는 성공적으로 처리된 것으로 간주합니다. 그렇지 않으면 Firehose는 처리가 실패한 것으로 간주합니다.

KafkaRecordValue

base64 인코딩 후 변환된 데이터 페이로드입니다.

다음은 Lambda 결과 출력 예입니다.

{ "recordId": "<recordId from the Lambda input>", "result": "Ok", "kafkaRecordValue": "<Base64 encoded Transformed data>" }

Lambda 블루프린트

이 블루프린트는 AWS Lambda 함수를 생성하고 사용하여 Amazon Data Firehose 데이터 스트림의 데이터를 변환하는 방법을 보여줍니다.

콘솔에서 사용할 수 있는 블루프린트를 보려면 AWS Lambda
  1. https://console.aws.amazon.com/lambda/ 에서 AWS Management Console 로그인하고 AWS Lambda 콘솔을 엽니다.

  2. 함수 생성을 선택한 다음 Use a blueprint(블루프린트 사용)를 선택합니다.

  3. 블루프린트 필드에서 키워드를 firehose 검색하여 Amazon Data Firehose Lambda 블루프린트를 찾을 수 있습니다.

블루프린트 목록:

  • Amazon Data Firehose 스트림으로 전송된 프로세스 레코드 (Node.js, Python)

    이 청사진은 Lambda를 사용하여 AWS Firehose 데이터 스트림의 데이터를 처리하는 방법에 대한 기본 예를 보여줍니다.

    최신 릴리스 날짜: 2016년 11월.

    릴리스 노트: 없음.

  • CloudWatch Firehose로 전송된 프로세스 로그

    이 블루프린트는 더 이상 사용되지 않습니다. Firehose로 전송된 CloudWatch 로그를 처리하는 방법에 대한 자세한 내용은 로그를 사용하여 Firehose에 쓰기를 참조하십시오. CloudWatch

  • syslog 형식의 Amazon Data Firehose 스트림 레코드를 JSON (Node.js) 으로 변환

    이 블루프린트는 RFC3164 Syslog 형식의 입력 레코드를 JSON 형식으로 변환하는 방법을 보여줍니다.

    최신 릴리스 날짜: 2016년 11월.

    릴리스 노트: 없음.

에서 사용할 수 있는 블루프린트를 보려면 AWS Serverless Application Repository
  1. AWS Serverless Application Repository로 이동합니다.

  2. 모든 애플리케이션 검색을 선택하세요.

  3. 애플리케이션 필드에서 키워드 firehose를 검색합니다.

블루프린트를 사용하지 않고 Lambda 함수를 만들 수도 있습니다. AWS Lambda 시작하기를 참조하십시오.

데이터 변환 실패 처리

네트워크 시간 초과로 인해 또는 Lambda 호출 한도에 도달하여 Lambda 함수 호출이 실패하는 경우 Amazon Data Firehose는 기본적으로 호출을 세 번 재시도합니다. 호출이 성공하지 못하면 Amazon Data Firehose는 해당 레코드 배치를 건너뛰게 됩니다. 건너뛴 레코드는 제대로 처리되지 않은 레코드로 간주됩니다. 또는 API를 사용하여 재시도 옵션을 지정하거나 재정의할 수 있습니다. CreateDeliveryStreamUpdateDestination 이러한 유형의 실패의 경우 Amazon CloudWatch Logs에 호출 오류를 기록할 수 있습니다. 자세한 정보는 로그를 사용하여 Amazon 데이터 Firehose를 모니터링합니다 CloudWatch 을 참조하세요.

레코드의 데이터 변환 상태가 인 경우 Amazon Data Firehose는 ProcessingFailed 해당 레코드를 처리에 실패한 것으로 간주합니다. 이러한 유형의 실패의 경우 Lambda 함수에서 Amazon Logs로 오류 CloudWatch 로그를 내보낼 수 있습니다. 자세한 내용은 AWS LambdaAWS Lambda 개발자 안내서의 Amazon CloudWatch Logs 액세스 항목을 참조하십시오.

데이터 변환에 실패하면 제대로 처리되지 않은 레코드는 S3 버킷의 processing-failed 폴더로 전송됩니다. 이 레코드는 다음 형식을 취합니다.

{ "attemptsMade": "count", "arrivalTimestamp": "timestamp", "errorCode": "code", "errorMessage": "message", "attemptEndingTimestamp": "timestamp", "rawData": "data", "lambdaArn": "arn" }
attemptsMade

시도한 호출 요청 횟수입니다.

arrivalTimestamp

Amazon Data Firehose가 레코드를 수신한 시간입니다.

errorCode

Lambda가 반환한 HTTP 오류 코드.

errorMessage

Lambda가 반환한 오류 메시지.

attemptEndingTimestamp

Amazon 데이터 파이어호스가 Lambda 호출 시도를 중단한 시간입니다.

rawData

base64 인코딩된 레코드 데이터입니다.

lambdaArn

Lambda 함수의 Amazon 리소스 이름(ARN)입니다.

Lambda 호출 지속 기간

Amazon Data Firehose는 최대 5분의 Lambda 호출 시간을 지원합니다. Lambda 함수를 완료하는 데 5분 이상 걸리는 경우 다음 오류가 발생합니다. Lambda를 호출할 때 Firehose에서 시간 초과 오류가 발생했습니다. AWS 지원되는 함수 제한 시간은 최대 5분입니다.

이러한 오류가 발생할 경우 Amazon Data Firehose가 수행하는 작업에 대한 자세한 내용은 을 참조하십시오. 데이터 변환 실패 처리

소스 레코드 백업

Amazon Data Firehose는 변환된 레코드를 목적지로 전송하는 동시에 변환되지 않은 모든 레코드를 S3 버킷에 백업할 수 있습니다. Firehose 스트림을 만들거나 업데이트할 때 소스 레코드 백업을 활성화할 수 있습니다. 소스 레코드 백업을 활성화한 후 비활성화할 수 없습니다.