次の方法で共有


Azure Managed Redis サンプル - ASP.NET Core Web API

このサンプルでは、 DefaultAzureCredential フローで Microsoft Entra ID 認証を使用して、ASP.NET Core Web API を Azure Managed Redis に接続する方法を示します。 このアプリケーションは、トークンベースの Microsoft Entra ID アクセスを優先して、従来の接続文字列ベースの認証を回避します。これは、最新のセキュリティのベスト プラクティスに準拠しています。

アプリケーションは、次の最小限の ASP.NET Core 8.0 Web API です。

  1. 起動時に Azure Managed Redis へのセキュリティで保護された認証済み接続を確立します。
  2. キャッシュにデータを読み書きする単純な REST エンドポイントを公開します。
  3. 依存関係の挿入を使用した Redis 接続ライフサイクルの適切な管理を示します。

GitHub のコードにスキップする

GitHub で Microsoft.Azure.StackExchangeRedis リポジトリを複製します。

[前提条件]

  • .NET 8.0 SDK
  • Azure サブスクリプションにプロビジョニングされた Azure Managed Redis インスタンス。
  • Azure ユーザーまたはサービス プリンシパルを Redis ユーザーとしてキャッシュに追加する必要があります。 Azure portal で、[リソース] メニューの [認証 ] に移動し、[ ユーザーまたはサービス プリンシパル] を選択して、ID を追加します。
  • ローカル開発認証用の Azure CLI

必須の NuGet パッケージ

パッケージ 目的
Microsoft.Azure.StackExchangeRedis Azure Managed Redis に対する Microsoft Entra ID トークンベースの認証を有効にする StackExchange.Redis の拡張メソッド
StackExchange.Redis .NET 用の基になる Redis クライアント ライブラリ
Azure.Identity Azure サービスで認証するための DefaultAzureCredential とその他の資格情報の種類を提供します
Swashbuckle.AspNetCore API ドキュメントとテストのための Swagger/OpenAPI サポート

プライマリ パッケージをインストールします。

dotnet add package Microsoft.Azure.StackExchangeRedis

このパッケージは、依存関係として StackExchange.RedisAzure.Identity を取り込みます。

コンフィギュレーション

アプリケーションは、構成から Redis エンドポイントを読み取ります。 以下を更新します。appsettings.Development.json:

{
  "Redis": {
    "Endpoint": "<your-redis-name>.<region>.redis.azure.net:10000"
  }
}

Azure Managed Redis では、既定でポート 10000 が使用されます。 エンドポイントの形式は <cache-name>.<region>.redis.azure.net:10000に従います。

認証フロー

ローカル開発

アプリケーションをローカルで実行する前に、Azure で認証します。

az login

DefaultAzureCredentialは、Azure CLI 資格情報を自動的に取得し、それらを使用して Redis リソースのアクセス トークンを取得します。 この方法では、シークレットをローカルで管理またはローテーションする必要がなくなります。

運用環境

App Service、Container Apps、AKS などの Azure でホストされる環境では、 DefaultAzureCredential では次が使用されます。

  • マネージド ID - システム割り当てまたはユーザー割り当て
  • ワークロード アイデンティティ - Kubernetes シナリオ用
  • 環境変数 - サービス プリンシパル認証用

コードを変更する必要はありません。 同じ DefaultAzureCredential が環境にシームレスに適応します。

アーキテクチャ

Redis サービス (Services/Redis.cs)

Redis クラスは、接続のライフサイクルを管理します。

var options = new ConfigurationOptions()
{
    EndPoints = { endpoint },
    LoggerFactory = _loggerFactory,
};

await options.ConfigureForAzureWithTokenCredentialAsync(new DefaultAzureCredential());

_connection = await ConnectionMultiplexer.ConnectAsync(options);

重要なポイント:

  • ConfigureForAzureWithTokenCredentialAsync は、トークン ベースの認証を設定する Microsoft.Azure.StackExchangeRedis からの拡張メソッドです
  • DefaultAzureCredential トークンの取得と更新を自動的に処理する
  • アプリは起動時に 1 回接続を確立し、要求間で共有します

依存関係の挿入 (Program.cs)

アプリは Redis サービスをシングルトンとして登録し、起動時に初期化します。

builder.Services.AddSingleton<Redis>();

// Initialize Redis connection
using (var scope = app.Services.CreateScope())
{
    var redis = scope.ServiceProvider.GetRequiredService<Redis>();
    var endpoint = app.Configuration.GetValue<string>("Redis:Endpoint");
    await redis.ConnectAsync(endpoint);
}

API コントローラー (Controllers/SampleController.cs)

コントローラーは、 Redis サービスを挿入し、基本的なキャッシュ操作を示します。

  • GET /Sample: キャッシュから以前のアクセス タイムスタンプを読み取り、現在の時刻で更新します

アプリケーションの実行

  1. 認証されていることを確認します。

    az login
    
  2. appsettings.Development.jsonで Redis エンドポイントを更新します。

  3. アプリケーションを実行します。

    dotnet run
    
  4. https://localhost:<port>/swaggerに移動して Swagger UI にアクセスします。

想定される出力

GET /Sample エンドポイントを呼び出すとき:

最初の要求:

Previous visit was at: 
(Empty value since no previous visit exists)
**Subsequent requests:**
Previous visit was at: 2026-01-30T14:23:45
(Returns the ISO 8601 formatted timestamp of the previous request)

コンソール ログには、次の情報が表示されます。

info: Microsoft.Azure.StackExchangeRedis.Sample.AspNet.Controllers.SampleController
      Handled GET request. Previous visit time: 2026-01-30T14:23:45

主要な実装の詳細

  • トークンの更新: Microsoft.Azure.StackExchangeRedis ライブラリでは、有効期限が切れる前にトークンが自動的に更新されるため、更新を手動で処理する必要はありません。

  • 接続の回復性: StackExchange.Redis からの ConnectionMultiplexer は、再接続ロジックを単独で管理します。

  • リソースのクリーンアップ: Redis サービスは、アプリケーションのシャットダウン時に接続を適切に閉じる IDisposable を実装します。

  • ログの統合: Redis クライアントは .NET のILoggerFactory と連携して統合的なログ出力を行います。

トラブルシューティング

問題点 解決策
No connection is available エンドポイントの形式とポート (10000) を確認します。 Redis インスタンスがプロビジョニングされ、アクセス可能であることを確認します。
AuthenticationFailedException az loginを実行して資格情報を更新します。 [リソース] メニューの [ 認証 ] で、ID が Redis ユーザーとして追加されていることを確認します。
Unauthorized Microsoft Entra ID ID が Azure Managed Redis インスタンスの Redis ユーザーとして追加されていることを確認します。 詳細については、「キャッシュ認証に Microsoft Entra ID を使用する」を参照してください。