次の方法で共有


.NET AspireAzure Cache for Redis* 統合®

含まれているもの:ホスティング統合が含まれています ホスティング統合 —および— Client 統合が含まれていますClient 統合

Azure Cache for Redis は、Redis ソフトウェアに基づくメモリ内データ ストアを提供します。 Redis バックエンド データ ストアを頻繁に使用するアプリケーションのパフォーマンスとスケーラビリティが向上します。 頻繁にアクセスされるデータをサーバー メモリに保持することで、大量のアプリケーション要求を処理できます。このデータは、すばやく書き込んで読み取ることができます。 Redis は、最新のアプリケーションに重要な低待機時間および高スループットのデータ ストレージ ソリューションをもたらします。

Azure Cache for Redis は、Redis オープンソース (OSS Redis) と、マネージド サービスとして Redis Inc. (Redis Enterprise) の商用製品の両方を提供します。 セキュリティで保護された専用の Redis サーバー インスタンスと、完全な Redis API の互換性が提供されます。 Microsoft は、Azureでホストされ、Azure内または外部の任意のアプリケーションで使用できるサービスを運用しています。

.NET AspireAzure Cache for Redis 統合を使用すると、既存の Azure Cache for Redis インスタンスに接続したり、新しいインスタンスを作成したり、.NETdocker.io/library/redis からローカルにコンテナーとして実行したりできます。

ホスティング統合

.NET AspireAzure Cache for Redis ホスティング統合は、AzureRedis リソースを AzureRedisCacheResource の種類としてモデル化します。 この種類とAPIをリソースとしてあなたのアプリホストプロジェクトで表現するために、📦Aspire.Hosting.Azure.Redis NuGetパッケージを追加してください。

dotnet add package Aspire.Hosting.Azure.Redis

詳細については、「dotnet でのパッケージの追加」または「.NET アプリケーションでのパッケージの依存関係の管理」を参照してください。

リソース AzureAzure Cache for Redis 追加する

アプリ ホスト プロジェクトで、次の例に示すように、AddAzureRedis インスタンスの builder を呼び出して、AzureAzure Cache for Redis リソースを追加します。

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddAzureRedis("azcache");

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

上記の AddAzureRedis 呼び出しでは、Redis サーバー リソースを Azure Cache for Redisとしてデプロイするように構成します。

大事な

既定では、AddAzureRedisは Microsoft Entra ID 認証を構成します。 これには、クライアント統合など、これらのリソースに接続する必要があるアプリケーションを変更する必要があります。

アドバイス (if "tip" refers to advice) or チップ (if "tip" refers to gratuity)

AddAzureRedisを呼び出すと、暗黙的に AddAzureProvisioningが呼び出されます。これによって、アプリの起動時に Azure リソースを動的に生成するためのサポートが追加されます。 アプリは、適切なサブスクリプションと場所を構成する必要があります。 詳細については、「 ローカル プロビジョニング: 構成」を参照してください。

プロビジョニングによって生成されたBicep

Bicepが初めての場合は、これはリソースを定義するためのドメイン固有の言語です。 .NET.NET Aspireでは、Bicep を手動で記述する必要はありません。代わりに、プロビジョニング API によって Bicep が生成されます。 アプリを発行すると、生成された Bicep がマニフェスト ファイルと共に出力されます。 AzureAzure Cache for Redis リソースを追加すると、次の Bicep が生成されます。

@description('The ___location for the resource(s) to be deployed.')
param ___location string = resourceGroup().___location

resource redis 'Microsoft.Cache/redis@2024-03-01' = {
  name: take('redis-${uniqueString(resourceGroup().id)}', 63)
  ___location: ___location
  properties: {
    sku: {
      name: 'Basic'
      family: 'C'
      capacity: 1
    }
    enableNonSslPort: false
    disableAccessKeyAuthentication: true
    minimumTlsVersion: '1.2'
    redisConfiguration: {
      'aad-enabled': 'true'
    }
  }
  tags: {
    'aspire-resource-name': 'redis'
  }
}

output connectionString string = '${redis.properties.hostName},ssl=true'

output name string = redis.name

上記の Bicep は、 AzureAzure Cache for Redis リソースをプロビジョニングするモジュールです。 さらに、ロールの割り当ては、別のモジュールで Azure リソースに対して作成されます。

@description('The ___location for the resource(s) to be deployed.')
param ___location string = resourceGroup().___location

param redis_outputs_name string

param principalId string

param principalName string

resource redis 'Microsoft.Cache/redis@2024-03-01' existing = {
  name: redis_outputs_name
}

resource redis_contributor 'Microsoft.Cache/redis/accessPolicyAssignments@2024-03-01' = {
  name: guid(redis.id, principalId, 'Data Contributor')
  properties: {
    accessPolicyName: 'Data Contributor'
    objectId: principalId
    objectIdAlias: principalName
  }
  parent: redis
}

AzureAzure Cache for Redisに加えて、キャッシュへのアプリケーション アクセスにアクセス ポリシーの割り当てもプロビジョニングします。 生成された Bicep は開始点であり、C# のプロビジョニング インフラストラクチャへの変更の影響を受ける。 Bicep ファイルのカスタマイズは直接上書きされるため、C# プロビジョニング API を通じて変更を加えて、生成されたファイルに反映されるようにします。

プロビジョニング インフラストラクチャをカスタマイズする

すべての .NET AspireAzure リソースは、AzureProvisioningResource 型のサブクラスです。 この種類の型を使うことで、Azure API を利用して ConfigureInfrastructure<T>(IResourceBuilder<T>, Action<AzureResourceInfrastructure>) リソースを構成する流暢な API が提供され、生成された Bicep をカスタマイズすることができます。 たとえば、kindconsistencyPolicylocationsなどを構成できます。 次の例では、AzureAzure Cache for Redis リソースをカスタマイズする方法を示します。

builder.AddAzureRedis("redis")
    .WithAccessKeyAuthentication()
    .ConfigureInfrastructure(infra =>
    {
        var redis = infra.GetProvisionableResources()
                         .OfType<RedisResource>()
                         .Single();

        redis.Sku = new()
        {
            Family = RedisSkuFamily.BasicOrStandard,
            Name = RedisSkuName.Standard,
            Capacity = 1,                    
        };
        redis.Tags.Add("ExampleKey", "Example value");
    });

上記のコード:

  • ConfigureInfrastructure API への呼び出しをチェーンします。
    • infra パラメーターは、AzureResourceInfrastructure 型のインスタンスです。
    • プロビジョニング可能なリソースは、GetProvisionableResources() メソッドを呼び出すことによって取得されます。
    • 1 つの RedisResource が取得されます。
    • Sku は、BasicOrStandardのファミリ、Standardの名前、および 1の容量で設定されます。
    • Redis というキーと ExampleKeyという値を持つタグが Example value リソースに追加されます。

AzureAzure Cache for Redis リソースをカスタマイズするには、さらに多くの構成オプションを使用できます。 詳細については、Azure.Provisioning.Redisを参照してください。 詳細については、Azureページを参照してください

既存の AzureAzure Cache for Redis に接続する

接続する既存の AzureAzure Cache for Redis リソースがある場合があります。 呼び出しをチェーンして、AzureRedisCacheResource が既存のリソースであることを注釈付けることができます。

var builder = DistributedApplication.CreateBuilder(args);

var existingRedisName = builder.AddParameter("existingRedisName");
var existingRedisResourceGroup = builder.AddParameter("existingRedisResourceGroup");

var cache = builder.AddAzureRedis("azcache")
                   .AsExisting(existingRedisName, existingRedisResourceGroup);

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

AzureAzure Cache for Redis リソースを既存のリソースとして扱う方法の詳細については、「既存の Azure リソースを使用する」を参照してください。

手記

または、AzureAzure Cache for Redis リソースを表す代わりに、接続文字列をアプリ ホストに追加することもできます。 このアプローチは弱く型指定されており、ロールの割り当てやインフラストラクチャのカスタマイズでは機能しません。 詳細については、「Azureを使用して既存の リソースを追加する」を参照してください。

コンテナーとしてリソース AzureAzure Cache for Redis 実行する

Azure Cache for Redis ホスティング統合では、Redis サーバーをローカル コンテナーとして実行できます。 これは、Redis サーバーを開発およびテスト目的でローカルで実行し、Azure リソースをプロビジョニングしたり、既存の Azure Cache for Redis サーバーに接続したりする必要がないようにする場合に役立ちます。

docker.io/library/redis コンテナー イメージを使用し、AzureAzure Cache for Redis インスタンスをコンテナーとしてローカルで実行するには、次の例に示すように、RunAsContainerの呼び出しをチェーンします。

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddAzureRedis("azcache")
                   .RunAsContainer();

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

上記のコードでは、コンテナー内でローカルに実行するように Redis リソースを構成します。

アドバイス (if "tip" refers to advice) or チップ (if "tip" refers to gratuity)

RunAsContainer メソッドは、ローカルの開発とテストに役立ちます。 この API では、基になる RedisResource 構成をカスタマイズできる省略可能なデリゲートが公開されています。この構成では、 Redis InsightsRedis Commander の追加、データ ボリュームの追加、データ バインド マウントの追加などです。 詳細については、ホスティング統合の.NET AspireRedisを参照してください。

アクセス キー認証を使用するように AzureAzure Cache for Redis リソースを構成する

既定では、 AzureAzure Cache for Redis リソースは Microsoft Entra ID 認証を使用するように構成されています。 パスワード認証を使用する場合 (推奨されません)、WithAccessKeyAuthentication メソッドを呼び出して、パスワード認証を使用するようにサーバーを構成できます。

var builder = DistributedApplication.CreateBuilder(args);

var cache = builder.AddAzureRedis("azcache")
                   .WithAccessKeyAuthentication();

builder.AddProject<Projects.ExampleProject>()
       .WithReference(cache);

// After adding all resources, run the app...

上記のコードでは、アクセス キー認証を使用するように AzureAzure Cache for Redis リソースを構成します。 これにより、生成された Bicep が、Microsoft Entra ID 認証ではなくアクセス キー認証を使用するように変更されます。 つまり、接続文字列にはパスワードが含まれており、Azure Key Vault シークレットに追加されます。

Client 統合

.NET Aspire Stack Exchange Redis クライアント統合を開始するには、クライアントを使用するプロジェクト、すなわち 📦 クライアントを利用するアプリケーションのプロジェクトに、Aspire NuGet パッケージをインストールします。 Redis クライアント統合は、との対話に使用できる Redis インスタンスを登録します。

dotnet add package Aspire.StackExchange.Redis

クライアント Redis 追加する

クライアントを使用するプロジェクトの Program.cs ファイルで、任意の AddRedisClientIHostApplicationBuilder 拡張メソッドを呼び出して、依存関係挿入コンテナーを介して使用する IConnectionMultiplexer を登録します。 このメソッドは、接続名パラメーターを受け取ります。

builder.AddRedisClient(connectionName: "cache");

アドバイス (if "tip" refers to advice) or チップ (if "tip" refers to gratuity)

connectionName パラメーターは、アプリ ホスト プロジェクトに AzureAzure Cache for Redis リソースを追加するときに使用する名前と一致する必要があります。 詳細については、「 リソース AzureAzure Cache for Redis 追加」を参照してください。

その後、依存関係の挿入を使用して IConnectionMultiplexer インスタンスを取得できます。 たとえば、サービスの例から接続を取得するには、次のようにします。

public class ExampleService(IConnectionMultiplexer connectionMux)
{
    // Use connection multiplexer...
}

依存関係の挿入の詳細については、依存関係の挿入.NET参照してください。

認証されたクライアント AzureAzure Cache for Redis 追加する

既定では、AddAzureRedis ホスティング統合で Redis を呼び出すと、Microsoft Entra ID が構成されます。 📦 Microsoft.Azure をインストールします。認証を有効にする StackExchangeRedis NuGet パッケージ:

dotnet add package Microsoft.Azure.StackExchangeRedis

Redis 接続は、クライアント統合と Microsoft.Azure.StackExchangeRedisを使用して利用できます。 次の構成コードについて考えてみましょう。

var azureOptionsProvider = new AzureOptionsProvider();

var configurationOptions = ConfigurationOptions.Parse(
    builder.Configuration.GetConnectionString("cache") ?? 
    throw new InvalidOperationException("Could not find a 'cache' connection string."));

if (configurationOptions.EndPoints.Any(azureOptionsProvider.IsMatch))
{
    await configurationOptions.ConfigureForAzureWithTokenCredentialAsync(
        new DefaultAzureCredential());
}

builder.AddRedisClient("cache", configureOptions: options =>
{
    options.Defaults = configurationOptions.Defaults;
});

詳細については、 Microsoft.Azure を参照してください。StackExchangeRedis リポジトリ。

キー付き Redis クライアントを追加する

接続名が異なる複数の IConnectionMultiplexer インスタンスを登録する場合があります。 キー付き Redis クライアントを登録するには、AddKeyedRedisClient メソッドを呼び出します。

builder.AddKeyedRedisClient(name: "chat");
builder.AddKeyedRedisClient(name: "queue");

その後、依存関係の挿入を使用して IConnectionMultiplexer インスタンスを取得できます。 たとえば、サービスの例から接続を取得するには、次のようにします。

public class ExampleService(
    [FromKeyedServices("chat")] IConnectionMultiplexer chatConnectionMux,
    [FromKeyedServices("queue")] IConnectionMultiplexer queueConnectionMux)
{
    // Use connections...
}

キー付きサービスの詳細については、「 .NET 依存関係の挿入: キー付きサービス」を参照してください。

設定

.NET Aspire Stack Exchange Redis クライアント統合には、プロジェクトの要件と規則に基づいて Redis 接続を構成するための複数のオプションが用意されています。

接続文字列を使用する

ConnectionStrings 構成セクションの接続文字列を使用する場合は、AddRedisを呼び出すときに接続文字列の名前を指定できます。

builder.AddRedis("cache");

その後、接続文字列は ConnectionStrings 構成セクションから取得されます。

{
  "ConnectionStrings": {
    "cache": "localhost:6379"
  }
}

この接続文字列の書式を設定する方法の詳細については、 Stack Exchange Redis 構成に関するドキュメントを参照してください。

構成プロバイダーを使用する

.NET Aspire Stack Exchange Redis 統合では、Microsoft.Extensions.Configurationがサポートされます。 StackExchangeRedisSettings キーを使用して、構成から Aspire:StackExchange:Redis を読み込みます。 いくつかのオプションを構成する appsettings.json の例:

{
  "Aspire": {
    "StackExchange": {
      "Redis": {
        "ConfigurationOptions": {
          "ConnectTimeout": 3000,
          "ConnectRetry": 2
        },
        "DisableHealthChecks": true,
        "DisableTracing": false
      }
    }
  }
}

完全なRedisクライアント統合JSONスキーマについては、Aspireを参照してください。StackExchange.Redis/ConfigurationSchema.json.

インライン デリゲートを使用する

Action<StackExchangeRedisSettings> デリゲートを渡して、一部またはすべてのオプションをインラインで設定することもできます。たとえば、DisableTracingを構成します。

builder.AddRedisClient(
    "cache",
    static settings => settings.DisableTracing = true);

Client 統合の正常性チェック

既定では、 .NET.NET Aspireclient 統合 では、すべてのサービスに対して 正常性チェック が有効になっています。 同様に、多くの .NET.NET Aspireホスト統合により、 正常性チェック エンドポイントも有効になります。 詳細については、以下を参照してください。

.NET Aspire Stack Exchange Redis 統合では、次の処理が行われます。

  • StackExchangeRedisSettings.DisableHealthChecksfalseされたときに正常性チェックを追加します。これは、コンテナー インスタンスへの接続を試みます。
  • /health HTTP エンドポイントと統合されます。このエンドポイントは、アプリがトラフィックを受け入れる準備ができていると見なされるために、登録されているすべての正常性チェックに合格する必要があります。

可観測性とテレメトリ

統合により、ログ記録、トレース、メトリックの構成が自動的に設定されます。これは、監視の柱 とも呼ばれます。 統合の可観測性とテレメトリの詳細については、統合の概要 .NET.NET Aspire 参照してください。 バッキング サービスによっては、一部の統合でこれらの機能の一部のみがサポートされる場合があります。 たとえば、一部の統合ではログ記録とトレースがサポートされますが、メトリックはサポートされません。 テレメトリ機能は、「 構成」 セクションに示されている手法を使用して無効にすることもできます。

伐採

.NET Aspire Stack Exchange Redis 統合では、次のログ カテゴリが使用されます。

  • Aspire.StackExchange.Redis

追跡

.NET Aspire Stack Exchange Redis 統合では、OpenTelemetryを使用して次のトレース アクティビティが出力されます。

  • OpenTelemetry.Instrumentation.StackExchangeRedis

メトリック

.NET Aspire Stack Exchange Redis 統合では、現在、StackExchange.Redis ライブラリの制限により、メトリックが既定でサポートされていません。

関連項目

*: Redis は Redis 株式会社の登録商標です。その中のいかなる権利も、 Redis 株式会社に留保されます。Microsoft による使用は参照のみを目的としており、 Redis と Microsoft の間のスポンサーシップ、保証、所属を示すものではありません。 トップに戻りますか?