Funzioni di AEM Edge aem-edge-functions

IMPORTANT
Funzioni Edge di AEM è una funzione beta. Le funzioni e la documentazione potrebbero cambiare senza preavviso. Per partecipare al programma di accesso anticipato e fornire feedback, invia un'e-mail a aemcs-edgecompute-feedback@adobe.com.

Le funzioni Edge di AEM consentono di eseguire JavaScript a livello di CDN, avvicinando l’elaborazione dei dati all’utente finale. Questo riduce la latenza e consente esperienze dinamiche e reattive senza un viaggio di andata e ritorno all’origine.

I casi d’uso comuni includono:

  • Personalizzazione dei contenuti in base a informazioni quali geolocalizzazione, tipo di dispositivo o attributi utente
  • Funge da middleware tra la rete CDN e l’origine
  • Riformattazione o aggregazione di risposte da API di terze parti prima che raggiungano il browser
  • Composizione e distribuzione di HTML con rendering server alla rete Edge tramite contenuti uniti da più back-end

Le funzioni Edge di AEM sono compatibili sia con Edge Delivery Services che con lo stack Java di AEM as a Cloud Service.

Vantaggi principali key-benefits

Vantaggio
Descrizione
Prestazioni
TTFB veloce attraverso Edge SSR che restituisce HTML con rendering completo. Chiamate API a bassa latenza tramite recuperi paralleli e hop di rete ottimizzati.
SEO / GEO
Il server HTML è indicizzato al primo scansiono. Il contenuto con rendering completo è pronto per i crawler di intelligenza artificiale.
Sicurezza
Mantieni le credenziali API lato server, nascoste al JavaScript client. Eseguire l’autenticazione con un provider di identità e limitare l’accesso ai contenuti.
Personalizzazione
Personalizza il contenuto prima che la pagina venga caricata in base ai segnali geo e del dispositivo. Esegui ricerche del pubblico ai margini per una consegna mirata.

Prerequisiti prerequisites

  • Un ambiente AEM as a Cloud Service
  • Il profilo di prodotto Amministratore AEM nell’istanza di authoring dell’ambiente Cloud Service, o il ruolo Responsabile della distribuzione Cloud Manager nei siti Admin Console per Edge Delivery Services
  • Node.js e npm

Configurazione setup

Installare Adobe CLI install-adobe-cli

Installare Adobe Developer CLI (aio):

npm install -g @adobe/aio-cli

Installa il plug-in AEM Edge Functions:

aio plugins install @adobe/aio-cli-plugin-aem-edge-functions

Autentica e configura il plug-in per l’ambiente:

aio login
aio aem edge-functions setup

Il comando di installazione richiede di accedere e quindi selezionare l’ambiente AEM in cui si desidera utilizzare le funzioni AEM Edge.

Clona la piastra boilerplate

Copia aem-edge-functions-boilerplate nel tuo archivio, quindi installa le dipendenze:

npm install

Creare la prima funzione create-your-function

I servizi di funzioni di AEM Edge sono dichiarati in un file di configurazione YAML e distribuiti tramite la pipeline di configurazione di Cloud Manager.

​1. Configurare una pipeline di configurazione configuration-pipeline

Prima di creare una funzione Edge, accertati che esista una pipeline di configurazione per l’ambiente in Cloud Manager. In caso contrario, crea prima una pipeline di configurazione.

NOTE
Se si utilizza un ambiente di sviluppo rapido, è possibile distribuire la configurazione direttamente con aio aem rde:install -t env-config ./config anziché passare attraverso una pipeline di configurazione.

​2. Dichiarare i servizi di funzione di Edge declare-services

Creare un file denominato edgeFunctions.yaml nella directory di configurazione:

kind: "EdgeFunctions"
version: "1"
data:
  services:
    - name: first-function
    - name: second-function
    # Uncomment to enable secrets
    # secrets:
    #   - key: API_TOKEN
    #     value: ${{ API_TOKEN_SECRET }}

La configurazione supporta fino a tre servizi. Le chiavi di primo livello sono:

Chiave
Descrizione
services
Elenco dei servizi di funzioni edge, ciascuno identificato da un name.
configs
Coppie chiave/valore esposte a tutti i servizi delle funzioni edge come variabili di ambiente.
secrets
Coppie chiave/valore che fanno riferimento a segreti di Cloud Manager, esposte a tutti i servizi di funzioni edge.

​3. Aggiungi regole selettore origine CDN cdn-routing

Le funzioni Edge vengono richiamate instradando il traffico CDN verso di esse tramite le regole del selettore di origine. Aggiungi quanto segue al file di configurazione cdn.yaml (o creane uno se non esiste):

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

Le regole del selettore di origine ti consentono di indirizzare il traffico alle funzioni edge in base a qualsiasi condizione disponibile nel motore di regole CDN, ad esempio un percorso specifico, un dominio o un’intestazione di richiesta. Consulta Selettori origine per la sintassi completa della regola.

​4. Distribuire la configurazione deploy-configuration

Esegui il commit di edgeFunctions.yaml e cdn.yaml nell’archivio Git di Cloud Manager e attiva la pipeline di configurazione. Una volta completata correttamente la pipeline, gli endpoint della funzione Edge sono disponibili in:

  • publish-pXXXXX-eYYYYY.adobeaemcloud.com/weather
  • publish-pXXXXX-eYYYYY.adobeaemcloud.com/hello-world

dove pXXXXX-eYYYYY sono le coordinate dell’ambiente. Se è configurato un dominio personalizzato, le funzioni sono raggiungibili anche in questi percorsi di dominio (ad esempio, example.com/weather).

Creare e distribuire codice funzione di AEM Edge build-deploy

Build build

Crea un pacchetto del codice della funzione Edge per la distribuzione:

aio aem edge-functions build

Distribuzione deploy

Distribuisci il pacchetto generato in un servizio di funzioni edge denominato. L’argomento function-name deve corrispondere al valore name in edgeFunctions.yaml:

aio aem edge-functions deploy <function-name>

Sviluppo locale local-development

Esegui localmente local-run

Avviare un server di sviluppo locale in http://127.0.0.1:7676:

aio aem edge-functions serve

Consulta questa documentazione di Calcola JavaScript per informazioni dettagliate su ciò che supporta il runtime locale.

Test test

Esegui il gruppo di test con Mocha:

npm run test

Debug remoto remote-debugging

La rete CDN gestita di Adobe non espone un debugger remoto, ma espone il flusso del registro. Suddividi i registri di una funzione implementata per ricevere l’output console.log direttamente nel terminale:

aio aem edge-functions tail-logs <function-name>

Memorizzazione in cache e rimozione cache caching

Le funzioni Edge possono ridurre in modo significativo il carico dell’origine e migliorare i tempi di risposta memorizzando nella cache i dati al limite. Tuttavia, il caching richiede una progettazione intenzionale, in particolare nelle funzioni Edge in cui sono coinvolti due livelli di cache indipendenti:

Browser → AEM CDN (CDN Cache) → AEM Edge Functions (Fetch Cache) → Backend (AEM, APIs, etc.)

Prima di configurare la memorizzazione in cache, considera il comportamento del contenuto:

  • Il contenuto realmente univoco per richiesta (token di sessione, prezzo in tempo reale per un utente specifico) deve ignorare il caching per evitare di fornire risultati errati.
  • La personalizzazione basata su coorte (contenuto personalizzato per area geografica, tipo di dispositivo o segmento di pubblico) può spesso essere memorizzata nella cache con valori TTL o intestazioni Vary più brevi, poiché molti utenti condividono la stessa variante.
  • Il contenuto stabile e condiviso (cataloghi di prodotti, pagine CMS, risposte API che cambiano secondo una pianificazione nota) beneficia di un caching aggressivo con annullamento esplicito della validità tramite chiavi sostitutive.
  • L’errore in entrambe le direzioni comporta delle conseguenze. L’over-caching causa bug di contenuto non aggiornato che sono difficili da diagnosticare tra due livelli di cache. La sottomemorizzazione nella cache vanifica lo scopo di prestazioni e di offload dell’origine di utilizzare le funzioni Edge.

Poiché la rete CDN e la cache di recupero interna della funzione Edge funzionano in modo indipendente, una modifica ai dati sottostanti richiede l’invalidazione intenzionale di entrambi livelli. Questa architettura è essenziale per una gestione affidabile della cache.

Per informazioni tecniche dettagliate sulla configurazione del comportamento di caching, il controllo della durata della cache, l’utilizzo di chiavi alternative e l’eliminazione del contenuto memorizzato in cache, vedere Memorizzazione in cache nelle funzioni AEM Edge.

Limitazioni limitations

Ogni chiamata alla funzione Edge viene eseguita all’interno di una sandbox con limiti di risorse imposti dalla piattaforma di calcolo sottostante.

Numero massimo chiamate di recupero in uscita per chiamata max-fetch-calls

Le funzioni Edge di AEM impongono un limite rigido di 32 richieste back-end per esecuzione (ovvero per richiesta in ingresso gestita dalla funzione). Una volta raggiunto questo limite, le ulteriori chiamate di fetch() non riusciranno e verrà visualizzato il seguente errore:

Requested backend named '…' does not exist

Quando visualizzi questo errore e la configurazione dell’origine è corretta, la causa più probabile è che la quota della richiesta back-end per chiamata sia stata esaurita. Per l’elenco completo dei limiti della piattaforma, vedere Limiti delle risorse Fastly Compute.

Riferimento configurazione configuration-reference

Origini origins

Per impostazione predefinita, le funzioni di spigolo possono essere recuperate da qualsiasi origine. Per limitare una funzione a un set definito di origini, dichiararle in origins in edgeFunctions.yaml:

origins:
  - name: my-origin-name
    domain: example.com

Fai riferimento all’origine denominata nel codice della funzione utilizzando l’opzione di recupero backend:

const request = new Request("https://example.com/test");
const response = await fetch(request, { backend: "my-origin-name" });

Configurazione servizio service-configuration

Esporre le variabili di ambiente alle funzioni utilizzando la chiave configs in edgeFunctions.yaml. I valori sono archiviati in un archivio di configurazione denominato config_default:

configs:
  - key: LOG_LEVEL
    value: DEBUG

Leggi i valori di configurazione nel codice della funzione:

import { ConfigStore } from "fastly:config-store";

const config = new ConfigStore('config_default');
const logLevel = config.get('LOG_LEVEL') || 'info';
NOTE
  • L'archivio di configurazione è sempre denominato config_default.
  • I nomi delle chiavi fanno distinzione tra maiuscole e minuscole.
  • L’archivio di configurazione è condiviso tra tutti i servizi delle funzioni edge nello stesso ambiente.

Segreti di servizio service-secrets

In edgeFunctions.yaml sono presenti riferimenti ai segreti, non archiviati. Il campo value deve puntare a un segreto Cloud Manager utilizzando la sintassi ${{SECRET_REFERENCE}}. Definisci prima il segreto sottostante in Cloud Manager. Vedi Variabili segrete Cloud Manager.

secrets:
  - key: API_TOKEN
    value: ${{ API_TOKEN_SECRET }}

Recupera i segreti nel codice della funzione utilizzando l’helper SecretStoreManager dalla boilerplate:

import { SecretStoreManager } from "./lib/config";

const apiToken = await SecretStoreManager.getSecret('API_TOKEN');
NOTE
  • L'archivio segreto è sempre denominato secret_default.
  • I nomi delle chiavi fanno distinzione tra maiuscole e minuscole.
  • I segreti creati non sono modificabili.
  • L’archivio segreto è condiviso tra tutti i servizi delle funzioni edge nello stesso ambiente.

Registrazione logging

Le funzioni Edge di AEM si integrano con la funzione Inoltro log di AEM. Crea un file logForwarding.yaml insieme a 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"

Utilizza il logger nel codice della funzione per scrivere voci di registro strutturate:

import { Logger } from "fastly:logger";

const logger = new Logger("customerSplunk");
logger.log(JSON.stringify({
  method: event.request.method,
  url: event.request.url
}));
NOTE
I registri CDN, che includono le voci del registro funzioni di AEM Edge, possono essere scaricati da Cloud Manager per gli ambienti Java stack, ma non per i siti Edge Delivery Services.
recommendation-more-help
experience-manager-cloud-service-help-main-toc