Armazenar dados na borda
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.
configsedgeFunctions.yamlconfig_defaultkv_defaultHabilitar 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: trueantes 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:ouinventory:, 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()retornanullquando 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:
Recursos adicionais
- Criar um endpoint de API com funções do Edge
- Atender a vários endpoints com funções do Edge
- Filtros de solicitação HTTP com funções Edge
- Usar configurações e segredos com as funções do Edge
- Configurar as funções do AEM Edge no AEM as a Cloud Service
- Configurar as funções do AEM Edge no Edge Delivery Services
- Documentação do produto Funções do AEM Edge
- Sobre armazenamentos de dados de borda