Utilizzare configurazioni e segreti con le funzioni di Edge

IMPORTANT
AEM Edge Functions è attualmente in versione beta. Le funzioni e la documentazione potrebbero cambiare. Per ricevere commenti, contattare aemcs-edgecompute-feedback@adobe.com.
NOTE
Gli archivi di configurazione, segreti e KV non sono disponibili nei programmi sandbox. Utilizza un ambiente non sandbox o un RDE per testare configurazioni e segreti.

Scopri come passare configs e secrets non sensibili a una funzione Edge di AEM tramite edgeFunctions.yaml e leggerli nel codice.

Configurazioni e segreti

Sia configs che secrets sono coppie chiave/valore esposte alla funzione Edge di AEM.

La differenza sta nel punto in cui si trova il valore e nella sua sensibilità.

configs
secrets
Usa per
Valori non sensibili (URL API, TTL della cache, flag di funzione, ecc.)
Valori sensibili (token API, chiavi, credenziali, ecc.)
Il valore vive in
edgeFunctions.yaml, impegnato in Git
Un segreto Cloud Manager, a cui si fa riferimento da edgeFunctions.yaml
Nome store
config_default
secret_default
Leggi il codice con
ConfigStore.get() (sincrono)
SecretStoreManager.getSecret() (asincrono)
Visibile in Git
No, solo il riferimento ${{SECRET_NAME}} è confermato in edgeFunctions.yaml
IMPORTANT
Non inserire mai un valore sensibile in configs. Il file edgeFunctions.yaml è impegnato in Git, pertanto i relativi valori di configurazione sono visibili a chiunque abbia accesso all'archivio. Utilizza secrets per token, chiavi e credenziali.

Dove si dichiarano configurazioni e segreti

Dichiarare entrambi in data in edgeFunctions.yaml, come pari livello di functions. Non sono nidificati sotto una singola funzione.

# 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}}

I nomi delle chiavi fanno distinzione tra maiuscole e minuscole. Il key dichiarato è lo stesso nome che il codice legge in fase di esecuzione.

Per tutte le proprietà supportate, vedere Dichiarare le funzioni.

Utilizzare le configurazioni

Le configurazioni contengono valori non sensibili che variano a seconda dell’ambiente. I valori di configurazione sono sempre stringhe, quindi esegui il cast quando hai bisogno di un numero o booleano.

Leggi configurazioni nel codice

Apri l’archivio config_default, quindi chiama get() con la chiave dichiarata. La chiamata è sincrona.

// 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");

Usa segreti

I segreti contengono valori sensibili, ad esempio un token API. Il valore rimane in un segreto Cloud Manager. edgeFunctions.yaml vi fa riferimento con la sintassi ${{SECRET_NAME}}, pertanto il valore non viene mai visualizzato in Git.

Sono coinvolti due nomi, che sono diversi di proposito.

Nome
Dove vive
Scopo
TRIPS_API_TOKEN (il key)
edgeFunctions.yaml e il tuo codice
Il nome che il codice passa a getSecret()
WKND_TRIPS_API_TOKEN (in ${{ }})
Segreto Cloud Manager
Il segreto Cloud Manager che contiene il valore effettivo

In questo esempio viene utilizzato un tasto e un segreto, il pattern per AEM as a Cloud Service. In Edge Delivery Services, ripetete il pattern una volta per sito, poiché una pipeline di configurazione serve tutti e tre i siti.

Aggiungi il segreto su AEM as a Cloud Service

Definisci il segreto Cloud Manager ed esegui la pipeline di configurazione prima di utilizzarlo nella funzione Edge di AEM. Ogni ambiente (RDE, Dev, Stage, Prod) dispone di una propria scheda Configurazione, pertanto un segreto aggiunto a Dev non esiste in Stage o Prod finché non viene aggiunto anche in quest’ultimo.

  1. In Cloud Manager, passa alla scheda Programma > Ambiente > Configurazione.
    Scheda Configurazione Cloud Manager
  2. Selezionare +Aggiungi configurazione. Nella finestra modale Configurazione ambiente, immetti il nome e il valore, scegli il servizio a cui applicarlo e imposta il tipo su Segreto.
    Configurazione ambiente Cloud Manager modale
  3. Seleziona +Aggiungi, quindi Salva.

Aggiungi il segreto su Edge Delivery Services

Edge Delivery Services dispone di una pipeline di configurazione per programma, non una per sito. Distribuisce un singolo edgeFunctions.yaml per l’intero programma, condiviso da ogni sito, anziché un file separato per sito.

I siti di sviluppo, staging e produzione condividono tutti questa pipeline, pertanto non è possibile aggiungere lo stesso nome di variabile tre volte con tre valori diversi e non è possibile fare affidamento su un edgeFunctions.yaml specifico per il ramo per scegliere quello giusto.

Aggiungi il prefisso del nome di ciascuna variabile al relativo sito in modo che i tre siti non si scontrino mai, ad esempio DEV_TRIPS_API_TOKEN, STAGE_TRIPS_API_TOKEN e MAIN_TRIPS_API_TOKEN. Dichiara tutti e tre nello stesso edgeFunctions.yaml, quindi lascia che il codice scelga quello giusto in fase di esecuzione.

  1. In Cloud Manager, passa alla sezione Programma > Edge Delivery > Pipeline. Seleziona i puntini di sospensione (...) accanto alla pipeline, quindi Visualizza/Modifica variabili.
    Variabili pipeline di configurazione Cloud Manager
  2. Aggiungere una variabile per sito utilizzando il prefisso del sito e impostare il tipo su Segreto.
    Prefisso segreto Cloud Manager
  3. Dichiara tutti e tre i segreti con prefisso nel singolo edgeFunctions.yaml, poiché la pipeline lo distribuisce una volta per ogni sito.
# 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}}

La funzione Edge di AEM deve decidere quale chiave leggere in fase di runtime, in base al sito che sta attualmente servendo. La sezione successiva mostra la ricerca.

Leggi i segreti nel codice

Leggere il segreto in fase di esecuzione tramite l’helper SecretStoreManager fornito dalla boilerplate in src/lib/config.js. Legge dall’archivio secret_default. La chiamata è asincrona su entrambe le piattaforme, ma la chiave cercata è diversa.

In AEM as a Cloud Service, la chiave è fissa, poiché ogni ambiente ha il proprio segreto dietro lo stesso nome chiave:

// 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");
}

In Edge Delivery Services, compilare prima la chiave dal sito corrente, poiché un edgeFunctions.yaml condiviso dichiara una chiave separata per sito:

// 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`);
}

Una volta che disponi del token, utilizzalo nella richiesta in uscita nello stesso modo su entrambe le piattaforme:

// 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}` },
});

Mantieni il segreto all’interno della funzione Edge di AEM. Non restituirlo al client né registrarlo.

Linee guida

  • Utilizza configs per eseguire il commit in modo sicuro e secrets per tutto ciò che deve rimanere privato.
  • Fai corrispondere esattamente i nomi delle chiavi. Per tutti i nomi di chiave viene fatta distinzione tra maiuscole e minuscole.
  • Cast i valori di configurazione prima dell’uso, perché ogni valore di configurazione è una stringa.
  • Aggiungere il segreto Cloud Manager prima dell’esecuzione della pipeline oppure il riferimento ${{SECRET_NAME}} non viene risolto.
  • In Edge Delivery Services, aggiungere il prefisso di ogni segreto e nome di variabile al relativo sito (DEV_, STAGE_, MAIN_). Una pipeline di configurazione serve tutti e tre i siti, pertanto i nomi senza prefisso si scontrano e il codice deve scegliere il prefisso corretto in fase di esecuzione.

Risorse aggiuntive

recommendation-more-help
experience-manager-learn-help-cloud-service