AEM Edge-Funktionen aem-edge-functions
Mit den AEM Edge-Funktionen können Sie JavaScript auf CDN-Ebene ausführen, wodurch die Datenverarbeitung näher an den Endbenutzer heranrückt. Dies reduziert die Latenz und ermöglicht responsive, dynamische Erlebnisse ohne einen Roundtrip zu Ihrem Ursprung.
Häufige Anwendungsfälle umfassen:
- Personalisieren von Inhalten basierend auf Informationen wie Geolokalisierung, Gerätetyp oder Benutzerattributen
- Fungieren als Middleware zwischen dem CDN und Ihrer Herkunft
- Umformatieren oder Aggregieren von Antworten von Drittanbieter-APIs, bevor sie den Browser erreichen
- Erstellen und Bereitstellen von Server-gerenderter HTML am Edge mithilfe von Inhalten, die aus mehreren Backends zusammengefügt wurden
AEM Edge-Funktionen sind sowohl mit Edge Delivery Services als auch mit dem AEM Cloud Service Java-Stack kompatibel.
Wichtigste Vorteile key-benefits
Voraussetzungen prerequisites
- Eine AEM as a Cloud Service-Umgebung
- Das AEM-Administratorproduktprofil in der Autoreninstanz Ihrer Cloud Service-Umgebung oder Rolle "Cloud Manager-Bereitstellungs-Manager“ in Admin Console für Edge Delivery Services Sites
- Node.js und npm
Einrichtung setup
Installieren des Adobe-CLI install-adobe-cli
Installieren des Adobe Developer-CLI (aio):
npm install -g @adobe/aio-cli
Installieren des AEM Edge-Funktions-Plug-ins:
aio plugins install @adobe/aio-cli-plugin-aem-edge-functions
Authentifizieren und Konfigurieren des Plug-ins für Ihre Umgebung:
aio login
aio aem edge-functions setup
Der Setup-Befehl fordert Sie zur Anmeldung auf und wählt dann die AEM-Umgebung aus, in der Sie AEM Edge-Funktionen verwenden möchten.
Textbaustein klonen boilerplate
Kopieren Sie aem-edge-features-boilerplate in Ihr eigenes Repository und installieren Sie dann die Abhängigkeiten:
npm install
Erstellen der ersten Funktion create-your-function
AEM Edge-Funktions-Services werden in einer YAML-Konfigurationsdatei deklariert und über die Cloud Manager-Konfigurations-Pipeline bereitgestellt.
1. Einrichten einer Konfigurations-Pipeline configuration-pipeline
Stellen Sie vor dem Erstellen einer Edge-Funktion sicher, dass in Cloud Manager eine Konfigurations-Pipeline für Ihre Umgebung vorhanden ist. Wenn nicht, erstellen zuerst eine KonfigurationsPipeline.
aio aem rde:install -t env-config ./config bereitstellen, anstatt eine Konfigurations-Pipeline zu verwenden.2. Edge-Funktionsdienste deklarieren declare-services
Erstellen Sie eine Datei mit dem Namen edgeFunctions.yaml im Konfigurationsverzeichnis:
kind: "EdgeFunctions"
version: "1"
data:
services:
- name: first-function
- name: second-function
# Uncomment to enable secrets
# secrets:
# - key: API_TOKEN
# value: ${{ API_TOKEN_SECRET }}
Die Konfiguration unterstützt bis zu drei Services. Die Schlüssel der obersten Ebene sind:
servicesname gekennzeichnet sind.configssecrets3. Hinzufügen von CDN-Ursprungsauswahlregeln cdn-routing
Edge-Funktionen werden aufgerufen, indem CDN-Traffic über Regeln der Ursprungsauswahl an sie weitergeleitet wird. Fügen Sie der cdn.yaml-Konfigurationsdatei Folgendes hinzu (oder erstellen Sie eine, falls sie nicht vorhanden ist):
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
Mit den Regeln der Ursprungsauswahl können Sie Traffic basierend auf einer in der CDN-Regel-Engine verfügbaren Bedingung, z. B. einem bestimmten Pfad, einer bestimmten Domain oder einem Anfrageheader, an Ihre Edge-Funktionen weiterleiten. Siehe Ursprungs-Selektoren für die vollständige Regelsyntax.
4. Bereitstellen der Konfiguration deploy-configuration
Übertragen Sie sowohl edgeFunctions.yaml als auch cdn.yaml in das Cloud Manager-Git-Repository und erstellen Sie einen Trigger für die Konfigurations-Pipeline. Sobald die Pipeline erfolgreich abgeschlossen wurde, sind Ihre Edge-Funktionsendpunkte unter verfügbar:
publish-pXXXXX-eYYYYY.adobeaemcloud.com/weatherpublish-pXXXXX-eYYYYY.adobeaemcloud.com/hello-world
Wo pXXXXX-eYYYYY Ihre Umgebungskoordinaten sind. Wenn eine benutzerdefinierte Domain konfiguriert ist, sind die Funktionen auch über diese Domain-Pfade erreichbar (z. B. example.com/weather).
Erstellen und Bereitstellen des Funktionscodes für AEM Edge build-deploy
Aufbauen build
Verpacken Sie Ihren Edge-Funktions-Code für die Bereitstellung:
aio aem edge-functions build
Bereitstellen deploy
Stellen Sie das erstellte Paket in einem benannten Edge-Funktions-Service bereit. Das function-name-Argument muss mit dem name in edgeFunctions.yaml übereinstimmen:
aio aem edge-functions deploy <function-name>
Lokale Entwicklung local-development
Lokal ausführen local-run
Starten Sie einen lokalen Entwicklungs-Server unter http://127.0.0.1:7676:
aio aem edge-functions serve
In dieser Compute JavaScript-Dokumentation finden Sie Details dazu, was die lokale Laufzeit unterstützt.
Testen test
Ausführen der Test-Suite mit Mokka:
npm run test
Remote-Debugging remote-debugging
Das von Adobe verwaltete CDN stellt keinen Remote-Debugger bereit, stellt jedoch Protokoll-Streaming bereit. Verfolgen Sie die Protokolle für eine bereitgestellte Funktion, um console.log Ausgabe direkt in Ihrem Terminal zu erhalten:
aio aem edge-functions tail-logs <function-name>
Konfigurationsverweis configuration-reference
Ursprünge origins
Standardmäßig können Edge-Funktionen aus jedem beliebigen Ursprung abgerufen werden. Um eine Funktion auf einen definierten Satz von Ursprüngen zu beschränken, deklarieren Sie sie unter origins in edgeFunctions.yaml:
origins:
- name: my-origin-name
domain: example.com
Referenzieren Sie die benannte Herkunft in Ihrem Funktionscode mithilfe der backend-Fetch-Option:
const request = new Request("https://example.com/test");
const response = await fetch(request, { backend: "my-origin-name" });
Service-Konfiguration service-configuration
Offenlegung von Umgebungsvariablen für Ihre Funktionen mithilfe der configs in edgeFunctions.yaml. Die Werte werden in einem Konfigurationsspeicher mit dem Namen config_default gespeichert:
configs:
- key: LOG_LEVEL
value: DEBUG
Lesen Sie die Konfigurationswerte im Funktionscode:
import { ConfigStore } from "fastly:config-store";
const config = new ConfigStore('config_default');
const logLevel = config.get('LOG_LEVEL') || 'info';
- Der Konfigurationsspeicher hat immer den Namen
config_default. - Bei Schlüsselnamen wird zwischen Groß- und Kleinschreibung unterschieden.
- Der Konfigurationsspeicher wird für alle Edge-Funktions-Services in derselben Umgebung freigegeben.
Dienstgeheimnisse service-secrets
Geheimnisse werden in edgeFunctions.yaml referenziert, nicht gespeichert. Das value muss mithilfe der ${{SECRET_REFERENCE}} auf geheime Daten vom Typ Cloud Manager verweisen. Definieren Sie zunächst das zugrunde liegende Geheimnis in Cloud Manager - siehe Cloud Manager-Geheimnisvariablen.
secrets:
- key: API_TOKEN
value: ${{ API_TOKEN_SECRET }}
Abrufen von geheimen Daten im Funktionscode mithilfe des SecretStoreManager Helpers aus dem Textbaustein:
import { SecretStoreManager } from "./lib/config";
const apiToken = await SecretStoreManager.getSecret('API_TOKEN');
- Der geheime Speicher heißt immer
secret_default. - Bei Schlüsselnamen wird zwischen Groß- und Kleinschreibung unterschieden.
- Geheime Daten sind unveränderlich, sobald sie erstellt wurden.
- Der geheime Speicher wird für alle Edge-Funktions-Services in derselben Umgebung freigegeben.
Protokollierung logging
AEM Edge-Funktionen sind mit der Funktion AEM- integriert. Erstellen Sie eine logForwarding.yaml Datei zusammen mit Ihrem 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"
Verwenden Sie den Logger in Ihrem Funktionscode, um strukturierte Protokolleinträge zu schreiben:
import { Logger } from "fastly:logger";
const logger = new Logger("customerSplunk");
logger.log(JSON.stringify({
method: event.request.method,
url: event.request.url
}));