일반 및 스트리밍 ETL 개념

Q: 스트리밍 ETL이란 무엇인가요?

스트리밍 ETL이란 한 장소에서 다른 장소로 실제 데이터를 처리 및 이동하는 것입니다. ETL은 데이터베이스 기능의 추출, 변환 및 로드(extract, transform, and load)의 약자입니다. 추출은 원본에서 데이터를 수집하는 것을 말합니다. 변환은 해당 데이터에서 수행된 처리를 말합니다. 로드는 처리된 데이터를 웨어하우스, 데이터레이크 또는 분석 도구와 같은 대상으로 전송하는 것을 말합니다.

Q: Amazon Data Firehose란 무엇인가요?

Data Firehose는 스트리밍 ETL 솔루션입니다. 스트리밍 데이터를 데이터 스토어와 분석 도구에 로드하는 가장 쉬운 방법입니다. 스트리밍 데이터를 캡처하고 변환한 후 Amazon S3, Amazon Redshift, Amazon OpenSearch Service, Snowflake 및 Splunk로 로드하여 이미 사용하고 있는 기존 비즈니스 인텔리전스 도구 및 대시보드를 통해 거의 실시간으로 분석할 수 있습니다. Amazon Kinesis Firehose는 완전 관리형 서비스로서 데이터 처리량에 대응하여 자동으로 확장되며 지속적인 관리가 필요 없습니다. 또한 데이터를 로드하기 전에 배치, 압축 및 암호화하여 대상 스토리지의 사용량을 최소화하고 보안을 강화할 수 있습니다.

Q: Firehose에서 소스란 무엇인가요?

소스는 스트리밍 데이터가 연속해서 생성되고 캡처되는 위치를 말합니다. 예를 들어 Amazon EC2 인스턴스의 로깅 서버, 모바일 디바이스에서 실행되는 애플리케이션, IoT 디바이스의 센서 등도 소스가 될 수 있습니다. 다음을 사용하여 소스를 Firehose에 연결할 수 있습니다. 1) AWS SDK for Java, .NET, Node.js, Python 또는 Ruby를 사용하는 Amazon Data Firehose API 2) Firehose가 기존 Kinesis 데이터 스트림에서 쉽게 데이터를 읽고 Firehose 대상으로 로드하는 Kinesis Data Stream 3) Firehose가 기존 Amazon MSK 클러스터에서 쉽게 데이터를 읽고 Amazon S3 버킷에 로드하는 Amazon MSK 4) AWS Cloudwatch, AWS EventBridge, AWS IOT 또는 AWS Pinpoint와 같은 AWS 기본 지원 서비스 전체 목록은 Amazon Data Firehose 개발자 안내서를 참조하세요. 5) 파일 세트를 지속적으로 모니터링하고 새로운 데이터를 스트림에 전송하는 독립형 Java 소프트웨어 애플리케이션인 Kinesis Agents 6) 오픈 소스 로그 프로세서 및 전달자인 Fluentbit. 7) 서버를 프로비저닝하거나 관리하지 않고도 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스인 AWS Lambda Lambda 함수 쓰기 기능을 사용하여 S3 또는 DynamoDB에서 트리거된 이벤트를 기반으로 한 Firehose로 트래픽을 전송할 수 있습니다.

Q: Firehose에서 대상이란 무엇인가요?

대상은 데이터가 전송되는 데이터 스토어입니다. 현재 Firehose는 Amazon S3, Amazon Redshift, Amazon OpenSearch Service, Splunk, Datadog, NewRelic, Dynatrace, Sumo Logic, LogicMonitor, MongoDB, HTTP 엔드포인트를 전송 대상으로 지원합니다.

Q: Firehose가 자동으로 수행하는 관리 작업은 무엇인가요?

Data Firehose는 데이터를 캡처하여 Amazon S3, Amazon Redshift, Amazon OpenSearch Service, Snowflake 또는 Splunk로 로드하는 데 필요한 모든 기본 인프라, 스토리지, 네트워킹 및 구성을 관리합니다. 하드웨어와 소프트웨어의 프로비저닝, 배포 및 지속적인 유지 관리에 대한 걱정이나 이러한 프로세스를 관리할 다른 애플리케이션을 작성할 필요가 없습니다. 또한 Data Firehose는 사람의 개입이나 관련된 개발자 오버헤드 없이 탄력적으로 규모가 조정됩니다. 뿐만 아니라 Data Firehose는 AWS 리전 내 세 개의 시설에 데이터를 동기적으로 복제하여 데이터가 대상으로 전송될 때 데이터에 대한 높은 가용성과 안정성을 제공합니다.

Q: Firehose는 어떻게 사용하나요?

Amazon Web Services에 가입한 후, 다음 단계를 따라 Firehose 사용을 시작할 수 있습니다.

  • Firehose 콘솔 또는 CreateDeliveryStream 작업을 통해 Firehose 스트림을 생성합니다. 원하는 경우 Firehose 스트림에 AWS Lambda 함수를 구성하여 데이터를 로드하기 전에 원시 데이터를 준비하고 변환하도록 할 수 있습니다.
  • Amazon Kinesis Agent 또는 Firehose API를 사용해 데이터가 Firehose 스트림으로 지속적으로 전송되도록 데이터 생산자를 구성합니다.
  • Firehose는 데이터를 지정한 대상으로 계속해서 자동으로 로드합니다.

Q: Firehose에서 Firehose 스트림이란 무엇인가요?

Firehose 스트림은 Firehose의 기본 엔터티입니다. Firehose를 사용할 때는 Firehose 스트림을 생성한 다음 데이터를 이 스트림으로 전송하면 됩니다. Firehose 콘솔 또는 CreateDeliveryStream 작업을 통해 Firehose 스트림을 생성할 수 있습니다. 자세한 내용은 Firehose 스트림 생성을 참조하세요.

Q: Firehose에서 레코드란 무엇인가요?

레코드는 데이터 생산자가 Firehose 스트림으로 전송하는 관심 데이터입니다. 데이터 소스가 Direct PUT 또는 Kinesis Data Streams인 경우 레코드의 최대 크기(Base64 인코딩 전)는 1024KB입니다. 데이터 소스가 Amazon MSK인 경우 레코드의 최대 크기(Base64 인코딩 전)는 10MB입니다.

Q: Firehose의 한도는 얼마인가요?

한도에 대한 자세한 내용은 개발자 안내서에서 Amazon Data Firehose Limits(Amazon Data Firehose 한도)를 참조하세요.

데이터 소스

Q: Firehose API에 액세스하기 위해 사용할 수 있는 프로그래밍 언어 또는 플랫폼은 무엇인가요?

Firehose API는 Amazon Web Services SDK에서 사용할 수 있습니다. Amazon Web Services SDK용 프로그래밍 언어와 플랫폼에 대한 목록은 Amazon Web Services용 도구 페이지를 참조하세요.

Q: Amazon Kinesis Agent란 무엇인가요?

Kinesis Agent는 사전 구축된 Java 애플리케이션으로서, 데이터를 수집하여 Firehose 스트림으로 전송하는 간편한 방법을 제공합니다. 웹 서버, 로그 서버, 데이터베이스 서버 등과 같은 Linux 기반 서버 환경에 에이전트를 설치할 수 있습니다. 에이전트는 특정 파일을 모니터링하고 데이터를 Firehose 스트림으로 지속적으로 전송합니다. Amazon Kinesis Agent는 현재 Amazon Linux, Red Hat Enterprise Linux 및 Microsoft Windows를 지원합니다. 자세한 내용은 Writing with Agents(에이전트를 사용하여 쓰기)를 참조하세요.

Q: Amazon Kinesis Agent는 어디에서 다운로드할 수 있나요?

다음 명령과 링크를 사용하여 Kinesis Agent를 다운로드하고 설치할 수 있습니다.

  • Amazon Linux의 경우: sudo yum install –y aws-kinesis-agent
  • Red Hat Enterprise Linux의 경우: sudo yum install –y https://s3.amazonaws.com/streaming-data-agent/aws-kinesis-agent-latest.amzn1.noarch.rpm
  • GitHub의 경우: awlabs/amazon-kinesis-agent
  • Windows의 경우: https://docs.aws.amazon.com/kinesis-agent-windows/latest/userguide/getting-started.html#getting-started-installation

Q: PutRecord와 PutRecordBatch 작업의 차이는 무엇인가요?

Kinesis Agent나 Firehose의 PutRecordPutRecordBatch 작업을 통해 Firehose 스트림에 데이터를 추가할 수 있습니다. PutRecord 작업에서는 API 직접 호출 시 단일 데이터 레코드를 사용할 수 있고, PutRecordBatch 작업에서는 API 직접 호출 시 여러 데이터 레코드를 사용할 수 있습니다. 자세한 내용은 PutRecordPutRecordBatch를 참조하세요.

Q: Amazon MSK의 Firehose 스트림에 데이터를 추가하려면 어떻게 해야 하나요?

AWS Console 또는 Firehose API를 통해 Firehose 스트림을 생성하거나 업데이트할 경우에는 Amazon MSK 클러스터/주제를 Firehose 스트림의 소스로 구성할 수 있습니다. 구성이 끝나면 Firehose가 MSK 주제에서 데이터를 자동으로 읽어와서 지정한 S3 버킷에 데이터를 로드합니다.

Q: Amazon MSK와 Firehose 통합의 주요 이점은 무엇인가요?

코드 작성 없이 Amazon MSK 주제에서 가져오는 스트리밍 데이터를 Amazon S3로 변환하고 로드하여 애플리케이션 운영의 복잡성과 오버헤드를 줄일 수 있습니다. 예를 들어 Amazon MSK 및 Firehose를 사용하면 Parquet/ORC 형식 변환, 데이터 버퍼링, 서비스 측 데이터 검증과 같은 기본 제공 데이터 변환 및 변환 기능을 코드 작성 없이 이용할 수 있습니다. 또한 자동 전송 재시도, 데이터 보존, Auto Scaling, 중복성 기능을 통해 데이터를 안정적으로 전달할 수 있습니다.

Q: Firehose에서 지원하는 Amazon MSK 엔드포인트 유형에는 어떤 것이 있나요?

이 기능을 사용하려면 MSK 클러스터에 퍼블릭 엔드포인트 또는 프라이빗 링크가 사용 설정되어 있어야 합니다.

Q: Firehose를 다른 AWS 계정의 Amazon MSK 클러스터에 연결할 수 있나요?

예. Firehose를 서로 다른 AWS 계정 내의 Amazon MSK 클러스터에 연결할 수 있습니다. Firehose에서 다른 계정에 속하는 S3 버킷으로 전송할 수도 있습니다.

Q: Amazon MSK 주제의 데이터를 사용하기 시작하는 체크포인트 시간은 언제인가요?

Amazon MSK 주제의 데이터를 사용하기 시작하는 체크포인트 시간은 Firehose 스트림의 생성 시간입니다. Firehose는 사용자 지정 오프셋 값을 읽지 않습니다.

Q: Kinesis Data Stream의 Firehose 스트림에 데이터를 추가하려면 어떻게 해야 하나요?

AWS Console 또는 Firehose API를 통해 Firehose 스트림을 생성하거나 업데이트할 경우에는 Firehose 스트림을 Firehose 스트림의 소스로 구성할 수 있습니다. 구성이 끝나면 Firehose가 Firehose 스트림에서 데이터를 자동으로 읽어와서 지정한 대상 위치에 로드합니다.

Q: Firehose는 Kinesis 스트림에서 데이터를 얼마나 자주 읽어오나요?

Firehose는 Kinesis 샤드마다 1초에 한 번씩 Kinesis Data Streams GetRecords()를직접적으로 호출합니다.

Q: Kinesis Data Stream을 Firehose 스트림의 소스로 구성할 경우 Firehose는 어디에서 데이터를 읽어오나요?

Kinesis Data Stream이 Firehose 스트림의 소스로 구성된 경우 Firehose는 Kinesis Data Stream의 LATEST 위치에서 데이터를 읽어오기 시작합니다. Kinesis Data Streams 위치에 대한 자세한 내용은 Kinesis Data Streams Service API 참조에서 GetShardIterator를 참조하세요.

Q: Kinesis Data Stream을 여러 Firehose 스트림의 소스로 구성할 수 있나요?

예. 가능합니다. 하지만 Firehose의 GetRecords() 직접 호출은 Kinesis 샤드의 전체 제한 한도에 포함되기 때문에 제한에 걸리지 않으려면 다른 Kinesis 애플리케이션과 함께 Firehose 스트림을 계획해야 합니다. 자세한 내용은 Kinesis Data Streams 개발자 안내서에서 Kinesis Data Streams Limits(Kinesis Data Streams 한도)를 참조하세요.

Q: Kinesis Data Stream이 소스로 구성된 경우에도 Kinesis Agent 또는 Firehose의 PutRecord 및 PutRecordBatch 작업을 통해 데이터를 Firehose 스트림에 추가할 수 있나요?

아닙니다. 추가할 수 없습니다. Kinesis Data Stream이 Firehose 스트림의 소스로 구성된 경우에는 Firehose의 PutRecord 및 PutRecordBatch 작업이 비활성화됩니다. 이때는 Kinesis Data Streams PutRecord 및 PutRecords 작업을 통해 데이터를 Kinesis Data Stream에 추가해야 합니다.

Q: AWS IoT의 Firehose 스트림에 데이터를 추가하려면 어떻게 해야 하나요?

이벤트를 Firehose 스트림으로 보내는 AWS IoT 작업을 생성하면 AWS IoT의 Firehose 스트림에 데이터를 추가할 수 있습니다. 자세한 정보는 Firehose 개발자 안내서에서 Writing to Amazon Data Firehose Using AWS IoT(AWS IoT를 사용하여 Amazon Data Firehose에 쓰기)를 참조하세요.

Q: VPC 흐름 로그를 Firehose로 스트리밍하려면 어떻게 해야 하나요?

AWS Console 또는 Firehose API를 통해 Firehose 스트림을 생성하거나 업데이트할 경우에는 Direct PUT을 Firehose 스트림의 소스로 구성할 수 있습니다. 스트림이 생성되면 VPC 흐름 로그 콘솔의 Vended Logs(Vended 로그) 섹션에서 생성된 Firehose 스트림을 Firehose 스트림으로 구성할 수 있습니다.

Q: AWS CloudWatch Logs의 Firehose 스트림에 데이터를 추가하려면 어떻게 해야 하나요?

이벤트를 Firehose 스트림으로 보내는 CloudWatch Logs 구독을 생성하면 CloudWatch Logs의 Firehose 스트림에 데이터를 추가할 수 있습니다. 자세한 내용은 Amazon CloudWatch 사용 설명서에서 Using CloudWatch Logs Subscription Filters(CloudWatch Logs 구독 필터 사용)를 참조하세요.

Q: CloudWatch Events의 Firehose 스트림에 데이터를 추가하려면 어떻게 해야 하나요?

Firehose 스트림을 대상으로 하는 CloudWatch Events 규칙을 생성하면 CloudWatch Events의 Firehose 스트림에 데이터를 추가할 수 있습니다. 자세한 내용은 Firehose 개발자 안내서에서 Writing to Amazon Data Firehose Using CloudWatch Events(CloudWatch Events를 사용하여 Amazon Data Firehose에 쓰기)를 참조하세요.

Q: AWS Eventbridge의 Amazon Data Firehose 스트림에 데이터를 추가하려면 어떻게 해야 하나요?

AWS EventBridge 콘솔에서 Firehose 스트림에 데이터를 추가합니다. 자세한 내용은 AWS EventBridge 설명서를 참조하세요.

Q: 어떤 종류의 암호화를 사용할 수 있나요?

Firehose를 사용하면 데이터가 Amazon S3 버킷에 전송된 후 데이터를 암호화할 수 있습니다. Firehose 스트림을 생성할 때 가지고 있는 AWS Key Management Service(KMS) 키로 데이터를 암호화하도록 선택할 수 있습니다. KMS에 대한 자세한 내용은 AWS Key Management Service를 참조하세요.

Q: Firehose 스트림을 생성할 때 지정해야 하는 IAM 역할은 무엇인가요?

Firehose는 사용자가 지정한 IAM 역할을 수임하여 Amazon S3 버킷 및 Amazon OpenSearch 도메인과 같은 리소스에 액세스합니다. 자세한 내용은 Firehose 개발자 안내서에서 Controlling Access with Firehose(Firehose를 통한 액세스 제어)를 참조하세요.

데이터 변환 및 형식 변환

Q: Firehose에서 원시 데이터를 준비하고 변환하려면 어떻게 해야 하나요?

Firehose에서는 자체 데이터 처리 파이프라인을 구축할 필요 없이 원시 데이터 또는 Json에서 대상 데이터 스토어에서 요구하는 형식(Apache Parquet, Apache ORC 등)으로 기본 데이터 형식을 변환할 수 있습니다. 또한 Firehose에서는 ‘customer_id’ 또는 ‘transaction_id’와 같은 정적 또는 동적으로 정의된 키를 사용하여 스트리밍 데이터를 S3에 전달하기 전에 이러한 데이터를 동적으로 파티셔닝할 수 있습니다. Firehose가 이러한 키별로 데이터를 그룹화하고 키 고유의 S3 접두사로 전달하므로 Athena, EMR 및 Redshift Spectrum을 사용하여 S3에서 고성능의 비용 효율적인 분석을 더욱 수월하게 수행할 수 있습니다.

Amazon Data Firehose의 기본 형식 변환 옵션과 더불어, AWS Lambda 함수를 사용하여 Firehose 스트림에서 수신되는 원시 데이터가 대상에 로드되기 전에 이를 준비하고 변환할 수도 있습니다. 새로운 Firehose 스트림을 생성하거나 기존 Firehose 스트림을 수정할 때 데이터 변환을 위한 AWS Lambda 함수를 구성할 수 있습니다. Amazon에서 작성한 여러 개의 Lambda Blue 인쇄물 중에서 선택하여 빠르게 시작할 수 있습니다. 전체 목록은 Amazon Data Firehose 개발자 안내서를 참조하세요.

Q: 어떤 압축 형식을 사용할 수 있나요?

Amazon Data Firehose에서는 Amazon S3로 데이터를 전송하기 전에 데이터를 압축할 수 있습니다. 현재 이 서비스에서는 GZIP, ZIP 및 SNAPPY 압축 형식을 지원합니다. 데이터가 Amazon Redshift로 로드되는 경우에는 GZIP 형식만 지원됩니다.

Q: CloudWatch Logs 구독 기능을 사용할 때 압축은 어떻게 작동하나요?

CloudWatch Logs 구독 기능을 사용하여 CloudWatch Logs의 데이터를 Firehose로 스트리밍할 수 있습니다. CloudWatch Logs의 모든 로그 이벤트는 이미 gzip 형식으로 압축되어 있으므로 Firehose의 압축 구성을 비압축으로 유지해야 이중으로 압축되는 것을 방지할 수 있습니다. CloudWatch Logs 구독 기능에 대한 자세한 내용은 Amazon CloudWatch Logs 사용 설명서에서 Subscription Filters with Amazon Data Firehose(Amazon Data Firehose에 대한 구독 필터)를 참조하세요.

Q: 준비되고 변환된 데이터를 내 AWS Lambda 함수에서 Amazon Data Firehose로 반환하려면 어떻게 해야 하나요?

Lambda를 통해 변환된 모든 레코드는 다음과 같은 3개의 파라미터와 함께 Firehose로 반환되어야 합니다. 그렇지 않은 경우 Firehose는 해당 레코드를 거부하고 이를 데이터 변환 실패로 간주합니다.

  • recordId: Firehose는 Lambda를 호출할 때 각 레코드와 함께 recordId를 전달합니다. 변환된 각 레코드는 정확히 같은 recordId와 함께 반환되어야 합니다. 원래 recordId와 반환된 recordId가 조금이라도 다르면 데이터 변환 실패로 간주됩니다.
  • result: 각 레코드의 변환 결과 상태. 이 파라미터에 대해서 허용되는 값은 다음과 같습니다. ‘Ok’는 레코드가 예상대로 성공적으로 변환된 경우를 말합니다. ‘Dropped’는 처리 로직이 예상대로 의도적으로 레코드를 중단한 경우를 말합니다. ‘ProcessingFailed’는 레코드가 예상과는 달리 변환될 수 없는 경우를 말합니다. Firehose는 SucceedProcessing.Records와 SucceedProcessing.Bytes 지표를 생성할 때 ‘Ok’ 및 ‘Dropped’ 상태로 반환된 레코드는 성공적으로 처리된 레코드로 간주하고 ‘ProcessingFailed’ 상태로 반환된 레코드는 처리한 실패한 레코드로 간주합니다.
  • data: based64 인코딩 후 변환된 데이터 페이로드.

Q: 오류 로깅이란 무엇인가요?

Lambda를 사용해 데이터 변환을 수행하는 경우 Firehose에서 모든 Lambda 호출과 데이터 전송 오류를 Amazon CloudWatch Logs에 기록할 수 있으므로 Lambda 호출 또는 데이터 전송에 실패한 경우 특정 오류 로그를 볼 수 있습니다. 자세한 내용은 Amazon CloudWatch Logs를 사용하여 모니터링 섹션을 참조하세요.

Q: 소스 레코드 백업이란 무엇인가요?

Lambda를 사용해 데이터 변환을 수행하는 경우 소스 레코드 백업을 활성화할 수 있습니다. 그러면 Amazon Data Firehose에서 변환되지 않은 수신 데이터가 별도의 S3 버킷으로 전송됩니다. Firehose를 통해 생성되는 ‘YYYY/MM/DD/HH’ UTC 시간 접두사 앞에 삽입할 추가 접두사를 지정할 수 있습니다.

Amazon S3를 위한 기본 데이터 변환

Q: Firehose 동적 파티셔닝은 언제 사용해야 하나요?

Firehose 동적 파티셔닝을 사용하면 소스 위치에서 또는 데이터 저장 후에 수동으로 파티셔닝할 때의 복잡성과 지연이 제거됩니다. 또한 분석 속도를 높여 최적화된 데이터 세트를 쿼리할 수 있습니다. 이를 통해 쿼리를 효과적으로 실행하기 위한 분석 도구로 데이터 세트를 즉시 사용할 수 있으며 데이터에 대한 세분화된 제어가 개선됩니다. 예를 들어 마케팅 자동화 고객은 고객 ID별로 즉시 데이터를 분할할 수 있으므로, 고객별 쿼리로 최적화된 데이터 세트를 쿼리하고 결과를 더욱 빠르게 전송할 수 있습니다. IT 운영 또는 보안 모니터링 고객은 로그에 포함된 이벤트 타임스탬프를 기반으로 한 그룹화를 생성할 수 있으므로, 최적화된 데이터 세트를 쿼리하고 결과를 더욱 빠르게 확보할 수 있습니다. 이 기능은 Amazon Data Firehose의 기존 JSON-to-Parquet 형식 변환 기능과 결합되어 Amazon Data Firehose는 S3를 위한 이상적인 스트리밍 ETL 옵션을 제공합니다.

Q: Firehose로 동적 파티셔닝을 설정하려면 어떻게 해야 하나요?

AWS Management Console, CLI 또는 SDK를 통해 Firehose 데이터 파티셔닝 기능을 설정할 수 있습니다. Firehose 스트림을 생성하거나 업데이트할 때 Amazon S3를 Firehose 스트림의 전송 대상으로 선택하고 동적 파티셔닝을 활성화합니다. 키를 지정하거나 런타임 시 평가할 표현식을 생성하여 파티셔닝에 사용할 키를 정의할 수 있습니다. 예를 들어 고객 ID와 같은 수신 스트림에서 데이터 필드를 선택하고 customer_id=!{partitionKey:customer_id}/와 같은 S3 접두사 표현식을 정의할 수 있습니다. 이 표현식은 S3 접두사가 레코드를 전달하는 위치를 정의하기 위해 수집된 레코드를 기반으로 런타임 시 평가합니다.

Q: 동적 파티셔닝 및 파티셔닝 키로 할 수 있는 변환 및 데이터 처리 유형은 무엇인가요?

Firehose는 데이터를 Amazon S3에 쓸 때 기본적으로 parquet/orc 변환을 지원합니다. 또한 Firehose를 Lambda 함수와 통합하여 자체 변환 코드를 작성할 수 있습니다. Firehose는 JSON 형식의 레코드에서 키 데이터 필드를 추출하는 기능도 기본적으로 지원합니다. 또한 Firehose는 JQ 구문 분석 언어를 지원하므로 파티션 키에서 변환을 수행할 수 있습니다. 자세히 알아보려면 Firehose 개발자 안내서를 참조하세요.

데이터 전송 및 대상

Q: 모든 원시 데이터 복사본을 내 S3 버킷에 보관할 수 있나요?

예. Firehose에서는 변환된 레코드를 대상에 전송하면서 동시에 변환되지 않은 모든 레코드를 S3 버킷에 백업할 수 있습니다. Firehose 스트림을 생성하거나 업데이트할 때 소스 레코드 백업을 활성화하면 됩니다.

Q: Firehose는 데이터를 Amazon S3 버킷으로 얼마나 자주 전송하나요?

Amazon S3로 데이터를 전송하는 빈도는 Firehose 스트림에 구성한 S3 버퍼 크기와 버퍼 간격에 따라 다릅니다. Firehose는 Amazon S3로 데이터를 전송하기 전에 수신 데이터를 버퍼링합니다. S3 버퍼 크기(1MB에서 128MB) 또는 버퍼 간격(60초에서 900초)의 값을 구성할 수 있으며, 둘 중에 먼저 만족하는 조건이 Amazon S3로 데이터가 전송되도록 트리거합니다. Apache Parquet 또는 동적 파티셔닝을 활성화한 경우, 버퍼 크기 단위는 MB이며 Amazon S3 대상의 경우 64MB~128MB입니다. 기본값은 128MB입니다. Firehose 스트림으로 데이터가 모이는 속도보다 대상으로 데이터가 전송되는 속도가 느릴 경우 Firehose는 이를 만회하기 위해 버퍼 크기를 동적으로 늘려 모든 데이터가 대상에 전달되도록 합니다.

Q: 데이터를 압축하도록 선택하는 경우, 버퍼 크기는 어떻게 적용되나요?

버퍼 크기는 압축 전에 적용됩니다. 따라서 데이터를 압축하도록 선택하면, Amazon S3 버킷 내의 객체 크기는 지정한 버퍼 크기보다 작을 수 있습니다.

Q: Firehose 스트림을 생성할 때 지정해야 하는 Amazon Redshift 사용자 권한은 무엇인가요?

Redshift 사용자는 데이터를 Amazon S3 버킷에서 Redshift 인스턴스로 복사하기 위한 Redshift INSERT 권한을 보유해야 합니다.

Q: Amazon Redshift 인스턴스가 VPC 내에 있다면 무엇을 해야 하나요?

Redshift 인스턴스가 VPC 내에 있는 경우 VPC에서 Firehose IP 주소 차단을 해제하여 Amazon Data Firehose에서 Redshift 인스턴스에 액세스할 수 있도록 권한을 부여해야 합니다. VPC에 대한 IP 차단을 해제하는 방법에 대한 정보는 Amazon Data Firehose 개발자 안내서에서 Grant Firehose Access to an Amazon Redshift Destination(Amazon Redshift 대상에 액세스할 수 있는 권한을 Firehose에 부여)을 참조하세요.

Q: Amazon Redshift를 대상으로 선택하면서 Amazon S3 버킷을 제공해야 하는 이유는 무엇인가요?

Redshift 대상의 경우 Amazon Data Firehose는 데이터를 먼저 Amazon S3 버킷으로 전송한 다음 Redshift COPY 명령을 실행하여 데이터를 S3 버킷에서 Redshift 인스턴스로 로드합니다.

Q: 단일 Firehose 스트림으로 여러 Snowflake 테이블에 데이터를 전송할 수 있나요?

현재, 단일 Firehose 스트림으로는 하나의 Snowflake 테이블에만 데이터를 전송할 수 있습니다. 여러 Snowflake 테이블에 데이터를 전송하려면 Firehose 스트림을 여러 개 생성해야 합니다.

Q: Firehose는 데이터를 Snowflake 스트리밍으로 전송할 때 어떤 전송 모델을 사용하나요?

Firehose는 Snowflake에 대해 정확히 1회 전송 체계를 사용합니다. 즉, 오류나 재시도가 있더라도 각 레코드는 정확히 한 번 Snowflake에 전송됩니다. 그러나 정확히 1회 전송한다고 해서 데이터 전체에 중복이 발생하지 않는다는 보장은 없습니다. 생산자 또는 ETL 파이프라인의 다른 부분에 의해 데이터가 중복될 수 있기 때문입니다.

Q: Firehose를 사용하여 Snowflake 스트리밍으로 전송할 때 최소 지연 시간은 얼마인가요?

대부분의 데이터 스트림은 5초 이내에 전송될 것으로 예상됩니다.

Q: Amazon OpenSearch Service란 무엇인가요?

Amazon OpenSearch Service는 대화형 로그 분석, 실시간 애플리케이션 모니터링, 웹사이트 검색 등을 쉽게 수행할 수 있도록 합니다. OpenSearch는 Elasticsearch에서 파생된 오픈 소스, 분산 검색 및 분석 제품군입니다. Amazon OpenSearch Service는 최신 버전의 OpenSearch을 제공하며, 19가지 버전의 Elasticsearch(버전 1.5~7.10)를 지원하고 OpenSearch Dashboards와 Kibana(버전 1.5~7.10)이 제공하는 시각화 기능을 제공합니다. Amazon OpenSearch에 대한 자세한 내용을 보려면 여기를 클릭하세요.

Q: Amazon OpenSearch Service 대상에 대한 인덱스 로테이션이란 무엇인가요?

Firehose는 시간 기간을 기준으로 Amazon OpenSearch Service 인덱스를 로테이션할 수 있습니다. Firehose 스트림을 생성할 때 이 시간 기간을 구성할 수 있습니다. 자세한 내용은 Amazon Data Firehose 개발자 안내서에서 Index Rotation for the Amazon OpenSearch Destination(Amazon OpenSearch 대상에 대한 인덱스 로테이션)을 참조하세요.

Q: Amazon OpenSearch Service를 대상으로 선택하면서 Amazon S3 버킷을 제공해야 하는 이유는 무엇인가요?

Amazon OpenSearch Service로 데이터를 로딩할 때 Firehose는 모든 데이터 또는 전송에 실패한 데이터만 백업할 수 있습니다. 이 기능을 활용하고 데이터 손실을 방지하기 위해서는 백업 Amazon S3 버킷을 제공해야 합니다.

Q: Firehose 스트림이 생성된 이후에 Firehose 스트림의 구성을 변경할 수 있나요?

Firehose 스트림이 생성된 후 언제든지 구성을 변경할 수 있습니다. Firehose 콘솔 또는 UpdateDestination 작업을 사용하여 변경하면 됩니다. 구성이 변경되는 동안에도 Firehose 스트림은 활성 상태로 유지되므로 데이터를 Firehose 스트림으로 계속해서 전송할 수 있습니다. 업데이트된 구성은 보통 몇 분 내에 적용됩니다.

VPC 대상에 전송할 때는 새 대상을 동일한 VPC, 서브넷 및 보안 그룹 내에서 액세스할 수 있는 경우에 한해 대상 엔드포인트 URL을 변경할 수 있습니다. VPC, 서브넷 및 보안 그룹을 변경하려면 Firehose 스트림을 재생성해야 합니다.

Q: 특정 계정의 Firehose 스트림을 사용하여 다른 계정의 Amazon OpenSearch Service 도메인 VPC 대상으로 데이터를 전송할 수 있나요?

Firehose와 Amazon OpenSearch Service가 퍼블릭 엔드포인트를 통해 연결된 경우에만 Firehose 전송을 Amazon OpenSearch Service의 다른 계정으로 전송할 수 있습니다.

Firehose와 Amazon OpenSearch Service가 프라이빗 VPC를 통해 연결된 경우 Firehose 스트림과 대상 Amazon OpenSearch Service 도메인 VPC가 동일한 계정에 있어야 합니다.

Q: 특정 리전의 Firehose 스트림을 사용하여 다른 리전의 Amazon OpenSearch Service 도메인 VPC 대상으로 데이터를 전송할 수 있나요?

아니요. Firehose 스트림과 대상 Amazon OpenSearch Service 도메인은 동일한 리전에 있어야 합니다.

Q: Firehose는 데이터를 Amazon OpenSearch 도메인으로 얼마나 자주 전송하나요?

Amazon OpenSearch Service로 데이터를 전송하는 빈도는 Firehose 스트림에 구성한 OpenSearch 버퍼 크기와 버퍼 간격에 따라 다릅니다. Firehose는 Amazon OpenSearch Service로 데이터를 전송하기 전에 수신 데이터를 버퍼링합니다. OpenSearch 버퍼 크기(1MB에서 100MB) 또는 버퍼 간격(60초에서 900초)의 값을 구성할 수 있으며, 둘 중에 먼저 충족되는 조건이 Amazon OpenSearch Service로 데이터가 전송되도록 트리거합니다. Firehose 스트림으로 데이터가 모이는 속도보다 대상으로 데이터가 전송되는 속도가 느릴 경우 Amazon Data Firehose는 이를 만회하기 위해 버퍼 크기를 동적으로 늘려 모든 데이터가 대상에 전달되도록 합니다.

Q: Amazon S3 버킷의 매니페스트 폴더란 무엇인가요?
Redshift 대상의 경우 Amazon Data Firehose는 Amazon S3 객체를 Redshift 인스턴스에 배치로 로드하기 위해 매니페스트 파일을 생성합니다. 매니페스트 폴더는 Firehose에서 생성한 매니페스트 파일을 저장합니다.

Q: 백업된 OpenSearch 문서는 Amazon S3 버킷에서 어떻게 표시되나요?
‘모든 문서’ 모드가 사용된 경우, Amazon Data Firehose는 Firehose 스트림의 버퍼링 구성에 따라 여러 수신 레코드를 연결한 다음, 이를 S3 버킷에 S3 객체로 전송합니다. 어떤 백업 모드가 구성되었는지와 관계없이, 실패한 문서는 오류 코드 및 전송을 시도한 시간과 같은 추가 정보를 제공하는 특정 JSON 형식을 사용해 S3 버킷에 전송됩니다. 자세한 내용은 Amazon Data Firehose 개발자 안내서에서 Amazon S3 Backup for the Amazon OpenSearch Destination(Amazon OpenSearch 대상에 대한 Amazon S3 백업)을 참조하세요.

Q: 단일 Firehose 스트림에서 여러 Amazon S3 버킷으로 데이터를 전송할 수 있나요?

단일 Firehose 스트림은 현재 1개의 Amazon S3 버킷으로만 데이터를 전송할 수 있습니다. 여러 S3 버킷으로 데이터를 전송하려면 여러 개의 Firehose 스트림을 생성하면 됩니다.

Q: 단일 Firehose 스트림에서 여러 Amazon Redshift 인스턴스 또는 테이블로 데이터를 전송할 수 있나요?

단일 Firehose 스트림은 현재 1개의 Redshift 인스턴스와 1개의 테이블로만 데이터를 전송할 수 있습니다. 여러 Redshift 인스턴스 또는 테이블로 데이터를 전송하려면 여러 개의 Firehose 스트림을 생성하면 됩니다.

Q: 단일 Firehose 스트림에서 여러 Amazon OpenSearch Service 도메인 또는 인덱스로 데이터를 전송할 수 있나요?

단일 Firehose 스트림은 현재 1개의 Amazon OpenSearch Service 도메인 및 1개의 인덱스로만 데이터를 전송할 수 있습니다. 여러 Amazon OpenSearch Service 도메인 또는 인덱스로 데이터를 전송하려면 여러 개의 Firehose 스트림을 생성하면 됩니다.

Q: Amazon Data Firehose는 데이터를 VPC 내 Amazon OpenSearch Service 도메인으로 어떻게 전송하나요?

Firehose를 사용하여 데이터를 VPC 내 Amazon OpenSearch Service 대상으로 전송하는 경우 Amazon Data Firehose는 선택한 각 서브넷에 대해 VPC 내에 1개 이상의 크로스 계정 탄력적 네트워크 인터페이스(ENI)를 생성합니다. Amazon Data Firehose는 이 ENI를 사용하여 데이터를 VPC로 전송합니다. ENI의 개수는 서비스 요구 사항에 따라 자동으로 늘어납니다.

Firehose 스트림 문제 해결 및 관리

Q: Amazon Data Firehose 스트림으로 데이터를 전송할 때 전송이 제한되는 이유는 무엇인가요?

기본적으로 각 Firehose 스트림은 최대 초당 트랜잭션 2,000건, 초당 레코드 5,000개 및 초당 5MB를 수용할 수 있습니다. 서비스 한도 증가 양식을 제출하면 간단하게 이러한 한도를 늘릴 수 있습니다.

Q: Amazon S3 버킷, Amazon Redshift 테이블 또는 Amazon OpenSearch 인덱스 또는 Splunk 클러스터에 중복된 레코드가 있는 이유는 무엇인가요?

Amazon Data Firehose에서는 데이터 전송에 ‘최소 한 번’이라는 의미 체계를 사용합니다. 드문 경우지만 예를 들어 데이터 전송 시도 중에 요청 제한 시간이 초과하는 경우, Firehose에서 전송을 재시도하고 이전 요청도 결국 수행되면, 데이터 중복이 발생합니다.

Q: Amazon S3 버킷으로 데이터를 전송하는 데 실패하면 어떤 일이 발생하나요?

데이터 소스가 Direct PUT이고 Amazon S3 버킷으로 데이터를 전송하는 데 실패한 경우 Amazon Data Firehose는 5초 간격으로 최대 24시간 동안 데이터 전송을 재시도합니다. 24시간의 최대 보존 기간이 지나도 문제가 지속되면 이후 Amazon Data Firehose에서 데이터를 취소합니다.

데이터 소스가 Kinesis Data Streams이고 Amazon S3 버킷으로 데이터를 전송하는 데 실패하면 이후 Amazon Data Firehose에서 5초 간격으로 최대 Kinesis Data Streams가 구성된 기간 동안 데이터 전송을 재시도합니다.

Q: Amazon Redshift 인스턴스로 데이터를 전송하는 데 실패하면 어떤 일이 발생하나요?

Redshift 인스턴스로 데이터를 전송하는 데 실패하면 Amazon Data Firehose에서 5분 간격으로 최대 120분 동안 데이터 전송을 재시도합니다. 120분이 지나면 Amazon Data Firehose는 COPY를 수행할 준비가 된 현재 S3 객체 배치를 건너뛰고 다음 배치로 진행합니다. 건너뛴 객체에 대한 정보는 오류 폴더에 매니페스트 파일로서 S3 버킷에 전송되고, 수동 백필에 사용할 수 있습니다. 매니페스트 파일을 사용해 데이터를 수동으로 복사하는 방법에 대한 정보는 Using a Manifest to Specify Data Files(매니페스트 파일을 사용하여 데이터 파일 지정)를 참조하세요.

Q: Amazon OpenSearch 도메인으로 데이터를 전송하는 데 실패하면 어떤 일이 발생하나요?

Amazon OpenSearch Service 대상의 경우 Firehose 스트림을 생성할 때 재시도 기간을 0초에서 7,200초 범위에서 지정할 수 있습니다. Amazon OpenSearch 도메인으로 데이터를 전송하는 데 실패하면 Amazon Data Firehose에서 지정된 시간 동안 데이터 전송을 재시도합니다. 재시도 기간이 지나면 Amazon Data Firehose는 현재 데이터 배치를 건너뛰고 다음 배치로 진행합니다. 건너뛴 문서에 대한 상세 정보는 S3 버킷의 opensearch_failed 폴더로 전송되고, 수동 백필에 사용할 수 있습니다.

Q: 데이터 변환에 실패하면 어떻게 됩니까?

Firehose가 데이터 변환을 위해 Lambda 함수를 호출하려고 시도할 때 실패하는 시나리오에는 2가지 유형이 있습니다.

  • 첫 번째 유형은 네트워크 제한 시간에 걸리거나 Lambda 호출 한도에 도달하여 함수 호출이 실패하는 경우입니다. 이러한 이유로 실패한 경우에는 Firehose에서 기본적으로 3번 호출을 재시도한 후 해당 레코드 배치를 건너뜁니다. 건너뛴 레코드는 처리에 실패한 레코드로 간주됩니다. CreateDeliveryStream 및 UpdateDeliveryStream API를 사용하여 호출 재시도 수를 0에서 300 사이로 설정할 수 있습니다 이러한 실패 유형의 경우 Firehose의 오류 로깅 기능을 사용하여 간접 호출 오류를 CloudWatch Logs로 내보낼 수도 있습니다. 자세한 내용은 Monitoring with Amazon CloudWatch Logs(Amazon CloudWatch Logs를 사용하여 모니터링)를 참조하세요.
  • 실패 시나리오의 두 번째 유형은 레코드의 변환 결과가 Lambda 함수에서 반환될 때 ‘ProcessingFailed’로 설정된 경우입니다. Firehose에서는 이러한 레코드를 처리에 실패한 레코드로 간주합니다. 이러한 실패 유형의 경우 Lambda의 로깅 기능을 사용하여 오류 로그를 CloudWatch Logs로 내보낼 수 있습니다. 자세한 내용은 Accessing Amazon CloudWatch Logs for AWS Lambda(AWS Lambda에 대한 Amazon CloudWatch Logs 액세스)를 참조하세요.

실패 시나리오의 두 유형 모두 처리에 실패한 레코드는 S3 버킷의 processing_failed 폴더로 전송됩니다.

Q: 전송된 S3 객체의 크기가 Firehose 스트림 구성에 지정한 버퍼 크기보다 큰 이유는 무엇인가요?

전송된 S3 객체의 크기는 버퍼 크기 조건이 버퍼 간격 조건보다 먼저 충족되는 대부분의 경우 지정된 버퍼 크기가 반영됩니다. 하지만 대상으로 데이터가 전송되는 속도가 Firehose 스트림에 데이터를 쓰는 속도보다 느릴 경우 Firehose는 이를 만회하기 위해 버퍼 크기를 동적으로 늘려 모든 데이터가 대상에 전달되도록 합니다. 이러한 경우, 전송된 S3 객체의 크기는 지정한 버퍼 크기보다 클 수 있습니다.

Q: Amazon S3 버킷의 오류 폴더란 무엇인가요?

오류 폴더는 Redshift 인스턴스로 로드하는 데 실패한 S3 객체의 정보를 담고 있는 매니페스트 파일을 저장합니다. Redshift COPY 명령을 수동으로 실행하여 이러한 객체를 다시 로드할 수 있습니다. 매니페스트 파일을 사용해 데이터를 수동으로 복사하는 방법에 대한 정보는 Using a Manifest to Specify Data Files(매니페스트 파일을 사용하여 데이터 파일 지정)를 참조하세요.

Q: Amazon S3 버킷의 opensearch_failed 폴더란 무엇인가요?

opensearch_failed 폴더는 Amazon OpenSearch에 로드되지 못한 문서를 저장합니다. Amazon OpenSearch 도메인으로 데이터가 전송되지 않으면 어떻게 되나요? 백필을 위해 해당 문서를 수동으로 다시 인덱싱할 수 있습니다.

Q: 내 Amazon S3 버킷의 processing_failed 폴더란 무엇입니까?

processing_failed 폴더는 AWS Lambda 함수에서 변환에 실패한 레코드를 저장합니다. 이러한 레코드는 수동으로 다시 처리할 수 있습니다.

Q: Amazon Data Firehose 스트림의 운영 및 성능을 모니터링하려면 어떻게 해야 하나요?

Firehose 콘솔에 수신 데이터 볼륨과 전송 데이터 볼륨 같은 주요 운영 및 성능 지표가 표시됩니다. 또한 Amazon Data Firehose는 Amazon CloudWatch Metrics와 통합되므로 Firehose 스트림에 대한 지표를 수집, 확인 및 분석할 수 있습니다. Amazon Data Firehose 지표에 대한 자세한 내용은 Amazon Data Firehose 개발자 안내서에서 Monitoring with Amazon CloudWatch Metrics(Amazon CloudWatch Metrics로 모니터링)를 참조하세요.

Q: Amazon Data Firehose 스트림의 데이터 변환 및 데이터 전송 실패를 모니터링하려면 어떻게 해야 하나요?

Amazon Data Firehose는 Amazon CloudWatch Logs와 통합되므로 데이터 변환 또는 전송이 실패하면 특정 오류 로그를 확인할 수 있습니다. Firehose 스트림을 생성할 때 오류 로깅을 활성화할 수 있습니다. 자세한 내용은 Amazon Data Firehose 개발자 안내서에서 Monitoring with Amazon CloudWatch Logs(Amazon CloudWatch Logs로 모니터링)를 참조하세요.

Q: Amazon Data Firehose 스트림에 대한 액세스를 관리하고 제어하려면 어떻게 해야 하나요?

Amazon Data Firehose는 AWS 서비스 및 리소스에 대한 사용자 액세스를 안전하게 제어할 수 있도록 지원하는 서비스인 AWS Identity and Access Management와 통합됩니다. 예를 들어 특정 사용자 또는 그룹만 Firehose 스트림에 데이터를 추가할 수 있도록 허용하는 정책을 생성할 수 있습니다. 스트림에 대한 액세스 관리 및 제어에 대한 자세한 내용은 Controlling Access with Amazon Data Firehose(Amazon Data Firehose를 통한 액세스 제어)를 참조하세요.

Q: 보안 분석 및 운영 문제 해결을 위해 Amazon Data Firehose 스트림에 대한 API 직접 호출을 기록하려면 어떻게 해야 하나요?

Amazon Data Firehose는 계정에 대한 AWS API 직접 호출을 기록하고 로그 파일을 사용자에게 전달하는 서비스인 AWS CloudTrail과 통합됩니다. API 직접 호출 로깅 및 지원되는 Amazon Data Firehose API 작업 목록에 대한 자세한 내용은 Logging Amazon Data Firehose API calls Using AWS CloudTrail(AWS CloudTrail을 사용하여 Amazon Data Firehose API 호출 로깅)을 참조하세요.

요금 및 결제

Q: AWS 프리 티어에서 Firehose를 사용할 수 있나요?

아니요. Firehose는 현재 AWS 프리 티어에서 사용할 수 없습니다. AWS 프리 티어는 AWS 서비스 그룹을 무료로 체험해 볼 수 있는 프로그램입니다. 자세한 내용은 AWS 프리 티어를 참조하세요.

Q: Firehose 요금은 얼마인가요?

Firehose는 사용한 만큼 지불하는 간편한 요금제를 사용합니다. 선결제 비용이나 최소 요금이 없으며 사용한 리소스에 대해서만 비용을 지불하면 됩니다. Amazon Data Firehose 요금은 Firehose에서 모은 데이터 볼륨(GB)을 기준으로 부과되며 각 레코드는 Direct PUT 및 Kinesis Data Streams을 소스로 사용하는 경우 5KB 단위로 올림 처리됩니다. Vended 로그를 소스로 사용하는 경우 요금은 Firehose를 통해 모은 데이터 볼륨(GB)을 기준으로 합니다. Amazon Data Firehose 비용에 대한 자세한 내용은 Amazon Data Firehose 요금을 참조하세요.

Q: PutRecordBatch 작업을 사용하여 Amazon Data Firehose로 데이터를 전송할 때 5KB 단위 올림은 어떻게 계산되나요?

5KB 단위로 올림은 API 작업 수준이 아니라 레코드 수준에서 계산됩니다. 예를 들어, PutRecordBatch 호출에 2개의 1KB 레코드가 포함된 경우 해당 호출의 데이터 볼륨은 10KB로 측정됩니다(레코드당 5KB).

Q: Firehose 비용에는 Amazon S3, Amazon Redshift, Amazon OpenSearch Service 및 AWS Lambda 비용이 포함되어 있나요?

아니요. 스토리지와 요청 비용을 비롯하여 Amazon S3, Amazon Redshift, Amazon OpenSearch Service 및 AWS Lambda 사용과 관련된 요금은 별도로 청구됩니다. 자세한 내용은 Amazon S3 요금, Amazon Redshift 요금, Amazon OpenSearch Service 요금AWS Lambda 요금을 참조하세요.

서비스 수준 계약

Q: Amazon Data Firehose SLA는 무엇을 보장하나요?

Amazon Data Firehose SLA는 Amazon Data Firehose에 대해 최소 99.9%의 월간 가동률을 보장합니다.

Q: SLA 서비스 크레딧을 수령할 자격이 있는지 어떻게 알 수 있나요?

같은 리전 내에서 작업을 실행하고 있는 하나 이상의 가용 영역의 월간 가동률이 월별 청구 주기 동안 99.9%보다 낮은 경우, Amazon Data Firehose SLA에 따라 Amazon Data Firehose의 SLA 크레딧 지급 대상이 됩니다.

SLA 이용 약관과 요청 제출 방법에 대한 자세한 내용은 Amazon Data Firehose SLA 세부 정보 페이지를 참조하세요.

Amazon Data Firehose 요금에 대해 자세히 알아보기

요금 페이지로 이동
시작할 준비가 되셨나요?
가입
추가 질문이 있으십니까?
문의하기