AEM Edge-functies aem-edge-functions
Met AEM Edge-functies kunt u JavaScript uitvoeren op de CDN-laag, waardoor de gegevensverwerking dichter bij de eindgebruiker komt te staan. Dit vermindert latentie en maakt responsieve, dynamische ervaringen mogelijk zonder dat u naar uw oorsprong hoeft te gaan.
Vaak voorkomende gevallen van gebruik zijn:
- Inhoud aanpassen op basis van informatie zoals geolocatie, apparaattype of gebruikerskenmerken
- Handelend als middleware tussen CDN en uw oorsprong
- Reacties van externe API’s opnieuw instellen of samenvoegen voordat deze de browser bereiken
- Door de server gerenderde HTML aan de rand samenstellen en bedienen met inhoud die vanuit meerdere achtergronden is gekoppeld
AEM Edge-functies zijn zowel compatibel met Edge Delivery Services als met de AEM as a Cloud Service Java-stack.
Belangrijkste voordelen key-benefits
Vereisten prerequisites
- Een AEM as a Cloud Service-omgeving
- Het Profiel van het Product van de Beheerder van AEM op de auteursinstantie van uw milieu van Cloud Service, of de rol van de Manager van de Plaatsing van Cloud Manager in Admin Console voor de plaatsen van Edge Delivery Services
- Node.js en npm
Instellen setup
Adobe CLI installeren install-adobe-cli
Installeer de Adobe Developer CLI (aio):
npm install -g @adobe/aio-cli
Installeer de insteekmodule AEM Edge-functies:
aio plugins install @adobe/aio-cli-plugin-aem-edge-functions
Verifieer en vorm de stop voor uw milieu:
aio login
aio aem edge-functions setup
Met de opdracht setup wordt u gevraagd u aan te melden en vervolgens de AEM-omgeving te selecteren waarop u AEM Edge-functies wilt gebruiken.
Klonen van de Boilerplate boilerplate
Kopieer aem-rand-functies-boilerplate aan uw eigen bewaarplaats, dan installeer gebiedsdelen:
npm install
Uw eerste functie maken create-your-function
De diensten van de Functie van AEM Edge worden verklaard in een YAML configuratiedossier en door de de configuratiepijplijn van Cloud Manager opgesteld.
1. Opstelling een Pijpleiding van de Configuratie configuration-pipeline
Voordat u een randfunctie maakt, moet u ervoor zorgen dat er een configuratiepijplijn voor uw omgeving in Cloud Manager bestaat. Als niet, creeer eerst een configuratiepijplijn .
aio aem rde:install -t env-config ./config in plaats van het gaan door een configuratiepijplijn opstellen.2. Edge-functieservices declareren declare-services
Maak een bestand met de naam edgeFunctions.yaml in de configuratiemap:
kind: "EdgeFunctions"
version: "1"
data:
services:
- name: first-function
- name: second-function
# Uncomment to enable secrets
# secrets:
# - key: API_TOKEN
# value: ${{ API_TOKEN_SECRET }}
De configuratie steunt tot drie diensten. De toetsen op hoofdniveau zijn:
servicesname.configssecrets3. CDN-oorsprongsselectieregels toevoegen cdn-routing
De functies van Edge worden aangehaald door verkeer CDN aan hen via oorsprongselectorregels te verpletteren. Voeg het volgende toe aan uw cdn.yaml configuratiebestand (of maak een bestand als het niet bestaat):
kind: 'CDN'
version: '1'
data:
originSelectors:
rules:
- name: route-to-first-function
when: { reqProperty: path, equals: "/weather" }
action:
type: selectAemOrigin
originName: edgefunction-first-function
- name: route-to-second-function
when: { reqProperty: path, equals: "/hello-world" }
action:
type: selectAemOrigin
originName: edgefunction-second-function
Met de regels van de oorspronkelijke kiezer kunt u verkeer naar uw randfuncties routeren op basis van een voorwaarde die beschikbaar is in de CDN-regelengine, zoals een specifiek pad, domein of aanvraagkoptekst. Zie de Kiezers van de Oorsprong voor de volledige regelsyntaxis.
4. Implementeer de configuratie deploy-configuration
Leg zowel edgeFunctions.yaml als cdn.yaml vast op uw Cloud Manager Git-opslagplaats en activeer de configuratiepijplijn. Zodra de pijpleiding met succes voltooit, zijn uw eindpunten van de randfunctie beschikbaar bij:
publish-pXXXXX-eYYYYY.adobeaemcloud.com/weatherpublish-pXXXXX-eYYYYY.adobeaemcloud.com/hello-world
waarbij pXXXXX-eYYYYY de omgevingscoördinaten zijn. Als een aangepast domein wordt gevormd, zijn de functies ook bereikbaar bij die domeinwegen (bijvoorbeeld, example.com/weather).
AEM Edge-functiecode samenstellen en implementeren build-deploy
Opbouwen build
Plaats de Edge-functiecode in een pakket voor de implementatie:
aio aem edge-functions build
Implementeren deploy
Implementeer het ingebouwde pakket op een benoemde Edge-functieservice. Het argument function-name moet overeenkomen met de waarde name in edgeFunctions.yaml :
aio aem edge-functions deploy <function-name>
Lokale ontwikkeling local-development
Lokaal uitvoeren local-run
Start een lokale ontwikkelingsserver op http://127.0.0.1:7676 :
aio aem edge-functions serve
Zie dit de documentatie van JavaScript voor details over wat lokale runtime steunt.
Testen test
Stel de testreeks met Mocha in werking:
npm run test
Foutopsporing op afstand remote-debugging
Adobe Managed CDN stelt geen extern foutopsporingsprogramma beschikbaar, maar maakt logstreaming wel zichtbaar. Tik op de logboeken voor een geïmplementeerde functie om console.log uitvoer rechtstreeks in uw terminal te ontvangen:
aio aem edge-functions tail-logs <function-name>
Cache en cache leegmaken caching
Met Edge-functies kunt u de belasting van de oorsprong aanzienlijk verminderen en de responstijden verbeteren door gegevens aan de rand in cache te plaatsen. Nochtans, vereist het in cache plaatsen opzettelijk ontwerp - met name in de Functies van Edge waar twee onafhankelijke geheim voorgeheugenlagen geïmpliceerd zijn:
Browser → AEM CDN (CDN Cache) → AEM Edge Functions (Fetch Cache) → Backend (AEM, APIs, etc.)
Overweeg voordat u caching configureert hoe de inhoud zich gedraagt:
- echt uniek-per-verzoek inhoud (zittingstokens, in real time tarifering voor een specifieke gebruiker) zou caching moeten omzeilen vermijden dienend onjuiste resultaten.
- op cohort-Gebaseerde verpersoonlijking (inhoud die door gebied, apparatentype, of publiekssegment wordt gemaakt) kan vaak met kortere TTLs of
Varykopballen worden in het voorgeheugen ondergebracht, aangezien vele gebruikers de zelfde variant delen. - Stabiele, gedeelde inhoud (productcatalogi, de pagina’s van CMS, API reacties die op een bekend programma veranderen) profiteert van agressieve caching met expliciete ongeldigverklaring via vervangings sleutels.
- het krijgen van het verkeerd in één van beide richting heeft gevolgen. Overcaching veroorzaakt problemen met grote inhoud die moeilijk te diagnosticeren zijn over twee cachelagen. Door ondercaching worden de prestaties en het oorspronkelijke offloaddoel van het gebruik van Edge-functies helemaal genegeerd.
Omdat CDN en het interne haalgeheime voorgeheugen van de Functie van Edge onafhankelijk werken, vereist een verandering in onderliggende gegevens opzettelijke ongeldigverklaring van allebei lagen. Kennis van deze architectuur is essentieel voor betrouwbaar cachebeheer.
Voor de gedetailleerde technische begeleiding bij het vormen in het voorgeheugen onderbrengend gedrag, het controleren van geheim voorgeheugenlevens, gebruikend vervangings sleutels, en het zuiveren caching inhoud, zie Caching in de Functies van AEM Edge .
Beperkingen limitations
Elke aanroep van Edge-functies wordt uitgevoerd in een sandbox met bronbeperkingen die worden opgelegd door het onderliggende compute platform.
Maximale uitgaande Vraag van de Optrek per Inroeping max-fetch-calls
De Functies van AEM Edge dwingen een harde grens van 32 achterste verzoeken per uitvoering af (namelijk per inkomend verzoek dat door uw functie wordt behandeld). Wanneer deze limiet is bereikt, mislukken verdere fetch() -aanroepen met de volgende fout:
Requested backend named '…' does not exist
Wanneer u deze fout ziet en uw oorsprongconfiguratie correct is, is de meest waarschijnlijke oorzaak dat het per-aanroepende quotum van het achterste deelverzoek is uitgeput. Zie snel de middelgrenzen van de Compute voor de volledige lijst van platformgrenzen.
Configuratieverwijzing configuration-reference
Oorsprong origins
Standaard kunnen randfuncties van elke oorsprong worden opgehaald. Als u een functie wilt beperken tot een gedefinieerde set van oorsprong, declareert u deze onder origins in edgeFunctions.yaml :
origins:
- name: my-origin-name
domain: example.com
Verwijs naar de benoemde oorsprong in uw functiecode met de optie backend Ophalen:
const request = new Request("https://example.com/test");
const response = await fetch(request, { backend: "my-origin-name" });
Serviceconfiguratie service-configuration
Maak omgevingsvariabelen beschikbaar voor uw functies met de configs -toets in edgeFunctions.yaml . Waarden worden opgeslagen in een config-archief met de naam config_default :
configs:
- key: LOG_LEVEL
value: DEBUG
Lees configuratiewaarden in uw functiecode:
import { ConfigStore } from "fastly:config-store";
const config = new ConfigStore('config_default');
const logLevel = config.get('LOG_LEVEL') || 'info';
- De config-opslag krijgt altijd de naam
config_default. - Sleutelnamen zijn hoofdlettergevoelig.
- De config opslag wordt gedeeld over alle diensten van de randfunctie in het zelfde milieu.
Service Secrets service-secrets
Er wordt in edgeFunctions.yaml naar geheimen verwezen, niet opgeslagen. Het veld value moet verwijzen naar een Cloud Manager-geheim met de syntaxis ${{SECRET_REFERENCE}} . Bepaal het onderliggende geheim in Cloud Manager eerst — zie de Geheime Variabelen van Cloud Manager .
secrets:
- key: API_TOKEN
value: ${{ API_TOKEN_SECRET }}
Haal geheimen in de functiecode op met behulp van de SecretStoreManager helper van de tekstbouwsteen:
import { SecretStoreManager } from "./lib/config";
const apiToken = await SecretStoreManager.getSecret('API_TOKEN');
- De geheime opslag krijgt altijd de naam
secret_default. - Sleutelnamen zijn hoofdlettergevoelig.
- Geheimen zijn onveranderlijk zodra gecreeerd.
- De geheime opslag wordt gedeeld over alle diensten van de randfunctie in het zelfde milieu.
Logboekregistratie logging
De Functies van AEM Edge integreren met het Logboek van AEM Door:sturen eigenschap. Maak een logForwarding.yaml -bestand naast uw edgeFunctions.yaml :
kind: "LogForwarding"
version: "1"
metadata:
envTypes: ["rde", "dev", "stage", "prod"]
data:
splunk:
default:
enabled: true
host: "splunk-host.example.com"
token: "${{SPLUNK_TOKEN}}"
index: "AEMaaCS"
Gebruik logger in uw functiecode om gestructureerde logboekingangen te schrijven:
import { Logger } from "fastly:logger";
const logger = new Logger("customerSplunk");
logger.log(JSON.stringify({
method: event.request.method,
url: event.request.url
}));