mcpField
A
azure-resource-manager-durabletask-dotnet

azure-resource-manager-durabletask-dotnet

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

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

azure-resource-manager-durabletask-dotnet は、Azure Resource Manager 経由で Durable Task Scheduler リソースを管理する .NET 管理プレーン SDK です。Azure Durable Task 環境を構成する開発者向けで、スケジューラー、タスクハブ、保持ポリシーを扱い、オーケストレーションの実行や照会は行いません。

主な機能

  1. 01スケジューラーの作成・更新・削除
  2. 02タスクハブの管理
  3. 03保持ポリシーの設定
  4. 04スケジューラーの一覧・取得
  5. 05Dedicated と Consumption SKU 対応

活用シーン

  1. 01Durable Task 環境用スケジューラーの作成
  2. 02タスクハブとスケジューラー設定の変更
  3. 03オーケストレーション向けリソース保持ポリシーの設定

インストール

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

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

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

詳細

Azure.ResourceManager.DurableTask(.NET)

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

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

  • この SDK(Azure.ResourceManager.DurableTask):スケジューラーやタスクハブの作成、保持ポリシーの設定
  • データプレーン SDK(Microsoft.DurableTask.Client.AzureManaged):オーケストレーションの開始、インスタンスのクエリ、イベントの送信

インストール

dotnet add package Azure.ResourceManager.DurableTask
dotnet add package Azure.Identity

以下のスニペットは過去の 1.0 API 形式を対象としており、最新バージョンについて述べたものではありません。確認済みのパッケージバージョンを固定し、例を適用する前に、生成された型と API バージョンをMicrosoft の SDK リファレンスで確認してください。

環境変数

AZURE_SUBSCRIPTION_ID=<your-subscription-id>
AZURE_RESOURCE_GROUP=<your-resource-group>
# 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.DurableTask;

// 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
        └── DurableTaskSchedulerResource
            ├── DurableTaskHubResource
            └── DurableTaskRetentionPolicyResource

基本的なワークフロー

1. Durable Task Scheduler を作成する
using Azure.ResourceManager.DurableTask;
using Azure.ResourceManager.DurableTask.Models;

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

// Define scheduler with Dedicated SKU
var schedulerData = new DurableTaskSchedulerData(AzureLocation.EastUS)
{
    Properties = new DurableTaskSchedulerProperties
    {
        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated)
        {
            Capacity = 1  // Number of instances
        },
        // Optional: IP allowlist for network security
        IPAllowlist = { "10.0.0.0/24", "192.168.1.0/24" }
    }
};

// Create scheduler (long-running operation)
var schedulerCollection = resourceGroup.Value.GetDurableTaskSchedulers();
var operation = await schedulerCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-scheduler",
    schedulerData);

DurableTaskSchedulerResource scheduler = operation.Value;
Console.WriteLine($"Scheduler created: {scheduler.Data.Name}");
Console.WriteLine($"Endpoint: {scheduler.Data.Properties.Endpoint}");
2. Consumption SKU でスケジューラーを作成する
// Consumption SKU (serverless)
var consumptionSchedulerData = new DurableTaskSchedulerData(AzureLocation.EastUS)
{
    Properties = new DurableTaskSchedulerProperties
    {
        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Consumption)
        // No capacity needed for consumption
    }
};

var operation = await schedulerCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-serverless-scheduler",
    consumptionSchedulerData);
3. タスクハブを作成する
// Task hubs are created under a scheduler
var taskHubData = new DurableTaskHubData
{
    // Properties are optional for basic task hub
};

var taskHubCollection = scheduler.GetDurableTaskHubs();
var hubOperation = await taskHubCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-taskhub",
    taskHubData);

DurableTaskHubResource taskHub = hubOperation.Value;
Console.WriteLine($"Task Hub created: {taskHub.Data.Name}");
4. スケジューラーの一覧を取得する
// List all schedulers in subscription
await foreach (var sched in subscription.GetDurableTaskSchedulersAsync())
{
    Console.WriteLine($"Scheduler: {sched.Data.Name}");
    Console.WriteLine($"  Location: {sched.Data.Location}");
    Console.WriteLine($"  SKU: {sched.Data.Properties.Sku?.Name}");
    Console.WriteLine($"  Endpoint: {sched.Data.Properties.Endpoint}");
}

// List schedulers in resource group
var schedulers = resourceGroup.Value.GetDurableTaskSchedulers();
await foreach (var sched in schedulers.GetAllAsync())
{
    Console.WriteLine($"Scheduler: {sched.Data.Name}");
}
5. 名前でスケジューラーを取得する
// Get existing scheduler
var existingScheduler = await schedulerCollection.GetAsync("my-scheduler");
Console.WriteLine($"Found: {existingScheduler.Value.Data.Name}");

// Or use extension method
var schedulerResource = armClient.GetDurableTaskSchedulerResource(
    DurableTaskSchedulerResource.CreateResourceIdentifier(
        subscriptionId,
        "my-resource-group",
        "my-scheduler"));
var scheduler = await schedulerResource.GetAsync();
6. スケジューラーを更新する
// Get current scheduler
var scheduler = await schedulerCollection.GetAsync("my-scheduler");

// Update with new configuration
var updateData = new DurableTaskSchedulerData(scheduler.Value.Data.Location)
{
    Properties = new DurableTaskSchedulerProperties
    {
        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated)
        {
            Capacity = 2  // Scale up
        },
        IPAllowlist = { "10.0.0.0/16" }  // Update IP allowlist
    }
};

var updateOperation = await schedulerCollection.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "my-scheduler",
    updateData);
7. リソースを削除する
// Delete task hub first
var taskHub = await scheduler.GetDurableTaskHubs().GetAsync("my-taskhub");
await taskHub.Value.DeleteAsync(WaitUntil.Completed);

// Then delete scheduler
await scheduler.DeleteAsync(WaitUntil.Completed);
8. 保持ポリシーを管理する
// Get retention policy collection
var retentionPolicies = scheduler.GetDurableTaskRetentionPolicies();

// Create or update retention policy
var retentionData = new DurableTaskRetentionPolicyData
{
    Properties = new DurableTaskRetentionPolicyProperties
    {
        // Configure retention settings
    }
};

var retentionOperation = await retentionPolicies.CreateOrUpdateAsync(
    WaitUntil.Completed,
    "default",  // Policy name
    retentionData);

主な型のリファレンス

型用途
ArmClientすべての ARM 操作のエントリーポイント
DurableTaskSchedulerResourceDurable Task Scheduler を表します
DurableTaskSchedulerCollectionスケジューラーの CRUD 操作用コレクション
DurableTaskSchedulerDataスケジューラーの作成/更新ペイロード
DurableTaskSchedulerPropertiesスケジューラーの構成(SKU、IPAllowlist)
DurableTaskSchedulerSkuSKU の構成(Name、Capacity、RedundancyState)
DurableTaskSchedulerSkuNameSKU のオプション:Dedicated、Consumption
DurableTaskHubResourceタスクハブを表します
DurableTaskHubCollectionタスクハブの CRUD 操作用コレクション
DurableTaskHubDataタスクハブの作成ペイロード
DurableTaskRetentionPolicyResource保持ポリシーの管理
DurableTaskRetentionPolicyData保持ポリシーの構成
DurableTaskExtensionsARM クライアント用の拡張メソッド

SKU のオプション

SKU説明使用例
Dedicated構成可能なインスタンス数を備えた固定容量本番ワークロード、予測可能なパフォーマンス
Consumptionサーバーレス、自動スケーリング開発、変動するワークロード

拡張メソッド

SDK には、SubscriptionResource と ResourceGroupResource の拡張メソッドが用意されています。

// On SubscriptionResource
subscription.GetDurableTaskSchedulers();           // List all in subscription
subscription.GetDurableTaskSchedulersAsync();      // Async enumerable

// On ResourceGroupResource  
resourceGroup.GetDurableTaskSchedulers();          // Get collection
resourceGroup.GetDurableTaskSchedulerAsync(name);  // Get by name

// On ArmClient
armClient.GetDurableTaskSchedulerResource(id);     // Get by resource ID
armClient.GetDurableTaskHubResource(id);           // Get task hub by ID

ベストプラクティス

  1. 処理を続行する前に操作を完了する必要がある場合は、WaitUntil.Completed を使用してください
  2. 手動でポーリングする場合や操作を並行して実行する場合は、WaitUntil.Started を使用してください
  3. 常に DefaultAzureCredential を使用してください — キーをハードコードしないでください
  4. ARM API エラーには RequestFailedException を処理してください
  5. 冪等な操作には CreateOrUpdateAsync を使用してください
  6. スケジューラーより先にタスクハブを削除してください — タスクハブがあるスケジューラーは削除できません
  7. 本番環境のネットワークセキュリティには IP 許可リストを使用してください

エラー処理

using Azure;

try
{
    var operation = await schedulerCollection.CreateOrUpdateAsync(
        WaitUntil.Completed, schedulerName, schedulerData);
}
catch (RequestFailedException ex) when (ex.Status == 409)
{
    Console.WriteLine($"Conflict: {ex.ErrorCode}; inspect the actual resource/operation state.");
}
catch (RequestFailedException ex) when (ex.Status == 404)
{
    Console.WriteLine($"Not found: {ex.ErrorCode}; inspect the target resource ID.");
}
catch (RequestFailedException ex)
{
    Console.WriteLine($"ARM Error: {ex.Status} - {ex.ErrorCode}: {ex.Message}");
}

完全な例

using Azure;
using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.DurableTask;
using Azure.ResourceManager.DurableTask.Models;
using Azure.ResourceManager.Resources;

// Setup
var credential = new DefaultAzureCredential();
var armClient = new ArmClient(credential);

var subscriptionId = Environment.GetEnvironmentVariable("AZURE_SUBSCRIPTION_ID")!;
var resourceGroupName = Environment.GetEnvironmentVariable("AZURE_RESOURCE_GROUP")!;

var subscription = armClient.GetSubscriptionResource(
    new ResourceIdentifier($"/subscriptions/{subscriptionId}"));
var resourceGroup = await subscription.GetResourceGroupAsync(resourceGroupName);

// Create scheduler
var schedulerData = new DurableTaskSchedulerData(AzureLocation.EastUS)
{
    Properties = new DurableTaskSchedulerProperties
    {
        Sku = new DurableTaskSchedulerSku(DurableTaskSchedulerSkuName.Dedicated)
        {
            Capacity = 1
        }
    }
};

var schedulerCollection = resourceGroup.Value.GetDurableTaskSchedulers();
var schedulerOp = await schedulerCollection.CreateOrUpdateAsync(
    WaitUntil.Completed, "my-scheduler", schedulerData);
var scheduler = schedulerOp.Value;

Console.WriteLine($"Scheduler endpoint: {scheduler.Data.Properties.Endpoint}");

// Create task hub
var taskHubData = new DurableTaskHubData();
var taskHubOp = await scheduler.GetDurableTaskHubs().CreateOrUpdateAsync(
    WaitUntil.Completed, "my-taskhub", taskHubData);
var taskHub = taskHubOp.Value;

Console.WriteLine($"Task Hub: {taskHub.Data.Name}");

// Optional cleanup is intentionally separate: delete only resources created by
// this task, after verifying their IDs and obtaining the required authorization.

関連 SDK

SDK用途インストール
Azure.ResourceManager.DurableTask管理プレーン(この SDK)dotnet add package Azure.ResourceManager.DurableTask
Microsoft.DurableTask.Client.AzureManagedデータプレーン(オーケストレーション、アクティビティ)dotnet add package Microsoft.DurableTask.Client.AzureManaged
Microsoft.DurableTask.Worker.AzureManagedオーケストレーションを実行するワーカーdotnet add package Microsoft.DurableTask.Worker.AzureManaged
Azure.Identity認証dotnet add package Azure.Identity
Azure.ResourceManager基本 ARM SDKdotnet add package Azure.ResourceManager

ソースリファレンス

使用する場面

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

制限事項

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

コメント