Comment exécuter JavaScript à la périphérie avec les fonctions AWS CloudFront –
De nombreuses applications ont besoin de la latence la plus faible possible, mais souhaitent tout de même exécuter une certaine forme de logique. Alors que les réseaux de diffusion de contenu (CDN) sont traditionnellement statiques, il devient de plus en plus courant d’exécuter du code à la périphérie du réseau, au plus près de l’utilisateur.
AWS n’a-t-il pas déjà Lambda@Edge ?
CloudFront Functions n’est pas le premier ou le seul moyen d’exécuter votre code personnalisé à la périphérie d’un CDN. AWS dispose de Lambda@Edge depuis un certain temps maintenant, ce qui vous permet d’exécuter n’importe quelle fonction Lambda sur un CDN Edge, bien que pour trois fois le coût.
Ce coût empêche de nombreuses fonctions de transformation simples d’être très viables à exécuter à la périphérie. Dans de nombreux cas, vous n’avez pas besoin de faire plus qu’une simple manipulation de chaîne ou une requête/réponse de base. Ceux-ci peuvent être exécutés à la place par des fonctions de base de courte durée.
D’où le besoin de CloudFront Functions. Ils ne peuvent exécuter que du code JavaScript léger, mais ils s’exécutent sur tous les nœuds périphériques CloudFront CDN pour 1/6 du prix de Lambda@Edge. En fait, c’est encore moins cher que Lambda lui-même.
Comme il ne s’agit que de JS léger, ses utilisations sont beaucoup plus étroites. Mais, il y a encore pas mal d’opérations pour lesquelles c’est bon, comme :
- Manipulation d’en-tête
- URL de redirection ou de réécriture
- Demande d’autorisation
- Normalisation de la clé de cache
Vous disposez de deux options pour savoir quand exécuter les fonctions CloudFront : avant ou après que CloudFront récupère la réponse du CDN. Si vous modifiez des URL ou validez des jetons d’authentification, vous souhaiterez peut-être exécuter avant. Si vous ne faites que modifier les en-têtes sortants, cela peut ne pas avoir d’importance.
Une chose qu’il ne peut pas faire est de manipuler le contenu du serveur d’origine avant qu’il ne soit mis en cache, c’est-à-dire sur la réponse d’origine ; vous ne pouvez exécuter des fonctions qu’à la demande du spectateur ou à la réponse du spectateur. Pour toute autre chose, vous devrez utiliser Lambda@Edge.
Les fonctions doivent s’exécuter pendant un temps d’exécution maximal inférieur à 1 milliseconde. Cela garantit que les performances sont bonnes, même sur des millions de demandes. Les fonctions CloudFront utilisent un nouveau modèle d’isolation basé sur les processus avec un système de fichiers et un accès réseau limités, ce qui devrait constituer une amélioration des performances par rapport à la solution de machine virtuelle traditionnelle de Lambda.
En échange de 1/6 du coût, vous obtenez une taille totale de package de 10 Ko et 2 Mo de mémoire. Fais-en bon usage.
Utilisation des fonctions CloudFront
Pour commencer, vous devrez bien sûr utiliser un CDN CloudFront. Si vous ne l’êtes pas et que vous souhaitez commencer avec un, vous pouvez lire notre guide pour en configurer un.
Depuis la console CloudFront, cliquez sur « Fonctions » dans la barre latérale et créez une nouvelle fonction :
Donnez-lui un nom et vous serez alors amené à un écran où vous pourrez créer, tester, publier et déployer la fonction.
Bien sûr, le code que vous écrivez variera énormément en fonction de vos objectifs. Pour ce tutoriel, je vais simplement créer une fonction complètement inutile qui change chaque code d’état en 404 et éteint le site Web, car c’est facile à tester.
Assurez-vous de cliquer sur « Enregistrer » après avoir écrit le code, avant de passer à l’étape suivante, le test. Vous disposez de quelques exemples d’événements de test basés sur différents types d’événements, pour lesquels vous pouvez choisir l’URL et les en-têtes de demande que le client envoie.
Il récupérera une réponse du CDN comme il le ferait en production. Cela devrait faciliter le test de n’importe quelle fonction avant de la mettre en service.
Ensuite, sur la page suivante, cliquez sur « publier » pour enregistrer vos modifications dans la version de production de la fonction. Cependant, cela ne l’applique pas automatiquement au CDN ; vous devrez l’associer à une distribution CloudFront ou à plusieurs distributions.
Vous voudrez bien sûr tester que la version de production fonctionne correctement. Rendez-vous sur votre CDN et vous devriez voir la fonction appliquée. Dans ce cas, la fonction fait son travail en rendant mon exemple de site Web entièrement inutilisable.
Si cela ne fonctionne pas, vous pouvez envisager d’ajouter console.log()
déclarations, qui seront envoyées directement à AWS CloudWatch. C’est la seule forme de journalisation disponible, en plus des métriques de base, car les fonctions sont très légères. Pour plus d’informations, vous pouvez lire le guide AWS sur la connexion à CloudFront Functions.