RDS for PostgreSQL - Amazon OpenSearch Service

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

RDS for PostgreSQL

Amazon RDS for RDS for PostgreSQL을 사용하여 OpenSearch Ingestion 파이프라인을 구성하려면 다음 단계를 완료하세요.

RDS for PostgreSQL 사전 조건

OpenSearch Ingestion 파이프라인을 생성하기 전에 다음 단계를 수행하세요.

  1. Amazon RDS에서 사용자 지정 DB 파라미터 그룹을 생성하여 논리적 복제를 구성합니다.

    rds.logical_replication=1

    자세한 내용은 Amazon RDS for PostgreSQL에 대한 논리적 복제 수행을 참조하세요.

  2. RDS for PostgreSQL DB 인스턴스를 선택하거나 생성하고 1단계에서 생성한 파라미터 그룹을 DB 인스턴스와 연결합니다.

  3. Aurora 및에서 암호 관리를 사용하여 Amazon RDS 인스턴스에 사용자 이름과 암호 AWS Secrets Manager 인증을 설정합니다. Secrets Manager 보안 암호를 생성하여 사용자 이름/암호 조합을 생성할 수도 있습니다.

  4. 전체 초기 스냅샷 기능을 사용하는 경우 Amazon RDS에서 Amazon S3로 데이터를 내보내기 위한 AWS KMS key 및 IAM 역할을 생성합니다.

    IAM 역할에는 다음과 같은 권한 정책이 있어야 합니다.

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Sid": "ExportPolicy", "Effect": "Allow", "Action": [ "s3:PutObject*", "s3:ListBucket", "s3:GetObject*", "s3:DeleteObject*", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::s3-bucket-used-in-pipeline", "arn:aws:s3:::s3-bucket-used-in-pipeline/*" ] } ] }

    역할에는 다음과 같은 신뢰 관계도 있어야 합니다.

    JSON
    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "export.rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  5. OpenSearch Service 도메인 또는 OpenSearch Serverless 컬렉션을 선택하거나 생성합니다. 자세한 내용은 OpenSearch Service 도메인 생성컬렉션 생성을 참조하세요.

  6. 리소스 기반 정책을 도메인에 연결하거나 데이터 액세스 정책을 컬렉션에 연결합니다. 이러한 액세스 정책을 통해 OpenSearch Ingestion은 Amazon RDS DB 인스턴스의 데이터를 도메인 또는 컬렉션에 쓸 수 있습니다.

1단계: 파이프라인 역할 구성

Amazon RDS 파이프라인 사전 조건을 설정한 후 파이프라인 구성에 사용할 파이프라인 역할을 구성합니다. 또한 Amazon 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": "allowNetworkInterfacesActions", "Effect": "Allow", "Action": [ "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:DeleteNetworkInterfacePermission", "ec2:DetachNetworkInterface", "ec2:DescribeNetworkInterfaces" ], "Resource": [ "arn:aws:ec2:*:account-id:network-interface/*", "arn:aws:ec2:*:account-id:subnet/*", "arn:aws:ec2:*:account-id:security-group/*" ] }, { "Sid": "allowDescribeEC2", "Effect": "Allow", "Action": [ "ec2:Describe*" ], "Resource": "*" }, { "Sid": "allowTagCreation", "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": "arn:aws:ec2:*:account-id:network-interface/*", "Condition": { "StringEquals": { "aws:RequestTag/OSISManaged": "true" } } }, { "Sid": "AllowDescribeInstances", "Effect": "Allow", "Action": [ "rds:DescribeDBInstances" ], "Resource": [ "arn:aws:rds:region:account-id:db:*" ] }, { "Sid": "AllowSnapshots", "Effect": "Allow", "Action": [ "rds:DescribeDBSnapshots", "rds:CreateDBSnapshot", "rds:AddTagsToResource" ], "Resource": [ "arn:aws:rds:region:account-id:db:DB-id", "arn:aws:rds:region:account-id:snapshot:DB-id*" ] }, { "Sid": "AllowExport", "Effect": "Allow", "Action": [ "rds:StartExportTask" ], "Resource": [ "arn:aws:rds:region:account-id:snapshot:DB-id*" ] }, { "Sid": "AllowDescribeExports", "Effect": "Allow", "Action": [ "rds:DescribeExportTasks" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "region", "aws:ResourceAccount": "account-id" } } }, { "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" ] }, { "Sid": "SecretsManagerReadAccess", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue" ], "Resource": [ "arn:aws:secretsmanager:*:account-id:secret:*" ] } ] }

2단계: 파이프라인 생성

RDS for PostgreSQL 인스턴스를 소스로 지정하는 다음과 같이 OpenSearch Ingestion 파이프라인을 구성합니다.

version: "2" rds-postgres-pipeline: source: rds: db_identifier: "instance-id" engine: postgresql database: "database-name" tables: include: - "schema1.table1" - "schema2.table2" s3_bucket: "bucket-name" s3_region: "bucket-region" s3_prefix: "prefix-name" export: kms_key_id: "kms-key-id" iam_role_arn: "export-role-arn" stream: true aws: sts_role_arn: "arn:aws:iam::account-id:role/pipeline-role" region: "us-east-1" authentication: username: ${{aws_secrets:secret:username}} password: ${{aws_secrets:secret:password}} sink: - opensearch: hosts: ["https://search-mydomain.us-east-1.es.amazonaws.com"] index: "${getMetadata(\"table_name\")}" index_type: custom document_id: "${getMetadata(\"primary_key\")}" action: "${getMetadata(\"opensearch_action\")}" document_version: "${getMetadata(\"document_version\")}" document_version_type: "external" aws: sts_role_arn: "arn:aws:iam::account-id:role/pipeline-role" region: "us-east-1" extension: aws: secrets: secret: secret_id: "rds-secret-id" region: "us-east-1" sts_role_arn: "arn:aws:iam::account-id:role/pipeline-role" refresh_interval: PT1H
참고

미리 구성된 Amazon RDS 블루프린트를 사용하여이 파이프라인을 생성할 수 있습니다. 자세한 내용은 블루프린트 작업 단원을 참조하십시오.

Amazon Aurora를 소스로 사용하려면 파이프라인에 대한 VPC 액세스를 구성해야 합니다. 선택한 VPC는 Amazon Aurora 소스에서 사용하는 것과 동일한 VPC여야 합니다. 그런 다음 하나 이상의 서브넷과 하나 이상의 VPC 보안 그룹을 선택합니다. 파이프라인에는 Aurora MySQL 데이터베이스에 대한 네트워크 액세스가 필요하므로 Aurora 클러스터가 파이프라인의 VPC 보안 그룹에서 데이터베이스 포트로의 인바운드 트래픽을 허용하는 VPC 보안 그룹으로 구성되어 있는지도 확인해야 합니다. 자세한 내용은 보안 그룹을 사용한 액세스 제어를 참조하세요.

를 사용하여 파이프라인 AWS Management Console 을 생성하는 경우 Amazon Aurora를 소스로 사용하려면 VPC에 파이프라인도 연결해야 합니다. 이렇게 하려면 네트워크 구성 섹션을 찾고 VPC에 연결을 선택한 다음 제공된 기본 옵션 중 하나에서 CIDR을 선택하거나 직접 선택합니다. RFC 1918 Best Current Practice에 정의된 대로 프라이빗 주소 공간에서 모든 CIDR을 사용할 수 있습니다.

사용자 지정 CIDR을 제공하려면 드롭다운 메뉴에서 기타를 선택합니다. OpenSearch Ingestion과 Amazon RDS 간의 IP 주소 충돌을 방지하려면 Amazon Aurora VPC CIDR이 OpenSearch Ingestion의 CIDR과 다른지 확인합니다.

자세한 내용은 파이프라인에 대한 VPC 액세스 구성을 참조하세요.

데이터 일관성

파이프라인은 Amazon RDS 인스턴스의 변경 사항을 지속적으로 폴링하거나 수신하고 OpenSearch 인덱스에서 해당 문서를 업데이트하여 데이터 일관성을 보장합니다.

OpenSearch Ingestion은 데이터 내구성을 보장하는 엔드 투 엔드 승인을 지원합니다. 파이프라인에서는 스냅샷이나 스트림을 읽을 때 병렬 처리를 위해 동적으로 분할을 생성합니다. 파이프라인에서는 OpenSearch 도메인이나 컬렉션에서 모든 레코드를 수집한 후 승인을 받으면 분할을 완료 상태로 표시합니다. OpenSearch Serverless 검색 컬렉션에 수집하려는 경우 파이프라인에서 문서 ID를 생성할 수 있습니다. OpenSearch Serverless 시계열 컬렉션에 수집하려면 파이프라인이 문서 ID를 생성하지 않으므로 파이프라인 싱크 구성document_id: "${getMetadata(\"primary_key\")}"에서를 생략해야 합니다.

또한 OpenSearch Ingestion 파이프라인에서는 수신 이벤트 작업을 해당하는 대량 인덱싱 작업에 매핑하여 문서를 쉽게 수집할 수 있게 합니다. 이렇게 하면 데이터가 일관되게 유지되므로 Amazon RDS의 모든 데이터 변경 사항이 OpenSearch의 해당 문서 변경 사항과 조정됩니다.

데이터 형식 매핑

OpenSearch Ingestion 파이프라인은 PostgreSQL 데이터 형식을 OpenSearch Service 도메인 또는 컬렉션이 사용하기에 적합한 표현에 매핑합니다. OpenSearch에 매핑 템플릿이 정의되지 않은 경우 OpenSearch는 처음 전송된 문서를 기반으로 동적 매핑을 사용하여 필드 유형을 자동으로 결정합니다. 매핑 템플릿을 통해 OpenSearch에서 가장 적합한 필드 유형을 명시적으로 정의할 수도 있습니다.

아래 표에는 RDS for PostgreSQL 데이터 형식과 해당 OpenSearch 필드 형식이 나와 있습니다. 명시적 매핑이 정의되지 않은 경우 기본 OpenSearch 필드 유형 열에 OpenSearch의 해당 필드 유형이 표시됩니다. 이 경우 OpenSearch는 동적 매핑을 사용하여 필드 유형을 자동으로 결정합니다. 권장 OpenSearch 필드 유형 열은 매핑 템플릿에서 명시적으로 지정하는 해당 권장 필드 유형입니다. 이러한 필드 유형은 RDS for PostgreSQL의 데이터 형식과 더 밀접하게 정렬되며 일반적으로 OpenSearch에서 더 나은 검색 기능을 사용할 수 있습니다.

RDS for PostgreSQL 데이터 형식 기본 OpenSearch 필드 유형 권장 OpenSearch 필드 유형
smallint long bigint
정수 long 정수
bigint long long
decimal 텍스트 double 또는 키워드
숫자[(p, s) ] 텍스트 double 또는 키워드
real float float
double precision float double
smallserial long bigint
serial long 정수
bigserial long long
money 객체 객체
character varying(n) 텍스트 텍스트
varchar(n) 텍스트 텍스트
character(n) 텍스트 텍스트
char(n) 텍스트 텍스트
bpchar(n) 텍스트 텍스트
bpchar 텍스트 텍스트
텍스트 텍스트 텍스트
enum 텍스트 텍스트
bytea 텍스트 이진수
타임스탬프 [ (p) ] [ 시간대 없음 ] long(에포크 밀리초) date
시간대가 있는 타임스탬프 [ (p) ] long(에포크 밀리초) date
date long(에포크 밀리초) date
time [ (p) ](시간대 제외) long(에포크 밀리초) date
시간대가 있는 시간 [ (p) ] long(에포크 밀리초) date
간격 [ 필드 ] [ (p) ] text(ISO8601 형식) 텍스트
boolean boolean boolean
point text(WKT 형식) geo_shape
line text(WKT 형식) geo_shape
lseg text(WKT 형식) geo_shape
상자 text(WKT 형식) geo_shape
경로 text(WKT 형식) geo_shape
다각형 text(WKT 형식) geo_shape
객체 객체
cidr 텍스트 텍스트
inet 텍스트 텍스트
macaddr 텍스트 텍스트
macaddr8 텍스트 텍스트
bit(n) long byte, short, integer 또는 long(비트 수에 따라 다름)
bit varying(n) long byte, short, integer 또는 long(비트 수에 따라 다름)
json 객체 객체
jsonb 객체 객체
jsonpath 텍스트 텍스트

OpenSearch Ingestion 파이프라인에서 DLQ(Dead Letter Queue)를 구성하는 것이 좋습니다. 이 대기열을 구성하면 OpenSearch Service에서는 동적 매핑 실패로 인해 수집할 수 없는 모든 실패한 문서를 대기열로 전송합니다.

자동 매핑이 실패할 경우 파이프라인 구성에서 template_typetemplate_content를 사용하여 명시적 매핑 규칙을 정의할 수 있습니다. 또는 파이프라인을 시작하기 전에 검색 도메인이나 컬렉션에서 직접 매핑 템플릿을 생성할 수도 있습니다.

제한 사항

RDS for PostgreSQL용 OpenSearch Ingestion 파이프라인을 설정할 때 다음 제한 사항을 고려하세요.

  • 통합은 파이프라인당 하나의 PostgreSQL 데이터베이스만 지원합니다.

  • 통합은 현재 리전 간 데이터 수집을 지원하지 않습니다. Amazon RDS 인스턴스와 OpenSearch 도메인은 동일한에 있어야 합니다 AWS 리전.

  • 통합은 현재 교차 계정 데이터 수집을 지원하지 않습니다. Amazon RDS 인스턴스와 OpenSearch Ingestion 파이프라인은 동일한에 있어야 합니다 AWS 계정.

  • 지원되는 유일한 인증 메커니즘 AWS Secrets Manager인를 사용하여 Amazon RDS 인스턴스에 인증이 활성화되어 있는지 확인합니다.

  • 다른 데이터베이스 및/또는 다른 테이블에서 데이터를 수집하도록 기존 파이프라인 구성을 업데이트할 수 없습니다. 파이프라인의 데이터베이스 및/또는 테이블 이름을 업데이트하려면 파이프라인을 중지하고 업데이트된 구성으로 다시 시작하거나 새 파이프라인을 생성해야 합니다.

  • 데이터 정의 언어(DDL) 문은 일반적으로 지원되지 않습니다. 다음과 같은 경우에는 데이터 일관성이 유지되지 않습니다.

    • 기본 키가 변경됩니다(add/delete/rename).

    • 테이블이 삭제/절단됩니다.

    • 열 이름 또는 데이터 형식이 변경됩니다.

  • 동기화할 PostgreSQL 테이블에 기본 키가 정의되지 않은 경우 데이터 일관성이 보장되지 않습니다. 업데이트/삭제를 OpenSearch에 동기화하려면 OpenSearch 및 싱크 구성에서 사용자 지정 document_id 옵션을 올바르게 정의해야 합니다 OpenSearch.

  • RDS 다중 AZ DB 클러스터는 지원되지 않습니다.

  • 지원되는 버전: PostgreSQL 16 이상.

권장되는 CloudWatch 경보

수집 파이프라인의 성능을 모니터링하려면 다음 CloudWatch 지표를 사용하는 것이 좋습니다. 이러한 지표는 내보내기에서 처리된 데이터의 양, 스트림에서 처리된 이벤트 수, 내보내기 및 스트림 이벤트 처리 오류, 대상에 기록된 문서 수를 식별하는 데 도움이 될 수 있습니다. 이러한 지표 중 하나가 지정된 시간 동안 지정된 값을 초과하면 작업을 수행하도록 CloudWatch 경보를 설정할 수 있습니다.

지표 설명
pipeline-name.rds.credentialsChanged 이 지표는 AWS 보안 암호가 교체되는 빈도를 나타냅니다.
pipeline-name.rds.executorRefreshErrors 이 지표는 AWS 보안 암호 새로 고침 실패를 나타냅니다.
pipeline-name.rds.exportRecordsTotal 이 지표는 Amazon Aurora에서 내보낸 레코드 수를 나타냅니다.
pipeline-name.rds.exportRecordsProcessed 이 지표는 OpenSearch Ingestion 파이프라인에서 처리한 레코드 수를 나타냅니다.
pipeline-name.rds.exportRecordProcessingErrors 이 지표는 Amazon Aurora 클러스터에서 데이터를 읽는 동안 OpenSearch Ingestion 파이프라인의 처리 오류 수를 나타냅니다.
pipeline-name.rds.exportRecordsSuccessTotal 이 지표는 성공적으로 처리한 내보내기 레코드의 총 수를 나타냅니다.
pipeline-name.rds.exportRecordsFailedTotal 이 지표는 처리하지 못한 내보내기 레코드의 총 수를 나타냅니다.
pipeline-name.rds.bytesReceived 이 지표는 OpenSearch Ingestion 파이프라인에서 수신한 총 바이트 수를 나타냅니다.
pipeline-name.rds.bytesProcessed 이 지표는 OpenSearch Ingestion 파이프라인에서 처리한 총 바이트 수를 나타냅니다.
pipeline-name.rds.streamRecordsSuccessTotal 이 지표는 스트림에서 성공적으로 처리한 레코드 수를 나타냅니다.
pipeline-name.rds.streamRecordsFailedTotal 이 지표는 스트림에서 처리하지 못한 총 레코드 수를 나타냅니다.