次の方法で共有


クイック スタート: Node.js アプリで Azure Cache for Redis を使用する

このクイックスタートでは、Azure 内の任意のアプリケーションからアクセスできる安全な専用キャッシュにアクセスするために、Azure Cache for Redis を Node.js アプリに組み込みます。

前提条件

キャッシュの作成

  1. キャッシュを作成するには、Azure portal にサインインします。 ポータルのメニューで、[リソースの作成] を選びます。

    Azure portal の左側のナビゲーション ウィンドウの [リソースの作成] オプションが強調して示されているスクリーンショット。

  2. [作業の開始] ペインの検索バーに「Azure Cache for Redis」と入力します。 検索結果で Azure Cache for Redis を見つけて、[作成] を選びます。

    検索ボックスに Azure Cache for Redis が入力され、[作成] ボタンが強調されている Azure Marketplace を示すスクリーンショット。

  3. [新しい Redis Cache] ペインの [基本] タブで、以下のキャッシュの設定を構成します。

    設定 アクション 説明
    サブスクリプション Azure サブスクリプションを選択します。 Azure Cache for Redis の新しいインスタンスの作成に使うサブスクリプション。
    リソース グループ リソース グループを選択するか、 [新規作成] を選択し、新しいリソース グループの名前を入力します。 キャッシュや他のリソースを作成するリソース グループの名前。 すべてのアプリ リソースを 1 つのリソース グループに配置することで、それらをまとめて簡単に管理または削除できます。
    DNS 名 一意の名前を入力します。 キャッシュ名は、数字、英字、ハイフンのみを含む 1 から 63 文字の文字列とする必要があります。 名前の先頭と末尾には数字または文字を使用する必要があり、連続するハイフンを含めることはできません。 キャッシュ インスタンスの "ホスト名" は \<DNS name>.redis.cache.windows.net です。
    場所 場所を選択します。 キャッシュを使う他のサービスに近い Azure リージョン
    キャッシュ SKU SKU を選びます。 SKU によって、キャッシュに利用できるサイズ、パフォーマンス、機能のパラメーターが決まります。 詳細については、Azure Cache for Redis の概要に関するページを参照してください。
    キャッシュ サイズ キャッシュ サイズを選びます。 詳細については、Azure Cache for Redis の概要に関するページを参照してください。
  4. [ネットワーク] タブを選ぶか、[次へ: ネットワーク] を選びます。

  5. [ネットワーク] タブで、キャッシュに使う接続方法を選びます。

  6. [詳細] タブを選ぶか、[次へ: 詳細] を選びます。

  7. [詳細] ペインで、以下の情報に基づいて認証方法を確認または選択します。

    [詳細] ペインと選択できるオプションを示すスクリーンショット。

    • 既定では、新しい Basic、Standard、または Premium キャッシュでは、Microsoft Entra 認証が有効になり、アクセス キー認証が無効になります。
    • Basic または Standard キャッシュの場合は、非 TLS ポートを選択できます。
    • Standard および Premium キャッシュの場合は、可用性ゾーンを有効にすることを選択できます。 キャッシュの作成後に可用性ゾーンを無効にすることはできません。
    • Premium キャッシュを利用する場合は、非 TLS ポート、クラスタリング、マネージド ID、データ永続化の設定を構成します。

    重要

    最適なセキュリティのため、可能であれば、キャッシュに対する要求を認可するのに Microsoft Entra ID とマネージド ID を使うことをお勧めします。 Microsoft Entra ID とマネージド ID を使う認可は、共有アクセス キーの認可より、セキュリティと使いやすさの点で優れています。 キャッシュでのマネージド ID の使用について詳しくは、キャッシュ認証での Microsoft Entra ID の使用に関する記事をご覧ください。

  8. (省略可能) [タグ] タブを選ぶか、[次へ: タグ] を選びます。

  9. (省略可能) キャッシュ リソースを分類する場合は、[タグ] タブでタグの名前と値を入力します。

  10. [確認および作成] ボタンを選択します。

    [確認と作成] タブでは、Azure によって構成が自動的に検証されます。

  11. 緑色の検証に成功のメッセージが表示された後、 [作成] を選択します。

新しいキャッシュのデプロイは数分で完了します。 デプロイの進行状況は、Azure Cache for Redis の [概要] ペインで監視できます。 [状態][実行中] と表示されたら、キャッシュを使用できます。

node-redis クライアント ライブラリをインストールする

node-redis ライブラリは、主要な Redis 用 Node.js クライアントです。 npm と次のコマンドを使って、クライアントをインストールできます。

npm install redis

キャッシュにアクセスする Node.js アプリを作成する

Microsoft Entra ID またはアクセス キーを使って Azure Cache for Redis に接続する Node.js アプリを作成します。 Microsoft Entra ID を使うことをお勧めします。

キャッシュで Microsoft Entra ID の認証を有効にする

キャッシュが既にある場合は、最初に Microsoft Entra 認証が有効になっているかどうかを確認します。 そうでない場合は、次の手順のようにして、Microsoft Entra 認証を有効にします。 アプリケーションでの認証には Microsoft Entra ID を使うことをお勧めします。

  1. Azure portal で、Microsoft Entra トークンベースの認証を使用する対象の Azure Cache for Redis インスタンスを選択します。

  2. サービス メニューの [設定] で、[認証] を選びます。

  3. [認証] ペインで、[Microsoft Entra 認証を有効にする] チェック ボックスがオンになっているかどうかを調べます。 そうである場合は、次のセクションに進むことができます。

  4. そうでない場合は、[Microsoft Entra 認証を有効にする] チェック ボックスをオンにします。 次に、有効なユーザーの名前を入力します。 [保存] を選択します。 入力したユーザー名には、データ所有者アクセス ポリシーが自動的に割り当てられます。

    マネージド ID またはサービス プリンシパルを入力して、キャッシュに接続することもできます。

    サービス メニューで [認証] が選択され、[Microsoft Entra 認証を有効にする] チェック ボックスがオンになっていることを示すスクリーンショット。

  5. ダイアログ ボックスで、構成を更新するかどうかが確認され、更新の完了には数分かかることが通知されます。 [はい] を選択します。

    重要

    有効化の操作が完了すると、キャッシュ内のノードが再起動して新しい構成が読み込まれます。 この操作は、標準メンテナンス期間中またはピーク営業時間外に実行することをお勧めします。 このプロセスには、最大で 30 分かかることがあります。

Azure CLI での Microsoft Entra ID の使用については、ID のリファレンス ページをご覧ください。

JavaScript 用 Azure ID クライアント ライブラリをインストールする

JavaScript 用 Azure ID クライアント ライブラリは、必要な Microsoft 認証ライブラリ (MSAL) を使ってトークン認証のサポートを提供します。 npm を使ってライブラリをインストールします。

npm install @azure/identity

Microsoft Entra ID を使用して Node.js アプリを作成する

  1. ホスト名とサービス プリンシパル ID 用の環境変数を追加します。

    サービス プリンシパル ID は、Microsoft Entra ID サービス プリンシパルまたはユーザーのオブジェクト ID です。 Azure portal では、この値は [ユーザー名] として表示されます。

    set AZURE_CACHE_FOR_REDIS_HOST_NAME=contosoCache
    set REDIS_SERVICE_PRINCIPAL_ID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
  2. redistest.js という名前のスクリプト ファイルを作成します。

  3. 次の例の JavaScript をファイルに追加します。 このコードでは、キャッシュのホスト名とキーの環境変数を使って Azure Cache for 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 ID アクセス トークンの有効期間は限られており、約 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
    
    

Note

Microsoft Entra ID を使って node-redis ライブラリを介して Redis に対する認証を行う方法の他の例については、node-redis の GitHub リポジトリを参照してください。

リソースをクリーンアップする

この記事で作成したリソースを引き続き使用する場合は、リソース グループを保持します。

それ以外の場合、リソースに関連する課金が行われないようにするために、リソースの使用が終了したら、作成した Azure リソース グループを削除して構いません。

警告

リソース グループを削除すると、元に戻すことができません。 リソース グループを削除すると、そのリソース グループ内のすべてのリソースは完全に削除されます。 間違ったリソース グループやリソースをうっかり削除しないようにしてください。 保持したいリソースを含む既存のリソース グループ内にリソースを作成した場合は、リソース グループを削除するのではなく、各リソースを個別に削除できます。

リソース グループを削除する

  1. Azure portal にサインインし、 [リソース グループ] を選択します。

  2. 削除するリソース グループを選びます。

    多数のリソース グループがある場合は、[任意フィールドのフィルター] に、この記事を完了するために作成したリソース グループの名前を入力します。 検索結果の一覧で、リソース グループを選びます。

    削除するものを選ぶためのリソース グループの一覧を示すスクリーンショット。

  3. [リソース グループの削除] を選択します。

  4. [リソース グループの削除] ペインで、リソース グループの名前を入力して確認した後、[削除] を選びます。

    削除を確認するためにリソース名を入力する必要があるボックスを示すスクリーンショット。

しばらくすると、リソース グループとそのリソースのすべてが削除されます。

サンプル コードを入手する

GitHub で Node.js クイックスタートのサンプルを入手してください。