Usar configuraciones y secretos con funciones de Edge

IMPORTANT
Funciones de AEM Edge se encuentra en la versión beta. Las funciones y la documentación pueden cambiar. Para obtener comentarios, comuníquese con aemcs-edgecompute-feedback@adobe.com.
NOTE
Las tiendas de configuración, secretas y KVStore no están disponibles en los programas de zonas protegidas. Utilice un entorno que no sea de zona protegida o un RDE para probar configuraciones y secretos.

Aprenda a pasar configuraciones no confidenciales y secretos confidenciales a una función de AEM Edge a través de edgeFunctions.yaml y a leerlos en su código.

Configuraciones frente a secretos

Tanto configs como secrets son pares clave/valor que usted expone a su función Edge de AEM.

La diferencia es dónde vive el valor y lo sensible que es.

configs
secrets
Usar para
Valores no confidenciales (direcciones URL de API, TTL de caché, indicadores de características, etc.)
Valores confidenciales (token de API, claves, credenciales, etc.)
El valor reside en
edgeFunctions.yaml, enviado a Git
Un secreto de Cloud Manager, al que se hace referencia desde edgeFunctions.yaml
Nombre del almacén
config_default
secret_default
Leer en código con
ConfigStore.get() (sincrónico)
SecretStoreManager.getSecret() (asincrónico)
Visible en Git
No, solo la referencia ${{SECRET_NAME}} se ha confirmado en edgeFunctions.yaml
IMPORTANT
Nunca ponga un valor confidencial en configs. El archivo edgeFunctions.yaml se ha confirmado en Git, por lo que todos los usuarios con acceso al repositorio pueden ver sus valores de configuración. Use secrets para tokens, claves y credenciales.

Donde se declaran configuraciones y secretos

Declarar a ambos menores de data en edgeFunctions.yaml, como hermanos de functions. No están anidadas en una función individual.

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

Los nombres de clave distinguen entre mayúsculas y minúsculas. El key que declara aquí tiene el mismo nombre que su código lee durante la ejecución.

Para ver todas las propiedades compatibles, consulte Declarar funciones.

Usar configuraciones

Las configuraciones contienen valores no confidenciales que varían según el entorno. Los valores de configuración siempre son cadenas, por lo que debe convertirlos cuando necesite un número o un valor booleano.

Leer configuraciones en el código

Abra el almacén config_default y luego llame a get() con la clave que declaró. La llamada es sincrónica.

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

Usar secretos

Los secretos contienen valores confidenciales, como un token de API. El valor permanece en un secreto de Cloud Manager. Su edgeFunctions.yaml hace referencia a él con la sintaxis ${{SECRET_NAME}}, por lo que el valor nunca aparece en Git.

Hay dos nombres involucrados, y son diferentes a propósito.

Nombre
Donde vive
Función
TRIPS_API_TOKEN (el key)
edgeFunctions.yaml y su código
El nombre de su código pasa a getSecret()
WKND_TRIPS_API_TOKEN (dentro de ${{ }})
Secreto de Cloud Manager
Secreto de Cloud Manager que contiene el valor real

Este ejemplo utiliza una clave y un secreto, el patrón para AEM as a Cloud Service. En Edge Delivery Services, repita el patrón una vez por sitio, ya que una canalización de configuración sirve a los tres sitios.

Añadir el secreto en AEM as a Cloud Service

Defina el secreto de Cloud Manager y ejecute la canalización de configuración antes de utilizarlo en la función de Edge de AEM. Cada entorno (RDE, Dev, Stage, Prod) tiene su propia pestaña Configuración, por lo que un secreto que añada a Dev no existe en Stage o Prod hasta que lo añada allí también.

  1. En Cloud Manager, vaya a la pestaña Programa > Entorno > Configuración.
    Ficha Configuración de Cloud Manager
  2. Seleccione +Agregar configuración. En el modal Configuración del entorno, escriba el nombre y el valor, elija el servicio al que desea aplicarlo y establezca el tipo en Secreto.
    Modo de configuración del entorno de Cloud Manager
  3. Seleccione +Agregar y después Guardar.

Añadir el secreto en Edge Delivery Services

Edge Delivery Services tiene una canalización de configuración por programa, no una por sitio. Implementa un único edgeFunctions.yaml para todo el programa, compartido por cada sitio, en lugar de un archivo independiente por sitio.

Los sitios de Desarrollo, Ensayo y Producción comparten esa canalización, por lo que no puede agregar el mismo nombre de variable tres veces con tres valores diferentes y no puede confiar en que un edgeFunctions.yaml específico de la rama elija el correcto.

Agregue a cada nombre de variable su sitio para que los tres sitios nunca entren en conflicto, por ejemplo DEV_TRIPS_API_TOKEN, STAGE_TRIPS_API_TOKEN y MAIN_TRIPS_API_TOKEN. Declare los tres en el mismo edgeFunctions.yaml y, a continuación, permita que el código elija el correcto durante la ejecución.

  1. En Cloud Manager, vaya a la sección Programa > Edge Delivery > Canalizaciones. Seleccione los puntos suspensivos (...) junto a la canalización y luego Ver/Editar variables.
    Variables de canalización de configuración de Cloud Manager
  2. Agregue una variable por sitio utilizando el prefijo de sitio y establezca el tipo en Secreto.
    Prefijo secreto de Cloud Manager
  3. Declare los tres secretos con prefijo en el único edgeFunctions.yaml, ya que la canalización lo implementa una vez por cada sitio.
# 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 función Edge de AEM debe decidir qué clave leer durante la ejecución, en función del sitio al que sirve actualmente. La siguiente sección muestra la búsqueda.

Leer secretos en código

Lea el secreto durante la ejecución a través del asistente SecretStoreManager que proporciona la repetidor en src/lib/config.js. Se lee del almacén secret_default. La llamada de es asincrónica en ambas plataformas, pero la clave que busca difiere.

En AEM as a Cloud Service, la clave está corregida, ya que cada entorno tiene su propio secreto detrás del mismo nombre de clave:

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

En Edge Delivery Services, genere primero la clave del sitio actual, ya que uno de los edgeFunctions.yaml compartidos declara una clave independiente por sitio:

// 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 vez que tenga el token, utilícelo en la solicitud saliente del mismo modo en ambas plataformas:

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

Guarde el secreto dentro de la función Edge de AEM. No lo devuelva al cliente ni lo registre.

Directrices

  • Use configs para todo lo que sea seguro de confirmar y secrets para todo lo que deba permanecer privado.
  • Igualar los nombres de clave exactamente. Todos los nombres de clave distinguen entre mayúsculas y minúsculas.
  • Convierta los valores de configuración antes de usarlos, ya que cada valor de configuración es una cadena.
  • Agregue el secreto de Cloud Manager antes de que se ejecute la canalización o de que la referencia ${{SECRET_NAME}} no se resuelva.
  • En Edge Delivery Services, agregue como prefijo cada secreto y nombre de variable con su sitio (DEV_, STAGE_, MAIN_). Una canalización de configuración sirve a los tres sitios, por lo que los nombres sin prefijo entran en conflicto y el código debe elegir el prefijo correcto durante la ejecución.

Recursos adicionales

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