azure-resource-manager-durabletask-dotnet について
azure-resource-manager-durabletask-dotnet は、Azure Resource Manager 経由で Durable Task Scheduler リソースを管理する .NET 管理プレーン SDK です。Azure Durable Task 環境を構成する開発者向けで、スケジューラー、タスクハブ、保持ポリシーを扱い、オーケストレーションの実行や照会は行いません。
主な機能
- 01スケジューラーの作成・更新・削除
- 02タスクハブの管理
- 03保持ポリシーの設定
- 04スケジューラーの一覧・取得
- 05Dedicated と Consumption SKU 対応
活用シーン
- 01Durable Task 環境用スケジューラーの作成
- 02タスクハブとスケジューラー設定の変更
- 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 操作のエントリーポイント |
DurableTaskSchedulerResource | Durable Task Scheduler を表します |
DurableTaskSchedulerCollection | スケジューラーの CRUD 操作用コレクション |
DurableTaskSchedulerData | スケジューラーの作成/更新ペイロード |
DurableTaskSchedulerProperties | スケジューラーの構成(SKU、IPAllowlist) |
DurableTaskSchedulerSku | SKU の構成(Name、Capacity、RedundancyState) |
DurableTaskSchedulerSkuName | SKU のオプション:Dedicated、Consumption |
DurableTaskHubResource | タスクハブを表します |
DurableTaskHubCollection | タスクハブの CRUD 操作用コレクション |
DurableTaskHubData | タスクハブの作成ペイロード |
DurableTaskRetentionPolicyResource | 保持ポリシーの管理 |
DurableTaskRetentionPolicyData | 保持ポリシーの構成 |
DurableTaskExtensions | ARM クライアント用の拡張メソッド |
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
ベストプラクティス
- 処理を続行する前に操作を完了する必要がある場合は、
WaitUntil.Completedを使用してください - 手動でポーリングする場合や操作を並行して実行する場合は、
WaitUntil.Startedを使用してください - 常に
DefaultAzureCredentialを使用してください — キーをハードコードしないでください - ARM API エラーには
RequestFailedExceptionを処理してください - 冪等な操作には
CreateOrUpdateAsyncを使用してください - スケジューラーより先にタスクハブを削除してください — タスクハブがあるスケジューラーは削除できません
- 本番環境のネットワークセキュリティには 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 SDK | dotnet add package Azure.ResourceManager |
ソースリファレンス
使用する場面
このスキルは、概要で説明されているワークフローやアクションを実行する際に適用できます。
制限事項
- このスキルは、タスクが上記で説明されている範囲に明確に当てはまる場合にのみ使用してください。
- 出力を、環境固有の検証、テスト、または専門家によるレビューの代わりとして扱わないでください。
- 必要な入力、権限、安全上の境界、または成功基準が不足している場合は、作業を中断して確認してください。
コメント
Markdown 対応