Comprimir las 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.

Comprimir las solicitudes HTTP en Amazon OpenSearch Service

Puedes comprimir las solicitudes y respuestas HTTP en los 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 Elasticsearch OpenSearch 6.0 o una versión posterior. Algunos OpenSearch clientes tienen soporte integrado para la compresión gzip y muchos lenguajes de programación tienen bibliotecas que simplifican el proceso.

Habilitar la compresión gzip

No debe confundirse con una OpenSearch configuración similar, http_compression.enabled es específica del OpenSearch Servicio y habilita o deshabilita la compresión gzip en un dominio. Dominios que ejecutan OpenSearch Elasticsearch 7. x tienen la compresión gzip habilitada de forma predeterminada, mientras que los dominios que ejecutan Elasticsearch 6. x la tienen deshabilitada 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 has activado correctamente la compresión gzip, envía la siguiente solicitud:

GET _cluster/settings?include_defaults=true

Asegúrate 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 OpenSearch cliente 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)