Compresión de solicitudes HTTP en Amazon OpenSearch Service - OpenSearch Servicio Amazon

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Compresión de solicitudes HTTP en Amazon OpenSearch Service

Puede comprimir solicitudes y respuestas HTTP en dominios de Amazon OpenSearch Service mediante la compresión gzip. La compresión gzip puede ayudar a reducir el tamaño de los documentos y a reducir la utilización y la latencia de la banda ancha, lo que permite mejorar las velocidades de transferencia.

La compresión gzip es compatible con todos los dominios que ejecutan OpenSearch, Elasticsearch 6.0 o posterior. Algunos clientes de OpenSearch cuentan con soporte integrado para la compresión gzip y muchos lenguajes de programación disponen de bibliotecas que simplifican el proceso.

Habilitar la compresión gzip

No debe confundirse con configuraciones similares de OpenSearch, http_compression.enabled es específico de OpenSearch Service y habilita o deshabilita la compresión gzip en un dominio. Los dominios que ejecutan OpenSearch o Elasticsearch 7.x tienen la compresión gzip habilitada de forma predeterminada, mientras que los dominios que ejecutan Elasticsearch 6.x la tienen desactivada de forma predeterminada.

Para habilitar la compresión gzip, envíe la siguiente solicitud:

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

Solicitudes a _cluster/settings deben estar descomprimidas, por lo que es posible que necesite utilizar un cliente independiente o una solicitud HTTP estándar para actualizar la configuración del clúster.

Para confirmar que ha habilitado correctamente la compresión gzip, envíe la siguiente solicitud:

GET _cluster/settings?include_defaults=true

Asegúrese de ver la siguiente configuración en la respuesta:

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

Encabezados obligatorios

Al incluir un cuerpo de la solicitud comprimido por gzip, mantenga el encabezado estándar Content-Type: application/json y agregue el encabezado Content-Encoding: gzip. Para aceptar una respuesta comprimida con gzip, agregue también el encabezado Accept-Encoding: gzip. Si un cliente de OpenSearch admite la compresión gzip, es probable que incluya estos encabezados automáticamente.

Código de muestra (Python 3)

En el siguiente ejemplo se utiliza opensearch-py para realizar la compresión y enviar la solicitud. Este código firma la solicitud mediante sus credenciales de 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))

Como alternativa, puede especificar los encabezados adecuados, comprimir el cuerpo de la solicitud usted mismo y utilizar una biblioteca HTTP estándar como Solicitudes. Este código firma la solicitud con credenciales básicas HTTP, que podrían ser compatibles con el dominio si utiliza el control de acceso detallado.

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)