クイックスタート: Java アプリと Redisson Redis クライアントで Azure Cache for Redis を使用する

このクイックスタートでは、Redisson Redis クライアントと Java Community Practice (JCP) 標準の JCache API を使用して、Java アプリに Azure Cache for Redis を組み込みます。 これらのサービスを使用すると、Azure の任意のアプリケーションからアクセスできるセキュリティで保護された専用キャッシュにアクセスできます。

この記事では、Redis 接続に使用する Azure ID を選択するための 2 つのオプションについて説明します。

  • Redis キーを使用した認証
  • Microsoft Entra ID を使用した認証

コードにスキップする

このクイックスタートでは、Maven アーキタイプ機能を使用して Java アプリのスキャフォールディングを生成します。 このクイックスタートでは、Azure Cache for Redis に接続する実用的なアプリを作成するためのコードの構成方法について説明します。

すぐにコードに移動したい場合は、GitHub 上の Java クイックスタート サンプルを参照してください。

前提条件

キャッシュの作成

  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 の [概要] ペインで監視できます。 [状態][実行中] と表示されると、キャッシュの使用の準備が完了しています。

ホスト名、ポート、アクセス キーを取得する

キャッシュ クライアントが Azure Cache for Redis サーバーに接続するには、キャッシュのホスト名、ポート、アクセス キーが必要です。 一部のクライアントでは、これらの項目が少し異なる名前で呼ばれている場合があります。 ホスト名、ポート、キーは Azure portal で取得できます。

  • キャッシュのアクセス キーを取得するには:

    1. Azure portal で、キャッシュに移動します。
    2. サービス メニューの [設定] で、[認証] を選びます。
    3. [認証] ペインで、[アクセス キー] タブを選びます。
    4. アクセス キーの値をコピーするには、キー フィールドの [コピー] アイコンを選びます。

    Azure Cache for Redis のインスタンスのアクセス キーを見つけてコピーする方法を示すスクリーンショット。

  • キャッシュのホスト名とポートを取得するには:

    1. Azure portal で、キャッシュに移動します。
    2. サービス メニューで、[概要] を選びます。
    3. [基本][ホスト名] で、[コピー] アイコンを選んでホスト名の値をコピーします。 ホスト名の値の形式は <DNS name>.redis.cache.windows.net です。
    4. [ポート] で、[コピー] アイコンを選んでポートの値をコピーします。

    Azure Cache for Redis のインスタンスのホスト名とポートを見つけてコピーする方法を示すスクリーンショット。

作業環境の設定

このセクションの手順では、Redis 接続に使用する Azure ID を選択するための 2 つのオプションを示します。 サンプル コードでは、AUTH_TYPE 環境変数の値を確認し、その値に基づいてアクションを実行します。

Redis キーを使用して認証する

オペレーティング システムに応じて、キャッシュのホスト名とプライマリ アクセス キーを保持する環境変数を追加します。 コマンド プロンプト ウィンドウまたはターミナル ウィンドウで、次の値を設定します。

export REDIS_CACHE_HOSTNAME=<your-host-name>.redis.cache.windows.net
export REDIS_CACHE_KEY=<your-primary-access-key>
export AUTH_TYPE=RedisKey

上記のコードで、プレースホルダーを次の値に置き換えます。

  • <your-host-name>:Azure portal の Azure Cache for Redis リソースの [プロパティ] セクションから取得した DNS ホスト名。
  • <your-primary-access-key>:Azure portal の Azure Cache for Redis リソースの [アクセス キー] セクションから取得したプライマリ アクセス キー。

Microsoft Entra ID を使用して認証する

オペレーティング システムに応じて、キャッシュのホスト名とユーザー名を保持する環境変数を追加します。 コマンド プロンプト ウィンドウまたはターミナル ウィンドウで、次の値を設定します。

export REDIS_CACHE_HOSTNAME=<your-host-name>.redis.cache.windows.net
export USER_NAME=<user-name>
export AUTH_TYPE=MicrosoftEntraID

上記のコードで、プレースホルダーを次の値に置き換えます。

  • <your-host-name>:Azure portal の Azure Cache for Redis リソースの [プロパティ] セクションから取得した DNS ホスト名。

  • <user-name>: マネージド ID またはサービス プリンシパルのオブジェクト ID。

    ユーザー名を取得するには:

    1. Azure portal で、Azure Cache for Redis インスタンスに移動します。

    2. サービス メニューで、[データ アクセス構成] を選択します。

    3. [Redis ユーザー] タブで、[ユーザー名] 列を見つけて値をコピーします。

      [Redis ユーザー] タブと [ユーザー名] の値が強調表示された [Azure Cache for Redis データ アクセス構成] ページを示す Azure portal のスクリーンショット。

新しい Java アプリを作成する

Maven を使用して、新しいクイック スタート アプリを生成します。

mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-quickstart \
    -DarchetypeVersion=1.3 \
    -DinteractiveMode=false \
    -DgroupId=example.demo \
    -DartifactId=redis-redisson-test \
    -Dversion=1.0

新しい redis-redisson-test プロジェクト ディレクトリに移動します。

pom.xml ファイルを開き、Redisson の依存関係を追加します。

    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.8.2</version>
    </dependency>

    <dependency>
        <groupId>org.redisson</groupId>
        <artifactId>redisson</artifactId>
        <version>3.24.3</version>
    </dependency>

pom.xml ファイルを保存します。

App.java を開き、既存のコードを次のコードに置き換えます。

package example.demo;

import com.azure.core.credential.TokenRequestContext;
import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
import org.redisson.config.Config;
import org.redisson.jcache.configuration.RedissonConfiguration;

import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.Caching;
import javax.cache.configuration.Configuration;
import javax.cache.configuration.MutableConfiguration;
import java.time.LocalDateTime;


/**
 * Redis test
 *
 */
public class App {
    public static void main(String[] args) {

        Config redissonconfig = getConfig();

        RedissonClient redissonClient = Redisson.create(redissonconfig);

        MutableConfiguration<String, String> jcacheConfig = new MutableConfiguration<>();
        Configuration<String, String> config = RedissonConfiguration.fromInstance(redissonClient, jcacheConfig);

        // Perform cache operations using JCache
        CacheManager manager = Caching.getCachingProvider().getCacheManager();
        Cache<String, String> map = manager.createCache("test", config);

        // Simple get and put of string data into the cache
        System.out.println("\nCache Command  : GET Message");
        System.out.println("Cache Response : " + map.get("Message"));

        System.out.println("\nCache Command  : SET Message");
        map.put("Message",
            String.format("Hello! The cache is working from Java! %s", LocalDateTime.now()));

        // Demonstrate "SET Message" executed as expected
        System.out.println("\nCache Command  : GET Message");
        System.out.println("Cache Response : " + map.get("Message"));

        redissonClient.shutdown();
    }

    private static Config getConfig(){
        if ("MicrosoftEntraID".equals(System.getenv("AUTH_TYPE"))) {
            System.out.println("Auth with Microsoft Entra ID");
            return getConfigAuthWithAAD();
        } else if ("RedisKey".equals(System.getenv("AUTH_TYPE"))) {
            System.out.println("Auth with Redis key");
            return getConfigAuthWithKey();
        }
        System.out.println("Auth with Redis key");
        return getConfigAuthWithKey();
    }

    private static Config getConfigAuthWithKey() {
        // Connect to the Azure Cache for Redis over the TLS/SSL port using the key
        Config redissonconfig = new Config();
        redissonconfig.useSingleServer().setPassword(System.getenv("REDIS_CACHE_KEY"))
            .setAddress(String.format("rediss://%s:6380", System.getenv("REDIS_CACHE_HOSTNAME")));
        return redissonconfig;
    }

    private static Config getConfigAuthWithAAD() {
        //Construct a Token Credential from Identity library, e.g. DefaultAzureCredential / ClientSecretCredential / Client CertificateCredential / ManagedIdentityCredential etc.
        DefaultAzureCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build();

        // Fetch a Microsoft Entra token to be used for authentication.
        String token = defaultAzureCredential
            .getToken(new TokenRequestContext()
                .addScopes("acca5fbb-b7e4-4009-81f1-37e38fd66d78/.default")).block().getToken();

        // Connect to the Azure Cache for Redis over the TLS/SSL port using the key
        Config redissonconfig = new Config();
        redissonconfig.useSingleServer()
            .setAddress(String.format("rediss://%s:6380", System.getenv("REDIS_CACHE_HOSTNAME")))
            .setUsername(System.getenv("USER_NAME")) // (Required) Username is Object ID of your managed identity or service principal
            .setPassword(token); // Microsoft Entra access token as password is required.
        return redissonconfig;
    }

}

このコードは、Redisson クライアント ライブラリの JCache API サポートとともに Microsoft Entra ID を使用して Azure Cache for Redis インスタンスに接続する方法を示します。 コードでは、キャッシュ内の文字列値の格納および取得も行います。 詳細については、JCache の仕様を参照してください。

App.java を保存します。

アプリをビルドして実行する

アプリをビルドして実行するには、次の Maven コマンドを実行します。

mvn compile exec:java -Dexec.mainClass=example.demo.App

次の出力では、最後の実行で設定されたキャッシュ済みの値が Message キーに以前あったことがわかります。 アプリは、そのキャッシュ値を更新しました。

Cache Command  : GET Message
Cache Response : Hello! The cache is working from Java! 2023-12-05T15:13:11.398873

Cache Command  : SET Message

Cache Command  : GET Message
Cache Response : Hello! The cache is working from Java! 2023-12-05T15:45:45.748667

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

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

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

警告

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

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

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

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

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

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

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

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

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

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