Amazon Data Firehose를 사용하여 테이블에 데이터 스트리밍 - Amazon Simple Storage Service

Amazon Data Firehose를 사용하여 테이블에 데이터 스트리밍

Amazon Data Firehose는 Amazon S3, Amazon Redshift, Amazon OpenSearch Service, Splunk, Apache Iceberg Tables 그리고 모든 사용자 지정 HTTP 엔드포인트 또는 서드 파티 서비스 제공업체가 소유 및 지원하는 HTTP 엔드포인트 등의 대상으로 실시간 스트리밍 데이터를 전송하는 완전관리형 서비스입니다. Amazon Data Firehose를 사용하면 애플리케이션을 쓰거나 리소스를 관리할 필요가 없습니다. 데이터 생산자가 데이터를 Firehose로 보내도록 구성하면 지정한 대상으로 데이터를 자동 전송합니다. 전송 전에 데이터를 변환하도록 Firehose를 구성할 수도 있습니다. Amazon Data Firehose에 대해 자세히 알아보려면 What is Amazon Data Firehose?를 참조하세요.

다음 단계를 완료하여 S3 테이블 버킷의 테이블로 Firehose 스트리밍을 설정합니다.

  1. 테이블 버킷을 AWS 분석 서비스와 통합합니다.

  2. S3 Tables로 데이터를 전송하도록 Firehose를 구성합니다. 이렇게 하려면 Firehose가 테이블에 액세스할 수 있도록 허용하는 AWS Identity and Access Management(IAM) 서비스 역할을 생성합니다.

  3. Firehose 서비스 역할에 테이블 또는 테이블의 네임스페이스에 대한 명시적 권한을 부여합니다. 자세한 내용은 테이블 리소스에 대한 Lake Formation 권한 부여를 참조하세요.

  4. 데이터를 테이블로 라우팅하는 Firehose 스트림을 생성합니다.

Firehose가 S3 테이블을 대상으로 사용하도록 역할 생성

Firehose에는 AWS Glue 테이블에 액세스하고 S3 테이블에 데이터를 쓸 수 있는 특정 권한이 있는 IAM 서비스 역할이 필요합니다. Firehose 스트림을 생성할 때 이 IAM 역할을 제공해야 합니다.

  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 정책을 선택합니다.

  3. 정책 생성을 선택하고 정책 편집기에서 JSON을 선택합니다.

  4. 데이터 카탈로그의 모든 데이터베이스 및 테이블에 권한을 부여하는 다음 인라인 정책을 추가합니다. 원하는 경우 특정 테이블 및 데이터베이스에 대해서만 권한을 부여할 수 있습니다. 이 정책을 사용하려면 user input placeholders를 실제 정보로 대체합니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "S3TableAccessViaGlueFederation", "Effect": "Allow", "Action": [ "glue:GetTable", "glue:GetDatabase", "glue:UpdateTable" ], "Resource": [ "arn:aws:glue:region:account-id:catalog/s3tablescatalog/*", "arn:aws:glue:region:account-id:catalog/s3tablescatalog", "arn:aws:glue:region:account-id:catalog", "arn:aws:glue:region:account-id:database/*", "arn:aws:glue:region:account-id:table/*/*" ] }, { "Sid": "S3DeliveryErrorBucketPermission", "Effect": "Allow", "Action": [ "s3:AbortMultipartUpload", "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::error delivery bucket", "arn:aws:s3:::error delivery bucket/*" ] }, { "Sid": "RequiredWhenUsingKinesisDataStreamsAsSource", "Effect": "Allow", "Action": [ "kinesis:DescribeStream", "kinesis:GetShardIterator", "kinesis:GetRecords", "kinesis:ListShards" ], "Resource": "arn:aws:kinesis:region:account-id:stream/stream-name" }, { "Sid": "RequiredWhenDoingMetadataReadsANDDataAndMetadataWriteViaLakeformation", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": "*" }, { "Sid": "RequiredWhenUsingKMSEncryptionForS3ErrorBucketDelivery", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:region:account-id:key/KMS-key-id" ], "Condition": { "StringEquals": { "kms:ViaService": "s3.region.amazonaws.com" }, "StringLike": { "kms:EncryptionContext:aws:s3:arn": "arn:aws:s3:::error delivery bucket/prefix*" } } }, { "Sid": "LoggingInCloudWatch", "Effect": "Allow", "Action": [ "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:region:account-id:log-group:log-group-name:log-stream:log-stream-name" ] }, { "Sid": "RequiredWhenAttachingLambdaToFirehose", "Effect": "Allow", "Action": [ "lambda:InvokeFunction", "lambda:GetFunctionConfiguration" ], "Resource": [ "arn:aws:lambda:region:account-id:function:function-name:function-version" ] } ] }

    이 정책에는 Kinesis Data Streams에 대한 액세스, Lambda 함수 간접 호출, AWS KMS 키에 대한 액세스를 허용하는 문이 있습니다. 이러한 리소스를 사용하지 않는 경우, 해당 문을 제거할 수 있습니다.

    오류 로깅이 활성화되면 Firehose는 데이터 전송 오류도 CloudWatch 로그 그룹 및 스트림으로 보냅니다. 이를 위해서는 로그 그룹 및 로그 스트림 이름을 구성해야 합니다. 로그 그룹 및 로그 스트림 이름은 Monitor Amazon Data Firehose Using CloudWatch Logs를 참조하세요.

  5. 정책을 생성한 후 AWS 서비스신뢰할 수 있는 엔터티 유형으로 설정하여 IAM 역할을 생성합니다.

  6. 서비스 또는 사용 사례에서 Kinesis를 선택합니다. 사용 사례Kinesis Firehose를 선택합니다.

  7. 다음을 선택하고 앞에서 만든 정책을 선택합니다.

  8. 역할에 이름을 지정합니다. 역할 세부 정보를 검토하고 역할 생성을 선택합니다. 역할은 다음과 같은 신뢰 정책을 갖게 됩니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Principal": { "Service": [ "firehose.amazonaws.com" ] } } ] }

S3 테이블로 Firehose 스트림 생성

다음 절차에서는 콘솔을 사용하여 S3 테이블에 데이터를 전송하도록 Firehose 스트림을 생성하는 방법을 보여줍니다. S3로 Firehose 스트림을 설정하려면 다음 사전 조건을 충족해야 합니다.

사전 조건

스트림을 구성할 때 Firehose에 라우팅 정보를 제공하려면 네임스페이스를 데이터베이스 이름으로 사용하고 해당 네임스페이스에 있는 테이블의 이름을 사용합니다. Firehose 스트림 구성의 고유 키 섹션에서 이러한 값을 사용하여 데이터를 단일 테이블로 라우팅할 수 있습니다. 이 값을 사용하여 JSON 쿼리 표현식을 사용하여 테이블로 라우팅할 수도 있습니다. 자세한 정보는 Route incoming records to a single Iceberg table을 참조하세요.

S3 테이블로 Firehose 스트림을 설정하는 방법(콘솔)
  1. https://console.aws.amazon.com/firehose/에서 Firehose 콘솔을 엽니다.

  2. Firehose 스트림 생성을 선택합니다.

  3. 소스에서 다음 소스 중 하나를 선택합니다.

    • Amazon Kinesis Data Streams

    • Amazon MSK

    • Direct PUT

  4. 대상에서 Apache Iceberg Tables를 선택합니다.

  5. Firehose 스트림 이름을 입력합니다.

  6. 소스 설정을 구성합니다.

  7. 대상 설정에서 현재 계정을 선택하여 계정의 테이블로 스트리밍하거나 교차 계정을 선택하여 다른 계정의 테이블로 스트리밍합니다.

    • 현재 계정의 테이블의 경우 카탈로그 드롭다운에서 S3 Tables 카탈로그를 선택합니다.

    • 교차 계정의 테이블의 경우 다른 계정에서 스트리밍하려는 카탈로그의 카탈로그 ARN을 입력합니다.

  8. 고유 키 구성, JSONQuery 표현식을 사용하거나 Lambda 함수에서 데이터베이스 및 테이블 이름을 구성합니다. 자세한 내용은 Amazon Data Firehose 개발자 안내서Route incoming records to a single Iceberg tableRoute incoming records to different Iceberg tables을 참조하세요.

  9. 백업 설정에서 S3 백업 버킷을 지정합니다.

  10. 기존 IAM 역할의 경우 고급 설정에서 Firehose에 대해 생성한 IAM 역할을 선택합니다.

  11. Firehose 스트림 생성을 선택합니다.

스트림에 대해 구성할 수 있는 다른 설정에 대한 자세한 내용은 Amazon Data Firehose 개발자 안내서Set up the Firehose stream을 참조하세요.