JavaScript aan de rand uitvoeren met AWS CloudFront-functies

0
158

Veel applicaties hebben de laagst mogelijke latentie nodig, maar willen toch een vorm van logica. Hoewel Content Delivery Networks (CDN's) traditioneel statisch zijn, wordt het steeds gebruikelijker om code uit te voeren aan de rand van het netwerk, het dichtst bij de gebruiker.

GERELATEERD: Een CDN kan uw website versnellen. Dit is wat u moet weten!

Heeft AWS al Lambda@Edge?

CloudFront Functions is niet de eerste of enige manier om uw aangepaste code aan de rand van een CDN uit te voeren. AWS heeft al een tijdje Lambda@Edge, waarmee je elke Lambda-functie op een CDN-edge kunt uitvoeren, zij het voor drie keer de kosten.

Deze kosten verhindert dat veel eenvoudige transformatiefuncties erg levensvatbaar zijn aan de rand te rennen. In veel gevallen hoeft u niet meer te doen dan een eenvoudige stringmanipulatie of een basisverzoek/antwoord. Deze kunnen in plaats daarvan worden uitgevoerd door kortstondige, basisfuncties.

Vandaar de behoefte aan CloudFront Functions. Ze kunnen alleen lichtgewicht JavaScript-code uitvoeren, maar ze draaien op alle CloudFront CDN edge-knooppunten voor 1/6 van de prijs van Lambda@Edge. Dat is zelfs goedkoper dan Lambda zelf.

Omdat het de enige lichtgewicht JS is, is het gebruik ervan een stuk beperkter. Maar er zijn nog steeds nogal wat bewerkingen waar het goed voor is, zoals:

  • Koptekstmanipulatie
  • URL-omleidingen of herschrijvingen
  • Autorisatie aanvragen
  • Normalisering van cachesleutel

Advertentie

U hebt twee opties voor het uitvoeren van CloudFront Functions: vóór of nadat CloudFront het antwoord van het CDN ophaalt. Als u URL's wijzigt of authenticatietokens valideert, wilt u misschien eerder uitvoeren. Als je alleen uitgaande headers aanpast, maakt het misschien niet uit.

Eén ding dat het niet kan doen, is de inhoud van de oorspronkelijke server manipuleren voordat het in de cache wordt opgeslagen, d.w.z. op de Origin Response; u kunt alleen functies uitvoeren op verzoek van de kijker of op reactie van de kijker. Voor al het andere moet je Lambda@Edge gebruiken.

Functies moeten worden uitgevoerd voor een maximale uitvoeringstijd van minder dan 1 milliseconde. Dit zorgt ervoor dat de prestaties goed zijn, zelfs bij miljoenen verzoeken. CloudFront-functies gebruiken een nieuw procesgebaseerd isolatiemodel met beperkte bestandssysteem- en netwerktoegang, wat een prestatieverbetering zou moeten zijn ten opzichte van Lambda's traditionele VM-oplossing.

In ruil voor 1/6 van de kosten, u krijgt een totale pakketgrootte van 10 KB en 2 MB geheugen. Gebruik het verstandig.

CloudFront-functies gebruiken

Om te beginnen moet u natuurlijk een CloudFront CDN gebruiken. Als je dat niet bent, en je wilt er wel een beginnen, lees dan onze handleiding om er een te maken.

GERELATEERD: Aan de slag met AWS's CloudFront CDN

Klik in de CloudFront-console op “Functies” in de zijbalk en maak een nieuwe functie:

Advertentie

Geef het een naam en je wordt naar een scherm gebracht waar je de functie kunt bouwen, testen, publiceren en implementeren.

Natuurlijk zal de code die je schrijft enorm variëren, afhankelijk van je doelen. Voor deze tutorial zal ik gewoon een volledig nutteloze functie maken die elke statuscode verandert in 404 en de website uitschakelt, want dat is gemakkelijk te testen.

Zorg ervoor dat u op “Opslaan” na het schrijven van code, voordat u doorgaat naar de volgende stap, testen. U krijgt een paar voorbeeldtestgebeurtenissen op basis van verschillende soorten gebeurtenissen, waarvoor u de URL kunt kiezen en de verzoekheaders die de client verzendt.

Het zal een reactie van het CDN ophalen zoals het zou doen in de maak. Dit zou het gemakkelijk moeten maken om elke functie te testen voordat je ermee live gaat.

Klik vervolgens op de volgende pagina op “publiceren” om uw wijzigingen op te slaan in de productieversie van de functie. Dit past het echter niet automatisch toe op het CDN; je moet het koppelen aan een CloudFront-distributie of meerdere distributies.

Natuurlijk wil je testen of de productieversie goed werkt. Ga naar je CDN en je zou moeten zien dat de functie wordt toegepast. In dit geval doet de functie zijn werk om mijn voorbeeldwebsite volledig onbruikbaar te maken.

Advertentie

Als het niet werkt, kunt u overwegen console.log()-instructies toe te voegen, die rechtstreeks naar AWS CloudWatch worden verzonden. Dit is de enige beschikbare vorm van logboekregistratie, naast basisstatistieken, omdat de functies erg licht zijn. Voor meer informatie kunt u de handleiding van AWS over inloggen in CloudFront Functions lezen.