Compressione delle richieste HTTP in Amazon OpenSearch Service - OpenSearch Servizio Amazon

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Compressione delle richieste HTTP in Amazon OpenSearch Service

Puoi comprimere le richieste e le risposte HTTP nei domini Amazon OpenSearch Service utilizzando la compressione gzip. La compressione gzip consente di ridurre le dimensioni dei documenti e di ridurre l'utilizzo della larghezza di banda e la latenza, migliorando così la velocità di trasferimento.

La compressione Gzip è supportata per tutti i domini che eseguono Elasticsearch 6.0 OpenSearch o versioni successive. Alcuni OpenSearch client dispongono del supporto integrato per la compressione gzip e molti linguaggi di programmazione dispongono di librerie che semplificano il processo.

Abilitazione della compressione gzip

Da non confondere con OpenSearch impostazioni simili, http_compression.enabled è specifico di OpenSearch Service e abilita o disabilita la compressione gzip su un dominio. Domini in esecuzione OpenSearch o Elasticsearch 7. x hanno la compressione gzip abilitata per impostazione predefinita, mentre i domini che eseguono Elasticsearch 6. x l'hanno disabilitata per impostazione predefinita.

Per abilitare la compressione gzip, inviare la seguente richiesta:

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

Le richieste a _cluster/settings devono essere decompresse, quindi potrebbe essere necessario utilizzare un client separato o una richiesta HTTP standard per aggiornare le impostazioni del cluster.

Per confermare di aver abilitato correttamente la compressione gzip, invia la seguente richiesta:

GET _cluster/settings?include_defaults=true

Assicurati di vedere la seguente impostazione nella risposta:

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

Intestazioni richieste

Quando si include un corpo di richiesta compresso con gzip, mantenere l'intestazione Content-Type: application/json standard e aggiungere l'intestazione Content-Encoding: gzip. Per accettare una risposta gzip compressa, aggiungere anche l'intestazione Accept-Encoding: gzip. Se un OpenSearch client supporta la compressione gzip, probabilmente include queste intestazioni automaticamente.

Codice di esempio (Python 3)

Nell'esempio seguente viene utilizzato opensearch-py per eseguire la compressione e inviare la richiesta. Questo codice firma la richiesta utilizzando le credenziali 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))

In alternativa, è possibile specificare le intestazioni corrette, comprimere il corpo della richiesta da soli e utilizzare una libreria HTTP standard come Requests. Questo codice firma la richiesta utilizzando le credenziali di base HTTP, che il dominio potrebbe supportare se si utilizza il controllo granulare degli accessi.

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)