Краткое руководство. Использование Кэш Azure для Redis с приложением Node.js

В этом кратком руководстве описано, как включить Кэш Azure для Redis в приложение Node.js для доступа к защищенному выделенному кэшу, доступному из любого приложения в Azure.

Необходимые компоненты

Создание кэша

  1. Чтобы создать кэш, войдите в портал Azure. В меню портала выберите "Создать ресурс".

    Sceenshot, показывающий параметр

  2. В области "Начало работы" введите Кэш Azure для Redis в строке поиска. В результатах поиска найдите Кэш Azure для Redis и нажмите кнопку "Создать".

    Снимок экрана: Azure Marketplace с Кэш Azure для Redis в поле поиска и выделена кнопка

  3. На панели "Новый кэш Redis" на вкладке "Основы" настройте следующие параметры для кэша:

    Параметр Действие Description
    Подписка Выберите свою подписку Azure. Подписка, используемая для создания нового экземпляра Кэш Azure для Redis.
    Группа ресурсов Выберите группу ресурсов или щелкните Создать и введите новое имя группы ресурсов. Имя группы ресурсов, в которой создается кэш и другие ресурсы. Поместив все ресурсы приложения в одну группу ресурсов, вы сможете легко управлять ими и/или удалить их вместе.
    DNS-имя Введите уникальное имя. Имя кэша должно быть строкой от 1 до 63 символов, содержащих только цифры, буквы и дефисы. Имя должно начинаться и заканчиваться цифрой или буквой и не может содержать более одного дефиса подряд. Имя \<DNS name>.redis.cache.windows.netузла экземпляра кэша .
    Местонахождение Выберите расположение. Регион Azure, расположенный рядом с другими службами, используюющими кэш.
    Номер SKU кэша Выберите номер SKU. Номер SKU определяет размер, производительность и параметры компонентов, доступные для кэша. Дополнительные сведения см. в статье Общие сведения о Кэше Azure для Redis.
    Объем кэша Выберите размер кэша. Дополнительные сведения см. в статье Общие сведения о Кэше Azure для Redis.
  4. Перейдите на вкладку "Сеть" или нажмите кнопку "Далее: сеть".

  5. На вкладке "Сеть" выберите метод подключения, используемый для кэша.

  6. Выберите вкладку "Дополнительно" или нажмите кнопку "Далее".

  7. На панели "Дополнительно" проверьте или выберите метод проверки подлинности на основе следующих сведений:

    Снимок экрана: панель

    • По умолчанию для нового кэша "Базовый", "Стандартный" или "Премиум" включена проверка подлинности Microsoft Entra Authentication, а проверка подлинности ключей доступа отключена.
    • Для кэшей "Базовый" или "Стандартный" можно выбрать выбранный порт, отличный от TLS.
    • Для кэшей уровня "Стандартный" и "Премиум" можно включить зоны доступности. После создания кэша невозможно отключить зоны доступности.
    • Для кэша Premium настройте параметры для порта, не относяющегося к TLS, кластеризации, управляемому удостоверению и сохраняемости данных.

    Внимание

    Для оптимальной безопасности рекомендуется использовать идентификатор Microsoft Entra с управляемыми удостоверениями для авторизации запросов к кэшу, если это возможно. Авторизация с помощью идентификатора Microsoft Entra и управляемых удостоверений обеспечивает более высокую безопасность и удобство использования при авторизации ключа общего доступа. Дополнительные сведения об использовании управляемых удостоверений с кэшем см. в разделе "Использование идентификатора Microsoft Entra для проверки подлинности кэша".

  8. (Необязательно) Выберите вкладку "Теги" или нажмите кнопку "Далее: теги".

  9. (Необязательно) На вкладке "Теги" введите имя и значение тега, если вы хотите классифицировать ресурс кэша.

  10. Нажмите кнопку Просмотреть и создать.

    На вкладке "Проверка и создание " Azure автоматически проверяет конфигурацию.

  11. Когда отобразится сообщение Проверка пройдена зеленого цвета, выберите Создать.

Развертывание нового кэша происходит в течение нескольких минут. Ход развертывания можно отслеживать на панели обзора Кэш Azure для Redis. Когда отображается состояние выполнения, кэш готов к использованию.

Установка клиентской библиотеки node-redis

Библиотека redis узла является основным клиентом Node.js для Redis. Клиент можно установить с помощью npm и следующей команды:

npm install redis

Создание приложения Node.js для доступа к кэшу

Создайте приложение Node.js, которое использует идентификатор Microsoft Entra или ключи доступа для подключения к Кэш Azure для Redis. Рекомендуется использовать идентификатор Microsoft Entra.

Включение проверки подлинности идентификатора Microsoft Entra в кэше

Для существующего кэша сначала проверьте, включена ли проверка подлинности Microsoft Entra. Если это не так, выполните следующие действия, чтобы включить проверку подлинности Microsoft Entra. Мы рекомендуем использовать идентификатор Microsoft Entra для проверки подлинности в приложениях.

  1. В портал Azure выберите экземпляр Кэш Azure для Redis, где вы хотите использовать проверку подлинности на основе токена Microsoft Entra.

  2. В меню службы в разделе "Параметры" выберите "Проверка подлинности".

  3. На панели проверки подлинности проверьте, установлен ли флажок "Включить проверку подлинности Microsoft Entra". Если это так, можно перейти к следующему разделу.

  4. В противном случае установите флажок "Включить проверку подлинности Microsoft Entra". Затем введите имя допустимого пользователя. Выберите Сохранить. Введенное имя пользователя автоматически назначается политике доступа владельца данных.

    Вы также можете ввести управляемое удостоверение или субъект-службу для подключения к кэшу.

    Снимок экрана: проверка подлинности, выбранная в меню службы, и установлен флажок

  5. В диалоговом окне вам будет предложено обновить конфигурацию, и вы получите сообщение о том, что обновление занимает несколько минут. Выберите Да.

    Внимание

    После завершения операции включения узлы в кэше перезагружается для загрузки новой конфигурации. Рекомендуется выполнить эту операцию во время стандартного периода обслуживания или за пределами рабочих часов. Процесс может занять до 30 минут.

Сведения об использовании идентификатора Microsoft Entra с Azure CLI см. на страницах ссылок на удостоверения.

Установка клиентской библиотеки удостоверений Azure для JavaScript

Клиентская библиотека удостоверений Azure для JavaScript использует необходимую библиотеку проверки подлинности Майкрософт (MSAL) для предоставления поддержки проверки подлинности маркеров. Установите библиотеку с помощью npm:

npm install @azure/identity

Создание приложения Node.js с помощью идентификатора Microsoft Entra

  1. Добавьте переменные среды для имени узла и идентификатора субъекта-службы.

    Идентификатор субъекта-службы — это идентификатор объекта субъекта-службы Microsoft Entra ID или пользователя. В портал Azure это значение отображается как имя пользователя.

    set AZURE_CACHE_FOR_REDIS_HOST_NAME=contosoCache
    set REDIS_SERVICE_PRINCIPAL_ID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
  2. Создайте файл скрипта с именем redistest.js.

  3. Добавьте следующий пример JavaScript в файл. В этом коде показано, как подключиться к экземпляру Кэш Azure для Redis с помощью имени узла кэша и ключевых переменных среды. Код также хранит строковое значение в кэше и извлекает его. Также выполняются команды PING и CLIENT LIST. Дополнительные примеры использования Redis с клиентом node-redis см. в разделе 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. Запустите скрипт с помощью Node.js:

    node redistest.js
    
  5. Убедитесь, что выходные данные кода выглядят следующим образом:

    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
    

Создание примера приложения JavaScript с повторной проверку подлинности

Маркеры доступа к идентификатору Microsoft Entra имеют ограниченный срок действия около 75 минут. Чтобы сохранить подключение к кэшу, необходимо обновить маркер.

В этом примере показано, как обновить маркер с помощью JavaScript:

  1. Создайте файл скрипта с именем redistestreauth.js.

  2. Добавьте следующий пример JavaScript в файл:

     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. Запустите скрипт с помощью Node.js:

    node redistestreauth.js
    
  4. Проверьте выходные данные, похожие на этот пример:

     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
    
    

Примечание.

Дополнительные примеры использования идентификатора Microsoft Entra для проверки подлинности в Redis с помощью библиотеки node-redis см. в репозитории GitHub node-redis.

Очистка ресурсов

Если вы хотите продолжить использовать ресурсы, созданные в этой статье, сохраните группу ресурсов.

В противном случае, чтобы избежать расходов, связанных с ресурсами, при завершении использования ресурсов можно удалить созданную группу ресурсов Azure.

Предупреждение

Удаление группы ресурсов — процесс необратимый. При удалении группы ресурсов все ресурсы в группе ресурсов удаляются безвозвратно. Будьте внимательны, чтобы случайно не удалить не ту группу ресурсов или не те ресурсы. Если вы создали ресурсы внутри существующей группы ресурсов с ресурсами, которые необходимо сохранить, можно удалить каждый ресурс по отдельности, а не удалить группу ресурсов.

Удаление группы ресурсов

  1. Войдите на портал Azure и щелкните Группы ресурсов.

  2. Выберите группу ресурсов для удаления.

    Если в фильтре для любого поля существует много групп ресурсов, введите имя созданной группы ресурсов для выполнения этой статьи. В списке результатов поиска выберите группу ресурсов.

    Снимок экрана: список групп ресурсов для удаления.

  3. Выберите команду Удалить группу ресурсов.

  4. В области "Удалить группу ресурсов" введите имя группы ресурсов, чтобы подтвердить, и нажмите кнопку "Удалить".

    Снимок экрана: поле, требующее ввода имени ресурса для подтверждения удаления.

В течение нескольких минут группа ресурсов и все его ресурсы удаляются.

Получение кода примера

Получите пример Node.js краткого руководства на сайте GitHub.