Amazon Data Firehose를 사용하여 테이블에 데이터 스트리밍
Amazon Data Firehose는 Amazon S3, Amazon Redshift, Amazon OpenSearch Service, Splunk, Apache Iceberg Tables 그리고 모든 사용자 지정 HTTP 엔드포인트 또는 서드 파티 서비스 제공업체가 소유 및 지원하는 HTTP 엔드포인트 등의 대상으로 실시간 스트리밍 데이터
다음 단계를 완료하여 S3 테이블 버킷의 테이블로 Firehose 스트리밍을 설정합니다.
-
S3 Tables로 데이터를 전송하도록 Firehose를 구성합니다. 이렇게 하려면 Firehose가 테이블에 액세스할 수 있도록 허용하는 AWS Identity and Access Management(IAM) 서비스 역할을 생성합니다.
-
Firehose 서비스 역할에 테이블 또는 테이블의 네임스페이스에 대한 명시적 권한을 부여합니다. 자세한 내용은 테이블 리소스에 대한 Lake Formation 권한 부여를 참조하세요.
Firehose가 S3 테이블을 대상으로 사용하도록 역할 생성
Firehose에는 AWS Glue 테이블에 액세스하고 S3 테이블에 데이터를 쓸 수 있는 특정 권한이 있는 IAM 서비스 역할이 필요합니다. Firehose 스트림을 생성할 때 이 IAM 역할을 제공해야 합니다.
https://console.aws.amazon.com/iam/
에서 IAM 콘솔을 엽니다. -
왼쪽 탐색 창에서 정책을 선택합니다.
-
정책 생성을 선택하고 정책 편집기에서 JSON을 선택합니다.
-
데이터 카탈로그의 모든 데이터베이스 및 테이블에 권한을 부여하는 다음 인라인 정책을 추가합니다. 원하는 경우 특정 테이블 및 데이터베이스에 대해서만 권한을 부여할 수 있습니다. 이 정책을 사용하려면
를 실제 정보로 대체합니다.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를 참조하세요.
-
정책을 생성한 후 AWS 서비스를 신뢰할 수 있는 엔터티 유형으로 설정하여 IAM 역할을 생성합니다.
-
서비스 또는 사용 사례에서 Kinesis를 선택합니다. 사용 사례로 Kinesis Firehose를 선택합니다.
-
다음을 선택하고 앞에서 만든 정책을 선택합니다.
-
역할에 이름을 지정합니다. 역할 세부 정보를 검토하고 역할 생성을 선택합니다. 역할은 다음과 같은 신뢰 정책을 갖게 됩니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Principal": { "Service": [ "firehose.amazonaws.com" ] } } ] }
S3 테이블로 Firehose 스트림 생성
다음 절차에서는 콘솔을 사용하여 S3 테이블에 데이터를 전송하도록 Firehose 스트림을 생성하는 방법을 보여줍니다. S3로 Firehose 스트림을 설정하려면 다음 사전 조건을 충족해야 합니다.
사전 조건
-
Firehose가 S3 Tables에 액세스하기 위한 역할을 생성합니다.
테이블에 액세스하기 위해 생성한 Firehose 서비스 역할에 Lake Formation 권한을 부여합니다.
스트림을 구성할 때 Firehose에 라우팅 정보를 제공하려면 네임스페이스를 데이터베이스 이름으로 사용하고 해당 네임스페이스에 있는 테이블의 이름을 사용합니다. Firehose 스트림 구성의 고유 키 섹션에서 이러한 값을 사용하여 데이터를 단일 테이블로 라우팅할 수 있습니다. 이 값을 사용하여 JSON 쿼리 표현식을 사용하여 테이블로 라우팅할 수도 있습니다. 자세한 정보는 Route incoming records to a single Iceberg table을 참조하세요.
S3 테이블로 Firehose 스트림을 설정하는 방법(콘솔)
https://console.aws.amazon.com/firehose/
에서 Firehose 콘솔을 엽니다. -
Firehose 스트림 생성을 선택합니다.
-
소스에서 다음 소스 중 하나를 선택합니다.
-
Amazon Kinesis Data Streams
-
Amazon MSK
-
Direct PUT
-
-
대상에서 Apache Iceberg Tables를 선택합니다.
-
Firehose 스트림 이름을 입력합니다.
-
소스 설정을 구성합니다.
-
대상 설정에서 현재 계정을 선택하여 계정의 테이블로 스트리밍하거나 교차 계정을 선택하여 다른 계정의 테이블로 스트리밍합니다.
현재 계정의 테이블의 경우 카탈로그 드롭다운에서 S3 Tables 카탈로그를 선택합니다.
교차 계정의 테이블의 경우 다른 계정에서 스트리밍하려는 카탈로그의 카탈로그 ARN을 입력합니다.
-
고유 키 구성, JSONQuery 표현식을 사용하거나 Lambda 함수에서 데이터베이스 및 테이블 이름을 구성합니다. 자세한 내용은 Amazon Data Firehose 개발자 안내서의 Route incoming records to a single Iceberg table 및 Route incoming records to different Iceberg tables을 참조하세요.
-
백업 설정에서 S3 백업 버킷을 지정합니다.
-
기존 IAM 역할의 경우 고급 설정에서 Firehose에 대해 생성한 IAM 역할을 선택합니다.
Firehose 스트림 생성을 선택합니다.
스트림에 대해 구성할 수 있는 다른 설정에 대한 자세한 내용은 Amazon Data Firehose 개발자 안내서의 Set up the Firehose stream을 참조하세요.