Comprendi le HTTP specifiche di richieste e risposte di consegna degli endpoint - Amazon Data Firehose

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à.

Comprendi le HTTP specifiche di richieste e risposte di consegna degli endpoint

Affinché Amazon Data Firehose fornisca correttamente i dati agli HTTP endpoint personalizzati, questi endpoint devono accettare richieste e inviare risposte utilizzando determinati formati di richiesta e risposta di Amazon Data Firehose. Questa sezione descrive le specifiche di formato delle HTTP richieste che il servizio Amazon Data Firehose invia agli HTTP endpoint personalizzati, nonché le specifiche di formato delle HTTP risposte che il servizio Amazon Data Firehose si aspetta. HTTPgli endpoint dispongono di 3 minuti per rispondere a una richiesta prima che Amazon Data Firehose effettui il timeout della richiesta. Amazon Data Firehose considera le risposte che non rispettano il formato corretto come errori di consegna.

Formato della richiesta

URLPercorso e parametri

Questi vengono configurati direttamente dall'utente come parte di un singolo URL campo. Amazon Data Firehose li invia così come configurati senza modifiche. Sono supportate solo le destinazioni https. URLle restrizioni vengono applicate durante la configurazione del flusso di distribuzione.

Nota

Attualmente, solo la porta 443 è supportata per HTTP la consegna dei dati degli endpoint.

HTTPHeader - Versione del protocollo X-Amz-Firehose

Questa intestazione viene utilizzata per indicare la versione dei formati di richiesta/risposta. Attualmente, l'unica versione consentita è 1.0.

HTTPIntestazioni - X-Amz-Firehose-Request-Id

Il valore di questa intestazione è opaco GUID e può essere utilizzato per scopi di debug e deduplicazione. Le implementazioni degli endpoint devono registrare il valore di questa intestazione, se possibile, sia per le richieste riuscite che per quelle non riuscite. L'ID della richiesta viene mantenuto invariato tra più tentativi della stessa richiesta.

HTTPIntestazioni - Content-Type

Il valore dell'intestazione Content-Type è sempre application/json.

HTTPIntestazioni - Codifica del contenuto

È possibile configurare uno stream Firehose da utilizzare per GZIP comprimere il body durante l'invio di richieste. Quando questa compressione è abilitata, il valore dell'intestazione Content-Encoding è impostato su gzip, come da prassi standard. Se la compressione non è abilitata, l'intestazione Content-Encoding è del tutto assente.

HTTPHeader - Content-Length

Viene utilizzato nel modo standard.

HTTPIntestazioni - X-Amz-Firehose-Source-Arn:

Il ARN flusso Firehose rappresentato in ASCII formato stringa. La regione di ARN codifica, l'ID AWS dell'account e il nome dello stream. Ad esempio arn:aws:firehose:us-east-1:123456789:deliverystream/testStream.

HTTPIntestazioni - X-Amz-Firehose Access-Key

Questa intestazione contiene una chiave o altre credenziali. API Hai la possibilità di creare o aggiornare la API -key (nota anche come token di autorizzazione) quando crei o aggiorni il tuo delivery-stream. Amazon Data Firehose limita la dimensione della chiave di accesso a 4096 byte. Amazon Data Firehose non tenta di interpretare questa chiave in alcun modo. La chiave configurata viene copiata letteralmente nel valore di questa intestazione.

I contenuti possono essere arbitrari e potenzialmente rappresentare un JWT token o un ACCESS _. KEY Se un endpoint richiede credenziali multicampo (ad esempio, nome utente e password), i valori di tutti i campi devono essere memorizzati insieme all'interno di un'unica chiave di accesso in un formato comprensibile dall'endpoint (o). JSON CSV Questo campo può essere codificato in base 64 se i contenuti originali sono binari. Amazon Data Firehose non modifica e/o codifica il valore configurato e utilizza i contenuti così come sono.

HTTPIntestazioni - X-Amz-Firehose-Common-Attributes

Questa intestazione contiene gli attributi comuni (metadati) che riguardano l'intera richiesta e/o tutti i record all'interno della richiesta. Questi vengono configurati direttamente dall'utente durante la creazione di uno stream Firehose. Il valore di questo attributo è codificato come JSON oggetto con lo schema seguente:

"$schema": http://json-schema.org/draft-07/schema# properties: commonAttributes: type: object minProperties: 0 maxProperties: 50 patternProperties: "^.{1,256}$": type: string minLength: 0 maxLength: 1024

Ecco un esempio:

"commonAttributes": { "deployment -context": "pre-prod-gamma", "device-types": "" }
Corpo: dimensione massima

La dimensione massima del corpo è configurata dall'utente e può arrivare fino a un massimo di 64 MiB, prima della compressione.

Corpo: schema

Il corpo contiene un unico JSON documento con il seguente JSON schema (scritto inYAML):

"$schema": http://json-schema.org/draft-07/schema# title: FirehoseCustomHttpsEndpointRequest description: > The request body that the Firehose service sends to custom HTTPS endpoints. type: object properties: requestId: description: > Same as the value in the X-Amz-Firehose-Request-Id header, duplicated here for convenience. type: string timestamp: description: > The timestamp (milliseconds since epoch) at which the Firehose server generated this request. type: integer records: description: > The actual records of the Firehose stream, carrying the customer data. type: array minItems: 1 maxItems: 10000 items: type: object properties: data: description: > The data of this record, in Base64. Note that empty records are permitted in Firehose. The maximum allowed size of the data, before Base64 encoding, is 1024000 bytes; the maximum length of this field is therefore 1365336 chars. type: string minLength: 0 maxLength: 1365336 required: - requestId - records

Ecco un esempio:

{ "requestId": "ed4acda5-034f-9f42-bba1-f29aea6d7d8f", "timestamp": 1578090901599 "records": [ { "data": "aGVsbG8=" }, { "data": "aGVsbG8gd29ybGQ=" } ] }

Formato della risposta

Comportamento predefinito in caso di errore

Se una risposta non è conforme ai requisiti seguenti, il server Firehose la considera come se avesse un codice di stato 500 senza corpo.

Codice di stato

Il codice di HTTP stato è MUST compreso nell'intervallo 2XX, 4XX o 5XX.

Il server Amazon Data Firehose NOT segue i reindirizzamenti (codici di stato 3XX). Solo il codice di risposta 200 viene considerato un invio riuscito dei record a /EP. HTTP Il codice di risposta 413 (dimensione superata) è considerato un errore permanente e il batch di record non viene inviato al bucket di errori se configurato. Tutti gli altri codici di risposta sono considerati errori recuperabili e sono soggetti all'algoritmo di back-off relativo ai nuovi tentativi illustrato più avanti.

Intestazioni: tipo di contenuto

L'unico tipo di contenuto accettabile è application/json.

HTTPIntestazioni - Codifica del contenuto

Utilizzare la codifica del contenuto. MUST NOT Il corpo MUST non deve essere compresso.

HTTPIntestazioni - Content-Length

L'intestazione Content-Length è MUST presente se la risposta ha un corpo.

Corpo: dimensione massima

Il corpo della risposta deve avere dimensioni pari o inferiori a 1 MiB.

"$schema": http://json-schema.org/draft-07/schema# title: FirehoseCustomHttpsEndpointResponse description: > The response body that the Firehose service sends to custom HTTPS endpoints. type: object properties: requestId: description: > Must match the requestId in the request. type: string timestamp: description: > The timestamp (milliseconds since epoch) at which the server processed this request. type: integer errorMessage: description: > For failed requests, a message explaining the failure. If a request fails after exhausting all retries, the last Instance of the error message is copied to error output S3 bucket if configured. type: string minLength: 0 maxLength: 8192 required: - requestId - timestamp

Ecco un esempio:

Failure Case (HTTP Response Code 4xx or 5xx) { "requestId": "ed4acda5-034f-9f42-bba1-f29aea6d7d8f", "timestamp": "1578090903599", "errorMessage": "Unable to deliver records due to unknown error." } Success case (HTTP Response Code 200) { "requestId": "ed4acda5-034f-9f42-bba1-f29aea6d7d8f", "timestamp": 1578090903599 }
Gestione delle risposte di errore

In tutti i casi di errore, il server Amazon Data Firehose ritenta la consegna dello stesso batch di record utilizzando un algoritmo di back-off esponenziale. Il backup dei tentativi viene eseguito utilizzando un tempo di back-off iniziale (1 secondo) con un fattore di jitter del (15%) e ogni tentativo successivo viene bloccato utilizzando la formula (initial-backoff-time * (multiplier (2) ^ retry_count)) con jitter aggiunto. Il tempo di back-off è limitato a un intervallo massimo di 2 minuti. Ad esempio, al 'n'-esimo tentativo, il tempo di annullamento è = (120, 2^n) * casuale (0,85, 1,15). MAX

I parametri specificati nell'equazione precedente sono soggetti a modifiche. Fate riferimento alla documentazione di AWS Firehose per il tempo esatto di backoff iniziale, il tempo massimo di backoff, i moltiplicatori e le percentuali di jitter utilizzate nell'algoritmo di backoff esponenziale.

In ogni tentativo successivo, la chiave di accesso e/o la destinazione a cui vengono consegnati i record potrebbero cambiare in base alla configurazione aggiornata del flusso Firehose. Il servizio Amazon Data Firehose utilizza lo stesso ID di richiesta per tutti i tentativi nel miglior modo possibile. Quest'ultima funzionalità può essere utilizzata per scopi di deduplicazione dal server endpoint. HTTP Se la richiesta non viene ancora consegnata dopo il tempo massimo consentito (in base alla configurazione del flusso Firehose), il batch di record può essere facoltativamente inviato a un bucket di errori basato sulla configurazione del flusso.

Esempi

Esempio di richiesta proveniente dall'origineCWLog.

{ "requestId": "ed4acda5-034f-9f42-bba1-f29aea6d7d8f", "timestamp": 1578090901599, "records": [ { "data": { "messageType": "DATA_MESSAGE", "owner": "123456789012", "logGroup": "log_group_name", "logStream": "log_stream_name", "subscriptionFilters": [ "subscription_filter_name" ], "logEvents": [ { "id": "0123456789012345678901234567890123456789012345", "timestamp": 1510109208016, "message": "log message 1" }, { "id": "0123456789012345678901234567890123456789012345", "timestamp": 1510109208017, "message": "log message 2" } ] } } ] }