Amazon S3에서 OpenSearch Ingestion 파이프라인 사용 - Amazon OpenSearch Service

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

Amazon S3에서 OpenSearch Ingestion 파이프라인 사용

OpenSearch Ingestion을 사용하면 Amazon S3를 소스 또는 대상으로 사용할 수 있습니다. Amazon S3를 소스로 사용하는 경우 OpenSearch Ingestion 파이프라인으로 데이터를 전송합니다. Amazon S3를 대상으로 사용하는 경우 OpenSearch Ingestion 파이프라인의 데이터를 하나 이상의 S3 버킷에 씁니다.

소스로서의 Amazon S3

Amazon S3를 소스로 사용하여 데이터를 처리하는 방법은 S3SQS 처리예약된 스캔 의 두 가지가 있습니다.

S3에 파일을 작성한 후 거의 실시간에 가까운 파일 스캔이 필요한 경우 S3 처리를SQS 사용합니다. 객체가 버킷 내에 저장되거나 수정될 때마다 이벤트를 발생시키도록 Amazon S3 버킷을 구성할 수 있습니다. 일회성 또는 반복되는 예약 스캔을 사용하여 S3 버킷의 데이터를 일괄 처리하세요.

사전 조건

Amazon S3를 예약된 스캔 또는 S3SQS 처리 모두에 대한 OpenSearch Ingestion 파이프라인의 소스로 사용하려면 먼저 S3 버킷을 생성합니다.

참고

OpenSearch Ingestion 파이프라인에서 소스로 사용되는 S3 버킷이 다른 에 AWS 계정있는 경우 버킷에 대한 교차 계정 읽기 권한도 활성화해야 합니다. 이렇게 하면 파이프라인이 데이터를 읽고 처리할 수 있습니다. 교차 계정 권한을 활성화하려면 Amazon S3 사용 설명서계정 간 버킷 권한 부여하는 버킷 소유자를 참조하세요.

S3 버킷이 여러 계정에 있는 경우 bucket_owners 맵을 사용합니다. 예제는 설명서의 교차 계정 S3 액세스를 참조하세요 OpenSearch.

S3 처리를SQS 설정하려면 다음 단계도 수행해야 합니다.

  1. Amazon SQS 대기열을 생성합니다.

  2. SQS 대기열을 대상으로 하여 S3 버킷에서 이벤트 알림을 활성화합니다.

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

데이터를 파이프라인으로 푸시하는 다른 소스 플러그인과 달리 S3 소스 플러그인은 파이프라인이 소스에서 데이터를 가져오는 읽기 기반 아키텍처를 사용합니다.

따라서 파이프라인이 S3에서 읽기 위해서는 파이프라인의 S3 소스 구성 내에서 S3 버킷과 Amazon SQS 대기열 모두에 액세스할 수 있는 역할을 지정해야 합니다. 파이프라인은 대기열에서 데이터를 읽기 위해 이 역할을 맡습니다.

참고

S3 소스 구성 내에서 지정하는 역할은 파이프라인 역할이어야 합니다. 따라서 파이프라인 역할에는 두 개의 개별 권한 정책이 포함되어야 합니다. 하나는 싱크에 쓰는 정책이고 다른 하나는 S3 소스에서 가져오기 위한 것입니다. 모든 파이프라인 구성 요소에서 sts_role_arn을 동일하게 사용해야 합니다.

다음 샘플 정책은 S3를 소스로 사용하는 데 필요한 권한을 보여줍니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action":[ "s3:ListBucket", "s3:GetBucketLocation", "s3:GetObject" ], "Resource": "arn:aws:s3:::my-bucket/*" }, { "Effect":"Allow", "Action":"s3:ListAllMyBuckets", "Resource":"arn:aws:s3:::*" }, { "Effect": "Allow", "Action": [ "sqs:DeleteMessage", "sqs:ReceiveMessage", "sqs:ChangeMessageVisibility" ], "Resource": "arn:aws:sqs:us-west-2:{account-id}:MyS3EventSqsQueue" } ] }

S3 소스 플러그인 구성의 sts_role_arn 옵션에서 지정하는 IAM 역할에 이러한 권한을 연결해야 합니다.

version: "2" source: s3: ... aws: ... sts_role_arn: arn:aws:iam::{account-id}:role/pipeline-role processor: ... sink: - opensearch: ...

2단계: 파이프라인 생성

권한을 설정한 후 Amazon S3 사용 사례에 따라 OpenSearch Ingestion 파이프라인을 구성할 수 있습니다.

S3-SQS 처리

S3 처리를SQS 설정하려면 S3를 소스로 지정하고 Amazon SQS 알림을 설정하도록 파이프라인을 구성합니다.

version: "2" s3-pipeline: source: s3: notification_type: "sqs" codec: newline: null sqs: queue_url: "https://sqs.us-east-1.amazonaws.com/{account-id}/ingestion-queue" compression: "none" aws: region: "us-east-1" # IAM role that the pipeline assumes to read data from the queue. This role must be the same as the pipeline role. sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" processor: - grok: match: message: - "%{COMMONAPACHELOG}" - date: destination: "@timestamp" from_time_received: true sink: - opensearch: hosts: ["https://search-domain-endpoint.us-east-1.es.amazonaws.com"] index: "index-name" aws: # IAM role that the pipeline assumes to access the domain sink sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" region: "us-east-1"

Amazon S3에서 작은 파일을 처리하는 동안 CPU 사용률이 낮은 경우 workers 옵션 값을 수정하여 처리량을 늘리는 것이 좋습니다. 자세한 내용은 S3 플러그인 구성 옵션 을 참조하세요.

예약 스캔

예약 스캔을 설정하려면 모든 S3 버킷에 적용되는 스캔 수준 또는 버킷 수준의 일정으로 파이프라인을 구성하세요. 버킷 수준 일정 또는 스캔 간격 구성은 항상 스캔 수준 구성을 덮어씁니다.

예약 스캔은 데이터 마이그레이션에 적합한 1회성 스캔 또는 일괄 처리에 적합한 반복 스캔으로 구성할 수 있습니다.

Amazon S3에서 읽을 파이프라인을 구성하려면 사전 구성된 Amazon S3 청사진을 사용합니다. 일정 요구 사항에 맞게 파이프라인 구성의 scan 일부를 편집할 수 있습니다. 자세한 내용은 청사진을 사용하여 파이프라인 생성 단원을 참조하십시오.

1회성 스캔

1회성 예약 스캔은 한 번 실행됩니다. YAML 구성에서 start_time 및 를 사용하여 버킷의 객체를 스캔할 시점을 end_time 지정할 수 있습니다. 또는 버킷의 객체를 스캔하려는 현재 시간을 기준으로 시간 간격을 지정하는 데 range을 사용할 수 있습니다.

예를 들어 최근 4시간 동안 생성된 모든 파일을 PT4H 스캔하도록 범위를 설정합니다. 한 번 스캔을 두 번 실행하도록 구성하려면 파이프라인을 중지하고 다시 시작해야 합니다. 범위를 구성하지 않은 경우 시작 시간 및 종료 시간도 업데이트해야 합니다.

다음 구성은 모든 버킷과 해당 버킷의 모든 객체를 한 번 스캔하도록 설정합니다.

version: "2" log-pipeline: source: s3: codec: csv: compression: "none" aws: region: "us-east-1" sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" acknowledgments: true scan: buckets: - bucket: name: my-bucket-1 filter: include_prefix: - Objects1/ exclude_suffix: - .jpeg - .png - bucket: name: my-bucket-2 key_prefix: include: - Objects2/ exclude_suffix: - .jpeg - .png delete_s3_objects_on_read: false processor: - date: destination: "@timestamp" from_time_received: true sink: - opensearch: hosts: ["https://search-domain-endpoint.us-east-1.es.amazonaws.com"] index: "index-name" aws: sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role" region: "us-east-1" dlq: s3: bucket: "my-bucket-1" region: "us-east-1" sts_role_arn: "arn:aws:iam::{account-id}:role/pipeline-role"

다음 구성은 지정된 기간 동안 모든 버킷에 대한 1회성 스캔을 설정합니다. 즉, S3는 생성 시간이 이 기간에 해당하는 객체만 처리합니다.

scan: start_time: 2023-01-21T18:00:00.000Z end_time: 2023-04-21T18:00:00.000Z buckets: - bucket: name: my-bucket-1 filter: include: - Objects1/ exclude_suffix: - .jpeg - .png - bucket: name: my-bucket-2 filter: include: - Objects2/ exclude_suffix: - .jpeg - .png

다음 구성은 스캔 수준과 버킷 수준 모두에서 1회성 스캔을 설정합니다. 버킷 수준의 시작 및 종료 시간은 스캔 수준의 시작 및 종료 시간보다 우선합니다.

scan: start_time: 2023-01-21T18:00:00.000Z end_time: 2023-04-21T18:00:00.000Z buckets: - bucket: start_time: 2023-01-21T18:00:00.000Z end_time: 2023-04-21T18:00:00.000Z name: my-bucket-1 filter: include: - Objects1/ exclude_suffix: - .jpeg - .png - bucket: start_time: 2023-01-21T18:00:00.000Z end_time: 2023-04-21T18:00:00.000Z name: my-bucket-2 filter: include: - Objects2/ exclude_suffix: - .jpeg - .png

파이프라인을 중지하면 중지 전에 파이프라인에서 스캔한 객체에 대한 기존 참조가 제거됩니다. 단일 스캔 파이프라인이 중지되면 이미 스캔된 객체라도 시작된 후 다시 모든 객체를 다시 스캔합니다. 단일 스캔 파이프라인을 중지해야 하는 경우 파이프라인을 다시 시작하기 전에 시간대를 변경하는 것이 좋습니다.

시작 시간 및 종료 시간별로 객체를 필터링해야 하는 경우 파이프라인을 중지하고 시작하는 것이 유일한 옵션입니다. 시작 시간 및 종료 시간을 기준으로 필터링할 필요가 없는 경우 이름을 기준으로 객체를 필터링할 수 있습니다. 이름으로 리터링하는 경우 파이프라인을 중지하고 시작할 필요가 없습니다. 이렇게 하려면 include_prefix 및 를 사용합니다exclude_suffix.

반복 스캔

반복 예약 스캔은 지정된 S3 버킷의 스캔을 정기적으로 예약된 간격으로 실행합니다. 개별 버킷 수준 구성은 지원되지 않으므로 스캔 수준에서만 이러한 간격을 구성할 수 있습니다.

YAML 구성에서 는 반복 스캔 빈도를 interval 지정하며 30초에서 365일 사이일 수 있습니다. 파이프라인을 생성할 때 항상 첫 번째 스캔이 발생합니다. count는 스캔 인스턴스 총 수를 정의합니다.

다음 구성은 스캔 사이에 12시간의 지연을 두고 반복 스캔을 설정합니다.

scan: scheduling: interval: PT12H count: 4 buckets: - bucket: name: my-bucket-1 filter: include: - Objects1/ exclude_suffix: - .jpeg - .png - bucket: name: my-bucket-2 filter: include: - Objects2/ exclude_suffix: - .jpeg - .png

대상으로서의 Amazon S3

OpenSearch Ingestion 파이프라인의 데이터를 S3 버킷에 쓰려면 사전 구성된 S3 청사진을 사용하여 S3 싱크가 있는 파이프라인을 생성합니다. 이 파이프라인은 선택적 데이터를 OpenSearch 싱크로 라우팅하고 S3에 보관하기 위해 모든 데이터를 동시에 전송합니다. 자세한 내용은 청사진을 사용하여 파이프라인 생성 단원을 참조하십시오.

S3 싱크를 생성할 때 다양한 싱크 코덱 중에서 원하는 형식을 지정할 수 있습니다. 예를 들어 데이터를 열 형식으로 쓰려면 Parquet 또는 Avro 코덱을 선택하세요. 행 기반 형식을 선호하는 경우 JSON 또는 ND-를 선택합니다JSON. 지정된 스키마로 S3에 데이터를 쓰려면 Avro 형식을 사용하여 싱크 코덱 내에 인라인 스키마를 정의할 수도 있습니다.

다음 예제에서는 S3 싱크에 인라인 스키마를 정의합니다.

- s3: codec: parquet: schema: > { "type" : "record", "namespace" : "org.vpcFlowLog.examples", "name" : "VpcFlowLog", "fields" : [ { "name" : "version", "type" : "string"}, { "name" : "srcport", "type": "int"}, { "name" : "dstport", "type": "int"}, { "name" : "start", "type": "int"}, { "name" : "end", "type": "int"}, { "name" : "protocol", "type": "int"}, { "name" : "packets", "type": "int"}, { "name" : "bytes", "type": "int"}, { "name" : "action", "type": "string"}, { "name" : "logStatus", "type" : "string"} ] }

이 스키마를 정의할 때는 파이프라인이 싱크에 전달하는 다양한 유형의 이벤트에 존재할 수 있는 모든 키의 상위 세트를 지정하세요.

예를 들어 이벤트에 키가 누락될 가능성이 있는 경우 스키마에 해당 키를 null 값과 함께 추가하세요. Null 값 선언을 사용하면 스키마가 비균일 데이터를 처리할 수 있습니다(일부 이벤트에는 이러한 키가 있고 다른 이벤트에는 이러한 키가 없는 경우). 수신 이벤트에 이러한 키가 있는 경우 해당 값이 싱크에 기록됩니다.

이 스키마 정의는 정의된 키만 싱크로 전송하도록 허용하고 수신 이벤트에서 정의되지 않은 키를 삭제하는 필터 역할을 합니다.

싱크에서 include_keysexclude_keys를 사용하여 다른 싱크로 라우팅되는 데이터를 필터링할 수도 있습니다. 이 두 필터는 상호 배타적이므로 스키마에서 한 번에 하나만 사용할 수 있습니다. 또한 사용자 정의 스키마 내에서는 이러한 스키마를 사용할 수 없습니다.

이러한 필터를 사용하여 파이프라인을 생성하려면 사전 구성된 싱크 필터 청사진을 사용합니다. 자세한 내용은 청사진을 사용하여 파이프라인 생성 단원을 참조하십시오.

Amazon S3 크로스 계정을 소스로

OpenSearch Ingestion 파이프라인이 소스로 다른 계정의 S3 버킷에 액세스할 수 있도록 Amazon S3S3가 있는 계정 간에 액세스 권한을 부여할 수 있습니다. 교차 계정 액세스를 활성화하려면 Amazon S3 사용 설명서교차 계정 버킷 권한을 부여하는 버킷 소유자를 참조하세요. 액세스 권한을 부여한 후 파이프라인 역할에 필요한 권한이 있는지 확인합니다.

그런 다음 를 사용하여 YAML 구성을 생성bucket_owners하여 Amazon S3 버킷에 대한 교차 계정 액세스를 소스로 활성화할 수 있습니다.

s3-pipeline: source: s3: notification_type: "sqs" codec: csv: delimiter: "," quote_character: "\"" detect_header: True sqs: queue_url: "https://sqs.ap-northeast-1.amazonaws.com/401447383613/test-s3-queue" bucket_owners: my-bucket-01: 123456789012 my-bucket-02: 999999999999 compression: "gzip"