아마존 OpenSearch 서비스의 HTTP 요청 압축 - 아마존 OpenSearch 서비스

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

아마존 OpenSearch 서비스의 HTTP 요청 압축

gzip 압축을 사용하여 Amazon OpenSearch 서비스 도메인의 HTTP 요청 및 응답을 압축할 수 있습니다. gzip 압축을 사용하면 문서 크기를 줄이고 대역폭 사용률과 대기 시간을 줄여 전송 속도를 향상시킬 수 있습니다.

Gzip 압축은 Elasticsearch 6.0 OpenSearch 이상을 실행하는 모든 도메인에서 지원됩니다. 일부 OpenSearch 클라이언트는 gzip 압축을 기본적으로 지원하며, 많은 프로그래밍 언어에는 프로세스를 단순화하는 라이브러리가 있습니다.

gzip 압축 활성화

비슷한 OpenSearch 설정과 혼동하지 마세요. 이 설정은 OpenSearch Service에만 http_compression.enabled 해당되며 도메인에서 gzip 압축을 활성화하거나 비활성화합니다. Elasticsearch OpenSearch 7을 실행 중인 도메인 x는 gzip 압축이 기본적으로 활성화되어 있는 반면, Elasticsearch 6을 실행하는 도메인은 기본적으로 활성화되어 있습니다. x는 기본적으로 비활성화되어 있습니다.

gzip 압축을 활성화하려면 다음 요청을 전송합니다.

PUT _cluster/settings { "persistent" : { "http_compression.enabled": true } }

_cluster/settings에 대한 요청은 압축 해제되어야 하므로 별도의 클라이언트 또는 표준 HTTP 요청을 사용하여 클러스터 설정을 업데이트해야 할 수 있습니다.

gzip 압축을 성공적으로 활성화했는지 확인하려면 다음 요청을 보내세요.

GET _cluster/settings?include_defaults=true

응답에 다음 설정이 표시되는지 확인하세요.

... "http_compression": { "enabled": "true" } ...

필수 헤더

gzip으로 압축된 요청 본문을 포함할 때 표준 Content-Type: application/json 헤더를 유지하고 Content-Encoding: gzip 헤더를 추가합니다. gzip으로 압축된 응답을 수락하려면 Accept-Encoding: gzip 헤더도 추가합니다. OpenSearch 클라이언트가 gzip 압축을 지원하는 경우 이러한 헤더가 자동으로 포함될 수 있습니다.

샘플 코드(Python 3)

다음 샘플에서는 opensearch-py를 사용하여 압축을 수행하고 요청을 보냅니다. 이 코드는 IAM 자격 증명을 사용하여 요청에 서명합니다.

from opensearchpy import OpenSearch, RequestsHttpConnection from requests_aws4auth import AWS4Auth import boto3 host = '' # e.g. my-test-domain.us-east-1.es.amazonaws.com region = '' # e.g. us-west-1 service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Create the client. search = OpenSearch( hosts = [{'host': host, 'port': 443}], http_auth = awsauth, use_ssl = True, verify_certs = True, http_compress = True, # enables gzip compression for request bodies connection_class = RequestsHttpConnection ) document = { "title": "Moneyball", "director": "Bennett Miller", "year": "2011" } # Send the request. print(search.index(index='movies', id='1', body=document, refresh=True)) # print(search.index(index='movies', doc_type='_doc', id='1', body=document, refresh=True))

또는 적절한 헤더를 지정하고 요청 본문을 직접 압축하고 요청과 같은 표준 HTTP 라이브러리를 사용할 수 있습니다. 이 코드는 HTTP 기본 자격 증명을 사용하여 요청에 서명합니다. 세분화된 액세스 제어를 사용하는 경우 도메인에서 이 기능을 지원할 수 있습니다.

import requests import gzip import json base_url = '' # The domain with https:// and a trailing slash. For example, https://my-test-domain.us-east-1.es.amazonaws.com/ auth = ('master-user', 'master-user-password') # For testing only. Don't store credentials in code. headers = {'Accept-Encoding': 'gzip', 'Content-Type': 'application/json', 'Content-Encoding': 'gzip'} document = { "title": "Moneyball", "director": "Bennett Miller", "year": "2011" } # Compress the document. compressed_document = gzip.compress(json.dumps(document).encode()) # Send the request. path = 'movies/_doc?refresh=true' url = base_url + path response = requests.post(url, auth=auth, headers=headers, data=compressed_document) print(response.status_code) print(response.text)