mcpField
A
azure-resource-manager-redis-dotnet

azure-resource-manager-redis-dotnet

github.com/sickn33クラウド・DevOps48.7k49 回インストール今日更新
リポジトリ

azure-resource-manager-redis-dotnet について

Azure.ResourceManager.Redis は、Azure Resource Manager を通じて Azure Cache for Redis を構成・管理する .NET 管理プレーン SDK です。キャッシュリソースを扱う開発者向けで、設定やアクセス、ネットワーク管理を提供し、Redis データの読み書きには使いません。

主な機能

  1. 01キャッシュの作成・取得・更新・削除
  2. 02SKU とキャッシュ設定の構成
  3. 03アクセスキーの管理とローテーション
  4. 04ファイアウォールルールとプライベートエンドポイントの設定
  5. 05パッチスケジュールと geo レプリケーションの構成
  6. 06キャッシュのインポート・エクスポート・再起動

活用シーン

  1. 01リソースグループでの Redis キャッシュ作成
  2. 02キャッシュ容量やメモリポリシーの変更
  3. 03許可された利用者向けのアクセスキー更新
  4. 04ファイアウォールルールやメンテナンス時間の設定

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill azure-resource-manager-redis-dotnet

インストール後、Claude Code で/azure-resource-manager-redis-dotnetを入力して読み込まれたか確認します。

詳細

Azure.ResourceManager.Redis(.NET)

Azure Resource Manager を介して Azure Cache for Redis リソースをプロビジョニングおよび管理するための管理プレーン SDK です。

⚠️ 管理プレーンとデータプレーン

  • この SDK(Azure.ResourceManager.Redis):キャッシュの作成、ファイアウォールルールの構成、アクセスキーの管理、Geo レプリケーションの設定
  • データプレーン SDK(StackExchange.Redis):キーの取得/設定、パブリッシュ/サブスクライブ、ストリーム、Lua スクリプト

インストール

dotnet add package Azure.ResourceManager.Redis
dotnet add package Azure.Identity

現在のバージョン:1.5.1(安定版)
API バージョン:2024-11-01
対象フレームワーク:.NET 8.0、.NET Standard 2.0

環境変数

AZURE_SUBSCRIPTION_ID=<your-subscription-id>
# For service principal auth (optional)
AZURE_TENANT_ID=<tenant-id>
AZURE_CLIENT_ID=<client-id>
AZURE_CLIENT_SECRET=<client-secret>

認証

using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Redis;

// Always use DefaultAzureCredential
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);

// Get subscription
var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID");
var subscription = armClient.GetSubscriptionResource(
    new ResourceIdentifier($"/subscriptions/{subscriptionId}"));

リソース階層

ArmClient
└── SubscriptionResource
    └── ResourceGroupResource
        └── RedisResource
            ├── RedisFirewallRuleResource
            ├── RedisPatchScheduleResource
            ├── RedisLinkedServerWithPropertyResource
            ├── RedisPrivateEndpointConnectionResource
            └── RedisCacheAccessPolicyResource

主なワークフロー

プロビジョニングの前に、現在のサービスのライフサイクル、サポートされている SKU/ネットワーク機能、および正確なアカウント/サブスクリプションを確認してください。静的なバージョン/SKU 一覧は、現在の利用可否を保証するものではありません。作成やスケーリングには費用がかかり、エビクションポリシーの変更、インポート、再起動、キーのローテーション、削除は、利用者やデータに影響します。スコープを限定した認可、バックアップ、ロールアウト/ロールバックを必須にしてください。利用者をもう一方のキーに移行し、動作をテストしてから、一度に 1 つのキーのみをローテーションしてください。接続文字列、アクセスキー、SAS URL をログに記録しないでください。

1. Redis キャッシュの作成
using Azure.ResourceManager.Redis;
using Azure.ResourceManager.Redis.Models;

// Get resource group
var resourceGroup = await subscription
    .GetResourceGroupAsync("my-resource-group");

// Define cache configuration
var cacheData = new RedisCreateOrUpdateContent(
    location: AzureLocation.EastUS,
    sku: new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 1))
{
    EnableNonSslPort = false,
    MinimumTlsVersion = RedisTlsVersion.Tls1_2,
    RedisConfiguration = new RedisCommonConfiguration
    {
        MaxMemoryPolicy = "volatile-lru"
    },
    Tags =
    {
        ["environment"] = "production"
    }
};

// Create cache (long-running operation)
var cacheCollection = resourceGroup.Value.GetAllRedis();
var operation = await cacheCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-redis-cache",
    cacheData);

RedisResource cache = operation.Value;
Console.WriteLine($"Cache created: {cache.Data.HostName}");
2. Redis キャッシュの取得
// Get existing cache
var cache = await resourceGroup.Value
    .GetRedisAsync("my-redis-cache");

Console.WriteLine($"Host: {cache.Value.Data.HostName}");
Console.WriteLine($"Port: {cache.Value.Data.Port}");
Console.WriteLine($"SSL Port: {cache.Value.Data.SslPort}");
Console.WriteLine($"Provisioning State: {cache.Value.Data.ProvisioningState}");
3. Redis キャッシュの更新
var patchData = new RedisPatch
{
    Sku = new RedisSku(RedisSkuName.Standard, RedisSkuFamily.BasicOrStandard, 2),
    RedisConfiguration = new RedisCommonConfiguration
    {
        MaxMemoryPolicy = "allkeys-lru"
    }
};

var updateOperation = await cache.Value.UpdateAsync(
    WaitUntil.Completed,
    patchData);
4. Redis キャッシュの削除
await cache.Value.DeleteAsync(WaitUntil.Completed);
5. アクセスキーの取得
var keys = await cache.Value.GetKeysAsync();
// Use keys only in approved secret storage or a scoped connection; never log them.
6. アクセスキーの再生成
var regenerateContent = new RedisRegenerateKeyContent(RedisRegenerateKeyType.Primary);
var newKeys = await cache.Value.RegenerateKeyAsync(regenerateContent);
// Update authorized consumers through a secret store; never print the regenerated key.
7. ファイアウォールルールの管理
// Create firewall rule
var firewallData = new RedisFirewallRuleData(
    startIP: System.Net.IPAddress.Parse("10.0.0.1"),
    endIP: System.Net.IPAddress.Parse("10.0.0.255"));

var firewallCollection = cache.Value.GetRedisFirewallRules();
var firewallOperation = await firewallCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "allow-internal-network",
    firewallData);

// List all firewall rules
await foreach (var rule in firewallCollection.GetAllAsync())
{
    Console.WriteLine($"Rule: {rule.Data.Name} ({rule.Data.StartIP} - {rule.Data.EndIP})");
}

// Delete firewall rule
var ruleToDelete = await firewallCollection.GetAsync("allow-internal-network");
await ruleToDelete.Value.DeleteAsync(WaitUntil.Completed);
8. パッチスケジュールの構成(Premium SKU)
// Patch schedules require Premium SKU
var scheduleData = new RedisPatchScheduleData(
    new[]
    {
        new RedisPatchScheduleSetting(RedisDayOfWeek.Saturday, 2) // 2 AM Saturday
        {
            MaintenanceWindow = TimeSpan.FromHours(5)
        },
        new RedisPatchScheduleSetting(RedisDayOfWeek.Sunday, 2) // 2 AM Sunday
        {
            MaintenanceWindow = TimeSpan.FromHours(5)
        }
    });

var scheduleCollection = cache.Value.GetRedisPatchSchedules();
await scheduleCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    RedisPatchScheduleDefaultName.Default,
    scheduleData);
9. データのインポート/エクスポート(Premium SKU)
// Import data from blob storage
var importContent = new ImportRdbContent(
    files: new[] { "https://mystorageaccount.blob.core.windows.net/container/dump.rdb" },
    format: "RDB");

await cache.Value.ImportDataAsync(WaitUntil.Completed, importContent);

// Export data to blob storage
var exportContent = new ExportRdbContent(
    prefix: "backup",
    container: "https://mystorageaccount.blob.core.windows.net/container?sastoken",
    format: "RDB");

await cache.Value.ExportDataAsync(WaitUntil.Completed, exportContent);
10. 強制再起動
var rebootContent = new RedisRebootContent
{
    RebootType = RedisRebootType.AllNodes,
    ShardId = 0 // For clustered caches
};

await cache.Value.ForceRebootAsync(rebootContent);

SKU リファレンス

SKUファミリ容量機能
BasicC0-6シングルノード、SLA なし、開発/テスト専用
StandardC0-62 ノード(プライマリ/レプリカ)、SLA
PremiumP1-5クラスタリング、Geo レプリケーション、VNet、永続化

容量サイズ(ファミリ C - Basic/Standard):

  • C0:250 MB
  • C1:1 GB
  • C2:2.5 GB
  • C3:6 GB
  • C4:13 GB
  • C5:26 GB
  • C6:53 GB

容量サイズ(ファミリ P - Premium):

  • P1:シャードあたり 6 GB
  • P2:シャードあたり 13 GB
  • P3:シャードあたり 26 GB
  • P4:シャードあたり 53 GB
  • P5:シャードあたり 120 GB

主な型のリファレンス

型用途
ArmClientすべての ARM 操作のエントリポイント
RedisResourceRedis キャッシュインスタンスを表します
RedisCollectionキャッシュの CRUD 操作用コレクション
RedisFirewallRuleResourceIP フィルタリング用のファイアウォールルール
RedisPatchScheduleResourceメンテナンス時間帯の構成
RedisLinkedServerWithPropertyResourceGeo レプリケーション用のリンクされたサーバー
RedisPrivateEndpointConnectionResourceプライベートエンドポイント接続
RedisCacheAccessPolicyResourceRBAC アクセスポリシー
RedisCreateOrUpdateContentキャッシュ作成ペイロード
RedisPatchキャッシュ更新ペイロード
RedisSkuSKU 構成(名前、ファミリ、容量)
RedisAccessKeysプライマリおよびセカンダリのアクセスキー
RedisRegenerateKeyContentキー再生成リクエスト

ベストプラクティス

  1. 処理を続行する前に完了が必要な操作には、WaitUntil.Completed を使用します
  2. 手動でポーリングする場合や操作を並列で実行する場合は、WaitUntil.Started を使用します
  3. 必ず DefaultAzureCredential を使用してください — キーをハードコードしないでください
  4. ARM API エラーには RequestFailedException を処理します
  5. 冪等な操作には CreateOrUpdateAsync を使用します
  6. Get* メソッドを使用して階層をたどります(例:cache.GetRedisFirewallRules())
  7. Geo レプリケーション、クラスタリング、永続化が必要な本番ワークロードには Premium SKU を使用します
  8. TLS 1.2 以上を有効にします — MinimumTlsVersion = RedisTlsVersion.Tls1_2 を設定します
  9. 非 SSL ポートを無効にします — セキュリティのため EnableNonSslPort = false を設定します
  10. キーを定期的にローテーションします — RegenerateKeyAsync を使用し、接続文字列を更新します

エラー処理

using Azure;

try
{
    var operation = await cacheCollection.CreateOrUpdateAsync(
        WaitUntil.Completed, cacheName, cacheData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
    Console.WriteLine("Cache already exists");
}
catch (RequestFailedException ex) when (ex.Status == 400)
{
    Console.WriteLine($"Invalid configuration: {ex.Message}");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}

よくある落とし穴

  1. SKU のダウングレードはできません — Premium から Standard/Basic にはダウングレードできません
  2. クラスター化には Premium が必要です — シャード構成は Premium SKU でのみ利用できます
  3. 地理レプリケーションには Premium が必要です — リンクされたサーバーは Premium キャッシュでのみ動作します
  4. VNet インジェクションには Premium が必要です — 仮想ネットワークのサポートは Premium のみです
  5. パッチスケジュールには Premium が必要です — メンテナンス期間は Premium でのみ構成できます
  6. キャッシュ名はグローバルで一意である必要があります — Redis キャッシュ名は、すべての Azure サブスクリプションで一意である必要があります
  7. プロビジョニングに時間がかかります — キャッシュの作成には 15~20 分かかることがあります。非同期パターンでは WaitUntil.Started を使用してください

StackExchange.Redis を使用した接続(データプレーン)

この管理 SDK でキャッシュを作成した後、データ操作には StackExchange.Redis を使用します。

using StackExchange.Redis;

// Get connection info from management SDK
var cache = await resourceGroup.Value.GetRedisAsync("my-redis-cache");
var keys = await cache.Value.GetKeysAsync();

// Connect with StackExchange.Redis
var connectionString = $"{cache.Value.Data.HostName}:{cache.Value.Data.SslPort},password={keys.Value.PrimaryKey},ssl=True,abortConnect=False";
var connection = ConnectionMultiplexer.Connect(connectionString);
var db = connection.GetDatabase();

// Data operations
await db.StringSetAsync("key", "value");
var value = await db.StringGetAsync("key");

関連 SDK

SDK用途インストール
StackExchange.Redisデータプレーン(get/set、pub/sub、ストリーム)dotnet add package StackExchange.Redis
Azure.ResourceManager.Redis管理プレーン(この SDK)dotnet add package Azure.ResourceManager.Redis
Microsoft.Azure.StackExchangeRedisAzure 固有の Redis 拡張機能dotnet add package Microsoft.Azure.StackExchangeRedis

使用する場面

このスキルは、概要で説明されているワークフローまたはアクションを実行する場合に適用できます。

制限事項

  • タスクが上記の説明の範囲に明確に該当する場合にのみ、このスキルを使用してください。
  • 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
  • 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を停止して確認してください。

コメント