Compression des requêtes HTTP dans Amazon OpenSearch Service - Amazon OpenSearch Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Compression des requêtes HTTP dans Amazon OpenSearch Service

Vous pouvez compresser les requêtes et réponses HTTP dans les domaines Amazon OpenSearch Service à l'aide de la compression gzip. La compression gzip peut contribuer à réduire la taille de vos documents ainsi qu'à diminuer l'utilisation de la bande passante et la latence, ce qui permet d'améliorer les vitesses de transfert.

La compression Gzip est prise en charge pour tous les domaines exécutant Elasticsearch 6.0 OpenSearch ou version ultérieure. Certains OpenSearch clients prennent en charge la compression gzip de manière intégrée, et de nombreux langages de programmation possèdent des bibliothèques qui simplifient le processus.

Activation de la compression gzip

À ne pas confondre avec des OpenSearch paramètres similaires, http_compression.enabled il est spécifique au OpenSearch Service et active ou désactive la compression gzip sur un domaine. Domaines en cours d'exécution OpenSearch ou Elasticsearch 7. x ont la compression gzip activée par défaut, alors que les domaines exécutent Elasticsearch 6. x l'ont désactivé par défaut.

Pour activer la compression gzip, envoyez la requête suivante :

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

Les requêtes adressées à _cluster/settings doivent être décompressées ; par conséquent, vous devrez peut-être utiliser un client distinct ou une requête HTTP standard pour mettre à jour les paramètres du cluster.

Pour confirmer que vous avez bien activé la compression gzip, envoyez la demande suivante :

GET _cluster/settings?include_defaults=true

Assurez-vous que le paramètre suivant apparaît dans la réponse :

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

En-têtes obligatoires

Lorsque vous incluez un corps de requête compressé par gzip, conservez l'en-tête Content-Type: application/json standard, et ajoutez l'en-tête Content-Encoding: gzip. Pour accepter une réponse compressée par gzip, ajoutez également l'en-tête Accept-Encoding: gzip. Si un OpenSearch client prend en charge la compression gzip, il inclut probablement ces en-têtes automatiquement.

Exemple de code (Python 3)

L'exemple suivant utilise opensearch-py pour effectuer la compression et envoyer la requête. Ce code signe la demande à l'aide de vos informations d'identification 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))

Vous pouvez également spécifier les en-têtes appropriés, compresser vous-même le corps de la requête et utiliser une bibliothèque HTTP standard comme Requests. Ce code signe la requête en utilisant les informations d'identification HTTP de base, que votre domaine peut prendre en charge si vous utilisez le contrôle précis des accès.

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)