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" } ] } } ] }