데이터 전송 실패 처리
각 Amazon Data Firehose 대상마다 고유한 데이터 전송 실패 처리 방식이 있습니다.
OpenSearch, Splunk, HTTP 엔드포인트 등 다양한 대상에 대해 Firehose 스트림을 설정할 때, 전송에 실패한 데이터를 백업할 수 있는 S3 버킷도 설정합니다. 전송 실패 시 Firehose가 데이터를 백업하는 방법에 대한 자세한 내용은 이 페이지의 관련 대상 섹션을 참조하세요. 전송되지 못한 데이터를 백업할 수 있는 S3 버킷에 대한 액세스 권한 부여 방법에 대해서는 Firehose에 Amazon S3 대상 액세스 권한 부여를 참조하세요. Firehose가 (a) 스트림 대상으로 데이터를 전송하지 못하고 (b) 전송 실패에 따라 백업 S3 버킷에 데이터 쓰기에 실패한 경우, 데이터가 대상으로 전달되거나 백업 S3 위치에 기록될 때까지 스트림 전송을 사실상 일시 중지합니다.
Amazon S3
S3 버킷에 대한 데이터 전송은 여러 가지 이유로 실패할 수 있습니다. 예를 들어 버킷이 더 이상 존재하지 않거나, Amazon Data Firehose가 맡은 IAM 역할에 버킷 액세스 권한이 없거나, 네트워크 장애 또는 이와 유사한 이벤트가 발생하는 경우입니다. 이러한 조건에서 Amazon Data Firehose는 전송에 성공할 때까지 최대 24시간 동안 계속 재시도를 합니다. Amazon Data Firehose의 최대 데이터 스토리지 시간은 24시간입니다. 24시간 넘게 데이터 전송에 실패할 경우 데이터를 잃게 됩니다.
Amazon Redshift
Amazon Redshift 대상에 대해 Firehose 스트림 생성 시 재시도 기간(0~7200초)을 지정할 수 있습니다.
여러 가지 이유로 인해 Amazon Redshift 프로비저닝된 클러스터 또는 Amazon Redshift Serverless 작업 그룹으로의 데이터 전송이 실패할 수 있습니다. 예를 들어 Firehose 스트림의 잘못된 클러스터 구성, 클러스터 또는 작업 그룹의 유지 관리 진행, 네트워크 장애 등이 이유가 될 수 있습니다. 이러한 조건에서 Amazon Data Firehose는 지정된 시간 동안 재시도를 수행하고 이 Amazon S3 객체의 특정 배치를 건너뜁니다. 건너뛴 객체의 정보는 errors/
폴더의 매니페스트 파일로 S3 버킷에 전송되며, 이를 수동 채우기에 사용할 수 있습니다. 매니페스트 파일로 데이터를 수동으로 COPY하는 방법에 대한 내용은 매니페스트를 사용한 데이터 파일 지정을 참조하세요.
Amazon OpenSearch Service 및 OpenSearch Serverless
OpenSearch Service 및 OpenSearch Serverless 대상의 경우 Firehose 스트림 생성 시 재시도 기간(0~7200초)을 지정할 수 있습니다.
여러 가지 이유로 OpenSearch Service 클러스터 또는 OpenSearch Serverless 컬렉션으로의 데이터 전송이 실패할 수 있습니다. 예를 들어 Firehose 스트림의 잘못된 OpenSearch Service 클러스터 또는 OpenSearch Serverless 컬렉션 구성, OpenSearch Service 클러스터 또는 OpenSearch Serverless 컬렉션의 유지 관리 진행, 네트워크 장애 또는 이와 유사한 이벤트 발생 등이 이유가 될 수 있습니다. 이러한 조건에서 Amazon Data Firehose는 지정된 시간 동안 재시도를 수행하고 특정 인덱스 요청을 건너뜁니다. 건너뛴 문서는 AmazonOpenSearchService_failed/
폴더를 통해 S3 버킷에 전송되며, 이를 수동 채우기에 사용할 수 있습니다.
OpenSearch Service의 경우 각 문서의 JSON 형식은 다음과 같습니다.
{ "attemptsMade": "(number of index requests attempted)", "arrivalTimestamp": "(the time when the document was received by Firehose)", "errorCode": "(http error code returned by OpenSearch Service)", "errorMessage": "(error message returned by OpenSearch Service)", "attemptEndingTimestamp": "(the time when Firehose stopped attempting index request)", "esDocumentId": "(intended OpenSearch Service document ID)", "esIndexName": "(intended OpenSearch Service index name)", "esTypeName": "(intended OpenSearch Service type name)", "rawData": "(base64-encoded document data)" }
OpenSearch Serverless의 경우 각 문서의 JSON 형식은 다음과 같습니다.
{ "attemptsMade": "(number of index requests attempted)", "arrivalTimestamp": "(the time when the document was received by Firehose)", "errorCode": "(http error code returned by OpenSearch Serverless)", "errorMessage": "(error message returned by OpenSearch Serverless)", "attemptEndingTimestamp": "(the time when Firehose stopped attempting index request)", "osDocumentId": "(intended OpenSearch Serverless document ID)", "osIndexName": "(intended OpenSearch Serverless index name)", "rawData": "(base64-encoded document data)" }
Splunk
Amazon Data Firehose는 Splunk로 데이터를 전송할 때 Splunk로부터 확인을 기다립니다. 오류가 발생하거나 확인 제한 시간 내에 확인 메시지가 도착하지 않을 경우, Amazon Data Firehose는 재시도 기간 카운터를 시작합니다. 재시도 지속시간이 만료될 때까지 재시도합니다. 그 다음 Amazon Data Firehose는 이를 데이터 전송 실패로 간주하고 데이터를 Amazon S3 버킷에 백업합니다.
Amazon Data Firehose는 Splunk로 데이터를 전송할 때마다(최초 시도이든 재시도이든 상관없이) 확인 제한 시간 카운터를 다시 시작합니다. 그런 다음 Splunk로부터 수신 확인을 기다립니다. 재시도 기간이 만료되어도, Amazon Data Firehose는 확인을 수신하거나 확인 제한 시간에 도달할 때까지 확인을 기다립니다. 확인 시간이 초과한 경우 Amazon Data Firehose는 재시도 카운터에 시간이 남아 있는지 확인합니다. 시간이 남은 경우 다시 시도하여 확인을 수신하거나 재시도 시간이 만료되었는지 확인할 때까지 논리를 반복합니다.
확인 수신에 실패하는 것이 발생할 수 있는 유일한 데이터 전송 오류는 아닙니다. 데이터 전송 오류의 다른 유형에 대한 내용은 Splunk 데이터 전송 오류를 참조하세요. 모든 데이터 전송 오류는 재시도 지속시간이 0보다 클 경우 재시도 로직을 트리거합니다.
다음은 오류 레코드의 예입니다.
{ "attemptsMade": 0, "arrivalTimestamp": 1506035354675, "errorCode": "Splunk.AckTimeout", "errorMessage": "Did not receive an acknowledgement from HEC before the HEC acknowledgement timeout expired. Despite the acknowledgement timeout, it's possible the data was indexed successfully in Splunk. Amazon Data Firehose backs up in Amazon S3 data for which the acknowledgement timeout expired.", "attemptEndingTimestamp": 13626284715507, "rawData": "MiAyNTE2MjAyNzIyMDkgZW5pLTA1ZjMyMmQ1IDIxOC45Mi4xODguMjE0IDE3Mi4xNi4xLjE2NyAyNTIzMyAxNDMzIDYgMSA0MCAxNTA2MDM0NzM0IDE1MDYwMzQ3OTQgUkVKRUNUIE9LCg==", "EventId": "49577193928114147339600778471082492393164139877200035842.0" }
HTTP 엔드포인트 대상
Amazon Data Firehose는 HTTP 엔드포인트 대상으로 데이터를 전송하고 이 대상의 응답을 기다립니다. 오류가 발생하거나 응답 제한 시간 내에 응답 메시지가 도착하지 않을 경우, Amazon Data Firehose는 재시도 기간 카운터를 시작합니다. 재시도 지속시간이 만료될 때까지 재시도합니다. 그 다음 Amazon Data Firehose는 이를 데이터 전송 실패로 간주하고 데이터를 Amazon S3 버킷에 백업합니다.
Amazon Data Firehose는 HTTP 엔드포인트 대상으로 데이터를 전송할 때마다(최초 시도이든 재시도이든 상관없이) 확인 제한 시간 카운터를 다시 시작합니다. 그런 다음 HTTP 엔드포인트 대상에서 응답이 도착하기를 기다립니다. 재시도 기간이 만료되어도, Amazon Data Firehose는 응답을 수신하거나 응답 제한 시간에 도달할 때까지 응답을 기다립니다. 응답 시간이 초과한 경우 Amazon Data Firehose는 재시도 카운터에 시간이 남아 있는지 확인합니다. 시간이 남은 경우 다시 시도하여 응답을 수신하거나 재시도 시간 만료가 확인될 때까지 논리를 반복합니다.
응답 수신에 실패하는 것이 발생할 수 있는 유일한 데이터 전송 오류는 아닙니다. 데이터 전송 오류의 다른 유형에 대한 내용은 HTTP 엔드포인트 데이터 전송 오류를 참조하세요.
다음은 오류 레코드의 예입니다.
{ "attemptsMade":5, "arrivalTimestamp":1594265943615, "errorCode":"HttpEndpoint.DestinationException", "errorMessage":"Received the following response from the endpoint destination. {"requestId": "109777ac-8f9b-4082-8e8d-b4f12b5fc17b", "timestamp": 1594266081268, "errorMessage": "Unauthorized"}", "attemptEndingTimestamp":1594266081318, "rawData":"c2FtcGxlIHJhdyBkYXRh", "subsequenceNumber":0, "dataId":"49607357361271740811418664280693044274821622880012337186.0" }
Snowflake
Snowflake 대상의 경우 Firehose 스트림을 생성할 때 선택 사항으로 재시도 기간(0~7,200초)을 지정할 수 있습니다. 재시도 기간의 기본값은 60초입니다.
Snowflake 테이블로 데이터 전송 시 잘못된 Snowflake 대상 구성, Snowflake 중단, 네트워크 장애 등의 몇 가지 이유로 실패할 수 있습니다. 재시도할 수 없는 오류에는 재시도 정책이 적용되지 않습니다. 예를 들어 테이블에 누락된 추가 열이 있어서 Snowflake가 JSON 페이로드를 거부하는 경우, Firehose는 전송을 재시도하지 않습니다. 대신 JSON 페이로드 문제로 인한 모든 삽입 실패 관련 백업을 S3 오류 버킷에 생성합니다.
마찬가지로 잘못된 역할, 테이블 또는 데이터베이스로 인해 전송이 실패하는 경우 Firehose는 재시도하지 않고 S3 버킷에 데이터를 기록합니다. 재시도 기간은 Snowflake 서비스 문제, 일시적인 네트워크 결함 등으로 인한 오류에만 적용됩니다. 이러한 조건에서 Firehose는 지정된 기간 동안 재시도한 후 S3에 데이터를 전송합니다. 실패한 레코드는 snowflake-failed/ 폴더에 전송되어 수동 채우기가 가능합니다.
다음은 S3에 전송하는 각 레코드에 대한 JSON 예제입니다.
{ "attemptsMade": 3, "arrivalTimestamp": 1594265943615, "errorCode": "Snowflake.InvalidColumns", "errorMessage": "Snowpipe Streaming does not support columns of type AUTOINCREMENT, IDENTITY, GEO, or columns with a default value or collation", "attemptEndingTimestamp": 1712937865543, "rawData": "c2FtcGxlIHJhdyBkYXRh" }