RDS source
출처: 문서
본문
RDS 소스
rds 소스는 Amazon Relational Database Service (Amazon RDS)와 Amazon Aurora 데이터베이스에서 변경 데이터 캡처(CDC)를 가능하게 해요. 데이터베이스 복제 로그를 사용해 INSERT, UPDATE, DELETE 같은 데이터베이스 이벤트를 수신할 수 있고, Amazon Simple Storage Service (Amazon S3)로의 RDS 내보내기를 활용한 초기 로드도 지원해요.
이 소스는 다음 데이터베이스 엔진을 지원해요:
- Aurora MySQL 및 Aurora PostgreSQL
- RDS MySQL 및 RDS PostgreSQL
이 소스는 Aurora/RDS에서 데이터를 수집하기 위한 두 가지 수집 옵션을 제공해요:
- Export: Aurora/RDS에서 S3로 전체 초기 내보내기를 수행하면 Aurora/RDS 데이터베이스의 현재 상태가 초기 로드돼요.
- Stream: 데이터베이스 복제 로그(MySQL
binlog또는 PostgreSQL WAL)에서 이벤트를 스트리밍해요.
사용 방법
다음 예제 파이프라인은 rds 소스를 지정해요. Aurora MySQL 클러스터에서 데이터를 수집해요:
version: "2"
rds-pipeline:
source:
rds:
db_identifier: "my-rds-instance"
engine: "aurora-mysql"
database: "mydb"
authentication:
username: "myuser"
password: "mypassword"
s3_bucket: "my-export-bucket"
s3_region: "us-west-2"
s3_prefix: "rds-exports"
export:
kms_key_id: "arn:aws:kms:us-west-2:123456789012:key/12345678-1234-1234-1234-123456789012"
export_role_arn: "arn:aws:iam::123456789012:role/rds-export-role"
stream: true
aws:
region: "us-west-2"
sts_role_arn: "arn:aws:iam::123456789012:role/my-pipeline-role"
구성 옵션
다음 표는 rds 소스의 구성 옵션을 설명해요.
| 옵션 | 필수 여부 | 타입 | 설명 |
|---|---|---|---|
db_identifier |
예 | String | RDS 인스턴스 또는 Aurora 클러스터의 식별자예요. |
cluster |
아니요 | Boolean | db_identifier가 클러스터(true)를 가리키는지, 인스턴스(false)를 가리키는지 나타내요. 기본값은 false예요. Aurora 엔진에서는 이 옵션이 항상 true예요. |
engine |
예 | String | 데이터베이스 엔진 타입이에요. mysql, postgresql, aurora-mysql, aurora-postgresql 중 하나여야 해요. |
database |
예 | String | 연결할 데이터베이스의 이름이에요. |
tables |
아니요 | Object | 포함하거나 제외할 테이블을 지정하기 위한 구성이에요. 자세한 내용은 tables를 참고하세요. |
authentication |
예 | Object | 데이터베이스 인증 자격 증명이에요. 자세한 내용은 authentication을 참고하세요. |
aws |
예 | Object | AWS 구성이에요. 자세한 내용은 aws를 참고하세요. |
acknowledgments |
아니요 | Boolean | true이면 OpenSearch 싱크가 이벤트를 수신했을 때 소스가 엔드 투 엔드 승인을 받을 수 있어요. 기본값은 true예요. |
s3_data_file_acknowledgment_timeout |
아니요 | Duration | 승인과 함께 사용할 때 RDS 내보내기에서 읽은 데이터가 만료되기까지의 경과 시간이에요. 기본값은 30분이에요. |
stream_acknowledgment_timeout |
아니요 | Duration | 승인과 함께 사용할 때 데이터베이스 스트림에서 읽은 데이터가 만료되기까지의 경과 시간이에요. 기본값은 10분이에요. |
s3_bucket |
예 | String | RDS 내보내기 데이터가 저장될 S3 버킷의 이름이에요. |
s3_prefix |
아니요 | String | 내보내기 버킷에 있는 S3 객체의 접두사예요. |
s3_region |
아니요 | String | S3 버킷의 AWS 리전이에요. 지정하지 않으면 aws 구성에 지정된 것과 동일한 리전을 사용해요. |
partition_count |
아니요 | Integer | S3 버퍼의 폴더 파티션 수예요. 1에서 1,000 사이의 값이어야 해요. 기본값은 100이에요. |
export |
아니요 | Object | RDS 내보내기 작업에 대한 구성이에요. 자세한 내용은 export를 참고하세요. |
stream |
아니요 | Boolean | 데이터베이스 변경 이벤트 스트리밍을 활성화할지 여부예요. 기본값은 false예요. |
tls |
아니요 | Object | 데이터베이스 연결을 위한 TLS 구성이에요. 자세한 내용은 tls를 참고하세요. |
disable_s3_read_for_leader |
아니요 | Boolean | 리더 노드에 대한 S3 읽기 작업을 비활성화할지 여부예요. 기본값은 false예요. |
aws
AWS 구성에서는 다음 옵션을 사용해요.
| 옵션 | 필수 여부 | 타입 | 설명 |
|---|---|---|---|
region |
아니요 | String | 자격 증명에 사용할 AWS 리전이에요. 기본값은 리전을 결정하는 표준 SDK 동작이에요. |
sts_role_arn |
아니요 | String | Amazon RDS와 Amazon S3에 요청을 보낼 때 수임할 AWS Security Token Service (AWS STS) 역할이에요. 기본값은 null이며, 이 경우 자격 증명을 위한 표준 SDK 동작을 사용해요. |
sts_external_id |
아니요 | String | STS 역할을 수임할 때 사용할 외부 ID예요. 2자에서 1,224자 사이여야 해요. |
sts_header_overrides |
아니요 | Map | 소스 플러그인을 위해 AWS Identity and Access Management (IAM) 역할이 수임하는 헤더 재정의 맵이에요. 최대 5개의 헤더까지 지정할 수 있어요. |
authentication
데이터베이스 인증에는 다음 옵션을 사용해요.
| 옵션 | 필수 여부 | 타입 | 설명 |
|---|---|---|---|
username |
예 | String | 인증에 사용할 데이터베이스 사용자 이름이에요. |
password |
예 | String | 인증에 사용할 데이터베이스 비밀번호예요. |
tables
데이터 캡처에 포함할 테이블을 지정하려면 다음 옵션을 사용해요.
| 옵션 | 필수 여부 | 타입 | 설명 |
|---|---|---|---|
include |
아니요 | List | 데이터 캡처에 포함할 테이블 이름 목록이에요. 최대 1,000개의 테이블까지 지정할 수 있어요. 지정하면 이 테이블들만 처리돼요. |
exclude |
아니요 | List | 데이터 캡처에서 제외할 테이블 이름 목록이에요. 최대 1,000개의 테이블까지 지정할 수 있어요. 이 테이블들은 include 패턴과 일치하더라도 무시돼요. |
export options
다음 옵션으로 RDS 내보내기 기능을 사용자 지정할 수 있어요.
| 옵션 | 필수 여부 | 타입 | 설명 |
|---|---|---|---|
kms_key_id |
예 | String | 내보내기 데이터를 암호화하는 데 사용할 AWS Key Management Service (AWS KMS) 키 ID 또는 Amazon Resource Name (ARN)이에요. |
export_role_arn |
예 | String | RDS가 내보내기 작업을 수행하기 위해 수임할 IAM 역할의 ARN이에요. |
tls options
다음 옵션으로 데이터베이스 연결의 TLS를 구성할 수 있어요.
| 옵션 | 필수 여부 | 타입 | 설명 |
|---|---|---|---|
insecure |
아니요 | Boolean | 데이터베이스 연결에 대한 TLS 암호화를 비활성화할지 여부예요. 기본값은 false(TLS 활성화)예요. |
노출되는 메타데이터 속성
rds 소스가 처리하는 각 이벤트에는 다음 메타데이터가 추가돼요. 이 메타데이터 속성에는 표현식 문법의 getMetadata 함수를 사용해 접근할 수 있어요.
primary_key: 데이터베이스 레코드의 기본 키예요. 복합 기본 키가 있는 테이블에서는 값이|구분자로 연결돼요.event_timestamp: 데이터베이스 변경이 발생한 시각의 epoch 밀리초 값이에요. 내보내기 이벤트에서는 내보내기 시각을, 스트림 이벤트에서는 트랜잭션 커밋 시각을 나타내요.document_version: 문서 버전으로 사용하기 위해 이벤트 타임스탬프에서 생성된 long 정수 값이에요.opensearch_action: 이벤트를 OpenSearch로 보낼 때 사용할 벌크 작업이에요. 예를 들어index또는delete가 있어요.change_event_type: 스트림 이벤트의 타입이에요.insert,update,delete중 하나예요.table_name: 이벤트가 발생한 데이터베이스 테이블의 이름이에요.schema_name: 이벤트가 발생한 스키마의 이름이에요. MySQL의 경우schema_name은database_name과 같아요.database_name: 이벤트가 발생한 데이터베이스의 이름이에요.ingestion_type: 이벤트가 내보내기에서 발생했는지, 스트림에서 발생했는지를 나타내요. 유효한 값은EXPORT와STREAM이에요.s3_partition_key: 이벤트는 처리 전에 S3 스테이징 버킷에 저장돼요. 이 메타데이터는 처리 전에 이벤트가 저장되는 S3 버킷 내의 위치를 나타내요.
권한
RDS를 소스로 실행하는 데 필요한 권한은 다음과 같아요:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "allowReadingFromS3Buckets",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:DeleteObject",
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::s3_bucket",
"arn:aws:s3:::s3_bucket/*"
]
},
{
"Sid": "AllowDescribeInstances",
"Effect": "Allow",
"Action": [
"rds:DescribeDBInstances"
],
"Resource": [
"arn:aws:rds:region:account-id:db:*"
]
},
{
"Sid": "AllowDescribeClusters",
"Effect": "Allow",
"Action": [
"rds:DescribeDBClusters"
],
"Resource": [
"arn:aws:rds:region:account-id:cluster:*"
]
},
{
"Sid": "AllowSnapshots",
"Effect": "Allow",
"Action": [
"rds:DescribeDBClusterSnapshots",
"rds:CreateDBClusterSnapshot",
"rds:DescribeDBSnapshots",
"rds:CreateDBSnapshot",
"rds:AddTagsToResource"
],
"Resource": [
"arn:aws:rds:region:account-id:cluster:*",
"arn:aws:rds:region:account-id:cluster-snapshot:*",
"arn:aws:rds:region:account-id:db:*",
"arn:aws:rds:region:account-id:snapshot:*"
]
},
{
"Sid": "AllowExport",
"Effect": "Allow",
"Action": [
"rds:StartExportTask"
],
"Resource": [
"arn:aws:rds:region:account-id:cluster:*",
"arn:aws:rds:region:account-id:cluster-snapshot:*",
"arn:aws:rds:region:account-id:snapshot:*"
]
},
{
"Sid": "AllowDescribeExports",
"Effect": "Allow",
"Action": [
"rds:DescribeExportTasks"
],
"Resource": "*"
},
{
"Sid": "AllowAccessToKmsForExport",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:DescribeKey",
"kms:RetireGrant",
"kms:CreateGrant",
"kms:ReEncrypt*",
"kms:GenerateDataKey*"
],
"Resource": [
"arn:aws:kms:region:account-id:key/export-key-id"
]
},
{
"Sid": "AllowPassingExportRole",
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": [
"arn:aws:iam::account-id:role/export-role"
]
}
]
}
메트릭
rds 소스에는 다음 메트릭이 포함돼요:
exportJobSuccess: 성공한 RDS 내보내기 작업 수예요.exportJobFailure: 실패한 RDS 내보내기 작업 수예요.exportS3ObjectsTotal: S3에서 발견된 내보내기 데이터 파일의 총 개수예요.exportS3ObjectsProcessed: S3에서 성공적으로 처리된 내보내기 데이터 파일의 총 개수예요.exportS3ObjectsErrors: S3에서 처리에 실패한 내보내기 데이터 파일의 총 개수예요.exportRecordsTotal: 내보내기에서 발견된 레코드의 총 개수예요.exportRecordsProcessed: 성공적으로 처리된 내보내기 레코드의 총 개수예요.exportRecordsProcessingErrors: 내보내기 레코드 처리 오류 수예요.changeEventsProcessed: 데이터베이스 스트림에서 처리된 변경 이벤트 수예요.changeEventsProcessingErrors: 데이터베이스 스트림의 변경 이벤트 처리 오류 수예요.bytesReceived: 소스가 수신한 바이트의 총 개수예요.bytesProcessed: 소스가 처리한 바이트의 총 개수예요.positiveAcknowledgementSets: 스트림 처리에서 긍정 승인된 승인 세트 수예요.negativeAcknowledgementSets: 스트림 처리에서 부정 승인된 승인 세트 수예요.checkpointCount: 스트림 처리에서 체크포인트의 총 개수예요.noDataExtendLeaseCount: 마지막 체크포인트 이후 처리된 새 데이터가 없는 파티션에서 리스가 연장된 횟수예요.giveupPartitionCount: 파티션이 포기된 횟수예요.replicationLogEntryProcessingTime: 복제 로그 이벤트를 처리하는 데 걸린 시간이에요.replicationLogEntryProcessingErrors: 처리에 실패한 복제 로그 이벤트 수예요.