Guia de início rápido: usar o Cache Redis do Azure com um aplicativo Node.js

Neste início rápido, você incorpora o Cache Redis do Azure em um aplicativo Node.js para acessar um cache dedicado seguro e acessível a partir de qualquer aplicativo no Azure.

Pré-requisitos

Criar uma cache

  1. Para criar um cache, entre no portal do Azure. No menu do portal, selecione Criar um recurso.

    Sceenshot que mostra a opção Criar um recurso realçada no painel de navegação esquerdo no portal do Azure.

  2. No painel Introdução, insira Cache Redis do Azure na barra de pesquisa. Nos resultados da pesquisa, localize o Cache do Azure para Redis e selecione Criar.

    Captura de ecrã que mostra o Azure Marketplace com o Cache Redis do Azure na caixa de pesquisa e o botão Criar está realçado.

  3. No painel Novo Cache Redis, na guia Noções básicas, defina as seguintes configurações para o cache:

    Definição Ação Descrição
    Subscrição Selecione a subscrição do Azure. A assinatura a ser usada para criar a nova instância do Cache do Azure para Redis.
    Grupo de recursos Selecione um grupo de recursos ou selecione Criar novo e insira um novo nome de grupo de recursos. Um nome para o grupo de recursos no qual criar seu cache e outros recursos. Ao colocar todos os recursos do seu aplicativo em um grupo de recursos, você pode facilmente gerenciá-los ou excluí-los juntos.
    Nome DNS Introduza um nome exclusivo. O nome do cache deve ser uma cadeia de caracteres de 1 a 63 caracteres que contenha apenas números, letras e hífenes. O nome deve começar e terminar com um número ou letra, e não pode conter hífenes consecutivas. O nome de host da instância de cache é \<DNS name>.redis.cache.windows.net.
    Location Selecione uma localização. Uma região do Azure que está perto de outros serviços que usam seu cache.
    Cache SKU Selecione uma SKU. A SKU determina o tamanho, o desempenho e os parâmetros de recurso disponíveis para o cache. Para obter mais informações, consulte Visão geral do Cache do Azure para Redis.
    Tamanho do cache Selecione um tamanho de cache. Para obter mais informações, consulte Visão geral do Cache do Azure para Redis.
  4. Selecione a guia Rede ou selecione Avançar: Rede.

  5. Na guia Rede, selecione um método de conectividade a ser usado para o cache.

  6. Selecione a guia Avançado ou selecione Avançar: Avançado.

  7. No painel Avançado, verifique ou selecione um método de autenticação com base nas seguintes informações:

    Captura de ecrã a mostrar o painel Avançado e as opções disponíveis para selecionar.

    • Por padrão, para um novo cache Básico, Standard ou Premium, a Autenticação do Microsoft Entra está habilitada e a Autenticação de Chaves de Acesso está desabilitada.
    • Para caches Basic ou Standard, você pode escolher a seleção para uma porta não-TLS.
    • Para caches Standard e Premium, você pode optar por habilitar zonas de disponibilidade. Não é possível desativar as zonas de disponibilidade após a criação do cache.
    • Para um cache Premium, defina as configurações para porta não-TLS, clustering, identidade gerenciada e persistência de dados.

    Importante

    Para uma segurança ideal, recomendamos que você use o Microsoft Entra ID com identidades gerenciadas para autorizar solicitações em seu cache, se possível. A autorização usando o ID do Microsoft Entra e identidades gerenciadas oferece segurança superior e facilidade de uso em relação à autorização de chave de acesso compartilhado. Para obter mais informações sobre como usar identidades gerenciadas com seu cache, consulte Usar a ID do Microsoft Entra para autenticação de cache.

  8. (Opcional) Selecione a guia Tags ou selecione Next: Tags.

  9. (Opcional) Na guia Marcas , insira um nome e um valor de tag se quiser categorizar seu recurso de cache.

  10. Selecione o botão Rever + criar.

    Na guia Revisão + criação, o Azure valida automaticamente sua configuração.

  11. Depois que a mensagem verde Validação passada for exibida, selecione Criar.

Uma nova implantação de cache ocorre ao longo de vários minutos. Você pode monitorar o progresso da implantação no painel Visão Geral do Cache do Azure para Redis. Quando Status exibe Em execução, o cache está pronto para uso.

Instalar a biblioteca de cliente node-redis

A biblioteca node-redis é o principal cliente Node.js para Redis. Você pode instalar o cliente usando npm e o seguinte comando:

npm install redis

Criar um aplicativo Node.js para acessar um cache

Crie um aplicativo Node.js que use a ID do Microsoft Entra ou chaves de acesso para se conectar ao Cache do Azure para Redis. Recomendamos que você use o Microsoft Entra ID.

Ativar a autenticação do Microsoft Entra ID no cache

Para um cache existente, primeiro verifique se a autenticação do Microsoft Entra está habilitada. Se não estiver, conclua as etapas a seguir para habilitar a autenticação do Microsoft Entra. Recomendamos que você use o Microsoft Entra ID para autenticação em seus aplicativos.

  1. No portal do Azure, selecione a instância do Cache do Azure para Redis onde você gostaria de usar a autenticação baseada em token do Microsoft Entra.

  2. No menu de serviço, em Configurações, selecione Autenticação.

  3. No painel Autenticação, verifique se a caixa de seleção Habilitar Autenticação do Microsoft Entra está marcada. Se for, você pode passar para a próxima seção.

  4. Caso contrário, marque a caixa de seleção Habilitar autenticação do Microsoft Entra. Em seguida, insira o nome de um usuário válido. Selecione Guardar. O nome de usuário inserido é atribuído automaticamente à Política de Acesso do Proprietário de Dados.

    Você também pode inserir uma identidade gerenciada ou uma entidade de serviço para se conectar ao cache.

    Captura de tela que mostra a opção Autenticação selecionada no menu de serviço e a caixa de seleção Habilitar autenticação do Microsoft Entra marcada.

  5. Em uma caixa de diálogo, você é perguntado se deseja atualizar sua configuração e é informado de que fazer a atualização leva vários minutos para ser concluído. Selecione Yes (Sim).

    Importante

    Quando a operação de ativação for concluída, os nós no cache serão reinicializados para carregar a nova configuração. Recomendamos que conclua esta operação durante a janela de manutenção padrão ou fora do horário de pico. O processo pode levar até 30 minutos.

Para obter informações sobre como usar a ID do Microsoft Entra com a CLI do Azure, consulte as páginas de referência de identidade.

Instalar a biblioteca de cliente do Azure Identity para JavaScript

A biblioteca de cliente do Azure Identity para JavaScript usa a Biblioteca de Autenticação da Microsoft (MSAL) necessária para fornecer suporte à autenticação de token. Instale a biblioteca usando npm:

npm install @azure/identity

Criar um aplicativo Node.js usando o Microsoft Entra ID

  1. Adicione variáveis de ambiente para o nome do host e o ID da entidade de serviço.

    A ID da entidade de serviço é a ID do objeto da entidade de serviço ou do usuário do Microsoft Entra ID. No portal do Azure, esse valor aparece como Nome de usuário.

    set AZURE_CACHE_FOR_REDIS_HOST_NAME=contosoCache
    set REDIS_SERVICE_PRINCIPAL_ID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
  2. Crie um arquivo de script chamado redistest.js.

  3. Adicione o seguinte exemplo de JavaScript ao ficheiro. Este código mostra como se conectar a uma instância do Cache Redis do Azure usando o nome do host do cache e as principais variáveis de ambiente. O código também armazena e obtém um valor de cadeia na cache. Os comandos PING e CLIENT LIST também são executados. Para obter mais exemplos de como usar o Redis com o cliente node-redis , consulte Node-Redis.

    const { createClient } = require("redis");
    const { DefaultAzureCredential } = require("@azure/identity");
    
    async function main() {
      // Construct a Token Credential from Identity library, e.g. ClientSecretCredential / ClientCertificateCredential / ManagedIdentityCredential, etc.
      const credential = new DefaultAzureCredential();
      const redisScope = "https://redis.azure.com/.default";
    
      // Fetch a Microsoft Entra token to be used for authentication. This token will be used as the password.
      let accessToken = await credential.getToken(redisScope);
      console.log("access Token", accessToken);
    
      // Create redis client and connect to the Azure Cache for Redis over the TLS port using the access token as password.
      const cacheConnection = createClient({
        username: process.env.REDIS_SERVICE_PRINCIPAL_ID,
        password: accessToken.token,
        url: `redis://${process.env.AZURE_CACHE_FOR_REDIS_HOST_NAME}:6380`,
        pingInterval: 100000,
        socket: { 
          tls: true,
          keepAlive: 0 
        },
      });
    
      cacheConnection.on("error", (err) => console.log("Redis Client Error", err));
      await cacheConnection.connect();
    
      // PING command
      console.log("\nCache command: PING");
      console.log("Cache response : " + await cacheConnection.ping());
    
      // SET
      console.log("\nCache command: SET Message");
      console.log("Cache response : " + await cacheConnection.set("Message",
          "Hello! The cache is working from Node.js!"));
    
      // GET
      console.log("\nCache command: GET Message");
      console.log("Cache response : " + await cacheConnection.get("Message"));
    
      // Client list, useful to see if connection list is growing...
      console.log("\nCache command: CLIENT LIST");
      console.log("Cache response : " + await cacheConnection.sendCommand(["CLIENT", "LIST"]));
    
      cacheConnection.disconnect();
    
      return "Done"
    }
    
    main().then((result) => console.log(result)).catch(ex => console.log(ex));
    
  4. Execute o script usando Node.js:

    node redistest.js
    
  5. Verifique se a saída do seu código se parece com este exemplo:

    Cache command: PING
    Cache response : PONG
    
    Cache command: GET Message
    Cache response : Hello! The cache is working from Node.js!
    
    Cache command: SET Message
    Cache response : OK
    
    Cache command: GET Message
    Cache response : Hello! The cache is working from Node.js!
    
    Cache command: CLIENT LIST
    Cache response : id=10017364 addr=76.22.73.183:59380 fd=221 name= age=1 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 ow=0 owmem=0 events=r cmd=client user=default numops=6
    
    Done
    

Criar um aplicativo JavaScript de exemplo que tenha reautenticação

Os tokens de acesso do Microsoft Entra ID têm uma vida útil limitada de aproximadamente 75 minutos. Para manter uma conexão com o cache, você deve atualizar o token.

Este exemplo demonstra como atualizar o token usando JavaScript:

  1. Crie um arquivo de script chamado redistestreauth.js.

  2. Adicione o seguinte exemplo de JavaScript ao arquivo:

     const { createClient } = require("redis");
     const { DefaultAzureCredential } = require("@azure/identity");
    
     async function returnPassword(credential) {
         const redisScope = "https://redis.azure.com/.default";
    
         // Fetch a Microsoft Entra token to be used for authentication. This token will be used as the password.
         return credential.getToken(redisScope);
     }
    
     async function main() {
       // Construct a Token Credential from Identity library, e.g. ClientSecretCredential / ClientCertificateCredential / ManagedIdentityCredential, etc.
       const credential = new DefaultAzureCredential();
       let accessToken = await returnPassword(credential);
    
       // Create redis client and connect to the Azure Cache for Redis over the TLS port using the access token as password.
       let cacheConnection = createClient({
         username: process.env.REDIS_SERVICE_PRINCIPAL_ID,
         password: accessToken.token,
         url: `redis://${process.env.AZURE_CACHE_FOR_REDIS_HOST_NAME}:6380`,
         pingInterval: 100000,
         socket: { 
           tls: true,
           keepAlive: 0 
         },
       });
    
       cacheConnection.on("error", (err) => console.log("Redis Client Error", err));
       await cacheConnection.connect();
    
       for (let i = 0; i < 3; i++) {
         try {
             // PING command
             console.log("\nCache command: PING");
             console.log("Cache response : " + await cacheConnection.ping());
    
             // SET
             console.log("\nCache command: SET Message");
             console.log("Cache response : " + await cacheConnection.set("Message",
                 "Hello! The cache is working from Node.js!"));
    
             // GET
             console.log("\nCache command: GET Message");
             console.log("Cache response : " + await cacheConnection.get("Message"));
    
             // Client list, useful to see if connection list is growing...
             console.log("\nCache command: CLIENT LIST");
             console.log("Cache response : " + await cacheConnection.sendCommand(["CLIENT", "LIST"]));
           break;
         } catch (e) {
           console.log("error during redis get", e.toString());
           if ((accessToken.expiresOnTimestamp <= Date.now())|| (redis.status === "end" || "close") ) {
             await redis.disconnect();
             accessToken = await returnPassword(credential);
             cacheConnection = createClient({
               username: process.env.REDIS_SERVICE_PRINCIPAL_ID,
               password: accessToken.token,
               url: `redis://${process.env.AZURE_CACHE_FOR_REDIS_HOST_NAME}:6380`,
               pingInterval: 100000,
               socket: {
                 tls: true,
                 keepAlive: 0
               },
             });
           }
         }
       }
     }
    
     main().then((result) => console.log(result)).catch(ex => console.log(ex));
    
  3. Execute o script usando Node.js:

    node redistestreauth.js
    
  4. Verifique se há uma saída semelhante a este exemplo:

     Cache command: PING
     Cache response : PONG
    
     Cache command: GET Message
     Cache response : Hello! The cache is working from Node.js!
    
     Cache command: SET Message
     Cache response : OK
    
     Cache command: GET Message
     Cache response : Hello! The cache is working from Node.js!
    
     Cache command: CLIENT LIST
     Cache response : id=10017364 addr=76.22.73.183:59380 fd=221 name= age=1 idle=0 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=26 qbuf-free=32742 argv-mem=10 obl=0 oll=0 omem=0 tot-mem=61466 ow=0 owmem=0 events=r cmd=client user=default numops=6
    
    

Nota

Para obter mais exemplos de como usar o Microsoft Entra ID para autenticar no Redis por meio da biblioteca node-redis, consulte o repositório node-redis GitHub.

Clean up resources (Limpar recursos)

Se quiser continuar a usar os recursos criados neste artigo, mantenha o grupo de recursos.

Caso contrário, para evitar cobranças relacionadas aos recursos, se você terminar de usá-los, poderá excluir o grupo de recursos do Azure que você criou.

Aviso

A eliminação de um grupo de recursos é irreversível. Quando você exclui um grupo de recursos, todos os recursos no grupo de recursos são excluídos permanentemente. Confirme que não elimina acidentalmente o grupo de recursos ou recursos errados. Se você criou os recursos dentro de um grupo de recursos existente que tem recursos que deseja manter, você pode excluir cada recurso individualmente em vez de excluir o grupo de recursos.

Eliminar um grupo de recursos

  1. Inicie sessão no Portal do Azure e selecione Grupos de recursos.

  2. Selecione o grupo de recursos a ser excluído.

    Se houver muitos grupos de recursos, em Filtrar para qualquer campo, insira o nome do grupo de recursos criado para concluir este artigo. Na lista de resultados da pesquisa, selecione o grupo de recursos.

    Captura de ecrã que mostra uma lista de grupos de recursos à escolha para eliminar.

  3. Selecione Eliminar grupo de recursos.

  4. No painel Eliminar um grupo de recursos, introduza o nome do grupo de recursos a confirmar e, em seguida, selecione Eliminar.

    Captura de tela que mostra uma caixa que requer a inserção do nome do recurso para confirmar a exclusão.

Dentro de alguns momentos, o grupo de recursos e todos os seus recursos são excluídos.

Obter o código de exemplo

Obtenha o exemplo de início rápido Node.js no GitHub.