Verwenden von Konfigurationen und Geheimnissen mit Edge-Funktionen
Erfahren Sie, wie Sie nicht vertrauliche Konfigurationen und vertrauliche Geheimnisse über edgeFunctions.yaml an eine AEM Edge-Funktion übergeben und in Ihrem Code lesen.
Konfigurationen vs. Geheimnisse
Sowohl configs als auch secrets sind Schlüssel/Wert-Paare, die Sie Ihrer AEM Edge-Funktion bereitstellen.
Der Unterschied besteht darin, wo der Wert lebt und wie sensibel er ist.
configssecretsedgeFunctions.yaml, an Git gebundenedgeFunctions.yaml referenziert wirdconfig_defaultsecret_defaultConfigStore.get() (synchronisiert)SecretStoreManager.getSecret() (async)edgeFunctions.yaml wird nur der ${{SECRET_NAME}} übergebenconfigs. Die edgeFunctions.yaml-Datei wird in Git übertragen, sodass ihre Konfigurationswerte für alle Benutzer mit Repository-Zugriff sichtbar sind. Verwenden Sie secrets für Token, Schlüssel und Anmeldeinformationen.Wo Sie Konfigurationen und Geheimnisse deklarieren
Deklarieren Sie beide unter data in edgeFunctions.yaml als gleichrangige Elemente von functions. Sie sind nicht unter einer einzelnen Funktion verschachtelt.
# config/edgeFunctions.yaml
kind: "EdgeFunctions"
version: "1"
data:
functions:
- name: my-edge-function
configs:
- key: TRIPS_API_BASE_URL
value: "https://api.example.com/trips"
- key: ADVENTURE_CACHE_TTL_SECONDS
value: "300"
secrets:
- key: TRIPS_API_TOKEN
value: ${{WKND_TRIPS_API_TOKEN}}
Bei Schlüsselnamen wird zwischen Groß- und Kleinschreibung unterschieden. Der hier deklarierte key ist derselbe Name, den Ihr Code zur Laufzeit liest.
Alle unterstützten Eigenschaften finden Sie unter Funktionen deklarieren.
Verwenden von Konfigurationen
Konfigurationen enthalten nicht vertrauliche Werte, die je nach Umgebung variieren. Konfigurationswerte sind immer Zeichenfolgen. Wandeln Sie sie also um, wenn Sie eine Zahl oder einen booleschen Wert benötigen.
Lesen von Konfigurationen im Code
Öffnen Sie den config_default Store und rufen Sie dann get() mit dem deklarierten Schlüssel auf. Der Aufruf erfolgt synchron.
// src/index.js or handler file
import { ConfigStore } from "fastly:config-store";
const config = new ConfigStore("config_default");
// read a config value (always a string)
const apiBaseUrl = config.get("TRIPS_API_BASE_URL");
// cast to a number, with a fallback if the key is missing
const ttlSeconds = Number(config.get("ADVENTURE_CACHE_TTL_SECONDS") || "300");
Verwenden von geheimen Daten
Geheime Daten enthalten vertrauliche Werte, z. B. ein API-Token. Der Wert bleibt in einem Cloud Manager-Geheimnis. Ihr edgeFunctions.yaml verweist mit der ${{SECRET_NAME}} Syntax darauf, sodass der Wert nie in Git angezeigt wird.
Zwei Namen sind beteiligt, und sie sind absichtlich unterschiedlich.
TRIPS_API_TOKEN (die key)edgeFunctions.yaml und CodegetSecret() übergibtWKND_TRIPS_API_TOKEN (innerhalb ${{ }})In diesem Beispiel werden ein Schlüssel und ein Geheimnis verwendet, das Muster für AEM as a Cloud Service. In Edge Delivery Services wiederholen Sie das Muster einmal pro Site, da eine Konfigurations-Pipeline alle drei Sites bedient.
Geheime Daten in AEM as a Cloud Service hinzufügen
Definieren Sie das Cloud Manager-Geheimnis und führen Sie die Konfigurations-Pipeline aus, bevor Sie es in Ihrer AEM Edge-Funktion verwenden. Jede Umgebung (RDE, Dev, Staging, Prod) verfügt über eine eigene Registerkarte „Konfiguration“, sodass ein Geheimnis, das Sie der Entwicklung hinzufügen, erst dann in der Staging- oder Produktionsumgebung vorhanden ist, wenn Sie sie dort hinzufügen.
- Navigieren Sie in Cloud Manager zu Ihrer Registerkarte Programm > Umgebung > Konfiguration .
Registerkarte
- Wählen Sie + Konfiguration hinzufügen. Geben Sie im Umgebungskonfiguration den Namen und den Wert ein, wählen Sie den Service aus, auf den Sie ihn anwenden möchten, und setzen Sie den Typ auf Secret.
- Wählen Sie +Hinzufügen und dann Speichern aus.
Geheime Daten in Edge Delivery Services hinzufügen
Edge Delivery Services verfügt über eine Konfigurations-Pipeline pro Programm, nicht eine pro Site. Sie stellt für das gesamte Programm eine einzige edgeFunctions.yaml bereit, die von jeder Site gemeinsam genutzt wird, anstatt eine separate Datei pro Site zu erstellen.
Die Entwicklungs-, Staging- und Produktions-Sites nutzen alle diese eine Pipeline, sodass Sie nicht denselben Variablennamen dreimal mit drei verschiedenen Werten hinzufügen können und sich nicht darauf verlassen können, dass eine verzweigungsspezifische edgeFunctions.yaml die richtige auswählt.
Stellen Sie jeder Variablen das Präfix ihrer Site voran, sodass die drei Sites nie miteinander kollidieren, z. B. DEV_TRIPS_API_TOKEN, STAGE_TRIPS_API_TOKEN und MAIN_TRIPS_API_TOKEN. Deklarieren Sie alle drei Elemente im selben edgeFunctions.yaml und wählen Sie dann zur Laufzeit im Code das richtige Element aus.
- Navigieren Sie in Cloud Manager zum Abschnitt Programm > Edge Delivery > Pipelines . Klicken Sie auf die Auslassungszeichen (
...) neben der Pipeline und dann auf Variablen anzeigen/bearbeiten.
- Fügen Sie unter Verwendung des Site-Präfixes eine Variable pro Site hinzu und legen Sie den Typ auf Secret fest.
- Deklarieren Sie alle drei geheimen Daten mit Präfix in der einzelnen
edgeFunctions.yaml, da die Pipeline sie einmal für jede Site bereitstellt.
# config/edgeFunctions.yaml
secrets:
- key: TRIPS_API_TOKEN_DEV
value: ${{DEV_TRIPS_API_TOKEN}}
- key: TRIPS_API_TOKEN_STAGE
value: ${{STAGE_TRIPS_API_TOKEN}}
- key: TRIPS_API_TOKEN_MAIN
value: ${{MAIN_TRIPS_API_TOKEN}}
Die AEM Edge-Funktion muss basierend auf der Site, die sie derzeit bereitstellt, entscheiden, welcher Schlüssel zur Laufzeit gelesen werden soll. Im nächsten Abschnitt wird die Suche angezeigt.
Lesen von Geheimnissen im Code
Lesen Sie die geheimen Daten zur Laufzeit über den SecretStoreManager-Helfer, den das Textbausteinmodell in src/lib/config.js bereitstellt. Es liest sich aus dem secret_default. Der Aufruf erfolgt auf beiden Plattformen asynchron, aber die nachgeschlagene Taste ist unterschiedlich.
Auf AEM as a Cloud Service ist der Schlüssel fest, da jede Umgebung ihr eigenes Geheimnis hinter demselben Schlüsselnamen hat:
// src/index.js or handler file
import { SecretStoreManager } from "./lib/config";
const token = await SecretStoreManager.getSecret("TRIPS_API_TOKEN");
if (!token) {
throw new Error("TRIPS_API_TOKEN is not configured");
}
Erstellen Sie auf Edge Delivery Services zuerst den Schlüssel der aktuellen Site, da ein freigegebener edgeFunctions.yaml einen separaten Schlüssel pro Site deklariert:
// src/index.js or handler file
import { SecretStoreManager } from "./lib/config";
const site = getCurrentSite(); // for example, "DEV", "STAGE", or "MAIN" based on the origin header
const token = await SecretStoreManager.getSecret(`TRIPS_API_TOKEN_${site}`);
if (!token) {
throw new Error(`TRIPS_API_TOKEN_${site} is not configured`);
}
Sobald Sie das Token haben, verwenden Sie es in Ihrer ausgehenden Anfrage auf beiden Plattformen auf die gleiche Weise:
// use the token in an outbound request, never in a response to the client
const request = new Request("https://api.example.com/trips", {
headers: { Authorization: `Bearer ${token}` },
});
Behalten Sie das Geheimnis in der AEM Edge-Funktion bei. Kehren Sie nicht zum Client zurück oder protokollieren Sie ihn nicht.
Richtlinien
- Verwenden Sie
configsfür alles, was sicher zu übertragen ist, undsecretsfür alles, was privat bleiben muss. - Schlüsselnamen genau übereinstimmen. Bei allen Schlüsselnamen wird zwischen Groß- und Kleinschreibung unterschieden.
- Wandeln Sie vor der Verwendung Konfigurationswerte um, da jeder Konfigurationswert eine Zeichenfolge ist.
- Fügen Sie die geheimen Daten vom Typ Cloud Manager hinzu, bevor die Pipeline ausgeführt wird, oder der
${{SECRET_NAME}}kann nicht aufgelöst werden. - Stellen Sie in Edge Delivery Services allen geheimen Daten und Variablennamen das Präfix ihrer Site (
DEV_,STAGE_,MAIN_) voran. Eine Konfigurations-Pipeline bedient alle drei Sites, sodass Namen ohne Präfix kollidieren, und Ihr Code muss zur Laufzeit das richtige Präfix auswählen.
Zusätzliche Ressourcen
- Erstellen eines API-Endpunkts mit Edge-Funktionen
- Bereitstellen mehrerer Endpunkte mit Edge-Funktionen
- HTTP-Anforderungsfilter mit Edge-Funktionen
- Einrichten von AEM Edge-Funktionen in AEM as a Cloud Service
- Einrichten von AEM Edge-Funktionen in Edge Delivery Services
- Produktdokumentation zu AEM Edge-Funktionen