Aurora MySQL - Amazon OpenSearch Service

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

Aurora MySQL

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

Aurora MySQL 사전 조건

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

  1. Amazon Aurora에서 사용자 지정 Aurora DB 클러스터 파라미터 그룹을 생성하여 바이너리 로깅을 구성합니다.

    aurora_enhanced_binlog=1 binlog_backup=0 binlog_format=ROW binlog_replication_globaldb=0 binlog_row_image=full binlog_row_metadata=full

    또한 binlog_transaction_compression 파라미터가 로 설정되지 않았는지ON, binlog_row_value_options 파라미터가 로 설정되지 않았는지 확인합니다PARTIAL_JSON.

  2. Aurora MySQL DB 클러스터를 선택하거나 생성하고 이전 단계에서 생성한 파라미터 그룹을 DB 클러스터와 연결합니다.

  3. 진 로그 보존을 24시간 이상으로 구성합니다.

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

  5. 전체 초기 스냅샷 기능을 사용하는 경우 Amazon Aurora에서 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" } ] }
  6. OpenSearch Service 도메인 또는 OpenSearch Serverless 컬렉션을 선택하거나 생성합니다. 자세한 내용은 OpenSearch Service 도메인 생성컬렉션 생성을 참조하세요.

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

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

Amazon Aurora 파이프라인 사전 조건을 설정한 후 파이프라인 구성에 사용할 파이프라인 역할을 구성합니다. 또한 Amazon Aurora 소스에 대한 다음 권한을 역할에 추가합니다.

{ "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": "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 Aurora 클러스터를 소스로 지정합니다.

version: "2" aurora-mysql-pipeline: source: rds: db_identifier: "cluster-id" engine: aurora-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 Aurora 블루프린트를 사용하여이 파이프라인을 생성할 수 있습니다. 자세한 내용은 블루프린트 작업 단원을 참조하십시오.

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 Aurora 간의 IP 주소 충돌을 방지하려면 Amazon Aurora VPC CIDR이 OpenSearch Ingestion의 CIDR과 다른지 확인합니다.

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

데이터 일관성

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

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

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

데이터 형식 매핑

OpenSearch Ingestion 파이프라인은 MySQL 데이터 유형을 OpenSearch Service 도메인 또는 컬렉션이 사용할 수 있는 표현에 매핑합니다. OpenSearch에 매핑 템플릿이 정의되지 않은 경우 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 text(WKT 형식) geo_shape
GEOMETRYCOLLECTION text(WKT 형식) geo_shape
LINESTRING text(WKT 형식) geo_shape
MULTILINESTRING text(WKT 형식) geo_shape
MULTIPOINT text(WKT 형식) geo_shape
MULTIPOLYGON text(WKT 형식) geo_shape
POINT text(WKT 형식) geo_point 또는 geo_shape
POLYGON text(WKT 형식) geo_shape
JSON 텍스트 객체

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

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

제한 사항

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

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

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

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

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

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

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

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

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

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

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

  • 계단식 삭제 작업이 있는 외래 키 참조는 지원되지 않으며 Aurora MySQL과 OpenSearch 간에 데이터 불일치가 발생할 수 있습니다.

  • 지원되는 버전: Aurora MySQL 버전 3.05.2 이상.

권장되는 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 이 지표는 스트림에서 처리하지 못한 총 레코드 수를 나타냅니다.