

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

# Amazon RDS에서 OpenSearch Ingestion 파이프라인 사용
<a name="configure-client-rds"></a>

Amazon RDS와 함께 OpenSearch Ingestion 파이프라인을 사용하여 기존 데이터를 내보내고 변경 사항(예: 생성, 업데이트 및 삭제)을 Amazon OpenSearch Service 도메인 및 컬렉션으로 스트리밍할 수 있습니다. OpenSearch Ingestion 파이프라인은 변경 데이터 캡처(CDC) 인프라를 통합하여 지연 시간을 최소화하면서 대규모로 Amazon RDS에서 데이터를 지속적으로 스트리밍할 수 있도록 합니다. RDS for MySQL 및 RDS for PostgreSQL이 지원됩니다.

Amazon RDS를 데이터 처리를 위한 소스로 사용하는 두 가지 방법(전체 초기 스냅샷 사용 또는 사용 안 함)이 있습니다. 전체 초기 스냅샷은 지정된 테이블의 스냅샷이며, 이 스냅샷은 Amazon S3로 내보내집니다. 그러면 OpenSearch Ingestion 파이프라인이 이 스냅샷을 도메인의 한 인덱스로 보내거나 분할하여 도메인의 여러 인덱스로 보냅니다. Amazon RDS와 OpenSearch의 데이터를 일관되게 유지하기 위해 파이프라인에서는 Amazon RDS 인스턴스의 테이블에 있는 모든 생성, 업데이트 및 삭제 이벤트를 하나 이상의 OpenSearch 인덱스에 저장된 문서와 동기화합니다.

전체 초기 스냅샷을 사용하는 경우 OpenSearch Ingestion 파이프라인에서는 먼저 스냅샷을 수집한 다음, Amazon RDS 변경 스트림에서 데이터를 읽기 시작합니다. 실제로 처리의 시간 차이가 거의 없기 때문에 Amazon RDS와 OpenSearch 간에 실시간에 가까운 데이터 일관성이 유지됩니다.

또한 Amazon RDS와의 OpenSearch Ingestion 통합을 사용하여 변경 데이터 캡처를 추적하고 Aurora에서 OpenSearch로의 모든 업데이트를 수집할 수 있습니다. 다른 메커니즘의 전체 스냅샷이 이미 있거나 Amazon RDS 인스턴스의 데이터에 대한 모든 변경 사항을 캡처하려는 경우 이 옵션을 선택합니다.

이 옵션을 선택하면 [Amazon RDS for MySQL 바이너리 로깅을 구성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html)하거나 [Amazon RDS for PostgresSQL DB 인스턴스에 대한 논리적 복제를 설정](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.pglogical.setup-replication.html)해야 합니다.

**Topics**
+ [RDS for MySQL](rds-mysql.md)
+ [RDS for PostgreSQL](rds-PostgreSQL.md)

# RDS for MySQL
<a name="rds-mysql"></a>

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

**Topics**
+ [RDS for MySQL 사전 조건](#rds-mysql-prereqs)
+ [1단계: 파이프라인 역할 구성](#rds-mysql-pipeline-role)
+ [2단계: 파이프라인 생성](#rds-mysql-pipeline)
+ [데이터 일관성](#rds-mysql-pipeline-consistency)
+ [데이터 형식 매핑](#rds-mysql-pipeline-mapping)
+ [제한 사항](#rds-mysql-pipeline-limitations)
+ [권장되는 CloudWatch 경보](#aurora-mysql-pipeline-metrics)

## RDS for MySQL 사전 조건
<a name="rds-mysql-prereqs"></a>

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

1. Amazon RDS에서 사용자 지정 DB 파라미터 그룹을 생성하여 바이너리 로깅을 구성하고 다음 파라미터를 설정합니다.

   ```
   binlog_format=ROW
   binlog_row_image=full
   binlog_row_metadata=FULL
   ```

   또한 `binlog_row_value_options` 파라미터가 `PARTIAL_JSON`으로 설정되어 있지 않아야 합니다.

   자세한 내용은 [RDS for MySQL 이진 로깅 구성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_LogAccess.MySQL.BinaryFormat.html)을 참조하세요.

1. [RDS for MySQL DB 인스턴스를 선택하거나 생성하고](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_CreateDBInstance.html) 이전 단계에서 생성한 파라미터 그룹을 DB 인스턴스와 연결합니다.

1. 데이터베이스에서 자동 백업이 활성화되어 있는지 확인합니다. 자세한 내용은 [자동 백업 활성화](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithAutomatedBackups.Enabling.html)를 참조하세요.

1. 예를 들어 복제가 발생하기에 충분한 시간(예: 24시간)으로 바이너리 로그 보존을 구성합니다. 자세한 내용은 *Amazon RDS 사용 설명서*의 [이진수 로그 구성 설정 및 표시](https://docs.aws.amazon.com//AmazonRDS/latest/UserGuide/mysql-stored-proc-configuring.html)를 참조하세요.

1. [Amazon RDS 및 AWS Secrets Manager에서 암호 관리를 사용](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-secrets-manager.html)하여 Amazon RDS 인스턴스에서 사용자 이름과 암호 인증을 설정합니다. [Secrets Manager 보안 암호를 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)하여 사용자 이름/암호 조합을 생성할 수도 있습니다.

1. 전체 초기 스냅샷 기능을 사용하는 경우 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"
           }
       ]
   }
   ```

------

1. OpenSearch Service 도메인 또는 OpenSearch Serverless 컬렉션을 선택하거나 생성합니다. 자세한 내용은 [OpenSearch Service 도메인 생성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomains) 및 [컬렉션 생성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-create)을 참조하세요.

1. [리소스 기반 정책](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-types-resource)을 도메인에 연결하거나 [데이터 액세스 정책](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html)을 컬렉션에 연결합니다. 이러한 액세스 정책을 통해 OpenSearch Ingestion은 Amazon RDS DB 인스턴스의 데이터를 도메인 또는 컬렉션에 쓸 수 있습니다.

## 1단계: 파이프라인 역할 구성
<a name="rds-mysql-pipeline-role"></a>

Amazon RDS 파이프라인 사전 조건을 설정한 후 [파이프라인 구성에 사용할 파이프라인 역할을 구성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security-overview.html#pipeline-security-sink)합니다. 또한 Amazon RDS 소스에 대한 다음 권한을 역할에 추가합니다.

------
#### [ JSON ]

****  

```
{
    "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:*:111122223333:network-interface/*",
    "arn:aws:ec2:*:111122223333:subnet/*",
    "arn:aws:ec2:*:111122223333:security-group/*"
    ]
    },
    {
    "Sid": "allowDescribeEC2",
    "Effect": "Allow",
    "Action": [
    "ec2:Describe*"
    ],
    "Resource": "*"
    },
    {
    "Sid": "allowTagCreation",
    "Effect": "Allow",
    "Action": [
    "ec2:CreateTags"
    ],
    "Resource": "arn:aws:ec2:*:111122223333:network-interface/*",
    "Condition": {
    "StringEquals": {
    "aws:RequestTag/OSISManaged": "true"
    }
    }
    },
    {
    "Sid": "AllowDescribeInstances",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBInstances"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:db:*"
    ]
    },
    {
    "Sid": "AllowSnapshots",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBSnapshots",
    "rds:CreateDBSnapshot",
    "rds:AddTagsToResource"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:db:DB-id",
    "arn:aws:rds:us-east-2:111122223333:snapshot:DB-id*"
    ]
    },
    {
    "Sid": "AllowExport",
    "Effect": "Allow",
    "Action": [
    "rds:StartExportTask"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:snapshot:DB-id*"
    ]
    },
    {
    "Sid": "AllowDescribeExports",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeExportTasks"
    ],
    "Resource": "*",
    "Condition": {
    "StringEquals": {
    "aws:RequestedRegion": "us-east-2",
    "aws:ResourceAccount": "111122223333"
    }
    }
    },
    {
    "Sid": "AllowAccessToKmsForExport",
    "Effect": "Allow",
    "Action": [
    "kms:Decrypt",
    "kms:Encrypt",
    "kms:DescribeKey",
    "kms:RetireGrant",
    "kms:CreateGrant",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*"
    ],
    "Resource": [
    "arn:aws:kms:us-east-2:111122223333:key/export-key-id"
    ]
    },
    {
    "Sid": "AllowPassingExportRole",
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": [
    "arn:aws:iam::111122223333:role/export-role"
    ]
    },
    {
    "Sid": "SecretsManagerReadAccess",
    "Effect": "Allow",
    "Action": [
    "secretsmanager:GetSecretValue"
    ],
    "Resource": [
    "arn:aws:secretsmanager:*:111122223333:secret:*"
    ]
    }
    ]
    }
```

------

## 2단계: 파이프라인 생성
<a name="rds-mysql-pipeline"></a>

다음과 유사한 OpenSearch Ingestion 파이프라인을 구성합니다. 이 파이프라인 예는 Amazon RDS 인스턴스를 소스로 지정합니다.

```
version: "2"
rds-mysql-pipeline:
  source:
    rds:
      db_identifier: "instance-id"
      engine: mysql
      database: "database-name"
      tables:
        include:
          - "table1"
          - "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 블루프린트를 사용하여 이 파이프라인을 생성할 수 있습니다. 자세한 내용은 [블루프린트 작업](pipeline-blueprint.md) 단원을 참조하십시오.

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

를 사용하여 파이프라인 AWS Management Console 을 생성하는 경우 Amazon Aurora를 소스로 사용하려면 VPC에 파이프라인도 연결해야 합니다. 이를 수행하려면 **네트워크 구성** 섹션을 찾아 **VPC에 연결**을 선택하고 제공된 기본 옵션 중 하나에서 CIDR을 선택하거나 자체 CIDR을 선택합니다. [RFC 1918 Best Current Practice](https://datatracker.ietf.org/doc/html/rfc1918)에 정의된 대로 프라이빗 주소 공간에서 모든 CIDR을 사용할 수 있습니다.

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

자세한 내용은 [파이프라인에 대한 VPC 액세스 구성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security.html#pipeline-vpc-configure)을 참조하세요.

## 데이터 일관성
<a name="rds-mysql-pipeline-consistency"></a>

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

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

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

## 데이터 형식 매핑
<a name="rds-mysql-pipeline-mapping"></a>

OpenSearch Ingestion 파이프라인은 OpenSearch Service 도메인 또는 컬렉션이 사용할 수 있는 표현에 MySQL 데이터 유형을 매핑합니다. OpenSearch에 매핑 템플릿이 정의되지 않은 경우 OpenSearch는 처음 전송된 문서를 기반으로 [동적 매핑](https://docs.opensearch.org/latest/field-types/#dynamic-mapping)을 사용하여 필드 유형을 자동으로 결정합니다. 매핑 템플릿을 통해 OpenSearch에서 가장 적합한 필드 유형을 명시적으로 정의할 수도 있습니다.

아래 표에는 MySQL 데이터 유형과 해당 OpenSearch 필드 유형이 나열되어 있습니다. 명시적 매핑이 정의되지 않은 경우 *기본 OpenSearch 필드 유형* 열에 OpenSearch의 해당 필드 유형이 표시됩니다. 이 경우 OpenSearch는 동적 매핑을 사용하여 필드 유형을 자동으로 결정합니다. *권장 OpenSearch 필드 유형* 열은 매핑 템플릿에서 명시적으로 지정하도록 권장되는 해당 필드 유형입니다. 이들 필드 유형은 MySQL의 데이터 유형과 더 긴밀하게 맞춤화되며 일반적으로 OpenSearch에서 사용할 수 있는 더 나은 검색 기능을 지원할 수 있습니다.


| MySQL 데이터 형식 | 기본 OpenSearch 필드 유형 | 권장 OpenSearch 필드 유형 | 
| --- | --- | --- | 
| BIGINT | long | long | 
| BIGINT UNSIGNED | long | unsigned long | 
| BIT | long | 비트 수에 따라 byte, short, integer 또는 long입니다. | 
| DECIMAL | 텍스트 | double 또는 키워드 | 
| DOUBLE | 실수 | double | 
| FLOAT | 실수 | 실수 | 
| INT | long | 정수 | 
| INT UNSIGNED | long | long | 
| MEDIUMINT | long | 정수 | 
| MEDIUMINT UNSIGNED | long | 정수 | 
| NUMERIC | 텍스트 | double 또는 키워드 | 
| SMALLINT | long | bigint | 
| SMALLINT UNSIGNED | long | 정수 | 
| TINYINT | long | 바이트 | 
| TINYINT UNSIGNED | long | bigint | 
| BINARY | 텍스트 | 이진수 | 
| BLOB | 텍스트 | 이진수 | 
| CHAR | 텍스트 | 텍스트 | 
| ENUM | 텍스트 | 키워드 | 
| LONGBLOB | 텍스트 | 이진수 | 
| LONGTEXT | 텍스트 | 텍스트 | 
| MEDIUMBLOB | 텍스트 | 이진수 | 
| MEDIUMTEXT | 텍스트 | 텍스트 | 
| SET | 텍스트 | 키워드 | 
| TEXT | 텍스트 | 텍스트 | 
| TINYBLOB | 텍스트 | 이진수 | 
| TINYTEXT | 텍스트 | 텍스트 | 
| VARBINARY | 텍스트 | 이진수 | 
| VARCHAR | 텍스트 | 텍스트 | 
| DATE | long(에포크 밀리초) | 날짜 | 
| DATETIME | long(에포크 밀리초) | 날짜 | 
| TIME | long(에포크 밀리초) | 날짜 | 
| TIMESTAMP | long(에포크 밀리초) | 날짜 | 
| YEAR | long(에포크 밀리초) | 날짜 | 
| GEOMETRY | text(WKT 형식) | geo\$1shape | 
| GEOMETRYCOLLECTION | text(WKT 형식) | geo\$1shape | 
| LINESTRING | text(WKT 형식) | geo\$1shape | 
| MULTILINESTRING | text(WKT 형식) | geo\$1shape | 
| MULTIPOINT | text(WKT 형식) | geo\$1shape | 
| MULTIPOLYGON | text(WKT 형식) | geo\$1shape | 
| POINT | text(WKT 형식) | geo\$1point 또는 geo\$1shape | 
| POLYGON | text(WKT 형식) | geo\$1shape | 
| JSON | 텍스트 | 객체 | 

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

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

## 제한 사항
<a name="rds-mysql-pipeline-limitations"></a>

RDS for MySQL용 OpenSearch Ingestion 파이프라인을 설정하는 경우 다음과 같은 제한 사항을 고려하세요.
+ 이 통합에서는 파이프라인당 하나의 MySQL 데이터베이스만 지원합니다.
+ 이 통합에서는 현재 교차 리전 데이터 수집을 지원하지 않습니다. Amazon RDS 인스턴스와 OpenSearch 도메인은 동일한 AWS 리전에 있어야 합니다.
+ 이 통합에서는 현재 교차 계정 데이터 수집을 지원하지 않습니다. Amazon RDS 인스턴스와 OpenSearch Ingestion 파이프라인은 동일한 AWS 계정에 있어야 합니다.
+ 지원되는 유일한 인증 메커니즘인 Secrets Manager를 사용한 인증이 Amazon RDS 인스턴스에 활성화되어 있는지 확인합니다.
+ 기존 파이프라인 구성은 다른 데이터베이스 및/또는 다른 테이블에서 데이터를 수집하도록 업데이트할 수 없습니다. 파이프라인의 데이터베이스 및/또는 테이블 이름을 업데이트하려면 새 파이프라인을 생성해야 합니다.
+ 데이터 정의 언어(DDL) 문은 일반적으로 지원되지 않습니다. 다음의 경우에는 데이터 일관성이 유지되지 않습니다.
  + 기본 키가 변경될 경우(추가/삭제/이름 변경)
  + 테이블이 삭제되거나 잘린 경우.
  + 열 이름 또는 데이터 형식이 변경된 경우.
+ 동기화할 MySQL 테이블에 기본 키가 정의되지 않은 경우 데이터 일관성이 보장되지 않습니다. 업데이트/삭제를 OpenSearch에 동기화하려면 OpenSearch 싱크 구성에서 사용자 지정 `document_id` 옵션을 올바르게 정의해야 합니다.
+ 계단식 삭제 작업이 있는 외래 키 참조는 지원되지 않으며, RDS for MySQL과 OpenSearch 간에 데이터 불일치가 발생할 수 있습니다.
+ Amazon RDS 다중 가용 영역 DB 클러스터는 지원되지 않습니다.
+ 지원되는 버전: MySQL 버전 8.0 이상

## 권장되는 CloudWatch 경보
<a name="aurora-mysql-pipeline-metrics"></a>

수집 파이프라인의 성능을 모니터링하려면 다음 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 | 이 지표는 스트림에서 처리하지 못한 총 레코드 수를 나타냅니다. | 

# RDS for PostgreSQL
<a name="rds-PostgreSQL"></a>

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

**Topics**
+ [RDS for PostgreSQL 사전 조건](#rds-PostgreSQL-prereqs)
+ [1단계: 파이프라인 역할 구성](#rds-mysql-pipeline-role)
+ [2단계: 파이프라인 생성](#rds-PostgreSQL-pipeline)
+ [데이터 일관성](#rds-mysql-pipeline-consistency)
+ [데이터 형식 매핑](#rds-PostgreSQL-pipeline-mapping)
+ [제한 사항](#rds-PostgreSQL-pipeline-limitations)
+ [권장되는 CloudWatch 경보](#aurora-mysql-pipeline-metrics)

## RDS for PostgreSQL 사전 조건
<a name="rds-PostgreSQL-prereqs"></a>

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

1. Amazon RDS에서 [사용자 지정 DB 파라미터 그룹을 생성](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/zero-etl.setting-up.html#zero-etl.parameters)하여 논리적 복제를 구성합니다.

   ```
   rds.logical_replication=1
   ```

   자세한 내용은 [Amazon RDS for PostgreSQL에 대한 논리적 복제 수행](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Concepts.General.FeatureSupport.LogicalReplication.html)을 참조하세요.

1. [RDS for PostgreSQL DB 인스턴스를 선택하거나 생성하고](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.PostgreSQL.html) 1단계에서 생성한 파라미터 그룹을 DB 인스턴스와 연결합니다.

1. [Aurora 및 AWS Secrets Manager에서 암호 관리를 사용](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/rds-secrets-manager.html)하여 Amazon RDS 인스턴스에서 사용자 이름과 암호 인증을 설정합니다. [Secrets Manager 보안 암호를 생성](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html)하여 사용자 이름/암호 조합을 생성할 수도 있습니다.

1. 전체 초기 스냅샷 기능을 사용하는 경우 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"
           }
       ]
   }
   ```

------

1. OpenSearch Service 도메인 또는 OpenSearch Serverless 컬렉션을 선택하거나 생성합니다. 자세한 내용은 [OpenSearch Service 도메인 생성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/createupdatedomains.html#createdomains) 및 [컬렉션 생성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-manage.html#serverless-create)을 참조하세요.

1. [리소스 기반 정책](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/ac.html#ac-types-resource)을 도메인에 연결하거나 [데이터 액세스 정책](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless-data-access.html)을 컬렉션에 연결합니다. 이러한 액세스 정책을 통해 OpenSearch Ingestion은 Amazon RDS DB 인스턴스의 데이터를 도메인 또는 컬렉션에 쓸 수 있습니다.

## 1단계: 파이프라인 역할 구성
<a name="rds-mysql-pipeline-role"></a>

Amazon RDS 파이프라인 사전 조건을 설정한 후 [파이프라인 구성에 사용할 파이프라인 역할을 구성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security-overview.html#pipeline-security-sink)합니다. 또한 Amazon RDS 소스에 대한 다음 권한을 역할에 추가합니다.

------
#### [ JSON ]

****  

```
{
    "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:*:111122223333:network-interface/*",
    "arn:aws:ec2:*:111122223333:subnet/*",
    "arn:aws:ec2:*:111122223333:security-group/*"
    ]
    },
    {
    "Sid": "allowDescribeEC2",
    "Effect": "Allow",
    "Action": [
    "ec2:Describe*"
    ],
    "Resource": "*"
    },
    {
    "Sid": "allowTagCreation",
    "Effect": "Allow",
    "Action": [
    "ec2:CreateTags"
    ],
    "Resource": "arn:aws:ec2:*:111122223333:network-interface/*",
    "Condition": {
    "StringEquals": {
    "aws:RequestTag/OSISManaged": "true"
    }
    }
    },
    {
    "Sid": "AllowDescribeInstances",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBInstances"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:db:*"
    ]
    },
    {
    "Sid": "AllowSnapshots",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeDBSnapshots",
    "rds:CreateDBSnapshot",
    "rds:AddTagsToResource"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:db:DB-id",
    "arn:aws:rds:us-east-2:111122223333:snapshot:DB-id*"
    ]
    },
    {
    "Sid": "AllowExport",
    "Effect": "Allow",
    "Action": [
    "rds:StartExportTask"
    ],
    "Resource": [
    "arn:aws:rds:us-east-2:111122223333:snapshot:DB-id*"
    ]
    },
    {
    "Sid": "AllowDescribeExports",
    "Effect": "Allow",
    "Action": [
    "rds:DescribeExportTasks"
    ],
    "Resource": "*",
    "Condition": {
    "StringEquals": {
    "aws:RequestedRegion": "us-east-2",
    "aws:ResourceAccount": "111122223333"
    }
    }
    },
    {
    "Sid": "AllowAccessToKmsForExport",
    "Effect": "Allow",
    "Action": [
    "kms:Decrypt",
    "kms:Encrypt",
    "kms:DescribeKey",
    "kms:RetireGrant",
    "kms:CreateGrant",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*"
    ],
    "Resource": [
    "arn:aws:kms:us-east-2:111122223333:key/export-key-id"
    ]
    },
    {
    "Sid": "AllowPassingExportRole",
    "Effect": "Allow",
    "Action": "iam:PassRole",
    "Resource": [
    "arn:aws:iam::111122223333:role/export-role"
    ]
    },
    {
    "Sid": "SecretsManagerReadAccess",
    "Effect": "Allow",
    "Action": [
    "secretsmanager:GetSecretValue"
    ],
    "Resource": [
    "arn:aws:secretsmanager:*:111122223333:secret:*"
    ]
    }
    ]
    }
```

------

## 2단계: 파이프라인 생성
<a name="rds-PostgreSQL-pipeline"></a>

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 블루프린트를 사용하여 이 파이프라인을 생성할 수 있습니다. 자세한 내용은 [블루프린트 작업](pipeline-blueprint.md) 단원을 참조하십시오.

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

를 사용하여 파이프라인 AWS Management Console 을 생성하는 경우 Amazon Aurora를 소스로 사용하려면 VPC에 파이프라인도 연결해야 합니다. 이를 수행하려면 **네트워크 구성** 섹션을 찾아 **VPC에 연결**을 선택하고 제공된 기본 옵션 중 하나에서 CIDR을 선택하거나 자체 CIDR을 선택합니다. [RFC 1918 Best Current Practice](https://datatracker.ietf.org/doc/html/rfc1918)에 정의된 대로 프라이빗 주소 공간에서 모든 CIDR을 사용할 수 있습니다.

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

자세한 내용은 [파이프라인에 대한 VPC 액세스 구성](https://docs.aws.amazon.com/opensearch-service/latest/developerguide/pipeline-security.html#pipeline-vpc-configure)을 참조하세요.

## 데이터 일관성
<a name="rds-mysql-pipeline-consistency"></a>

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

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

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

## 데이터 형식 매핑
<a name="rds-PostgreSQL-pipeline-mapping"></a>

OpenSearch Ingestion 파이프라인은 OpenSearch Service 도메인 또는 컬렉션이 사용할 수 있는 표현에 PostgreSQL 데이터 유형을 매핑합니다. OpenSearch에 매핑 템플릿이 정의되지 않은 경우 OpenSearch는 처음 전송된 문서를 기반으로 [동적 매핑](https://docs.opensearch.org/latest/field-types/#dynamic-mapping)을 사용하여 필드 유형을 자동으로 결정합니다. 매핑 템플릿을 통해 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 또는 키워드 | 
| numeric[ (p, s) ] | 텍스트 | double 또는 키워드 | 
| real | 실수 | 실수 | 
| double precision | 실수 | double | 
| smallserial | long | bigint | 
| serial | long | 정수 | 
| bigserial | long | long | 
| money | 객체 | 객체 | 
| character varying(n) | 텍스트 | 텍스트 | 
| varchar(n) | 텍스트 | 텍스트 | 
| character(n) | 텍스트 | 텍스트 | 
| char(n) | 텍스트 | 텍스트 | 
| bpchar(n) | 텍스트 | 텍스트 | 
| bpchar | 텍스트 | 텍스트 | 
| 텍스트 | 텍스트 | 텍스트 | 
| enum | 텍스트 | 텍스트 | 
| bytea | 텍스트 | 이진수 | 
| timestamp [ (p) ](시간대 제외) | long(에포크 밀리초) | 날짜 | 
| timestamp [ (p) ](시간대 포함) | long(에포크 밀리초) | 날짜 | 
| 날짜 | long(에포크 밀리초) | 날짜 | 
| time [ (p) ](시간대 제외) | long(에포크 밀리초) | 날짜 | 
| time [ (p) ](시간대 포함) | long(에포크 밀리초) | 날짜 | 
| interval [ fields ] [ (p) ] | text(ISO8601 형식) | 텍스트 | 
| 부울 | 부울 | 부울 | 
| point | text(WKT 형식) | geo\$1shape | 
| line | text(WKT 형식) | geo\$1shape | 
| lseg | text(WKT 형식) | geo\$1shape | 
| box | text(WKT 형식) | geo\$1shape | 
| 경로 | text(WKT 형식) | geo\$1shape | 
| 다각형 | text(WKT 형식) | geo\$1shape | 
| circle | 객체 | 객체 | 
| 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_type` 및 `template_content`를 사용하여 명시적 매핑 규칙을 정의할 수 있습니다. 또는 파이프라인을 시작하기 전에 검색 도메인이나 컬렉션에서 직접 매핑 템플릿을 생성할 수도 있습니다.

## 제한 사항
<a name="rds-PostgreSQL-pipeline-limitations"></a>

RDS for PostgreSQL용 OpenSearch Ingestion 파이프라인을 설정하는 경우 다음과 같은 제한 사항을 고려하세요.
+ 이 통합에서는 파이프라인당 하나의 PostgreSQL 데이터베이스만 지원합니다.
+ 이 통합에서는 현재 교차 리전 데이터 수집을 지원하지 않습니다. Amazon RDS 인스턴스와 OpenSearch 도메인은 동일한 AWS 리전에 있어야 합니다.
+ 이 통합에서는 현재 교차 계정 데이터 수집을 지원하지 않습니다. Amazon RDS 인스턴스와 OpenSearch Ingestion 파이프라인은 동일한 AWS 계정에 있어야 합니다.
+ 지원되는 유일한 인증 메커니즘 AWS Secrets Manager인를 사용하여 Amazon RDS 인스턴스에 인증이 활성화되어 있는지 확인합니다.
+ 기존 파이프라인 구성은 다른 데이터베이스 및/또는 다른 테이블에서 데이터를 수집하도록 업데이트할 수 없습니다. 파이프라인의 데이터베이스 및/또는 테이블 이름을 업데이트하려면 파이프라인을 중지하고 업데이트된 구성으로 다시 시작하거나 새 파이프라인을 생성해야 합니다.
+ 데이터 정의 언어(DDL) 문은 일반적으로 지원되지 않습니다. 다음의 경우에는 데이터 일관성이 유지되지 않습니다.
  + 기본 키가 변경될 경우(추가/삭제/이름 변경)
  + 테이블이 삭제되거나 잘린 경우.
  + 열 이름 또는 데이터 형식이 변경된 경우.
+ 동기화할 PostgreSQL 테이블에 기본 키가 정의되지 않은 경우 데이터 일관성이 보장되지 않습니다. 업데이트/삭제를 OpenSearch에 동기화하려면 OpenSearch 및 싱크 구성에서 사용자 지정 `document_id` 옵션을 올바르게 정의해야 합니다.
+ RDS 다중 AZ DB 클러스터는 지원되지 않습니다.
+ 지원되는 버전: PostgreSQL 16 이상

## 권장되는 CloudWatch 경보
<a name="aurora-mysql-pipeline-metrics"></a>

수집 파이프라인의 성능을 모니터링하려면 다음 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 | 이 지표는 스트림에서 처리하지 못한 총 레코드 수를 나타냅니다. | 