기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
RDS for MySQL
Amazon RDS for RDS for MySQL을 사용하여 OpenSearch Ingestion 파이프라인을 구성하려면 다음 단계를 완료하세요.
RDS for MySQL 사전 조건
OpenSearch Ingestion 파이프라인을 생성하기 전에 다음 단계를 수행하세요.
-
Amazon RDS에서 사용자 지정 DB 파라미터 그룹을 생성하여 바이너리 로깅을 구성하고 다음 파라미터를 설정합니다.
binlog_format=ROW binlog_row_image=full binlog_row_metadata=FULL
또한
binlog_row_value_options
파라미터가 로 설정되지 않았는지 확인합니다PARTIAL_JSON
.자세한 내용은 RDS for MySQL 바이너리 로깅 구성을 참조하세요.
-
RDS for MySQL DB 인스턴스를 선택하거나 생성하고 이전 단계에서 생성한 파라미터 그룹을 DB 인스턴스와 연결합니다.
-
데이터베이스에서 자동 백업이 활성화되어 있는지 확인합니다. 자세한 내용은 자동 백업 활성화를 참조하세요.
-
예를 들어 24시간과 같이 복제가 발생하기에 충분한 시간으로 이진 로그 보존을 구성합니다. 자세한 내용은 Amazon RDS 사용 설명서의 이진 로그 구성 설정 및 표시를 참조하세요.
-
Amazon RDS 및에서 암호 관리를 사용하여 Amazon RDS 인스턴스에 사용자 이름과 암호 AWS Secrets Manager 인증을 설정합니다. Secrets Manager 보안 암호를 생성하여 사용자 이름/암호 조합을 생성할 수도 있습니다.
-
전체 초기 스냅샷 기능을 사용하는 경우 Amazon RDS에서 Amazon S3로 데이터를 내보내기 위한 AWS KMS key 및 IAM 역할을 생성합니다.
IAM 역할에는 다음과 같은 권한 정책이 있어야 합니다.
{ "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
/*" ] } ] }역할에는 다음과 같은 신뢰 관계도 있어야 합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "export.rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
OpenSearch Service 도메인 또는 OpenSearch Serverless 컬렉션을 선택하거나 생성합니다. 자세한 내용은 OpenSearch Service 도메인 생성 및 컬렉션 생성을 참조하세요.
-
리소스 기반 정책을 도메인에 연결하거나 데이터 액세스 정책을 컬렉션에 연결합니다. 이러한 액세스 정책을 통해 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": "allowNetworkInterfacesGroup1", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:CreateNetworkInterfacePermission" ], "Resource": [ "arn:aws:ec2:*:account-id
:network-interface/*", "arn:aws:ec2:*:account-id
:subnet/*", "arn:aws:ec2:*:account-id
:security-group/*" ] }, { "Sid": "allowNetworkInterfacesGroup2", "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/*" ], "Condition": { "StringEquals": { "aws:RequestTag/OSISManaged": "true" } } }, { "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": "AllowDescribeClusters", "Effect": "Allow", "Action": [ "rds:DescribeDBClusters" ], "Resource": [ "arn:aws:rds:region
:account-id
:cluster:DB-id
" ] }, { "Sid": "AllowSnapshots", "Effect": "Allow", "Action": [ "rds:DescribeDBClusterSnapshots", "rds:CreateDBClusterSnapshot", "rds:AddTagsToResource" ], "Resource": [ "arn:aws:rds:region
:account-id
:cluster:DB-id
", "arn:aws:rds:region
:account-id
:cluster-snapshot:DB-id
*" ] }, { "Sid": "AllowExport", "Effect": "Allow", "Action": [ "rds:StartExportTask" ], "Resource": [ "arn:aws:rds:region
:account-id
:cluster:DB-id
", "arn:aws:rds:region
:account-id
:cluster-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단계: 파이프라인 생성
다음과 유사한 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 블루프린트를 사용하여이 파이프라인을 생성할 수 있습니다. 자세한 내용은 블루프린트 작업 단원을 참조하십시오.
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을 제공하려면 드롭다운 메뉴에서 기타를 선택합니다. OpenSearch Ingestion과 Amazon RDS 간의 IP 주소 충돌을 방지하려면 Amazon RDS 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 파이프라인은 OpenSearch Service 도메인 또는 컬렉션이 사용할 수 있는 표현에 MySQL 데이터 형식을 매핑합니다. OpenSearch에 매핑 템플릿이 정의되지 않은 경우 OpenSearch는 처음 전송된 문서를 기반으로 동적 매핑
아래 표에는 MySQL 데이터 유형과 해당 OpenSearch 필드 유형이 나열되어 있습니다. 명시적 매핑이 정의되지 않은 경우 기본 OpenSearch 필드 유형 열에 OpenSearch의 해당 필드 유형이 표시됩니다. 이 경우 OpenSearch는 동적 매핑을 사용하여 필드 유형을 자동으로 결정합니다. 권장 OpenSearch 필드 유형 열은 매핑 템플릿에서 명시적으로 지정하는 데 권장되는 해당 필드 유형입니다. 이러한 필드 유형은 MySQL의 데이터 유형과 더 밀접하게 정렬되며 일반적으로 OpenSearch에서 사용할 수 있는 검색 기능을 개선할 수 있습니다.
MySQL 데이터 형식 | 기본 OpenSearch 필드 유형 | 권장 OpenSearch 필드 유형 |
---|---|---|
BIGINT | long | long |
BIGINT UNSIGNED | long | 부호 없는 길이 |
BIT | long | 비트 수에 따라 바이트, 짧음, 정수 또는 깁니다. |
DECIMAL | 텍스트 | double 또는 키워드 |
DOUBLE | float | double |
FLOAT | float | 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 | 텍스트 | 텍스트 |
날짜 | long(에포크 밀리초) | date |
DATETIME | long(에포크 밀리초) | date |
TIME | long(에포크 밀리초) | date |
TIMESTAMP | long(에포크 밀리초) | date |
YEAR | long(에포크 밀리초) | date |
GEOMETRY | 텍스트(WKT 형식) | geo_shape |
GEOMETRYCOLLECTION | 텍스트(WKT 형식) | geo_shape |
LINESTRING | 텍스트(WKT 형식) | geo_shape |
MULTILINESTRING | 텍스트(WKT 형식) | geo_shape |
MULTIPOINT | 텍스트(WKT 형식) | geo_shape |
MULTIPOLYGON | 텍스트(WKT 형식) | geo_shape |
POINT | 텍스트(WKT 형식) | geo_point 또는 geo_shape |
POLYGON | 텍스트(WKT 형식) | geo_shape |
JSON | 텍스트 | 객체 |
OpenSearch Ingestion 파이프라인에서 DLQ(Dead Letter Queue)를 구성하는 것이 좋습니다. 이 대기열을 구성하면 OpenSearch Service에서는 동적 매핑 실패로 인해 수집할 수 없는 모든 실패한 문서를 대기열로 전송합니다.
자동 매핑이 실패하면 파이프라인 구성template_content
에서 template_type
및를 사용하여 명시적 매핑 규칙을 정의할 수 있습니다. 또는 파이프라인을 시작하기 전에 검색 도메인이나 컬렉션에서 직접 매핑 템플릿을 생성할 수도 있습니다.
제한 사항
RDS for MySQL용 OpenSearch Ingestion 파이프라인을 설정할 때 다음 제한 사항을 고려하세요.
-
통합은 파이프라인당 하나의 MySQL 데이터베이스만 지원합니다.
-
통합은 현재 리전 간 데이터 수집을 지원하지 않습니다. Amazon RDS 인스턴스와 OpenSearch 도메인은 동일한에 있어야 합니다 AWS 리전.
-
통합은 현재 교차 계정 데이터 수집을 지원하지 않습니다. Amazon RDS 인스턴스와 OpenSearch Ingestion 파이프라인은 동일한에 있어야 합니다 AWS 계정.
-
지원되는 유일한 인증 메커니즘인 Secrets Manager를 사용하여 Amazon RDS 인스턴스에 인증이 활성화되어 있는지 확인합니다.
-
기존 파이프라인 구성은 다른 데이터베이스 및/또는 다른 테이블에서 데이터를 수집하도록 업데이트할 수 없습니다. 파이프라인의 데이터베이스 및/또는 테이블 이름을 업데이트하려면 새 파이프라인을 생성해야 합니다.
-
데이터 정의 언어(DDL) 문은 일반적으로 지원되지 않습니다. 다음과 같은 경우에는 데이터 일관성이 유지되지 않습니다.
-
기본 키가 변경됩니다(add/delete/rename).
-
테이블이 삭제되거나 잘립니다.
-
열 이름 또는 데이터 형식이 변경됩니다.
-
-
동기화할 MySQL 테이블에 기본 키가 정의되지 않은 경우 데이터 일관성이 보장되지 않습니다. 업데이트/삭제를 OpenSearch에 동기화하려면 OpenSearch 싱크 구성에서 사용자 지정
document_id
옵션을 올바르게 정의해야 합니다. -
계단식 삭제 작업이 있는 외래 키 참조는 지원되지 않으며 RDS for MySQL과 OpenSearch 간에 데이터 불일치가 발생할 수 있습니다.
-
Amazon RDS 다중 가용 영역 DB 클러스터는 지원되지 않습니다.
-
지원되는 버전: MySQL 버전 8.0 이상.
권장되는 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 |
이 지표는 스트림에서 처리하지 못한 총 레코드 수를 나타냅니다. |