Voilà plus de 10 ans qu’AWS a mis en place son réseau de diffusion de contenu CloudFront pour accélérer les vitesses de transfert et réduire la latence sur la distribution mondiale des données, des applications, des vidéos et des API. Ce CDN (content delivery network) compte près de 230 points de présence - 215 emplacements périphériques et 13 caches intermédiaires régionaux - dans 90 villes sur 47 pays. Le fournisseur de cloud public le complète de fonctions serverless pour exécuter des tâches en périphérie de réseau, celles-ci pouvant porter sur des opérations exigeantes en calcul ou être beaucoup plus simples à traiter.
Pour les opérations exigeantes (personnalisations complexes par exemple), AWS a déjà lancé en 2017 l'environnement serverless programmable Lambda@Edge. Les fonctions développées avec ce service s’exécutent dans un cache régional situé dans la région AWS la plus proche de l’endroit où le client diffuse son contenu. Pour les opérations plus simples, de type requêtes HTTP/HTTPS qui peuvent être exécutées par des fonctions ayant une très courte durée de vie, AWS lance cette semaine une autre capacité d’exécution serverless en périphérie, CloudFront Functions. Pour cette deuxième catégorie de cas d’usage, il faut une expérience de programmation flexible, avec des critères de performances, de mise à l’échelle et de coût qui permettent d’exécuter ces fonctions à chaque demande, explique dans un billet Danilo Poccia, évangéliste en chef chez AWS.
Lorsqu'il faut utiliser des capacités que CloudFront Functions n'apporte pas, tel que l'accès réseau, on peut toujours utiliser Lambda@Ege avant et après que le contenu soit mis en cache par CloudFront. (Crédit : AWS)
Un prix divisé par 16 par rapport à Lambda@Edge
CloudFront Functions se présente comme une plateforme de scripting qui permet d’exécuter du code JavaScript léger dans l’un des points de présence edge de CloudFront (plus de 218) pour environ 1/16ème du prix qui serait facturé avec Lambda@Edge. Parmi les traitements liés aux requêtes web typiquement éligibles pour ce service, AWS cite la manipulation des clés de cache (identifiant d’objets permettant de vérifier s’ils se trouvent déjà en cache), la réécriture et la redirection d’URL (par exemple pour rediriger un utilisateur non authentifié ou pour des usages d’A/B testing), la manipulation d’en-têtes http ou, encore, l’autorisation d’accès (mise en place d’un contrôle pour la consultation du contenu délivré par CloudFront, par validation de jetons JMAC ou JWT).
AWS explique que CloudFront Functions utilise un modèle d’isolement basé sur les processus alors que celui des environnements serverless Lambda et Lambda@Edge repose sur des machines virtuelles. « Pour ce faire, nous avons dû appliquer certaines restrictions comme éviter l’accès au réseau et au système de fichiers », indique AWS dans son billet. Les fonctions s’exécutent pendant moins d’une milliseconde. De cette façon, elles peuvent traiter des millions de requêtes par seconde, pratiquement sans impact perceptible sur les performances globales du CDN, assure le fournisseur.
Une collection de code pour commencer à bâtir des fonctions
De même que Lambda@Edge, CloudFront Functions exécute le code en réponse à des événements générés par CloudFront. Plus spécifiquement, les fonctions sont déclenchées par une requête d’affichage de l’utilisateur. On accède au service depuis la console AWS. Dans son billet, Danilo Poccia donne un exemple d’utilisation consistant à personnaliser le contenu d’un site web en fonction des pays où se trouvent les utilisateurs.
Dans un tableau, AWS présente les principales différences entre les deux services dont le langage utilisé, Node.js et Python pour Lambda@Edge, JavaScript pour CloudFront Functions. (Crédit : AWS)
CloudFront Functions est nativement intégré au CDN CloudFront. Sur GitHub, AWS propose une collection de codes pour commencer à bâtir des fonctions, dans la console CloudFront, à travers l’IDE ou l’interface en ligne de commande et les API. Les fonctions peuvent ensuite être testées à partir d’une distribution CloudFront avec un bucket S3 comme source. L’utilisation de CloudFront Functions est facturé 0,1 dollar par million d’invocations.