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.
Structure d'événement Lambda@Edge
Les rubriques suivantes décrivent les objets d'événements de demande et de réponse CloudFront transmis à une fonction Lambda @Edge lorsqu'elle est déclenchée.
Sélection de l'origine dynamique
Vous pouvez utiliser le modèle de chemin dans un comportement de cache pour router les demandes vers une origine, en fonction du chemin et du nom de l'objet demandé, tels que images/*.jpg
. En utilisant Lambda@Edge, vous pouvez également acheminer des demandes vers une origine en fonction d'autres caractéristiques, comme les valeurs contenues dans les en-têtes de la demande.
Cette sélection d'origine dynamique peut être utile de diverses façons. Par exemple, vous pouvez répartir les demandes entre des origines de différentes zones géographiques pour vous aider à réaliser un équilibrage de charge international. Ou vous pouvez acheminer de façon sélective des demandes vers différentes origines servant chacune une fonction donnée : gestion du robot, optimisation de la stratégie SEO, authentification, etc. Pour obtenir des exemples de code qui expliquent comment utiliser cette fonction, veuillez consulter Sélection d'origine dynamique basée sur le contenu – exemples.
Dans l'événement de demande CloudFront d'origine, l'origin
objet de la structure d'événement contient des informations sur l'origine vers laquelle la demande serait acheminée, en fonction du modèle de chemin. Vous pouvez mettre à jour les valeurs de l'objet origin
pour router une demande vers une autre origine. Quand vous mettez à jour l'objet origin
, vous n'avez pas besoin de définir l'origine dans la distribution. Vous pouvez également remplacer un objet d'origine Amazon S3 par un objet d'origine personnalisée, et vice versa. Toutefois, vous ne pouvez spécifier qu'une seule origine par demande ; une origine personnalisée ou une origine Amazon S3, mais pas les deux.
Événements de demande
Les rubriques suivantes présentent la structure de l'objet transmis à une fonction Lambda pour les événements de demande d'affichage et d'origine. CloudFront Ces exemples montrent une demande GET
sans corps. Après les exemples, vous trouverez la liste de tous les champs possibles dans les événements de demande d'utilisateur et d'origine.
Rubriques
Exemple de demande d'utilisateur
L'exemple suivant montre un objet d'événement de demande d'utilisateur.
{ "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": "/" } } } ] }
Exemple de demande de l'origine
L'exemple suivant montre un objet d'événement de demande d'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": "/" } } } ] }
Champs d'événement de demande
Les données d'objet d'événement de demande sont contenues dans deux sous-objets : config
(Records.cf.config
) et request
(Records.cf.request
). Les listes suivantes décrivent les champs de chaque sous-objet.
Champs de l’objet config
La liste suivante décrit les champs figurant dans l’objet config
(Records.cf.config
).
distributionDomainName
(lecture seule)-
Nom de domaine de la distribution qui est associée à la demande.
distributionID
(lecture seule)-
ID de la distribution qui est associée à la demande.
eventType
(lecture seule)-
Type de déclencheur associé à la demande :
viewer-request
ouorigin-request
. requestId
(lecture seule)-
Chaîne cryptée qui identifie de manière unique une viewer-to-CloudFront demande. La valeur
requestId
apparaît également dans les journaux d'accès de CloudFront en tant quex-edge-request-id
. Pour plus d’informations, consultez Journalisation standard (journaux d'accès) et Champs du fichier journal.
Champs de l'objet de demande
La liste suivante décrit les champs figurant dans l’objet request
(Records.cf.request
).
clientIp
(lecture seule)-
Adresse IP de l'utilisateur qui a émis la requête. Si l'utilisateur a utilisé un proxy HTTP ou un équilibreur de charge pour envoyer la demande, la valeur correspond à l'adresse IP du proxy ou de l'équilibreur de charge.
- en-têtes (lecture/écriture)
-
En-têtes de la requête. Remarques :
-
Les clés figurant dans l’objet
headers
sont les versions en minuscules des noms d’en-têtes HTTP standard. L'utilisation des minuscules vous permet d'accéder aux valeurs des en-têtes sans tenir compte de la casse. -
Chaque objet d’en-tête (par exemple,
headers["accept"]
ouheaders["host"]
) est un tableau de paires clé-valeur. Pour un en-tête donné, le tableau contient une paire clé-valeur pour chaque valeur dans la demande. -
key
contient le nom sensible à la casse de l'en-tête tel qu'il apparaissait dans la requête HTTP ; par exemple,Host
,User-Agent
,X-Forwarded-For
, etc. -
value
contient la valeur d'en-tête telle qu'elle apparaissait dans la requête HTTP. -
Lorsque votre fonction Lambda ajoute ou modifie des en-têtes de demande et que vous n'incluez pas le champ
key
d'en-tête, Lambda@Edge insère automatiquement une clé (key
) d'en-tête en utilisant le nom d'en-tête que vous fournissez. Quelle que soit la manière dont vous avez formaté le nom d'en-tête, la clé d'en-tête qui est insérée automatiquement est formatée avec une majuscule initiale pour chaque partie, séparée par des tirets (-).Par exemple, vous pouvez ajouter un en-tête comme le suivant, sans clé (
key
) d’en-tête :"user-agent": [ { "value": "ExampleCustomUserAgent/1.X.0" } ]
Dans cet exemple, Lambda@Edge insère automatiquement
"key": "User-Agent"
.
Pour plus d’informations sur les restrictions applicables à l’utilisation d’en-têtes, consultez Restrictions sur les fonctions périphériques.
-
method
(lecture seule)-
Méthode HTTP de la demande.
querystring
(lecture/écriture)-
Chaîne de requête, le cas échéant, dans la demande. Si la demande n'inclut pas de chaîne de requête, l'objet d'événement inclut quand-même
querystring
avec une valeur vide. Pour plus d’informations sur les chaînes de requête, consultez Contenu du cache basé sur les paramètres de chaîne de requête. uri
(lecture/écriture)-
Chemin d'accès relatif de l'objet demandé. Si votre fonction Lambda modifie la valeur
uri
, notez ce qui suit :-
La nouvelle valeur
uri
doit commencer par une barre oblique (/). -
Lorsqu'une fonction modifie la valeur
uri
, cela change l'objet que l'utilisateur demande. -
Lorsqu'une fonction modifie la valeur
uri
, cela ne modifie pas le comportement de cache pour la demande ou l'origine vers laquelle la demande est envoyée.
-
body
(lecture/écriture)-
Corps de la requête HTTP. La structure
body
peut contenir les champs suivants :inputTruncated
(lecture seule)-
Indicateur booléen qui indique si le corps a été tronqué par Lambda@Edge. Pour de plus amples informations, veuillez consulter Restrictions relatives au corps de la requête avec l'option Inclure le corps.
action
(lecture/écriture)-
L'action que vous avez l'intention de prendre avec le corps. Les options pour l'
action
sont les suivantes :-
read-only:
Il s'agit de l'option par défaut. Au moment de renvoyer la réponse à partir de la fonction Lambda, siaction
est en lecture seule, Lambda@Edge ignore les modifications apportée àencoding
ou àdata
. -
replace:
À préciser lorsque vous souhaitez remplacer le corps envoyé à l'origine.
-
encoding
(lecture/écriture)-
L'encodage pour le corps. Lorsque Lambda@Edge expose le corps à la fonction Lambda, il le convertit d'abord en base64-encoding. Si vous choisissez
replace
deaction
remplacer le corps, vous pouvez choisir d'utiliserbase64
(par défaut) ou d'text
encoder. Si vous spécifiezencoding
en tant quebase64
, mais que le corps n'est pas valide, base64, CloudFront renvoie une erreur. data
(lecture/écriture)-
Le contenu du corps de requête.
origin
(lecture/écriture) (événements d'origine uniquement)-
Origine vers laquelle envoyer la demande. La
origin
structure doit contenir exactement une origine, qui peut être une origine personnalisée ou une origine Amazon S3.En fonction du type d'origine que vous spécifiez (origine personnalisée ou origine Amazon S3), vous devez spécifier les champs suivants dans votre demande :
customHeaders
(lecture/écriture) (origines personnalisées et Amazon S3)-
(Facultatif) Vous pouvez inclure des en-têtes personnalisés dans la demande en spécifiant un nom d'en-tête et une paire de valeurs pour chaque en-tête personnalisé. Vous ne pouvez pas ajouter des en-têtes non autorisés et un en-tête portant le même nom ne peut pas être présent dans
Records.cf.request.headers
. Les notes sur les en-têtes de demande s'appliquent également aux en-têtes personnalisés. Pour plus d’informations, consultez En-têtes personnalisés qui ne CloudFront peuvent pas être ajoutés aux demandes d'origine et Restrictions sur les fonctions périphériques. domainName
(lecture/écriture) (origines personnalisées et Amazon S3)-
Nom de domaine de l'origine. Le nom de domaine ne peut pas être vide.
-
Pour les origines personnalisées – Spécifiez un nom de domaine DNS, tel que
www.example.com
. Le nom de domaine ne peut pas inclure un signe deux-points (:) et ne peut pas être une adresse IP. Le nom du domaine peut contenir jusqu'à 253 caractères. -
Pour les origines Amazon S3 – Spécifiez le nom de domaine DNS du compartiment Amazon S3, tel que
amzn-s3-demo-bucket.s3.eu-west-1.amazonaws.com
. Il peut comporter jusqu'à 128 caractères, qui doivent tous être en minuscules.
-
path
(lecture/écriture) (origines personnalisées et Amazon S3)-
Chemin de répertoire à l'origine où la demande doit localiser le contenu. Ce chemin doit commencer par une barre oblique (/) mais ne doit pas se terminer par une barre oblique (par exemple, il ne doit pas se terminer par
example-path/
). Pour les origines personnalisées uniquement, le chemin doit être codé par URL et avoir une longueur maximale de 255 caractères. keepaliveTimeout
(lecture/écriture) (origines personnalisées uniquement)-
Combien de temps, en secondes, cela CloudFront devrait essayer de maintenir la connexion à l'origine après avoir reçu le dernier paquet de réponse. La valeur doit être un nombre compris entre 1 et 60, bornes incluses.
port
(lecture/écriture) (origines personnalisées uniquement)-
Le port auquel vous CloudFront devez vous connecter à votre point d'origine personnalisé. Il doit s'agir du port 80, du port 443 ou d'un port compris entre 1 024 et 65 535.
protocol
(lecture/écriture) (origines personnalisées uniquement)-
Protocole de connexion à utiliser CloudFront lors de la connexion à votre point d'origine. La valeur peut être
http
ouhttps
. readTimeout
(lecture/écriture) (origines personnalisées uniquement)-
Combien de temps, en secondes, CloudFront doit attendre une réponse après avoir envoyé une demande à votre origine. Cela indique également le temps CloudFront d'attente après réception d'un paquet de réponse avant de recevoir le paquet suivant. La valeur doit être un nombre compris entre 4 et 60, bornes incluses.
Si votre cas d'utilisation prend plus de 60 secondes, vous pouvez demander un quota plus élevé pour
Response timeout per origin
. Pour de plus amples informations, veuillez consulter Quotas généraux sur les distributions. sslProtocols
(lecture/écriture) (origines personnalisées uniquement)-
Protocole SSL/TLS minimal CloudFront pouvant être utilisé lors de l'établissement d'une connexion HTTPS avec votre point d'origine. Il peut s'agir des valeurs suivantes :
TLSv1.2
,TLSv1.1
,TLSv1
ouSSLv3
. authMethod
(lecture/écriture) (origines Amazon S3 uniquement)-
Si vous utilisez une identité d'accès à l'origine (OAI), définissez ce champ sur
origin-access-identity
. Si vous n'utilisez pas d'OAI, configurez-le surnone
. Si vous définissezauthMethod
surorigin-access-identity
, il existe plusieurs exigences :-
Vous devez spécifier le paramètre
region
(voir le champ suivant). -
Vous devez utiliser la même identité d'accès à l'origine lorsque vous changez l'origine Amazon S3 de la demande.
-
Vous ne pouvez pas utiliser d'identité d'accès à l'origine lorsque vous remplacez l'origine personnalisée de la demande par une origine Amazon S3.
Note
Ce champ ne prend pas en charge le contrôle d'accès à l'origine (OAC).
-
region
(lecture/écriture) (origines Amazon S3 uniquement)-
La AWS région de votre compartiment Amazon S3. Cette option n'est requise que lorsque vous définissez
authMethod
surorigin-access-identity
.
Événements de réponse
Les rubriques suivantes présentent la structure de l'objet qui est CloudFront transmis à une fonction Lambda pour les événements de réponse du visualiseur et de l'origine. Après les exemples, vous trouverez la liste de tous les champs possibles dans les événements de réponse d'utilisateur et d'origine.
Rubriques
Exemple de réponse de l'origine
L'exemple suivant montre un objet d'événement de réponse de l'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" } } } ] }
Exemple de réponse de l'utilisateur
L'exemple suivant montre un objet d'événement de réponse de l'utilisateur.
{ "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" } } } ] }
Champs d'événement de réponse
Les données d'objet d'événement de réponse sont contenues dans trois sous-objets : config
(Records.cf.config
), request
(Records.cf.request
) et response
(Records.cf.response
). Pour de plus amples informations sur les champs de l'objet de demande, veuillez consulter Champs de l'objet de demande. Les listes suivantes décrivent les champs figurant dans les sous-objets config
et response
.
Champs de l’objet config
La liste suivante décrit les champs figurant dans l’objet config
(Records.cf.config
).
distributionDomainName
(lecture seule)-
Nom de domaine de la distribution qui est associée à la réponse.
distributionID
(lecture seule)-
ID de la distribution qui est associée à la réponse.
eventType
(lecture seule)-
Type de déclencheur associé à la réponse :
origin-response
ouviewer-response
. requestId
(lecture seule)-
Chaîne cryptée qui identifie de manière unique la viewer-to-CloudFront demande à laquelle cette réponse est associée. La
requestId
valeur apparaît également dans les journaux CloudFront d'accès sous la formex-edge-request-id
. Pour plus d’informations, consultez Journalisation standard (journaux d'accès) et Champs du fichier journal.
Champs de l'objet de réponse
La liste suivante décrit les champs figurant dans l’objet response
(Records.cf.response
). Pour obtenir des informations sur l'utilisation d'une fonction Lambda@Edge pour générer une réponse HTTP, veuillez consulter Générer des réponses HTTP dans les déclencheurs de requêtes.
headers
(lecture/écriture)-
En-têtes de la réponse. Remarques :
-
Les clés figurant dans l’objet
headers
sont les versions en minuscules des noms d’en-têtes HTTP standard. L'utilisation des minuscules vous permet d'accéder aux valeurs des en-têtes sans tenir compte de la casse. -
Chaque objet d’en-tête (par exemple,
headers["content-type"]
ouheaders["content-length"]
) est un tableau de paires clé-valeur. Pour un en-tête donné, le tableau contient une paire clé-valeur pour chaque valeur de la réponse. -
key
contient le nom de l'en-tête distinguant majuscules et minuscules tel qu'il apparaît dans la réponse HTTP ; par exempleContent-Type
Content-Length
Cookie
,,, etc. -
value
contient la valeur d'en-tête telle qu'elle apparaît dans la réponse HTTP. -
Lorsque votre fonction Lambda ajoute ou modifie des en-têtes de réponse et que vous n'incluez pas le champ
key
d'en-tête, Lambda@Edge insère automatiquement une clé (key
) d'en-tête en utilisant le nom d'en-tête que vous fournissez. Quelle que soit la manière dont vous avez formaté le nom d'en-tête, la clé d'en-tête qui est insérée automatiquement est formatée avec une majuscule initiale pour chaque partie, séparée par des tirets (-).Par exemple, vous pouvez ajouter un en-tête comme le suivant, sans clé (
key
) d’en-tête :"content-type": [ { "value": "text/html;charset=UTF-8" } ]
Dans cet exemple, Lambda@Edge insère automatiquement
"key": "Content-Type"
.
Pour plus d’informations sur les restrictions applicables à l’utilisation d’en-têtes, consultez Restrictions sur les fonctions périphériques.
-
status
-
Code de statut HTTP de la réponse.
statusDescription
-
Description de l'état HTTP de la réponse.