Armazenar dados na borda

IMPORTANT
O AEM Edge Functions está atualmente na versão beta. Os recursos e a documentação podem mudar. Para receber comentários, contate aemcs-edgecompute-feedback@adobe.com.
NOTE
Os armazenamentos de configuração, segredo e KV não estão disponíveis em programas de sandbox. Use um ambiente que não seja de sandbox ou um RDE para testar um armazenamento KV.

Uma função Edge do AEM geralmente precisa manter os dados na borda, perto de seus visitantes, e reutilizá-los em invocações de função sem uma viagem de ida e volta para a origem. As Funções Edge do AEM fornecem esse armazenamento de dados de borda por meio de um armazenamento KV.

Um armazenamento KV é um armazenamento de valores chave que você lê e grava no tempo de execução. Seus dados persistem entre as invocações de função, portanto, qualquer parte do código de função do AEM Edge pode ler o que outra parte escreveu anteriormente. Use-a para armazenar em cache resultados calculados, manter mapas de redirecionamento ou compartilhar dados entre solicitações.

Quando usar um armazenamento KV

Ao contrário do configs, que você define no momento da implantação e como somente leitura, um armazenamento KV é lido e gravado em tempo de execução. Um armazenamento do kv_default é provisionado para a Função Edge do AEM e qualquer um dos seus módulos ou pontos de extremidade pode ler e gravar nele.

configs
Armazenamento KV
Acesso
Somente leitura em tempo de execução
Ler e gravar no tempo de execução
Definido por
Você, no momento da implantação em edgeFunctions.yaml
Seu código de função no tempo de execução
Nome do armazenamento
config_default
kv_default
Usar para
Configurações estáticas por ambiente
Dados que mudam no tempo de execução

Habilitar o armazenamento KV

Defina kvs: true em data em edgeFunctions.yaml, como um irmão de functions. Esta opção provisiona o armazenamento kv_default para a Função Edge do AEM.

# config/edgeFunctions.yaml
kind: "EdgeFunctions"
version: "1"
data:
  functions:
    - name: my-edge-function
  kvs: true # enable the KV store

Implante a configuração atualizada por meio do pipeline de configuração do Cloud Manager, ou com aio aem rde:install -t env-config ./config em um RDE. Consulte Configurar funções do AEM Edge no AEM as a Cloud Service ou Configurar funções do AEM Edge no Edge Delivery Services para obter mais detalhes.

Ler e gravar no código

Abra o repositório kv_default, depois chame get(key) e put(key, value, options?). Ambas as chamadas são assíncronas. Os valores são armazenados como cadeias de caracteres, portanto, serialize objetos com JSON.stringify() na gravação. Na leitura, a entrada retornada por get(key) expõe text(), json() e arrayBuffer(), portanto, chame entry.json() para analisar um objeto armazenado.

// src/index.js or handler file
import { KVStore } from "fastly:kv-store";

// open the KV store
const kv = new KVStore("kv_default");

// write a value (serialize objects to a string)
await kv.put("greeting", JSON.stringify({ text: "Hello from the edge" }));

// read a value (get returns an entry, or null when the key is missing)
const entry = await kv.get("greeting");
const value = entry ? await entry.json() : null;

Armazenar dados em cache com um armazenamento KV

Um padrão comum é o cache-aside. O manipulador lê do armazenamento KV primeiro e chama o back-end somente em caso de falha. Passe um ttl (em segundos) para put() e o armazenamento expira a entrada para você, de modo que você não rastreie a expiração sozinho.

// src/lib/cache.js
import { KVStore } from "fastly:kv-store";

const kv = new KVStore("kv_default");

// Read a cached value, or null when the key is missing or expired
export async function getCached(key) {
  const entry = await kv.get(key);
  return entry ? await entry.json() : null;
}

// Cache a value; the store expires it after ttlSeconds
export async function setCached(key, payload, ttlSeconds) {
  await kv.put(key, JSON.stringify(payload), { ttl: ttlSeconds });
}

Em um manipulador, leia o cache, retorne ao backend em caso de erro e, em seguida, grave o resultado de volta.

let data = await getCached("inventory:west");
if (!data) {
  data = await fetchFromBackend();
  await setCached("inventory:west", data, 60); // store expires the entry after 60 seconds
}

Preencher o armazenamento KV

O armazenamento KV não tem propagação no tempo de implantação em edgeFunctions.yaml. Seu código de função grava todos os valores no tempo de execução. Duas abordagens comuns são:

  • Sob demanda. Preencha uma entrada na primeira vez que for solicitada, como faz o padrão de cache lateral acima.
  • Por meio de um ponto de extremidade de manutenção. Exponha um terminal que recrie as entradas e, em seguida, chame-o de acordo com um agendamento. Isso se adapta a conjuntos de dados grandes e de alteração lenta, como mapas de redirecionamento.

Diretrizes

  • Habilite o armazenamento com kvs: true antes que seu código leia ou grave nele.
  • A loja é compartilhada por todo o código de função do AEM Edge. Crie um namespace para suas chaves com um prefixo, como redirect: ou inventory:, para que módulos ou pontos de extremidade diferentes não colidam.
  • Os nomes de chave fazem distinção entre maiúsculas e minúsculas.
  • Os valores são strings. Serializar objetos com JSON.stringify() e analisá-los na leitura.
  • Manipular uma chave ausente. get() retorna null quando a chave não existe.
  • Um armazenamento KV eventualmente é consistente. Logo após uma gravação, uma leitura pode retornar brevemente o valor anterior, portanto, evite depender da leitura após a gravação para uma lógica crítica.

Exemplo completo

O repositório Exemplos de funções do AEM Edge inclui um exemplo de armazenamento KV com config/ completo e código:

Exemplo
Repositório
O que demonstra
Redirecionar pesquisa de mapa
publicar-entrega-redirecionar-mapas
Lê destinos de redirecionamento do armazenamento KV no momento da solicitação, recria entradas de mapa fragmentadas por meio de um ponto de extremidade de manutenção e retorna à origem em caso de erro

Recursos adicionais

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