Amazon OpenSearch DynamoDB에서 통합 파이프라인 사용 - 아마존 OpenSearch 서비스

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

Amazon OpenSearch DynamoDB에서 통합 파이프라인 사용

통합 파이프라인을 DynamoDB와 함께 사용하여 DynamoDB 테이블 이벤트 (예: 생성, 업데이트, 삭제) 를 Amazon 서비스 도메인 및 OpenSearch 컬렉션으로 스트리밍할 수 있습니다. OpenSearch OpenSearch 통합 파이프라인은 변경 데이터 캡처 (CDC) 인프라를 통합하여 DynamoDB 테이블에서 데이터를 지속적으로 스트리밍할 수 있는 대규모의 지연 시간이 짧은 방법을 제공합니다.

DynamoDB를 데이터 처리를 위한 소스로 사용하는 두 가지 방법(전체 초기 스냅샷 사용 또는 사용 안 함)이 있습니다.

전체 초기 스냅샷은 DynamoDB가 복구 PITR () 기능과 함께 point-in-time 생성하는 테이블의 백업입니다. DynamoDB는 이 스냅샷을 Amazon S3로 업로드합니다. 거기에서 OpenSearch 통합 파이프라인은 데이터를 도메인의 한 인덱스로 보내거나 도메인의 여러 인덱스로 파티셔닝합니다. DynamoDB의 데이터를 일관되게 유지하기 위해 파이프라인은 OpenSearch DynamoDB 테이블의 모든 생성, 업데이트, 삭제 이벤트를 인덱스 또는 인덱스에 저장된 문서와 동기화합니다. OpenSearch

전체 초기 스냅샷을 사용하는 경우 OpenSearch 통합 파이프라인은 먼저 스냅샷을 수집한 다음 DynamoDB Streams에서 데이터를 읽기 시작합니다. 결국 DynamoDB와 DynamoDB 간의 데이터 일관성을 거의 실시간으로 따라잡고 유지합니다. OpenSearch 이 옵션을 선택하는 경우 테이블에서 DynamoDB 스트림을 둘 다 PITR 활성화해야 합니다.

또한 DynamoDB와의 OpenSearch 통합 기능을 사용하여 스냅샷 없이 이벤트를 스트리밍할 수 있습니다. 다른 메커니즘의 전체 스냅샷이 이미 있거나 DynamoDB 스트림을 사용하여 DynamoDB 테이블의 현재 이벤트만 스트리밍하려는 경우 이 옵션을 선택합니다. 이 옵션을 선택하는 경우 테이블에서 DynamoDB 스트림을 활성화해야 합니다.

이 통합에 대한 자세한 내용은 개발자 안내서의 OpenSearch Amazon 서비스와의 DynamoDB 제로 ETL 통합을 참조하십시오.Amazon DynamoDB

사전 조건

파이프라인을 설정하려면 DynamoDB 스트림이 활성화된 DynamoDB 테이블이 있어야 합니다. 스트림은 NEW_IMAGE 스트림 뷰 유형을 사용해야 합니다. 하지만 OpenSearch 수집 파이프라인은 이 스트림 뷰 유형이 사용 사례에 적합한 NEW_AND_OLD_IMAGES 경우 이벤트를 스트리밍할 수도 있습니다.

스냅샷을 사용하는 경우 테이블에서 point-in-time 복구도 활성화해야 합니다. 자세한 내용은 Amazon DynamoDB 개발자 안내서의 테이블 생성, point-in-time 복구 활성화 및 스트림 활성화를 참조하십시오.

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

DynamoDB 테이블을 설정한 후 파이프라인 구성에서 사용하려는 파이프라인 역할을 설정하고 다음 DynamoDB 권한을 해당 역할에 추가합니다.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "allowRunExportJob", "Effect": "Allow", "Action": [ "dynamodb:DescribeTable", "dynamodb:DescribeContinuousBackups", "dynamodb:ExportTableToPointInTime" ], "Resource": [ "arn:aws:dynamodb:us-east-1:{account-id}:table/my-table" ] }, { "Sid": "allowCheckExportjob", "Effect": "Allow", "Action": [ "dynamodb:DescribeExport" ], "Resource": [ "arn:aws:dynamodb:us-east-1:{account-id}:table/my-table/export/*" ] }, { "Sid": "allowReadFromStream", "Effect": "Allow", "Action": [ "dynamodb:DescribeStream", "dynamodb:GetRecords", "dynamodb:GetShardIterator" ], "Resource": [ "arn:aws:dynamodb:us-east-1:{account-id}:table/my-table/stream/*" ] }, { "Sid": "allowReadAndWriteToS3ForExport", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:AbortMultipartUpload", "s3:PutObject", "s3:PutObjectAcl" ], "Resource": [ "arn:aws:s3:::my-bucket/{exportPath}/*" ] } ] }

또한 AWS KMS 고객 관리 키를 사용하여 내보내기 데이터 파일을 암호화할 수 있습니다. 내보낸 객체를 해독하려면 파이프라인의 내보내기 구성에서 키 ID에 arn:aws:kms:us-west-2:{account-id}:key/my-key-id 형식으로 s3_sse_kms_key_id를 지정합니다. 다음 정책에는 고객 관리 키를 사용하는 데 필요한 권한이 포함되어 있습니다.

{ "Sid": "allowUseOfCustomManagedKey", "Effect": "Allow", "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": arn:aws:kms:us-west-2:{account-id}:key/my-key-id }

2단계: 파이프라인 생성

그런 다음 DynamoDB를 소스로 지정하는 다음과 같은 OpenSearch 통합 파이프라인을 구성할 수 있습니다. 이 샘플 파이프라인은 PITR 스냅샷에서 table-a 데이터를 수집한 다음 DynamoDB Streams에서 이벤트를 수집합니다. LATEST 시작 위치는 파이프라인이 DynamoDB 스트림에서 최신 데이터를 읽어야 함을 나타냅니다.

version: "2" cdc-pipeline: source: dynamodb: tables: - table_arn: "arn:aws:dynamodb:us-west-2:{account-id}:table/table-a" export: s3_bucket: "my-bucket" s3_prefix: "export/" stream: start_position: "LATEST" aws: region: "us-west-2" sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" sink: - opensearch: hosts: ["https://search-mydomain.us-east-1.es.amazonaws.com"] index: "${getMetadata(\"table_name\")}" index_type: custom normalize_index: true document_id: "${getMetadata(\"primary_key\")}" action: "${getMetadata(\"opensearch_action\")}" document_version: "${getMetadata(\"document_version\")}" document_version_type: "external"

사전 구성된 DynamoDB 블루프린트를 사용하여 이 파이프라인을 생성할 수 있습니다. 자세한 내용은 청사진을 사용하여 파이프라인 생성 단원을 참조하십시오.

데이터 일관성

OpenSearch 인제스트는 데이터 내구성을 보장하기 위해 승인을 지원합니다 end-to-end . 파이프라인에서는 스냅샷이나 스트림을 읽을 때 병렬 처리를 위해 동적으로 분할을 생성합니다. 파이프라인은 도메인 또는 컬렉션의 모든 레코드를 수집한 후 승인을 받으면 파티션을 완료된 것으로 표시합니다. OpenSearch

OpenSearch 서버리스 검색 컬렉션에 인제스트하려는 경우 파이프라인에서 문서 ID를 생성할 수 있습니다. OpenSearch 서버리스 시계열 컬렉션으로 인제스트하려는 경우 파이프라인은 문서 ID를 생성하지 않는다는 점에 유의하세요.

또한 OpenSearch 통합 파이프라인은 들어오는 이벤트 작업을 해당하는 대량 색인 작업에 매핑하여 문서를 수집하는 데 도움이 됩니다. 이렇게 하면 데이터 일관성이 유지되므로 DynamoDB의 모든 데이터 변경 사항이 해당 문서 변경 사항과 조정됩니다. OpenSearch

데이터 형식 매핑

OpenSearch 서비스는 수신되는 각 문서의 데이터 형식을 DynamoDB의 해당 데이터 유형에 동적으로 매핑합니다. 다음 표는 OpenSearch 서비스가 다양한 데이터 유형을 자동으로 매핑하는 방법을 보여줍니다.

데이터 유형 OpenSearch DynamoDB
숫자

OpenSearch 숫자 데이터를 자동으로 매핑합니다. 숫자가 정수인 경우 긴 값으로 OpenSearch 매핑합니다. 숫자가 분수인 경우 부동 소수점 값으로 OpenSearch 매핑합니다.

OpenSearch 처음 보낸 문서를 기준으로 다양한 속성을 동적으로 매핑합니다. DynamoDB의 동일한 속성에 정수와 분수와 같은 여러 데이터 형식이 혼합되어 있는 경우 매핑이 실패할 수 있습니다.

예를 들어 첫 번째 문서에는 정수인 속성이 있고 이후 문서에는 분수와 동일한 속성이 있는 경우 두 번째 문서는 인제스트에 OpenSearch 실패합니다. 이러한 경우에는 다음과 같은 명시적 매핑 템플릿을 제공해야 합니다.

{ "template": { "mappings": { "properties": { "MixedNumberAttribute": { "type": "float" } } } } }

배정밀도가 필요한 경우 문자열 형식의 필드 매핑을 사용합니다. 38자리 정밀도를 지원하는 동일한 숫자 형식은 없습니다. OpenSearch

DynamoDB는 숫자를 지원합니다.

숫자 집합 OpenSearch 숫자 세트를 긴 값이나 부동 소수점 값으로 구성된 배열에 자동으로 매핑합니다. 스칼라 수와 마찬가지로, 매핑은 수집된 첫 번째 숫자가 정수인지 소수인지에 따라 달라집니다. 스칼라 문자열을 매핑하는 것과 같은 방식으로 숫자 집합에 대한 매핑을 제공할 수 있습니다.

DynamoDB는 숫자 집합을 나타내는 형식을 지원합니다.

String

OpenSearch 문자열 값을 텍스트로 자동 매핑합니다. 열거된 값과 같은 일부 상황에서는 키워드 형식에 매핑할 수 있습니다.

다음 예제는 PartType 이름이 지정된 DynamoDB 속성을 키워드에 매핑하는 방법을 보여줍니다. OpenSearch

{ "template": { "mappings": { "properties": { "PartType": { "type": "keyword" } } } } }

DynamoDB는 문자열을 지원합니다.

문자열 집합

OpenSearch 문자열 세트를 문자열 배열에 자동으로 매핑합니다. 스칼라 문자열을 매핑하는 것과 같은 방식으로 문자열 집합에 대한 매핑을 제공할 수 있습니다.

DynamoDB는 문자열 집합을 나타내는 형식을 지원합니다.
바이너리

OpenSearch 바이너리 데이터를 텍스트로 자동 매핑합니다. 매핑을 제공하여 이를 바이너리 필드로 기록할 수 OpenSearch 있습니다.

다음 예제는 ImageData 이름이 지정된 DynamoDB 속성을 이진 필드에 매핑하는 방법을 보여줍니다. OpenSearch

{ "template": { "mappings": { "properties": { "ImageData": { "type": "binary" } } } } }
DynamoDB는 이진수 형식 속성을 지원합니다.
이진수 집합

OpenSearch 이진 세트를 이진 데이터 배열에 텍스트로 자동 매핑합니다. 스칼라 이진수를 매핑하는 것과 같은 방식으로 숫자 집합에 대한 매핑을 제공할 수 있습니다.

DynamoDB에서는 이진수 값 집합을 나타내는 형식을 지원합니다.

OpenSearch DynamoDB 부울 형식을 부울 유형으로 매핑합니다. OpenSearch

DynamoDB에서는 부울 형식 속성을 지원합니다.

Null

OpenSearch DynamoDB null 형식의 문서를 수집할 수 있습니다. 값을 문서에 null 값으로 저장합니다. 이 형식에는 매핑이 없으며 이 필드는 인덱싱되거나 검색할 수 없습니다.

null 형식에 동일한 속성 이름을 사용한 후 나중에 문자열과 같은 다른 유형으로 변경하면 null이 아닌 첫 번째 값에 대한 동적 매핑이 OpenSearch 생성됩니다. 후속 값은 여전히 DynamoDB null 값일 수 있습니다.

DynamoDB는 null 형식 속성을 지원합니다.

OpenSearch DynamoDB 맵 속성을 중첩된 필드에 매핑합니다. 중첩 필드 내에도 동일한 매핑이 적용됩니다.

다음 예제는 중첩 필드의 문자열을 다음 키워드 유형에 매핑합니다. OpenSearch

{ "template": { "mappings": { "properties": { "AdditionalDescriptions": { "properties": { "PartType": { "type": "keyword" } } } } } } }
DynamoDB는 맵 형식 속성을 지원합니다.
나열

OpenSearch 목록에 있는 항목에 따라 DynamoDB 목록에 대해 다른 결과를 제공합니다.

목록에 동일한 유형의 스칼라 유형 (예: 모든 문자열 목록) 이 모두 포함된 경우 OpenSearch 목록을 해당 유형의 배열로 수집합니다. 이 방식은 문자열, 숫자, 부울 및 null 유형에서 작동합니다. 각 형식에 대한 제한은 해당 형식의 스칼라에 대한 제한과 동일합니다.

맵에 사용하는 것과 동일한 매핑을 사용하여 맵 목록에 대한 매핑을 제공할 수도 있습니다.

혼합 형식 목록은 제공할 수 없습니다.

DynamoDB는 목록 형식 속성을 지원합니다.

설정

OpenSearch 는 세트에 포함된 항목에 따라 DynamoDB 세트에 대해 다른 결과를 제공합니다.

세트에 동일한 유형의 스칼라 유형 (예: 모든 문자열 집합) 이 모두 포함된 경우 OpenSearch 해당 세트를 해당 유형의 배열로 수집합니다. 이 방식은 문자열, 숫자, 부울 및 null 유형에서 작동합니다. 각 형식에 대한 제한은 해당 형식의 스칼라에 대한 제한과 동일합니다.

맵에 사용하는 것과 동일한 매핑을 사용하여 맵 집합에 대한 매핑을 제공할 수도 있습니다.

혼합 형식 집합은 제공할 수 없습니다.

DynamoDB는 집합을 나타내는 형식을 지원합니다.

수집 파이프라인에서 데드레터 큐 (DLQ) 를 구성하는 것이 좋습니다. OpenSearch 큐를 구성한 경우 OpenSearch 서비스는 동적 매핑 실패로 인해 인제스트되지 못한 모든 실패한 문서를 큐로 전송합니다.

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

제한 사항

DynamoDB에 대한 OpenSearch 통합 파이프라인을 설정할 때는 다음 제한 사항을 고려하십시오.

  • DynamoDB와의 OpenSearch 통합 통합은 현재 교차 리전 통합을 지원하지 않습니다. DynamoDB OpenSearch 테이블과 통합 파이프라인은 동일해야 합니다. AWS 리전

  • DynamoDB OpenSearch 테이블과 통합 파이프라인은 동일해야 합니다. AWS 계정

  • OpenSearch 통합 파이프라인은 하나의 DynamoDB 테이블만 소스로 지원합니다.

  • DynamoDB 스트림은 최대 24시간 동안만 데이터를 로그에 저장합니다. 대규모 테이블의 초기 스냅샷에서 수집하는 데 24시간 이상 걸리는 경우 일부 초기 데이터 손실이 발생합니다. 이러한 데이터 손실을 줄이려면 테이블 크기를 예측하고 수집 파이프라인의 적절한 컴퓨팅 유닛을 구성하십시오. OpenSearch

DynamoDB에 대한 권장 CloudWatch 경보

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

지표 설명
dynamodb-pipeline.BlockingBuffer.bufferUsage.value

사용 중인 버퍼의 양을 나타냅니다.

dynamodb-pipeline.dynamodb.activeExportS3ObjectConsumers.value

내보내기를 위해 Amazon S3 객체를 현재 처리 OCUs 중인 객체의 총 개수를 표시합니다.

dynamodb-pipeline.dynamodb.bytesProcessed.count

DynamoDB 소스에서 처리된 바이트 수입니다.

dynamodb-pipeline.dynamodb.changeEventsProcessed.count

DynamoDB 스트림에서 처리된 변경 이벤트 수입니다.

dynamodb-pipeline.dynamodb.changeEventsProcessingErrors.count

DynamoDB에서 처리된 변경 이벤트로 인한 오류 수입니다.

dynamodb-pipeline.dynamodb.exportJobFailure.count 실패한 내보내기 작업 제출 시도 횟수
dynamodb-pipeline.dynamodb.exportJobSuccess.count 성공적으로 제출된 내보내기 작업 수입니다.
dynamodb-pipeline.dynamodb.exportRecordsProcessed.count

익스포트에서 처리된 총 레코드 수입니다.

dynamodb-pipeline.dynamodb.exportRecordsTotal.count

데이터 내보내기 볼륨을 추적하는 데 필수적인 DynamoDB에서 내보낸 총 레코드 수입니다.

dynamodb-pipeline.dynamodb.exportS3ObjectsProcessed.count Amazon S3에서 성공적으로 처리된 내보내기 데이터 파일의 총 수입니다.
dynamodb-pipeline.opensearch.bulkBadRequestErrors.count 잘못된 요청으로 인한 대량 요청 중 발생한 오류 수입니다.
dynamodb-pipeline.opensearch.bulkRequestLatency.avg 에 대한 대량 쓰기 요청의 평균 지연 시간입니다. OpenSearch
dynamodb-pipeline.opensearch.bulkRequestNotFoundErrors.count 대상 데이터를 찾을 수 없어 실패한 대량 요청 수입니다.
dynamodb-pipeline.opensearch.bulkRequestNumberOfRetries.count 통합 파이프라인의 클러스터 쓰기 OpenSearch 재시도 횟수입니다. OpenSearch
dynamodb-pipeline.opensearch.bulkRequestSizeBytes.sum 모든 대량 요청의 총 크기 (바이트) OpenSearch
dynamodb-pipeline.opensearch.documentErrors.count 에 문서를 보낼 OpenSearch 때 발생한 오류 수입니다. 오류를 일으킨 문서는 다음 주소로 DLQ 보내집니다.
dynamodb-pipeline.opensearch.documentsSuccess.count OpenSearch 클러스터 또는 컬렉션에 성공적으로 기록된 문서 수
dynamodb-pipeline.opensearch.documentsSuccessFirstAttempt.count 첫 번째 OpenSearch 시도에서 성공적으로 색인된 문서 수입니다.

dynamodb-pipeline.opensearch.documentsVersionConflictErrors.count

처리 중 문서의 버전 충돌로 인한 오류 수입니다.

dynamodb-pipeline.opensearch.PipelineLatency.avg

소스에서 데이터를 읽고 대상에 쓰는 방식으로 데이터를 처리하는 OpenSearch 통합 파이프라인의 평균 지연 시간입니다.
dynamodb-pipeline.opensearch.PipelineLatency.max 소스에서 데이터를 읽고 OpenSearch 대상을 쓰는 방식으로 데이터를 처리하는 수집 파이프라인의 최대 지연 시간입니다.
dynamodb-pipeline.opensearch.recordsIn.count 성공적으로 인게이지된 레코드 수 OpenSearch 이 지표는 처리 및 저장 중인 데이터의 양을 추적하는 데 필수적입니다.
dynamodb-pipeline.opensearch.s3.dlqS3RecordsFailed.count 쓰기에 실패한 레코드 DLQ 수
dynamodb-pipeline.opensearch.s3.dlqS3RecordsSuccess.count 기록된 레코드 수입니다DLQ.
dynamodb-pipeline.opensearch.s3.dlqS3RequestLatency.count Amazon S3 데드레터 대기열에 대한 요청의 지연 시간 측정 수입니다.
dynamodb-pipeline.opensearch.s3.dlqS3RequestLatency.sum Amazon S3 데드레터 대기열에 대한 모든 요청의 총 지연 시간
dynamodb-pipeline.opensearch.s3.dlqS3RequestSizeBytes.sum Amazon S3 데드레터 대기열에 전송된 모든 요청의 총 크기 (바이트)
dynamodb-pipeline.recordsProcessed.count 파이프라인에서 처리된 총 레코드 수로, 전체 처리량의 주요 지표입니다.
dynamodb.changeEventsProcessed.count DynamoDB 스트림에서 수집되는 레코드가 없습니다. 테이블에 활동이 없거나, 내보내기가 진행 중이거나, DynamoDB 스트림에 액세스하는 데 문제가 있기 때문일 수 있습니다.

dynamodb.exportJobFailure.count

S3로 내보내기를 트리거하려는 시도가 실패했습니다.

line.opensearch.bulkRequestInvalidInputErrors.count

잘못된 OpenSearch 입력으로 인한 대량 요청 오류 수는 데이터 품질 및 운영 문제를 모니터링하는 데 매우 중요합니다.
opensearch.EndToEndLatency.avg 종단 간 지연 시간은 DynamoDB 스트림에서 읽을 때 필요한 것보다 깁니다. OpenSearch 클러스터의 규모가 작거나 최대 파이프라인 OCU 용량이 DynamoDB 테이블의 WCU 처리량에 비해 너무 낮기 때문일 수 있습니다. 내보내기 후에는 이러한 엔드투엔드 지연 시간이 길며 최신 DynamoDB 스트림을 따라잡으면 시간이 지날수록 줄어들 것입니다.