Struttura dell'evento Lambda@Edge - Amazon CloudFront

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

Struttura dell'evento Lambda@Edge

I seguenti argomenti descrivono gli oggetti evento di richiesta e risposta che CloudFront passano a una funzione Lambda @Edge quando viene attivata.

Selezione origine dinamica

Puoi utilizzare il modello di percorso in un comportamento cache per instradare richieste a un'origine, in base al percorso e al nome dell'oggetto richiesto, ad esempio images/*.jpg. Utilizzando Lambda@Edge, puoi anche instradare richieste a un'origine in base ad altre caratteristiche, ad esempio i valori nelle intestazioni di richiesta.

La selezione dinamica dell'origine può risultare utile in vari modi. Ad esempio, puoi distribuire richieste in più origini di aree geografiche differenti per facilitare il bilanciamento del carico globale. Oppure puoi indirizzare selettivamente le richieste verso origini diverse, ognuna delle quali svolge una funzione particolare: gestione dei bot, SEO ottimizzazione, autenticazione e così via. Per codici di esempio che illustrano come utilizzare questa funzionalità, consulta Esempi di selezione dinamica dell'origine in funzione del contenuto.

Nell'evento di richiesta di CloudFront origine, l'originoggetto nella struttura degli eventi contiene informazioni sull'origine a cui verrebbe indirizzata la richiesta, in base al modello di percorso. Puoi aggiornare i valori nell'oggetto origin dell'origine per instradare una richiesta un'altra origine. Quando si aggiorna l'oggetto origin, non è necessario definire l'origine nella distribuzione. È inoltre possibile sostituire un oggetto di origine Amazon S3 con un oggetto di origine personalizzato e viceversa. Tuttavia, è possibile specificare solo una singola origine per richiesta; un'origine personalizzata o un'origine Amazon S3, ma non entrambe.

Richiedi Eventi

I seguenti argomenti mostrano la struttura dell'oggetto che CloudFront passa a una funzione Lambda per gli eventi di richiesta viewer e origin. Questi esempi mostrano una richiesta GET senza corpo. Dopo gli esempi è riportato un elenco di tutti i possibili campi negli eventi di richiesta di visualizzazione e origine.

Richiesta visualizzatore di esempio

L'esempio seguente mostra un oggetto evento richiesta visualizzatore.

{ "Records": [ { "cf": { "config": { "distributionDomainName": "d111111abcdef8.cloudfront.net", "distributionId": "EDFDVBD6EXAMPLE", "eventType": "viewer-request", "requestId": "4TyzHTaYWb1GX1qTfsHhEqV6HUDd_BzoBZnwfnvQc_1oF26ClkoUSEQ==" }, "request": { "clientIp": "203.0.113.178", "headers": { "host": [ { "key": "Host", "value": "d111111abcdef8.cloudfront.net" } ], "user-agent": [ { "key": "User-Agent", "value": "curl/7.66.0" } ], "accept": [ { "key": "accept", "value": "*/*" } ] }, "method": "GET", "querystring": "", "uri": "/" } } } ] }

Esempio di richiesta di origine

L'esempio seguente mostra un oggetto evento richiesta origine.

{ "Records": [ { "cf": { "config": { "distributionDomainName": "d111111abcdef8.cloudfront.net", "distributionId": "EDFDVBD6EXAMPLE", "eventType": "origin-request", "requestId": "4TyzHTaYWb1GX1qTfsHhEqV6HUDd_BzoBZnwfnvQc_1oF26ClkoUSEQ==" }, "request": { "clientIp": "203.0.113.178", "headers": { "x-forwarded-for": [ { "key": "X-Forwarded-For", "value": "203.0.113.178" } ], "user-agent": [ { "key": "User-Agent", "value": "Amazon CloudFront" } ], "via": [ { "key": "Via", "value": "2.0 2afae0d44e2540f472c0635ab62c232b.cloudfront.net (CloudFront)" } ], "host": [ { "key": "Host", "value": "example.org" } ], "cache-control": [ { "key": "Cache-Control", "value": "no-cache" } ] }, "method": "GET", "origin": { "custom": { "customHeaders": {}, "domainName": "example.org", "keepaliveTimeout": 5, "path": "", "port": 443, "protocol": "https", "readTimeout": 30, "sslProtocols": [ "TLSv1", "TLSv1.1", "TLSv1.2" ] } }, "querystring": "", "uri": "/" } } } ] }

Richiedi campi evento

I dati dell'oggetto evento di richiesta sono contenuti in due sottooggetti: config (Records.cf.config) e request (Records.cf.request). I seguenti elenchi descrivono i campi di ciascun oggetto secondario.

Campi nell'oggetto config

Nella seguente lista sono descritti i campi nell’oggetto config (Records.cf.config).

distributionDomainName (solo lettura)

Il nome di dominio della distribuzione associata alla richiesta.

distributionID (solo lettura)

L'ID della distribuzione associata alla richiesta.

eventType (solo lettura)

Il tipo di trigger associato alla richiesta: viewer-request o origin-request.

requestId (solo lettura)

Una stringa crittografata che identifica in modo univoco una richiesta. viewer-to-CloudFront Il requestId valore appare anche nei registri di CloudFront accesso come. x-edge-request-id Per ulteriori informazioni, consulta Configurazione e utilizzo di log standard (log di accesso) e Campi del file di registro standard.

Campi nell'oggetto richiesta

Nella seguente lista sono descritti i campi nell’oggetto request (Records.cf.request).

clientIp (solo lettura)

L'indirizzo IP del visualizzatore che ha effettuato la richiesta. Se il visualizzatore ha utilizzato un HTTP proxy o un load balancer per inviare la richiesta, il valore è l'indirizzo IP del proxy o del load balancer.

intestazioni (lettura/scrittura)

Le intestazioni nella richiesta. Tieni presente quanto segue:

  • Le chiavi dell'headersoggetto sono versioni minuscole dei nomi di intestazione standard. HTTP L'utilizzo di chiavi in minuscolo fornisce accesso ai valori delle intestazioni senza distinzione tra maiuscole e minuscole.

  • Ogni intestazione (ad esempio, headers["accept"] o headers["host"]) è una matrice di coppie chiave-valore. Per una determinata intestazione, la matrice contiene una coppia chiave-valore per ogni valore nella risposta generata.

  • keycontiene il nome dell'intestazione con distinzione tra maiuscole e minuscole così come è apparso nella HTTP richiesta, ad esempio,Host, User-Agent e così via. X-Forwarded-For

  • valuecontiene il valore dell'intestazione così come è apparso nella richiesta. HTTP

  • Quando la funzione Lambda aggiunge o modifica le intestazioni di richiesta e non si include il campo di intestazione key, Lambda @Edge inserisce automaticamente un'intestazione key utilizzando il nome dell'intestazione fornito. Indipendentemente dalla formattazione del nome dell'intestazione, la chiave dell'intestazione automaticamente inserita sarà formattata con iniziale maiuscola per tutte le parti, separate da trattini (-).

    Ad esempio, è possibile aggiungere un'intestazione come quella seguente, senza una chiave dell'intestazione: key

    "user-agent": [ { "value": "ExampleCustomUserAgent/1.X.0" } ]

    In questo esempio, Lambda @Edge inserisce automaticamente "key": "User-Agent".

Per informazioni sulle restrizioni di utilizzo delle intestazioni, consulta Restrizioni sulle funzioni edge.

method (solo lettura)

Il HTTP metodo della richiesta.

querystring (lettura/scrittura)

La stringa di query, se presente, nella richiesta. Se la richiesta non include una stringa di query, l’oggetto evento include comunque querystring con un valore vuoto. Per ulteriori informazioni sulle stringhe di query, vedi Contenuto della cache in base ai parametri della stringa di query.

uri (lettura/scrittura)

Il percorso relativo dell'oggetto richiesto. Se la funzione Lambda modifica il valore uri, annotare quanto segue:

  • Il nuovo valore uri deve iniziare con una barra (/).

  • Se una funzione modifica il valore uri, l'oggetto richiesto dal visualizzatore viene modificato.

  • Se una funzione modifica il valore uri, il comportamento della cache per la richiesta o l'origine a cui la richiesta viene inoltrata non viene modificato.

body (lettura/scrittura)

Il corpo della HTTP richiesta. La struttura body può contenere i seguenti campi:

inputTruncated (solo lettura)

Un flag booleano che indica se l'organismo è stato troncato da Lambda@Edge. Per ulteriori informazioni, consulta Restrizioni sul corpo della richiesta con l'opzione Includi corpo.

action (lettura/scrittura)

L'operazione che si desidera richiedere con il corpo. Le opzioni per action sono le seguenti:

  • read-only: Questa è l'impostazione predefinita. Quando viene restituita la risposta dalla funzione Lambda, se action è di sola lettura, Lambda@Edge ignora tutte le modifiche a encoding o data.

  • replace: specificare questo quando si desidera sostituire il corpo inviato all'origine.

encoding (lettura/scrittura)

La codifica per il corpo. Quando Lambda@Edge espone il corpo alla funzione Lambda, converte per prima cosa il corpo in base64-encoding. Se scegli replace di action sostituire il corpo, puoi scegliere di utilizzare base64 (impostazione predefinita) o la text codifica. Se si specifica encoding come base64 ma il corpo non è valido base64, CloudFront restituisce un errore.

data (lettura/scrittura)

I contenuti del corpo della richiesta.

origin ( lettura/scrittura) (solo eventi di origine)

L'origine a cui inviare la richiesta. La struttura origin deve contenere esattamente un'origine, che può essere un'origine personalizzata o un'origine Amazon S3. La struttura di origine può contenere i seguenti campi:

customHeaders ( lettura/scrittura) (origini personalizzate e Amazon S3)

Puoi includere intestazioni personalizzate con la richiesta specificando un nome di intestazione e una coppia di valori per ogni intestazione personalizzata. Non è possibile aggiungere intestazioni che non sono consentite e in Records.cf.request.headers un'intestazione con lo stesso nome non può essere presente. Le note sulle intestazioni di richiesta si applicano anche alle intestazioni personalizzate. Per ulteriori informazioni, consulta Intestazioni personalizzate che non CloudFront possono essere aggiunte alle richieste di origine e Restrizioni sulle funzioni edge.

domainName ( lettura/scrittura) (origini personalizzate e Amazon S3)

Il nome di dominio dell'origine. Il nome di dominio non può essere vuoto.

  • Per origini personalizzate: specifica un nome di DNS dominio, ad esempiowww.example.com. Il nome di dominio non può includere due punti (:) e non può essere un indirizzo IP. Il nome di dominio può contenere fino a 253 caratteri.

  • Per le origini di Amazon S3: specifica il nome di DNS dominio del bucket Amazon S3, ad esempio. amzn-s3-demo-bucket.s3.eu-west-1.amazonaws.com Il nome può contenere fino a 128 caratteri e deve essere tutto in minuscolo.

path ( lettura/scrittura) (origini personalizzate e Amazon S3)

Il percorso di directory sul server di origine in cui la richiesta deve trovare il contenuto. Il percorso può iniziare con una barra (/) ma non può terminare con una barra (ad esempio, non può terminare con example-path/). Solo per le origini personalizzate, il percorso deve essere URL codificato e avere una lunghezza massima di 255 caratteri.

keepaliveTimeout (lettura/scrittura) (solo origini personalizzate)

Per quanto tempo, in secondi, si CloudFront dovrebbe cercare di mantenere la connessione all'origine dopo aver ricevuto l'ultimo pacchetto della risposta. Il valore deve essere un numero compreso tra 1 e 60, inclusi.

port (lettura/scrittura) (solo origini personalizzate)

La porta a cui CloudFront dovresti connetterti all'origine personalizzata. La porta deve essere 80, 443 oppure un numero nell'intervallo 1024-65535, inclusi.

protocol (lettura/scrittura) (solo origini personalizzate)

Il protocollo di connessione da CloudFront utilizzare per la connessione all'origine. Il valore può essere http o https.

readTimeout (lettura/scrittura) (solo origini personalizzate)

Quanto tempo, in secondi, CloudFront occorre attendere per ricevere una risposta dopo aver inviato una richiesta all'indirizzo di origine. Questo specifica anche quanto tempo CloudFront deve attendere dopo aver ricevuto un pacchetto di risposta prima di ricevere il pacchetto successivo. Il valore deve essere un numero compreso tra 4 e 60, inclusi.

Se il tuo caso d'uso richiede più di 60 secondi, puoi richiedere una quota più alta per. Response timeout per origin Per ulteriori informazioni, consulta Quote generali sulle distribuzioni.

sslProtocols (lettura/scrittura) (solo origini personalizzate)

Il TLS protocollo minimoSSL/che CloudFront è possibile utilizzare per stabilire una HTTPS connessione con l'origine. I valori possono essere uno dei seguenti: TLSv1.2, TLSv1.1, TLSv1 o SSLv3.

authMethod ( lettura/scrittura) (solo origini Amazon S3)

Se stai usando un'identità di accesso all'origine (OAI), imposta questo campo suorigin-access-identity. Se non stai usando unOAI, impostalo sunone. Se si imposta authMethod su origin-access-identity, ci sono diversi requisiti:

  • È necessario specificare region (vedere il seguente campo).

  • È necessario utilizzare lo stesso OAI quando si modifica la richiesta da un'origine Amazon S3 a un'altra.

  • Non puoi utilizzare un OAI quando modifichi la richiesta da un'origine personalizzata a un'origine Amazon S3.

Nota

Questo campo non supporta Origin Access Control (OAC).

region ( lettura/scrittura) (solo origini Amazon S3)

La AWS regione del tuo bucket Amazon S3. Questo è necessario solo quando si imposta authMethod su origin-access-identity.

Eventi di risposta

I seguenti argomenti mostrano la struttura dell'oggetto che CloudFront passa a una funzione Lambda per gli eventi di risposta del visualizzatore e dell'origine. Dopo gli esempi c'è un elenco di tutti i campi possibili in eventi di risposta del visualizzatore e origine.

Esempio di risposta all'origine

L'esempio seguente mostra un oggetto evento risposta origine.

{ "Records": [ { "cf": { "config": { "distributionDomainName": "d111111abcdef8.cloudfront.net", "distributionId": "EDFDVBD6EXAMPLE", "eventType": "origin-response", "requestId": "4TyzHTaYWb1GX1qTfsHhEqV6HUDd_BzoBZnwfnvQc_1oF26ClkoUSEQ==" }, "request": { "clientIp": "203.0.113.178", "headers": { "x-forwarded-for": [ { "key": "X-Forwarded-For", "value": "203.0.113.178" } ], "user-agent": [ { "key": "User-Agent", "value": "Amazon CloudFront" } ], "via": [ { "key": "Via", "value": "2.0 8f22423015641505b8c857a37450d6c0.cloudfront.net (CloudFront)" } ], "host": [ { "key": "Host", "value": "example.org" } ], "cache-control": [ { "key": "Cache-Control", "value": "no-cache" } ] }, "method": "GET", "origin": { "custom": { "customHeaders": {}, "domainName": "example.org", "keepaliveTimeout": 5, "path": "", "port": 443, "protocol": "https", "readTimeout": 30, "sslProtocols": [ "TLSv1", "TLSv1.1", "TLSv1.2" ] } }, "querystring": "", "uri": "/" }, "response": { "headers": { "access-control-allow-credentials": [ { "key": "Access-Control-Allow-Credentials", "value": "true" } ], "access-control-allow-origin": [ { "key": "Access-Control-Allow-Origin", "value": "*" } ], "date": [ { "key": "Date", "value": "Mon, 13 Jan 2020 20:12:38 GMT" } ], "referrer-policy": [ { "key": "Referrer-Policy", "value": "no-referrer-when-downgrade" } ], "server": [ { "key": "Server", "value": "ExampleCustomOriginServer" } ], "x-content-type-options": [ { "key": "X-Content-Type-Options", "value": "nosniff" } ], "x-frame-options": [ { "key": "X-Frame-Options", "value": "DENY" } ], "x-xss-protection": [ { "key": "X-XSS-Protection", "value": "1; mode=block" } ], "content-type": [ { "key": "Content-Type", "value": "text/html; charset=utf-8" } ], "content-length": [ { "key": "Content-Length", "value": "9593" } ] }, "status": "200", "statusDescription": "OK" } } } ] }

Risposta del visualizzatore di esempio

Nell'esempio seguente viene illustrato un oggetto evento risposta visualizzatore.

{ "Records": [ { "cf": { "config": { "distributionDomainName": "d111111abcdef8.cloudfront.net", "distributionId": "EDFDVBD6EXAMPLE", "eventType": "viewer-response", "requestId": "4TyzHTaYWb1GX1qTfsHhEqV6HUDd_BzoBZnwfnvQc_1oF26ClkoUSEQ==" }, "request": { "clientIp": "203.0.113.178", "headers": { "host": [ { "key": "Host", "value": "d111111abcdef8.cloudfront.net" } ], "user-agent": [ { "key": "User-Agent", "value": "curl/7.66.0" } ], "accept": [ { "key": "accept", "value": "*/*" } ] }, "method": "GET", "querystring": "", "uri": "/" }, "response": { "headers": { "access-control-allow-credentials": [ { "key": "Access-Control-Allow-Credentials", "value": "true" } ], "access-control-allow-origin": [ { "key": "Access-Control-Allow-Origin", "value": "*" } ], "date": [ { "key": "Date", "value": "Mon, 13 Jan 2020 20:14:56 GMT" } ], "referrer-policy": [ { "key": "Referrer-Policy", "value": "no-referrer-when-downgrade" } ], "server": [ { "key": "Server", "value": "ExampleCustomOriginServer" } ], "x-content-type-options": [ { "key": "X-Content-Type-Options", "value": "nosniff" } ], "x-frame-options": [ { "key": "X-Frame-Options", "value": "DENY" } ], "x-xss-protection": [ { "key": "X-XSS-Protection", "value": "1; mode=block" } ], "age": [ { "key": "Age", "value": "2402" } ], "content-type": [ { "key": "Content-Type", "value": "text/html; charset=utf-8" } ], "content-length": [ { "key": "Content-Length", "value": "9593" } ] }, "status": "200", "statusDescription": "OK" } } } ] }

Campi eventi di risposta

I dati dell'oggetto evento risposta sono contenuti in tre sottooggetti: config 8Records.cf.config), request (Records.cf.request) e response (Records.cf.response). Per ulteriori informazioni sui campi dell'oggetto richiesta, vedere Campi nell'oggetto richiesta. Gli elenchi seguenti descrivono i campi nei sottooggetti config e response.

Campi nell'oggetto config

Nella seguente lista sono descritti i campi nell’oggetto config (Records.cf.config).

distributionDomainName (solo lettura)

Il nome di dominio della distribuzione associata alla risposta.

distributionID (solo lettura)

L'ID della distribuzione associata alla risposta.

eventType (solo lettura)

Il tipo di trigger associato alla risposta: origin-response o viewer-response.

requestId (solo lettura)

Una stringa crittografata che identifica in modo univoco la viewer-to-CloudFront richiesta a cui è associata questa risposta. Il requestId valore appare anche nei registri di CloudFront accesso come. x-edge-request-id Per ulteriori informazioni, consulta Configurazione e utilizzo di log standard (log di accesso) e Campi del file di registro standard.

Campi nell'oggetto risposta

Nella seguente lista sono descritti i campi nell’oggetto response (Records.cf.response). Per informazioni sull'utilizzo di una funzione Lambda @Edge per generare una HTTP risposta, vedere. Genera HTTP risposte nei trigger di richiesta

headers (lettura/scrittura)

Le intestazioni nella risposta. Tieni presente quanto segue:

  • Le chiavi dell'headersoggetto sono versioni minuscole dei nomi di intestazione standardHTTP. L'utilizzo di chiavi in minuscolo fornisce accesso ai valori delle intestazioni senza distinzione tra maiuscole e minuscole.

  • Ogni intestazione (ad esempio, headers["content-type"] o headers["content-length"]) è una matrice di coppie chiave-valore. Per una determinata intestazione, la matrice contiene una coppia chiave-valore per ogni valore nella risposta generata.

  • keycontiene il nome dell'intestazione con distinzione tra maiuscole e minuscole così come appare nella HTTP risposta; ad esempio,Content-Type, Content-Length e così via. Cookie

  • valuecontiene il valore dell'intestazione così come appare nella risposta. HTTP

  • Quando la funzione Lambda aggiunge o modifica le intestazioni di risposta e non si include il campo di intestazione key, Lambda @Edge inserisce automaticamente un'intestazione key utilizzando il nome dell'intestazione fornito. Indipendentemente dalla formattazione del nome dell'intestazione, la chiave dell'intestazione automaticamente inserita sarà formattata con iniziale maiuscola per tutte le parti, separate da trattini (-).

    Ad esempio, è possibile aggiungere un'intestazione come quella seguente, senza una chiave dell'intestazione: key

    "content-type": [ { "value": "text/html;charset=UTF-8" } ]

    In questo esempio, Lambda @Edge inserisce automaticamente "key": "Content-Type".

Per informazioni sulle restrizioni di utilizzo delle intestazioni, consulta Restrizioni sulle funzioni edge.

status

Il codice di HTTP stato della risposta.

statusDescription

Descrizione dello HTTP stato della risposta.